123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- import { Arguments, Argv, Options } from 'yargs';
- import { ForkOptions, SpawnOptions } from 'child_process';
- import * as dargs from 'dargs';
- interface PlainObject {
- [key: string]: any;
- }
- // migrating to common-bin later
- declare class CommonBin {
- usage: string;
- version: string;
- /**
- * original argument
- * @type {Array}
- */
- rawArgv: string[];
- /**
- * yargs
- * @type {Object}
- */
- yargs: Argv;
- /**
- * helper function
- * @type {Object}
- */
- helper: CommonBin.Helper;
- /**
- * parserOptions
- * @type {Object}
- * @property {Boolean} execArgv - whether extract `execArgv` to `context.execArgv`
- * @property {Boolean} removeAlias - whether remove alias key from `argv`
- * @property {Boolean} removeCamelCase - whether remove camel case key from `argv`
- */
- parserOptions: {
- execArgv: boolean;
- removeAlias: boolean;
- removeCamelCase: boolean;
- };
- /**
- * getter of context, default behavior is remove `help` / `h` / `version`
- * @return {Object} context - { cwd, env, argv, rawArgv }
- * @protected
- */
- protected context: CommonBin.Context;
- constructor(rawArgv?: string[]);
- /**
- * shortcut for yargs.options
- * @param {Object} opt - an object set to `yargs.options`
- */
- set options(opt: { [key: string]: Options });
- /**
- * command handler, could be generator / async function / normal function which return promise
- * @param {Object} context - context object
- * @param {String} context.cwd - process.cwd()
- * @param {Object} context.argv - argv parse result by yargs, `{ _: [ 'start' ], '$0': '/usr/local/bin/common-bin', baseDir: 'simple'}`
- * @param {Array} context.rawArgv - the raw argv, `[ "--baseDir=simple" ]`
- * @protected
- */
- protected run(context?: CommonBin.Context): any;
- /**
- * load sub commands
- * @param {String} fullPath - the command directory
- * @example `load(path.join(__dirname, 'command'))`
- */
- load(fullPath: string): void;
- /**
- * add sub command
- * @param {String} name - a command name
- * @param {String|Class} target - special file path (must contains ext) or Command Class
- * @example `add('test', path.join(__dirname, 'test_command.js'))`
- */
- add(name: string, target: string | CommonBin): void;
- /**
- * alias an existing command
- * @param {String} alias - alias command
- * @param {String} name - exist command
- */
- alias(alias: string, name: string): void;
- /**
- * start point of bin process
- */
- start(): void;
- /**
- * default error hander
- * @param {Error} err - error object
- * @protected
- */
- protected errorHandler(err: Error): void;
- /**
- * print help message to console
- * @param {String} [level=log] - console level
- */
- showHelp(level?: string): void;
- }
- declare namespace CommonBin {
- export interface Helper {
- /**
- * fork child process, wrap with promise and gracefull exit
- * @method helper#forkNode
- * @param {String} modulePath - bin path
- * @param {Array} [args] - arguments
- * @param {Object} [options] - options
- * @return {Promise} err or undefined
- * @see https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
- */
- forkNode(modulePath: string, args?: string[], options?: ForkOptions): Promise<void>;
- /**
- * spawn a new process, wrap with promise and gracefull exit
- * @method helper#forkNode
- * @param {String} cmd - command
- * @param {Array} [args] - arguments
- * @param {Object} [options] - options
- * @return {Promise} err or undefined
- * @see https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
- */
- spawn(cmd: string, args?: string[], options?: SpawnOptions): Promise<void>;
- /**
- * exec npm install
- * @method helper#npmInstall
- * @param {String} npmCli - npm cli, such as `npm` / `cnpm` / `npminstall`
- * @param {String} name - node module name
- * @param {String} cwd - target directory
- * @return {Promise} err or undefined
- */
- npmInstall(npmCli: string, name: string, cwd?: string): Promise<void>;
- /**
- * call fn
- * @method helper#callFn
- * @param {Function} fn - support generator / async / normal function return promise
- * @param {Array} [args] - fn args
- * @param {Object} [thisArg] - this
- * @return {Object} result
- */
- callFn<T = any, U extends any[] = any[]>(fn: (...args: U) => IterableIterator<T> | Promise<T> | T, args?: U, thisArg?: any): IterableIterator<T>;
- /**
- * unparse argv and change it to array style
- * @method helper#unparseArgv
- * @param {Object} argv - yargs style
- * @param {Object} [options] - options, see more at https://github.com/sindresorhus/dargs
- * @param {Array} [options.includes] - keys or regex of keys to include
- * @param {Array} [options.excludes] - keys or regex of keys to exclude
- * @return {Array} [ '--debug=7000', '--debug-brk' ]
- */
- unparseArgv(argv: object, options?: dargs.Options): string[];
- /**
- * extract execArgv from argv
- * @method helper#extractExecArgv
- * @param {Object} argv - yargs style
- * @return {Object} { debugPort, debugOptions: {}, execArgvObj: {} }
- */
- extractExecArgv(argv: object): { debugPort?: number; debugOptions?: PlainObject; execArgvObj: PlainObject };
- }
- export interface Context extends PlainObject {
- cwd: string;
- rawArgv: string[];
- env: PlainObject;
- argv: Arguments<PlainObject>;
- execArgvObj: PlainObject;
- readonly execArgv: string[];
- debugPort?: number;
- debugOptions?: PlainObject;
- }
- }
- export = CommonBin;
|