UNPKG

zenith-gen

Version:

A CLI tool designed to streamline the creation of projects within the Zenith Inova ecosystem, providing optimized configurations and modern development tools.

92 lines (85 loc) 2.65 kB
import { execSync } from 'child_process'; import inquirer from 'inquirer'; export async function nextJsPrompt() { const nextJsAns = await inquirer.prompt([ { type: 'confirm', name: 'useTs', message: 'Would you like to use TypeScript?', default: true, }, { type: 'confirm', name: 'useEslint', message: 'Would you like to use ESLint?', default: true, }, { type: 'confirm', name: 'usePrettier', message: 'Would you like to use Prettier?', default: true, }, { type: 'confirm', name: 'useSrc', message: 'Would you like your code inside a `src/` directory?', default: true, }, { type: 'confirm', name: 'useApp', message: 'Would you like to use App Router? (recommended)', default: true, }, { type: 'confirm', name: 'useTurbo', message: 'Would you like to use Turbopack for `next dev`?', default: true, }, { type: 'confirm', name: 'customAlias', message: 'Would you like to customize the import alias (`@/*` by default)?', default: false, }, ]); return nextJsAns; } export async function defineAlias( useDefault: boolean, customAlias: boolean, ): Promise<string> { if (!useDefault && customAlias) { const newAlias: string = await inquirer .prompt([ { type: 'input', name: 'newAlias', message: 'Insert custom alias', validate: input => input ? true : 'Alias must be inserted', }, ]) .then(ans => ans.newAlias); return newAlias; } return '@/*'; } export function createNextApp( projectName: string, packageManager: string, useTs: boolean, useSrc: boolean, useTurbo: boolean, useApp: boolean, useEslint: boolean, alias: string, ): void { execSync( `npx create-next-app@latest ${projectName} --use-${packageManager} ${useTs ? '--ts' : '--js'} ${useSrc ? '--src-dir' : ''} ${useTurbo ? '--turbopack' : ''} ${useApp ? '--app' : ''} ${useEslint ? '--eslint' : ''} --import-alias ${alias} --tailwind`, { stdio: 'inherit' }, ); }