2024-06-13 18:26:30 +00:00
|
|
|
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'
|
|
|
|
|
2024-06-13 18:26:30 +00:00
|
|
|
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())
|
2024-06-13 18:26:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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 = {
|
2024-06-13 18:26:30 +00:00
|
|
|
command: 'create [folderName] [template]',
|
2024-06-13 17:04:09 +00:00
|
|
|
aliases: 'c',
|
|
|
|
describe: 'Scaffold a template project using RageFW',
|
2024-06-13 18:26:30 +00:00
|
|
|
builder,
|
2024-06-13 17:04:09 +00:00
|
|
|
handler,
|
|
|
|
}
|
|
|
|
|
|
|
|
export default init
|