rage-framework/cli/src/commands/create.ts

97 lines
2.7 KiB
TypeScript
Raw Normal View History

import type { CommandModule, Argv, ArgumentsCamelCase } from 'yargs'
2024-06-13 17:04:09 +00:00
import c from 'chalk'
import { input, select } from '@inquirer/prompts'
import clone from 'git-clone'
import path from 'node:path'
2024-06-13 18:41:05 +00:00
import { checkForUpdate } from '../utils/update'
function builder(yargs: Argv) {
return yargs
.option('projectName', {
alias: 'p',
description: 'Name of the folder to scaffold a project to',
type: 'string',
demandOption: false,
})
.option('template', {
alias: 't',
description: 'Frontend framework to use for CEF',
type: 'string',
demandOption: false,
})
2024-06-13 18:41:05 +00:00
.middleware(async () => await checkForUpdate())
}
async function handler(args: ArgumentsCamelCase) {
let folder = (args.projectName as string) ?? args.p
let framework = (args.template as string) ?? args.t
if (!folder) {
folder = await input({
message: c.gray('Enter project name:'),
default: 'rage-fw',
})
} else {
console.log(c.gray('Project name:'), folder)
}
if (!framework) {
framework = await select({
message: c.gray('Select frontend:'),
default: 'react',
loop: true,
choices: [
{
name: 'React + TypeScript (Vite)',
value: 'react',
description: 'React + TypeScript (Vite) as a frontend',
},
// {
// name: 'vue',
// value: 'vue',
// description: 'npm is the most popular package manager',
// },
],
})
} else {
console.log(c.gray('Frontend:'), framework)
}
2024-06-13 17:04:09 +00:00
console.log(
c.gray('\nScaffolding template project into'),
folder,
c.gray('with'),
framework,
c.gray('as a frontend..'),
)
clone(
'https://git.entityseven.com/entityseven/rage-framework-example',
path.join(__dirname, folder),
{},
err => {
if (err) {
console.log(c.red('Error occured: \n', err))
return
}
console.log(c.gray('Scaffolded project into'), folder)
console.log(
c.blueBright(
'Working on Rage Framework. RageFW © Powered by Entity Seven Group',
),
)
},
)
}
const init: CommandModule = {
command: 'create [folderName] [template]',
2024-06-13 17:04:09 +00:00
aliases: 'c',
describe: 'Scaffold a template project using RageFW',
builder,
2024-06-13 17:04:09 +00:00
handler,
}
export default init