UNPKG

@coderebus/react-archetype

Version:

React-archetype is a cli tool (or a generator) that will generate apps based on the rendering pattern (CSR,SSR, SSG, ISR etc) of your choice.

87 lines (86 loc) 3.48 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const inquirer_1 = tslib_1.__importDefault(require("inquirer")); const inquirer_directory_1 = tslib_1.__importDefault(require("inquirer-directory")); const yargs_1 = tslib_1.__importDefault(require("yargs/yargs")); const chalk_1 = tslib_1.__importDefault(require("chalk")); const node_emoji_1 = tslib_1.__importDefault(require("node-emoji")); const generator_1 = require("./generator"); const _utils_1 = require("./generator/utils"); const { currentDateTime } = _utils_1.helpers; const { handleArgs } = _utils_1.args; const { OFFICIAL_PACKAGE_NAME: packageName } = _utils_1.constants; const generators = {}; function registerGenerator(generator) { const { id } = generator; generators[id] = generator; } // ----- Register Generators Here ----- registerGenerator(generator_1.archgenerator); const reactArchetypePlugin = { id: packageName, name: 'ReactArchetype', description: 'generates React Archetype artifacts', run: (inputOptions) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { if (!generator_1.archgenerator) { return Promise.resolve(); } return generator_1.archgenerator.generate(process.cwd(), inputOptions); }), }; // ---------- Plugin Store ---------- // Static plugins are built into the CLI const staticPlugins = {}; // ---------- Plugin Registration ---------- function registerStaticPlugin(plugin) { const { id } = plugin; staticPlugins[id] = plugin; } // ----- Register static plugins here ----- registerStaticPlugin(reactArchetypePlugin); // ---------- Run CLI ---------- function run(pluginId, options) { return tslib_1.__awaiter(this, void 0, void 0, function* () { let selectedPluginId; // Make sure that a plugin is selected if (pluginId) { selectedPluginId = pluginId; } else { selectedPluginId = packageName; } const plugin = staticPlugins[selectedPluginId]; if (!plugin) { console.error(`Plugin ${selectedPluginId} not found`); return Promise.resolve(); } return plugin.run(options); }); } const reactArchetypeCli = { run }; // Register inquirer prompts inquirer_1.default.registerPrompt('directory', inquirer_directory_1.default); function main() { return tslib_1.__awaiter(this, void 0, void 0, function* () { // Parse command line const args = process.argv.slice(2); const argv = yield (0, yargs_1.default)().parse(args); const { _, $0: command } = argv, options = tslib_1.__rest(argv, ["_", "$0"]); // eslint-disable-line if (args.length > 1) { console.error(chalk_1.default.red(`[${currentDateTime()}] - ${node_emoji_1.default.get('no_entry_sign')} Invalid number of arguments. Expected 0 or 1, but got ${args.length}`)); process.exit(1); } args.length && handleArgs(args[0]); // Set pluginId if specified on the command line // Otherwise, leave it as undefined let pluginId; if (_.length > 0 && typeof _[0] === 'string') { pluginId = _[0]; } // Run cli yield reactArchetypeCli.run(pluginId, options); }); } main().catch(err => console.error('Error:', err));