@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
JavaScript
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));
;