پاستل: فریمورک Next.jsوار برای ساخت CLI
خلاصهٔ کاملتر
پاستل یه فریمورک متنبازه که ساخت ابزارهای CLI رو با استفاده از ریاکت و کتابخونه Ink به شکل متفاوتی ممکن میکنه. ایده اصلیش از Next.js گرفته شده: همونطور که توی Next.js با ساختن فایل توی پوشه pages یه صفحه جدید داری، توی پاستل هم با ساختن فایل توی پوشه commands یه دستور جدید به CLI اضافه میشه.
مشکلی که پاستل حل میکنه اینه که ساخت CLI معمولاً پر از کدنویسی دستی برای parse کردن آرگومانها، مدیریت subcommandها، نمایش help و اعتبارسنجی ورودیهاست. پاستل همه اینها رو بهصورت خودکار مدیریت میکنه و توسعهدهنده فقط باید روی منطق اصلی تمرکز کنه.
ساختار فایلمحور پاستل خیلی شبیه Next.js عمل میکنه. هر فایل tsx توی پوشه commands یه دستور جداگانهست. اگه پوشهبندی کنی، subcommand میسازی. فایل index.tsx هم دستور پیشفرضه که وقتی هیچ دستور خاصی نوشته نشه اجرا میشه.
برای تعریف گزینههای (options) هر دستور، از کتابخونه Zod استفاده میشه. یعنی schema رو با Zod تعریف میکنی، پاستل اون رو parse میکنه، اعتبارسنجی میکنه و مقادیر رو بهعنوان prop به کامپوننت ریاکت تحویل میده. این یعنی type-safety کامل از تعریف تا استفاده، بدون هیچ کد اضافهای.
انواع دادهای که برای options پشتیبانی میشن شامل string، number، boolean، enum، array و set هستن. میشه گزینهها رو اجباری یا اختیاری تعریف کرد، مقدار پیشفرض گذاشت یا alias کوتاهتری بهشون داد. مثلاً میتونی تعریف کنی که دستور install با تایپ کردن i هم اجرا بشه، درست مثل npm i.
یه قابلیت خوب دیگه هم default commands هستن؛ دستورهایی که هم اسم دارن و توی help نمایش داده میشن، هم وقتی هیچ دستوری مشخص نشه اجرا میشن. Vercel CLI مثال واقعی این رویکرده که هم vercel هم vercel deploy یه deploy جدید راه میاندازن.
پاستل زیر کاپوت از کتابخونه battle-tested کامندر (Commander) استفاده میکنه، پس پایه محکمیه. شروع کار هم خیلی سریعه؛ با یه دستور create-pastel-app میتونی یه پروژه کامل با TypeScript، linter و تست آماده داشته باشی.
نکات کلیدی:
- ساختار فایلمحور شبیه Next.js: هر فایل توی پوشه commands = یه دستور CLI
- تعریف و اعتبارسنجی options با Zod و type-safety کامل
- پشتیبانی از subcommand، alias و default command
- تولید خودکار پیام راهنما (--help)
- رندر خروجی CLI با ریاکت و Ink
- زیرساخت مبتنی بر Commander که بلوغ و پایداری رو تضمین میکنه
- راهاندازی سریع با ابزار create-pastel-app




