#!/usr/bin/env node import * as minimist from 'minimist'; import { CommandFactory } from '../commands/factory'; import { OPTION_AGGREGATED, OPTION_ARCHIVE, OPTION_COUNT, OPTION_DATA, OPTION_EDITABLE, OPTION_ESI, OPTION_EXCLUDE_PATTERN, OPTION_FLAT, OPTION_HELP, OPTION_ID, OPTION_INCLUDE_PATTERN, OPTION_LAYOUT_HTML_TEMPLATE, OPTION_MODULE, OPTION_MODULES, OPTION_N, OPTION_NAME, OPTION_OUT, OPTION_OVERRIDE, OPTION_PASSWORD, OPTION_PKG_DIR, OPTION_RELATIVE, OPTION_ROOT, OPTION_SCRIPT, OPTION_SCSS, OPTION_SKIP_PULL, OPTION_SKIP_REGISTRATION, OPTION_SKIP_SOURCEMAPS, OPTION_SOURCE, OPTION_TYPE, OPTION_URL, OPTION_USER, OPTION_VERBOSE, } from '../constants'; import { Options } from '../options'; export function runCli(argv: string[]) { const OPTIONS: minimist.Opts = { string: [OPTION_TYPE, OPTION_DATA, OPTION_SOURCE, OPTION_URL, OPTION_NAME, OPTION_INCLUDE_PATTERN, OPTION_EXCLUDE_PATTERN, OPTION_USER, OPTION_PASSWORD, OPTION_COUNT, OPTION_MODULE, OPTION_OUT, OPTION_ROOT, OPTION_ID, OPTION_LAYOUT_HTML_TEMPLATE, OPTION_PKG_DIR, OPTION_ARCHIVE], boolean: [OPTION_VERBOSE, OPTION_SCSS, OPTION_FLAT, OPTION_OVERRIDE, OPTION_SKIP_REGISTRATION, OPTION_SKIP_PULL, OPTION_AGGREGATED, OPTION_SKIP_SOURCEMAPS, OPTION_RELATIVE, OPTION_SCRIPT, OPTION_HELP, OPTION_ESI, OPTION_EDITABLE, OPTION_MODULES], alias: {}, default: {} }; // defaults const defaults = OPTIONS.default || {}; defaults[OPTION_VERBOSE] = false; defaults[OPTION_SCSS] = false; defaults[OPTION_FLAT] = false; defaults[OPTION_HELP] = false; defaults[OPTION_OVERRIDE] = false; defaults[OPTION_SKIP_REGISTRATION] = false; defaults[OPTION_SKIP_SOURCEMAPS] = false; defaults[OPTION_SKIP_PULL] = false; defaults[OPTION_RELATIVE] = false; defaults[OPTION_SCRIPT] = false; defaults[OPTION_ESI] = false; defaults[OPTION_MODULES] = false; defaults[OPTION_EDITABLE] = false; defaults[OPTION_AGGREGATED] = false; defaults[OPTION_COUNT] = '1'; // alias const alias = OPTIONS.alias || {}; alias[OPTION_COUNT] = [OPTION_N]; const args = minimist(argv.slice(2), OPTIONS), cmd = args['_']; const opts: Options = { archive: args[OPTION_ARCHIVE], data: args[OPTION_DATA], src: args[OPTION_SOURCE], url: args[OPTION_URL], user: args[OPTION_USER], password: args[OPTION_PASSWORD], name: args[OPTION_NAME], include: args[OPTION_INCLUDE_PATTERN], exclude: args[OPTION_EXCLUDE_PATTERN], scss: args[OPTION_SCSS], flat: args[OPTION_FLAT], override: args[OPTION_OVERRIDE], type: args[OPTION_TYPE], module: args[OPTION_MODULE], modules: args[OPTION_MODULES], skipRegistration: args[OPTION_SKIP_REGISTRATION], skipSourcemaps: args[OPTION_SKIP_SOURCEMAPS], skipPull: args[OPTION_SKIP_PULL], count: Number.parseInt(args[OPTION_COUNT] || '1'), relative: args[OPTION_RELATIVE], script: args[OPTION_SCRIPT], aggregated: args[OPTION_AGGREGATED], command: cmd[0], commandType: cmd[1], out: args[OPTION_OUT], root: args[OPTION_ROOT], id: args[OPTION_ID], verbose: args[OPTION_VERBOSE], help: args[OPTION_HELP], layoutHtmlTemplate: args[OPTION_LAYOUT_HTML_TEMPLATE], esi: args[OPTION_ESI], editable: args[OPTION_EDITABLE], pkgDir: args[OPTION_PKG_DIR], allArgs: argv.slice(2) }; if (opts.verbose) { // log the options without the password const loggingOpts = Object.assign({}, opts); delete loggingOpts.password; // log console.log(loggingOpts); } const fct = new CommandFactory(); const command = fct.create(opts); // execute if (opts.help) { command.printHelp(); } else { command.process().subscribe(console.log, error => { console.error(error); process.exit(1); }); } }