UNPKG

foalts2-cli

Version:

CLI tool for FoalTS

153 lines (152 loc) 5.27 kB
#!/usr/bin/env node "use strict"; /** * FoalTS * Copyright(c) 2017-2022 Loïc Poullain <loic.poullain@centraliens.net> * Released under the MIT License. */ Object.defineProperty(exports, "__esModule", { value: true }); // 3p const safe_1 = require("colors/safe"); const program = require("commander"); // FoalTS const create_secret_1 = require("./create-secret"); const generate_1 = require("./generate"); const file_system_1 = require("./generate/file-system"); const rmdir_1 = require("./rmdir"); const run_script_1 = require("./run-script"); function displayError(...lines) { console.error(); lines.forEach(line => console.error(safe_1.red(line))); console.error(); process.exitCode = 1; } // tslint:disable-next-line:no-var-requires const pkg = require('../package.json'); program .version(pkg.version, '-v, --version'); program .command('createapp <name>') .description('Create a new project.') .option('-G, --no-git', 'Don\'t initialize a git repository') .option('-I, --no-install', 'Don\'t autoinstall packages using yarn or npm (uses first available)') .option('-m, --mongodb', 'Generate a new project using MongoDB instead of SQLite', false) .option('-y, --yaml', 'Generate a new project using YAML configuration instead of JSON', false) .action((name, options) => { generate_1.createApp({ autoInstall: options.install, initRepo: options.git, mongodb: options.mongodb, name, yaml: options.yaml }); }); program .command('createsecret') .description('Create a 256-bit random secret encoded in base64.') .action(() => create_secret_1.createSecret().then(secret => console.log(secret))); program .command('run <name>') .alias('run-script') .description('Run a shell script.') .action((name) => { run_script_1.runScript({ name }, process.argv); }); program .command('connect <framework> <path>') .description('Configure your frontend to interact with your application.') .addHelpText('after', ` Available frameworks: - angular - react - vue `) .action(async (framework, path) => { switch (framework) { case 'angular': generate_1.connectAngular(path); break; case 'react': generate_1.connectReact(path); break; case 'vue': generate_1.connectVue(path); break; default: displayError(`Unknown framework ${safe_1.yellow(framework)}. Please provide a valid one:`, '', ' - angular', ' - react', ' - vue'); } }); const generateTypes = [ 'controller', 'entity', 'rest-api', 'hook', 'script', 'service', 'vscode-config' ]; program .command('generate <type> [name]') .description('Generate and/or modify files.') .option('-r, --register', 'Register the controller into app.controller.ts (only available if type=controller|rest-api)', false) .option('-a, --auth', 'Add an owner to the entities of the generated REST API (only available if type=rest-api)', false) .alias('g') .addHelpText('after', ` Available types: ${generateTypes.map(t => ` - ${t}`).join('\n')} `) .action(async (type, name, options) => { if (!name && type !== 'vscode-config') { displayError(`Argument "name" is required when creating a ${type}. Please provide one.`); return; } try { switch (type) { case 'controller': generate_1.createController({ name, register: options.register }); break; case 'entity': generate_1.createEntity({ name }); break; case 'rest-api': generate_1.createRestApi({ name, register: options.register, auth: options.auth }); break; case 'hook': generate_1.createHook({ name }); break; case 'script': generate_1.createScript({ name }); break; case 'service': generate_1.createService({ name }); break; case 'vscode-config': generate_1.createVSCodeConfig(); break; default: displayError(`Unknown type ${safe_1.yellow(type)}. Please provide a valid one:`, '', ...generateTypes.map(t => ` - ${t}`)); } } catch (error) { if (error instanceof file_system_1.ClientError) { displayError(error.message); return; } throw error; } }); program .command('rmdir <name>') .description('Remove a directory and all its contents, including any subdirectories and files.') .action(async (name) => { try { await rmdir_1.rmdir(name); } catch (error) { if (error.code === 'ENOTDIR') { displayError(error.message); return; } throw error; } }); program .on('command:*', (commands) => { program.outputHelp(); displayError(`Unknown command ${safe_1.yellow(commands[0])}.`); }); program.parse(process.argv);