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
text/typescript
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' },
);
}