├── .editorconfig
├── .gitignore
├── .npmignore
├── .vscode
└── settings.json
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── circle.yml
├── example
├── package-lock.json
├── package.json
├── tsconfig.json
└── usage.ts
├── package-lock.json
├── package.json
├── setup.sh
├── src
├── argument.ts
├── command.ts
├── error.ts
├── index.ts
├── option.ts
└── utils.ts
├── test
├── argumentSpec.ts
├── commandSpec.ts
├── optionSpec.ts
└── utilsSpec.ts
├── tsconfig.json
├── tsconfig.lib.json
└── tslint.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: http://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Unix-style newlines with a newline ending every file
7 | [*]
8 | indent_style = tab
9 | end_of_line = lf
10 | charset = utf-8
11 | trim_trailing_whitespace = true
12 | insert_final_newline = true
13 |
14 | [*.ts]
15 | indent_style = space
16 | indent_size = 4
17 | end_of_line = lf
18 | charset = utf-8
19 | trim_trailing_whitespace = true
20 | insert_final_newline = true
21 |
22 | [package.json]
23 | indent_style = space
24 | indent_size = 2
25 | end_of_line = lf
26 | charset = utf-8
27 | trim_trailing_whitespace = true
28 | insert_final_newline = true
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
3 | # for WebStorm
4 | # from http://gihyo.jp/dev/serial/01/android_studio/0035
5 | .idea/**/*.xml
6 | !.idea/codeStyleSettings.xml
7 | !.idea/copyright/*.xml
8 | !.idea/fileColors.xml
9 | !.idea/runConfigurations/*.xml
10 | !.idea/watcherTasks.xml
11 |
12 | !.idea/scopes/*.xml
13 | .idea/scopes/scope_settings.xml
14 |
15 | !.idea/templateLanguages.xml
16 | !.idea/vcs.xml
17 |
18 | # for npm
19 | npm-debug.log
20 | node_modules/
21 |
22 | # for grunt
23 | .tscache/
24 | docs/
25 | typings/
26 | example/*.js
27 | example/*.js.map
28 | example/*.d.ts
29 | test/suite/libs/
30 | testEspowered/
31 | test-results.xml
32 | pages/
33 | wiki/
34 |
35 | bin/out/
36 | tscommand.tmp.txt
37 | .baseDir.ts
38 |
39 | # for test
40 | test-tmp/
41 | test-repository/
42 | test-cli/
43 | test-typings/
44 |
45 | # production
46 | lib/
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | .git/
2 |
3 | # for WebStorm
4 | .idea/
5 |
6 | # VS Code
7 | .vscode
8 |
9 | # for npm
10 | node_modules/
11 | npm-shrinkwrap.json
12 | yarn.lock
13 |
14 | # for grunt
15 | typings/
16 | .tscache/
17 |
18 | # codes
19 | src/
20 | test/
21 | test-tmp/
22 | test-repository/
23 | test-cli/
24 | test-typings/
25 |
26 | # misc
27 | example/
28 | .gitignore
29 | .editorconfig
30 | circle.yml
31 | setup.sh
32 | tsconfig.json
33 | tsconfig.lib.json
34 | tslint.json
35 |
36 | npm-debug.log
37 |
38 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | // Place your settings in this file to overwrite default and user settings.
2 | {
3 | "typescript.tsdk": "./node_modules/typescript/lib/"
4 | }
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 |
2 | # [1.4.0](https://github.com/vvakame/commandpost/compare/v1.3.0...v1.4.0) (2018-10-25)
3 |
4 | README was brushed up! thanks @dkushner! ([263a141](https://github.com/vvakame/commandpost/commit/263a141))
5 |
6 | ### Features
7 |
8 | * **commandpost:** don't require source-map-support and es6-promise ([034286d](https://github.com/vvakame/commandpost/commit/034286d))
9 | * **commandpost:** update dependencies ([d634217](https://github.com/vvakame/commandpost/commit/d634217))
10 | * **example:** update examples ([ab7b815](https://github.com/vvakame/commandpost/commit/ab7b815))
11 |
12 |
13 |
14 |
15 | # [1.3.0](https://github.com/vvakame/commandpost/compare/v1.2.1...v1.3.0) (2018-01-18)
16 |
17 |
18 | ### Features
19 |
20 | * **commandpost:** use CommandpostError instead of Error ([fc0dc87](https://github.com/vvakame/commandpost/commit/fc0dc87))
21 |
22 |
23 |
24 |
25 | ## [1.2.1](https://github.com/vvakame/commandpost/compare/v1.2.0...v1.2.1) (2017-08-15)
26 |
27 |
28 | ### Bug Fixes
29 |
30 | * **commandpost:** fix naming of long name option with default value ([c29986c](https://github.com/vvakame/commandpost/commit/c29986c))
31 |
32 |
33 |
34 |
35 | # [1.2.0](https://github.com/vvakame/commandpost/compare/v1.1.0...v1.2.0) (2017-07-24)
36 |
37 |
38 | ### Features
39 |
40 | * **commandpost:** add strict: true option to tsconfig.json ([94272cb](https://github.com/vvakame/commandpost/commit/94272cb))
41 | * **commandpost:** export Option & Argument from index.ts fixes [#5](https://github.com/vvakame/commandpost/issues/5) ([884cf85](https://github.com/vvakame/commandpost/commit/884cf85))
42 | * **commandpost:** update dependencies ([c41bb6e](https://github.com/vvakame/commandpost/commit/c41bb6e))
43 |
44 |
45 |
46 |
47 | # [1.1.0](https://github.com/vvakame/commandpost/compare/1.0.1...1.1.0) (2017-06-28)
48 |
49 |
50 | ### Features
51 |
52 | * **commandpost:** show root description to help text fixes [#4](https://github.com/vvakame/commandpost/issues/4) ([5e5b7fb](https://github.com/vvakame/commandpost/commit/5e5b7fb))
53 | * **commandpost:** update dependencies ([86c44c7](https://github.com/vvakame/commandpost/commit/86c44c7))
54 |
55 |
56 |
57 |
58 | ## [1.0.1](https://github.com/vvakame/commandpost/compare/1.0.0...v1.0.1) (2016-09-23)
59 |
60 |
61 | ### Features
62 |
63 | * **commandpost:** update dependencies, use TypeScript 2.0.3 ([015b1bd](https://github.com/vvakame/commandpost/commit/015b1bd))
64 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 | Copyright © 2015 Masahiro Wakame
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the “Software”), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is
9 | furnished to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in
12 | all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # commandpost [](https://circleci.com/gh/vvakame/commandpost)
2 |
3 | commandpost is a command-line options parser.
4 | This library is inspired by [commander](https://www.npmjs.com/package/commander).
5 |
6 | commander is very user-friendly, but not [TypeScript](https://www.npmjs.com/package/typescript)-friendly.
7 | commandpost aims to improve this.
8 | Of course, commandpost can also be used from an ordinary JavaScript program. :+1:
9 |
10 | ## Installation
11 |
12 | ```
13 | $ npm install --save commandpost
14 | ```
15 |
16 | ## How to Use
17 |
18 | ### Basic Usage
19 |
20 | ```sh
21 | $ cat cli.ts
22 | import * as commandpost from "commandpost";
23 |
24 | let root = commandpost
25 | .create<{ spice: string[]; }, { food: string; }>("dinner ")
26 | .version("1.0.0", "-v, --version")
27 | .description("today's dinner!")
28 | .option("-s, --spice ", "What spice do you want? default: pepper")
29 | .action((opts, args) => {
30 | console.log(`Your dinner is ${args.food} with ${opts.spice[0] || "pepper"}!`);
31 | });
32 |
33 | commandpost
34 | .exec(root, process.argv)
35 | .catch(err => {
36 | if (err instanceof Error) {
37 | console.error(err.stack);
38 | } else {
39 | console.error(err);
40 | }
41 | process.exit(1);
42 | });
43 |
44 | $ node cli.js --help
45 | Usage: dinner [options] [--]
46 |
47 | Options:
48 |
49 | -s, --spice What spice do you want? default: pepper
50 |
51 | $ node cli.js -s "soy sause" "fillet steak"
52 | Your dinner is fillet steak with soy sause!
53 | ```
54 |
55 | ### Commands
56 |
57 | A top-level command is created by the `commandpost.create` function.
58 |
59 | commandpost also supports sub-commands.
60 | A sub-command is created by using the `topLevelCommand.subCommand` method.
61 | Refer to [this](https://github.com/vvakame/commandpost/blob/master/example/usage.ts#L36) example for a demonstration.
62 |
63 | commandpost can automatically generate help and command usage messages based on your configuration. For best results, it is recommended that you should set `.version` and `.description` for your top-level command.
64 |
65 |
66 | ### Options
67 |
68 | ```sh
69 | // shorthand & formal option with a required parameter. value is converted to string[].
70 | cmd.option("-c, --config ", "Read setting from specified config file path");
71 |
72 | // option with optional parameter. value is converted to string[].
73 | cmd.option("-c, --config [configFile]", "Read setting from specified config file path");
74 |
75 | // option without parameter (flag). option value is converted to boolean and defaults to `false`.
76 | cmd.option("--suppress-warning", "Suppress warning");
77 |
78 | // option with `--no-` prefix. option value is converted to boolean and defaults to true.
79 | cmd.option("--no-type-checking", "Type checking disabled");
80 | ```
81 |
82 | If you want to handle unknown options, you can use the `.allowUnknownOption` method.
83 |
84 | ### Arguments
85 |
86 | ```sh
87 | // required argument
88 | commandpost.create<{}, { food: string; }>("dinner ");
89 |
90 | // optional argument
91 | commandpost.create<{}, { food: string; }>("dinner [food]");
92 |
93 | // variadic argument
94 | commandpost.create<{}, { foods: string[]; }>("dinner ");
95 | ```
96 |
97 | ### Examples
98 |
99 | * [example](https://github.com/vvakame/commandpost/blob/master/example/usage.ts) dir
100 | * [typescript-formatter](https://github.com/vvakame/typescript-formatter/blob/master/lib/cli.ts)
101 | * [dtsm](https://github.com/vvakame/dtsm/blob/master/lib/cli.ts)
102 | * [review.js](https://github.com/vvakame/review.js/blob/master/lib/cli.ts)
103 | * [prh](https://github.com/vvakame/prh/blob/master/lib/cli.ts)
104 |
105 | ## Contributing
106 |
107 | This package's author, vvakame, is not a native English speaker. My first language is Japanese.
108 | If you find incorrect English, please send me a pull request.
109 |
--------------------------------------------------------------------------------
/circle.yml:
--------------------------------------------------------------------------------
1 | machine:
2 | node:
3 | version: "6"
4 |
--------------------------------------------------------------------------------
/example/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "example",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/node": {
8 | "version": "9.6.5",
9 | "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.5.tgz",
10 | "integrity": "sha512-NOLEgsT6UiDTjnWG5Hd2Mg25LRyz/oe8ql3wbjzgSFeRzRROhPmtlsvIrei4B46UjERF0td9SZ1ZXPLOdcrBHg==",
11 | "dev": true
12 | },
13 | "commandpost": {
14 | "version": "1.3.0",
15 | "resolved": "https://registry.npmjs.org/commandpost/-/commandpost-1.3.0.tgz",
16 | "integrity": "sha512-T62tyrmYTkaRDbV2z1k2yXTyxk0cFptXYwo1cUbnfHtp7ThLgQ9/90jG1Ym5WLZgFhvOTaHA5VSARWJ9URpLDw=="
17 | },
18 | "typescript": {
19 | "version": "2.8.1",
20 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.1.tgz",
21 | "integrity": "sha512-Ao/f6d/4EPLq0YwzsQz8iXflezpTkQzqAyenTiw4kCUGr1uPiFLC3+fZ+gMZz6eeI/qdRUqvC+HxIJzUAzEFdg==",
22 | "dev": true
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "example",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "usage.js",
6 | "scripts": {
7 | "build": "tsc",
8 | "test": "node usage.js -r -c a.json b.txt --config=c.json remote -v d add e.txt -- f.txt"
9 | },
10 | "author": "vvakame",
11 | "license": "MIT",
12 | "dependencies": {
13 | "commandpost": "^1.3.0"
14 | },
15 | "devDependencies": {
16 | "@types/node": "^9.6.5",
17 | "typescript": "^2.8.1"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/example/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Basic Options */
4 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
5 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
6 | // "lib": [], /* Specify library files to be included in the compilation. */
7 | // "allowJs": true, /* Allow javascript files to be compiled. */
8 | // "checkJs": true, /* Report errors in .js files. */
9 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
10 | // "declaration": true, /* Generates corresponding '.d.ts' file. */
11 | // "sourceMap": true, /* Generates corresponding '.map' file. */
12 | // "outFile": "./", /* Concatenate and emit output to single file. */
13 | // "outDir": "./", /* Redirect output structure to the directory. */
14 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
15 | // "removeComments": true, /* Do not emit comments to output. */
16 | // "noEmit": true, /* Do not emit outputs. */
17 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
18 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
19 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
20 |
21 | /* Strict Type-Checking Options */
22 | "strict": true, /* Enable all strict type-checking options. */
23 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
24 | // "strictNullChecks": true, /* Enable strict null checks. */
25 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */
26 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
27 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
28 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
29 |
30 | /* Additional Checks */
31 | "noUnusedLocals": true, /* Report errors on unused locals. */
32 | "noUnusedParameters": true, /* Report errors on unused parameters. */
33 | "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
34 | "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
35 |
36 | /* Module Resolution Options */
37 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
38 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
39 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
40 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
41 | // "typeRoots": [], /* List of folders to include type definitions from. */
42 | // "types": [], /* Type declaration files to be included in compilation. */
43 | "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
44 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
45 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
46 |
47 | /* Source Map Options */
48 | // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
49 | // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */
50 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
51 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
52 |
53 | /* Experimental Options */
54 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
55 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
56 | }
57 | }
--------------------------------------------------------------------------------
/example/usage.ts:
--------------------------------------------------------------------------------
1 | // sample.
2 | // tsc -p ./
3 | // node usage.js -r -c a.json b.txt --config=c.json remote -v d add e.txt -- f.txt
4 |
5 | import * as commandpost from "commandpost";
6 |
7 | interface RootOptions {
8 | replace: boolean;
9 | config: string[];
10 | }
11 | interface RootArgs {
12 | }
13 |
14 | let root = commandpost
15 | .create("usg")
16 | .version("100.0.0", "-v, --version")
17 | .description("foo bar")
18 | .option("-r, --replace", "replace files")
19 | .option("--no-output", "silent mode")
20 | .option("-c, --config ", "specified config file")
21 | .action((opts, args, rest) => {
22 | console.log("root action");
23 | console.log(opts);
24 | console.log(args);
25 | console.log(rest);
26 | });
27 |
28 | interface RemoteOptions {
29 | verbose: boolean;
30 | }
31 | interface RemoteArgs {
32 | remoteUrl: string;
33 | }
34 |
35 | let remote = root
36 | .subCommand("remote ")
37 | .description("about remote repos")
38 | .option("-v, --verbose")
39 | .action((opts, args, rest) => {
40 | console.log("remote action");
41 | console.log(opts);
42 | console.log(args);
43 | console.log(rest);
44 | });
45 |
46 | interface RemoteAddOptions {
47 | }
48 | interface RemoteAddArgs {
49 | remoteUrls: string[];
50 | }
51 |
52 | let add = remote
53 | .subCommand("add ")
54 | .help("-p, --pleh", "HELP MEEEEEEEEEE!!!!")
55 | .allowUnknownOption()
56 | .action((opts, args, rest) => {
57 | return remote
58 | .exec()
59 | .then(() => {
60 | console.log("remote add action");
61 | console.log(opts);
62 | console.log(args);
63 | console.log(rest);
64 | console.log("!root", root.parsedOpts, root.parsedArgs, root._rest);
65 | console.log("!remote", remote.parsedOpts, remote.parsedArgs, remote._rest);
66 | console.log("!remote add", opts, args, rest);
67 | console.log("!remote add unknown options", add.unknownOptions);
68 | });
69 | });
70 |
71 | commandpost
72 | .exec(root, process.argv)
73 | .catch(err => {
74 | if (err instanceof Error) {
75 | console.error(err.stack);
76 | } else {
77 | console.error(err);
78 | }
79 | process.exit(1);
80 | });
81 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "commandpost",
3 | "version": "1.4.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/commander": {
8 | "version": "2.12.2",
9 | "resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz",
10 | "integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==",
11 | "dev": true,
12 | "requires": {
13 | "commander": "*"
14 | }
15 | },
16 | "@types/mocha": {
17 | "version": "5.2.5",
18 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz",
19 | "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==",
20 | "dev": true
21 | },
22 | "@types/node": {
23 | "version": "10.7.1",
24 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.7.1.tgz",
25 | "integrity": "sha512-EGoI4ylB/lPOaqXqtzAyL8HcgOuCtH2hkEaLmkueOYufsTFWBn4VCvlCDC2HW8Q+9iF+QVC3sxjDKQYjHQeZ9w==",
26 | "dev": true
27 | },
28 | "@types/semver": {
29 | "version": "5.5.0",
30 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
31 | "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
32 | "dev": true
33 | },
34 | "JSONStream": {
35 | "version": "1.3.4",
36 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz",
37 | "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==",
38 | "dev": true,
39 | "requires": {
40 | "jsonparse": "^1.2.0",
41 | "through": ">=2.2.7 <3"
42 | }
43 | },
44 | "acorn": {
45 | "version": "5.7.3",
46 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
47 | "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
48 | "dev": true
49 | },
50 | "acorn-es7-plugin": {
51 | "version": "1.1.7",
52 | "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz",
53 | "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=",
54 | "dev": true
55 | },
56 | "add-stream": {
57 | "version": "1.0.0",
58 | "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
59 | "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
60 | "dev": true
61 | },
62 | "align-text": {
63 | "version": "0.1.4",
64 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
65 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
66 | "dev": true,
67 | "requires": {
68 | "kind-of": "^3.0.2",
69 | "longest": "^1.0.1",
70 | "repeat-string": "^1.5.2"
71 | }
72 | },
73 | "amdefine": {
74 | "version": "1.0.1",
75 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
76 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
77 | "dev": true
78 | },
79 | "ansi-regex": {
80 | "version": "2.1.1",
81 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
82 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
83 | "dev": true
84 | },
85 | "ansi-styles": {
86 | "version": "2.2.1",
87 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
88 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
89 | "dev": true
90 | },
91 | "argparse": {
92 | "version": "1.0.10",
93 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
94 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
95 | "dev": true,
96 | "requires": {
97 | "sprintf-js": "~1.0.2"
98 | }
99 | },
100 | "array-filter": {
101 | "version": "1.0.0",
102 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
103 | "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
104 | "dev": true
105 | },
106 | "array-find": {
107 | "version": "1.0.0",
108 | "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz",
109 | "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=",
110 | "dev": true
111 | },
112 | "array-find-index": {
113 | "version": "1.0.2",
114 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
115 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
116 | "dev": true
117 | },
118 | "array-ify": {
119 | "version": "1.0.0",
120 | "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
121 | "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
122 | "dev": true
123 | },
124 | "arrify": {
125 | "version": "1.0.1",
126 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
127 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
128 | "dev": true
129 | },
130 | "async": {
131 | "version": "1.5.2",
132 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
133 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
134 | "dev": true
135 | },
136 | "babel-code-frame": {
137 | "version": "6.26.0",
138 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
139 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
140 | "dev": true,
141 | "requires": {
142 | "chalk": "^1.1.3",
143 | "esutils": "^2.0.2",
144 | "js-tokens": "^3.0.2"
145 | },
146 | "dependencies": {
147 | "chalk": {
148 | "version": "1.1.3",
149 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
150 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
151 | "dev": true,
152 | "requires": {
153 | "ansi-styles": "^2.2.1",
154 | "escape-string-regexp": "^1.0.2",
155 | "has-ansi": "^2.0.0",
156 | "strip-ansi": "^3.0.0",
157 | "supports-color": "^2.0.0"
158 | }
159 | },
160 | "supports-color": {
161 | "version": "2.0.0",
162 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
163 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
164 | "dev": true
165 | }
166 | }
167 | },
168 | "balanced-match": {
169 | "version": "1.0.0",
170 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
171 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
172 | "dev": true
173 | },
174 | "brace-expansion": {
175 | "version": "1.1.11",
176 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
177 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
178 | "dev": true,
179 | "requires": {
180 | "balanced-match": "^1.0.0",
181 | "concat-map": "0.0.1"
182 | }
183 | },
184 | "browser-stdout": {
185 | "version": "1.3.1",
186 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
187 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
188 | "dev": true
189 | },
190 | "buffer-from": {
191 | "version": "1.1.1",
192 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
193 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
194 | "dev": true
195 | },
196 | "builtin-modules": {
197 | "version": "1.1.1",
198 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
199 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
200 | "dev": true
201 | },
202 | "call-matcher": {
203 | "version": "1.1.0",
204 | "resolved": "https://registry.npmjs.org/call-matcher/-/call-matcher-1.1.0.tgz",
205 | "integrity": "sha512-IoQLeNwwf9KTNbtSA7aEBb1yfDbdnzwjCetjkC8io5oGeOmK2CBNdg0xr+tadRYKO0p7uQyZzvon0kXlZbvGrw==",
206 | "dev": true,
207 | "requires": {
208 | "core-js": "^2.0.0",
209 | "deep-equal": "^1.0.0",
210 | "espurify": "^1.6.0",
211 | "estraverse": "^4.0.0"
212 | }
213 | },
214 | "call-signature": {
215 | "version": "0.0.2",
216 | "resolved": "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz",
217 | "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=",
218 | "dev": true
219 | },
220 | "camelcase": {
221 | "version": "1.2.1",
222 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
223 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
224 | "dev": true,
225 | "optional": true
226 | },
227 | "camelcase-keys": {
228 | "version": "4.2.0",
229 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
230 | "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
231 | "dev": true,
232 | "requires": {
233 | "camelcase": "^4.1.0",
234 | "map-obj": "^2.0.0",
235 | "quick-lru": "^1.0.0"
236 | },
237 | "dependencies": {
238 | "camelcase": {
239 | "version": "4.1.0",
240 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
241 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
242 | "dev": true
243 | }
244 | }
245 | },
246 | "center-align": {
247 | "version": "0.1.3",
248 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
249 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
250 | "dev": true,
251 | "optional": true,
252 | "requires": {
253 | "align-text": "^0.1.3",
254 | "lazy-cache": "^1.0.3"
255 | }
256 | },
257 | "chalk": {
258 | "version": "2.4.1",
259 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
260 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
261 | "dev": true,
262 | "requires": {
263 | "ansi-styles": "^3.2.1",
264 | "escape-string-regexp": "^1.0.5",
265 | "supports-color": "^5.3.0"
266 | },
267 | "dependencies": {
268 | "ansi-styles": {
269 | "version": "3.2.1",
270 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
271 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
272 | "dev": true,
273 | "requires": {
274 | "color-convert": "^1.9.0"
275 | }
276 | }
277 | }
278 | },
279 | "cliui": {
280 | "version": "2.1.0",
281 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
282 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
283 | "dev": true,
284 | "optional": true,
285 | "requires": {
286 | "center-align": "^0.1.1",
287 | "right-align": "^0.1.1",
288 | "wordwrap": "0.0.2"
289 | },
290 | "dependencies": {
291 | "wordwrap": {
292 | "version": "0.0.2",
293 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
294 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
295 | "dev": true,
296 | "optional": true
297 | }
298 | }
299 | },
300 | "color-convert": {
301 | "version": "1.9.2",
302 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
303 | "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
304 | "dev": true,
305 | "requires": {
306 | "color-name": "1.1.1"
307 | }
308 | },
309 | "color-name": {
310 | "version": "1.1.1",
311 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
312 | "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
313 | "dev": true
314 | },
315 | "commander": {
316 | "version": "2.15.1",
317 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
318 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
319 | "dev": true
320 | },
321 | "commandpost": {
322 | "version": "1.3.0",
323 | "resolved": "https://registry.npmjs.org/commandpost/-/commandpost-1.3.0.tgz",
324 | "integrity": "sha512-T62tyrmYTkaRDbV2z1k2yXTyxk0cFptXYwo1cUbnfHtp7ThLgQ9/90jG1Ym5WLZgFhvOTaHA5VSARWJ9URpLDw==",
325 | "dev": true
326 | },
327 | "compare-func": {
328 | "version": "1.3.2",
329 | "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
330 | "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
331 | "dev": true,
332 | "requires": {
333 | "array-ify": "^1.0.0",
334 | "dot-prop": "^3.0.0"
335 | }
336 | },
337 | "concat-map": {
338 | "version": "0.0.1",
339 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
340 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
341 | "dev": true
342 | },
343 | "conventional-changelog": {
344 | "version": "2.0.1",
345 | "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-2.0.1.tgz",
346 | "integrity": "sha512-WeWcEcR7uBtRZ/uG6DRIlVqsm7UTnxrixaAPoPvfQP7FRPf1qIXL76nGKy4wXq+wO3zOpqYubWUqrYLIL3+xww==",
347 | "dev": true,
348 | "requires": {
349 | "conventional-changelog-angular": "^1.6.6",
350 | "conventional-changelog-atom": "^2.0.0",
351 | "conventional-changelog-codemirror": "^2.0.0",
352 | "conventional-changelog-core": "^3.0.0",
353 | "conventional-changelog-ember": "^2.0.0",
354 | "conventional-changelog-eslint": "^3.0.0",
355 | "conventional-changelog-express": "^2.0.0",
356 | "conventional-changelog-jquery": "^0.1.0",
357 | "conventional-changelog-jscs": "^0.1.0",
358 | "conventional-changelog-jshint": "^2.0.0",
359 | "conventional-changelog-preset-loader": "^2.0.0"
360 | }
361 | },
362 | "conventional-changelog-angular": {
363 | "version": "1.6.6",
364 | "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
365 | "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
366 | "dev": true,
367 | "requires": {
368 | "compare-func": "^1.3.1",
369 | "q": "^1.5.1"
370 | }
371 | },
372 | "conventional-changelog-atom": {
373 | "version": "2.0.0",
374 | "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.0.tgz",
375 | "integrity": "sha512-ygwkwyTQYAm4S0tsDt+1yg8tHhRrv7qu9SOWPhNQlVrInFLsfKc0FActCA3de2ChknxpVPY2B53yhKvCAtkBCg==",
376 | "dev": true,
377 | "requires": {
378 | "q": "^1.5.1"
379 | }
380 | },
381 | "conventional-changelog-cli": {
382 | "version": "2.0.1",
383 | "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.1.tgz",
384 | "integrity": "sha512-gQzMbLyPNYymbzJncJNBapLZTXEtXrq6qmQOJH0w/jVX9fxIli4sLalQgzEPjD7M1noLJd1cIdQAP1R++TkGxg==",
385 | "dev": true,
386 | "requires": {
387 | "add-stream": "^1.0.0",
388 | "conventional-changelog": "^2.0.1",
389 | "lodash": "^4.2.1",
390 | "meow": "^4.0.0",
391 | "tempfile": "^1.1.1"
392 | }
393 | },
394 | "conventional-changelog-codemirror": {
395 | "version": "2.0.0",
396 | "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.0.tgz",
397 | "integrity": "sha512-pZt/YynJ5m8C9MGV5wkBuhM1eX+8a84fmNrdOylxg/lJV+lgtAiNhnpskNuixtf71iKVWSlEqMQ6z6CH7/Uo5A==",
398 | "dev": true,
399 | "requires": {
400 | "q": "^1.5.1"
401 | }
402 | },
403 | "conventional-changelog-core": {
404 | "version": "3.0.0",
405 | "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.0.0.tgz",
406 | "integrity": "sha512-D2hApWWsdh4tkNgDjn1KtRapxUJ70Sd+V84btTVJJJ96S3cVRES8Ty3ih0TRkOZmDkw/uS0mxrHSskQ/P/Gvsg==",
407 | "dev": true,
408 | "requires": {
409 | "conventional-changelog-writer": "^4.0.0",
410 | "conventional-commits-parser": "^3.0.0",
411 | "dateformat": "^3.0.0",
412 | "get-pkg-repo": "^1.0.0",
413 | "git-raw-commits": "^2.0.0",
414 | "git-remote-origin-url": "^2.0.0",
415 | "git-semver-tags": "^2.0.0",
416 | "lodash": "^4.2.1",
417 | "normalize-package-data": "^2.3.5",
418 | "q": "^1.5.1",
419 | "read-pkg": "^1.1.0",
420 | "read-pkg-up": "^1.0.1",
421 | "through2": "^2.0.0"
422 | }
423 | },
424 | "conventional-changelog-ember": {
425 | "version": "2.0.0",
426 | "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.0.tgz",
427 | "integrity": "sha512-s9ZYf3VMdYe8ca8bw1X+he050HZNy9Pm3dBpYA+BunDGFE4Fy7whOvYhWah2U9+j9l6y/whfa0+eHANvZytE9A==",
428 | "dev": true,
429 | "requires": {
430 | "q": "^1.5.1"
431 | }
432 | },
433 | "conventional-changelog-eslint": {
434 | "version": "3.0.0",
435 | "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.0.tgz",
436 | "integrity": "sha512-Acn20v+13c+o1OAWKvc9sCCl73Nj2vOMyn+G82euiMZwgYNE9CcBkTnw/GKdBi9KiZMK9uy+SCQ/QyAEE+8vZA==",
437 | "dev": true,
438 | "requires": {
439 | "q": "^1.5.1"
440 | }
441 | },
442 | "conventional-changelog-express": {
443 | "version": "2.0.0",
444 | "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.0.tgz",
445 | "integrity": "sha512-2svPjeXCrjwwqnzu/f3qU5LWoLO0jmUIEbtbbSRXAAP9Ag+137b484eJsiRt9DPYXSVzog0Eoek3rvCzfHcphQ==",
446 | "dev": true,
447 | "requires": {
448 | "q": "^1.5.1"
449 | }
450 | },
451 | "conventional-changelog-jquery": {
452 | "version": "0.1.0",
453 | "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
454 | "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
455 | "dev": true,
456 | "requires": {
457 | "q": "^1.4.1"
458 | }
459 | },
460 | "conventional-changelog-jscs": {
461 | "version": "0.1.0",
462 | "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
463 | "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
464 | "dev": true,
465 | "requires": {
466 | "q": "^1.4.1"
467 | }
468 | },
469 | "conventional-changelog-jshint": {
470 | "version": "2.0.0",
471 | "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.0.tgz",
472 | "integrity": "sha512-+4fCln755N0ZzRUEdcDWR5Due71Dsqkbov6K/UmVCnljZvhVh0/wpT4YROoSsAnhfZO8shyWDPFKm6EP20pLQg==",
473 | "dev": true,
474 | "requires": {
475 | "compare-func": "^1.3.1",
476 | "q": "^1.5.1"
477 | }
478 | },
479 | "conventional-changelog-preset-loader": {
480 | "version": "2.0.0",
481 | "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.0.tgz",
482 | "integrity": "sha512-hEWm9o6TxjS9aO1AKaHpl8avSXaUHiUXBT25vJ4ToaDi/gPDqt3OnZkwhIgubADUF+lPqcXpjFTOYcOL4AwyvA==",
483 | "dev": true
484 | },
485 | "conventional-changelog-writer": {
486 | "version": "4.0.0",
487 | "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.0.tgz",
488 | "integrity": "sha512-hMZPe0AQ6Bi05epeK/7hz80xxk59nPA5z/b63TOHq2wigM0/akreOc8N4Jam5b9nFgKWX1e9PdPv2ewgW6bcfg==",
489 | "dev": true,
490 | "requires": {
491 | "compare-func": "^1.3.1",
492 | "conventional-commits-filter": "^2.0.0",
493 | "dateformat": "^3.0.0",
494 | "handlebars": "^4.0.2",
495 | "json-stringify-safe": "^5.0.1",
496 | "lodash": "^4.2.1",
497 | "meow": "^4.0.0",
498 | "semver": "^5.5.0",
499 | "split": "^1.0.0",
500 | "through2": "^2.0.0"
501 | }
502 | },
503 | "conventional-commits-filter": {
504 | "version": "2.0.0",
505 | "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.0.tgz",
506 | "integrity": "sha512-Cfl0j1/NquB/TMVx7Wrmyq7uRM+/rPQbtVVGwzfkhZ6/yH6fcMmP0Q/9044TBZPTNdGzm46vXFXL14wbET0/Mg==",
507 | "dev": true,
508 | "requires": {
509 | "is-subset": "^0.1.1",
510 | "modify-values": "^1.0.0"
511 | }
512 | },
513 | "conventional-commits-parser": {
514 | "version": "3.0.0",
515 | "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.0.tgz",
516 | "integrity": "sha512-GWh71U26BLWgMykCp+VghZ4s64wVbtseECcKQ/PvcPZR2cUnz+FUc2J9KjxNl7/ZbCxST8R03c9fc+Vi0umS9Q==",
517 | "dev": true,
518 | "requires": {
519 | "JSONStream": "^1.0.4",
520 | "is-text-path": "^1.0.0",
521 | "lodash": "^4.2.1",
522 | "meow": "^4.0.0",
523 | "split2": "^2.0.0",
524 | "through2": "^2.0.0",
525 | "trim-off-newlines": "^1.0.0"
526 | }
527 | },
528 | "convert-source-map": {
529 | "version": "1.6.0",
530 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
531 | "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
532 | "dev": true,
533 | "requires": {
534 | "safe-buffer": "~5.1.1"
535 | }
536 | },
537 | "core-js": {
538 | "version": "2.6.0",
539 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.0.tgz",
540 | "integrity": "sha512-kLRC6ncVpuEW/1kwrOXYX6KQASCVtrh1gQr/UiaVgFlf9WE5Vp+lNe5+h3LuMr5PAucWnnEXwH0nQHRH/gpGtw==",
541 | "dev": true
542 | },
543 | "core-util-is": {
544 | "version": "1.0.2",
545 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
546 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
547 | "dev": true
548 | },
549 | "currently-unhandled": {
550 | "version": "0.4.1",
551 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
552 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
553 | "dev": true,
554 | "requires": {
555 | "array-find-index": "^1.0.1"
556 | }
557 | },
558 | "d": {
559 | "version": "1.0.0",
560 | "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz",
561 | "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
562 | "dev": true,
563 | "requires": {
564 | "es5-ext": "^0.10.9"
565 | }
566 | },
567 | "dargs": {
568 | "version": "4.1.0",
569 | "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
570 | "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
571 | "dev": true,
572 | "requires": {
573 | "number-is-nan": "^1.0.0"
574 | }
575 | },
576 | "dateformat": {
577 | "version": "3.0.3",
578 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
579 | "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
580 | "dev": true
581 | },
582 | "debug": {
583 | "version": "3.1.0",
584 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
585 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
586 | "dev": true,
587 | "requires": {
588 | "ms": "2.0.0"
589 | }
590 | },
591 | "decamelize": {
592 | "version": "1.2.0",
593 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
594 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
595 | "dev": true
596 | },
597 | "decamelize-keys": {
598 | "version": "1.1.0",
599 | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
600 | "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
601 | "dev": true,
602 | "requires": {
603 | "decamelize": "^1.1.0",
604 | "map-obj": "^1.0.0"
605 | },
606 | "dependencies": {
607 | "map-obj": {
608 | "version": "1.0.1",
609 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
610 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
611 | "dev": true
612 | }
613 | }
614 | },
615 | "deep-equal": {
616 | "version": "1.0.1",
617 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
618 | "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
619 | "dev": true
620 | },
621 | "deep-is": {
622 | "version": "0.1.3",
623 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
624 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
625 | "dev": true
626 | },
627 | "define-properties": {
628 | "version": "1.1.3",
629 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
630 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
631 | "dev": true,
632 | "requires": {
633 | "object-keys": "^1.0.12"
634 | }
635 | },
636 | "diff": {
637 | "version": "3.5.0",
638 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
639 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
640 | "dev": true
641 | },
642 | "diff-match-patch": {
643 | "version": "1.0.4",
644 | "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz",
645 | "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==",
646 | "dev": true
647 | },
648 | "dot-prop": {
649 | "version": "3.0.0",
650 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
651 | "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
652 | "dev": true,
653 | "requires": {
654 | "is-obj": "^1.0.0"
655 | }
656 | },
657 | "eastasianwidth": {
658 | "version": "0.2.0",
659 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
660 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
661 | "dev": true
662 | },
663 | "editorconfig": {
664 | "version": "0.15.0",
665 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.0.tgz",
666 | "integrity": "sha512-j7JBoj/bpNzvoTQylfRZSc85MlLNKWQiq5y6gwKhmqD2h1eZ+tH4AXbkhEJD468gjDna/XMx2YtSkCxBRX9OGg==",
667 | "dev": true,
668 | "requires": {
669 | "@types/commander": "^2.11.0",
670 | "@types/semver": "^5.4.0",
671 | "commander": "^2.11.0",
672 | "lru-cache": "^4.1.1",
673 | "semver": "^5.4.1",
674 | "sigmund": "^1.0.1"
675 | }
676 | },
677 | "empower": {
678 | "version": "1.3.1",
679 | "resolved": "https://registry.npmjs.org/empower/-/empower-1.3.1.tgz",
680 | "integrity": "sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA==",
681 | "dev": true,
682 | "requires": {
683 | "core-js": "^2.0.0",
684 | "empower-core": "^1.2.0"
685 | }
686 | },
687 | "empower-assert": {
688 | "version": "1.1.0",
689 | "resolved": "https://registry.npmjs.org/empower-assert/-/empower-assert-1.1.0.tgz",
690 | "integrity": "sha512-Ylck0Q6p8y/LpNzYeBccaxAPm2ZyuqBgErgZpO9KT0HuQWF0sJckBKCLmgS1/DEXEiyBi9XtYh3clZm5cAdARw==",
691 | "dev": true,
692 | "requires": {
693 | "estraverse": "^4.2.0"
694 | }
695 | },
696 | "empower-core": {
697 | "version": "1.2.0",
698 | "resolved": "https://registry.npmjs.org/empower-core/-/empower-core-1.2.0.tgz",
699 | "integrity": "sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ==",
700 | "dev": true,
701 | "requires": {
702 | "call-signature": "0.0.2",
703 | "core-js": "^2.0.0"
704 | }
705 | },
706 | "error-ex": {
707 | "version": "1.3.2",
708 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
709 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
710 | "dev": true,
711 | "requires": {
712 | "is-arrayish": "^0.2.1"
713 | }
714 | },
715 | "es5-ext": {
716 | "version": "0.10.46",
717 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz",
718 | "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==",
719 | "dev": true,
720 | "requires": {
721 | "es6-iterator": "~2.0.3",
722 | "es6-symbol": "~3.1.1",
723 | "next-tick": "1"
724 | }
725 | },
726 | "es6-iterator": {
727 | "version": "2.0.3",
728 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
729 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
730 | "dev": true,
731 | "requires": {
732 | "d": "1",
733 | "es5-ext": "^0.10.35",
734 | "es6-symbol": "^3.1.1"
735 | }
736 | },
737 | "es6-map": {
738 | "version": "0.1.5",
739 | "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
740 | "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
741 | "dev": true,
742 | "requires": {
743 | "d": "1",
744 | "es5-ext": "~0.10.14",
745 | "es6-iterator": "~2.0.1",
746 | "es6-set": "~0.1.5",
747 | "es6-symbol": "~3.1.1",
748 | "event-emitter": "~0.3.5"
749 | }
750 | },
751 | "es6-set": {
752 | "version": "0.1.5",
753 | "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
754 | "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
755 | "dev": true,
756 | "requires": {
757 | "d": "1",
758 | "es5-ext": "~0.10.14",
759 | "es6-iterator": "~2.0.1",
760 | "es6-symbol": "3.1.1",
761 | "event-emitter": "~0.3.5"
762 | }
763 | },
764 | "es6-symbol": {
765 | "version": "3.1.1",
766 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
767 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
768 | "dev": true,
769 | "requires": {
770 | "d": "1",
771 | "es5-ext": "~0.10.14"
772 | }
773 | },
774 | "es6-weak-map": {
775 | "version": "2.0.2",
776 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
777 | "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
778 | "dev": true,
779 | "requires": {
780 | "d": "1",
781 | "es5-ext": "^0.10.14",
782 | "es6-iterator": "^2.0.1",
783 | "es6-symbol": "^3.1.1"
784 | }
785 | },
786 | "escallmatch": {
787 | "version": "1.5.0",
788 | "resolved": "https://registry.npmjs.org/escallmatch/-/escallmatch-1.5.0.tgz",
789 | "integrity": "sha1-UAmdhugJGwkt+N37w/mm+wWgJNA=",
790 | "dev": true,
791 | "requires": {
792 | "call-matcher": "^1.0.0",
793 | "esprima": "^2.0.0"
794 | },
795 | "dependencies": {
796 | "esprima": {
797 | "version": "2.7.3",
798 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
799 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
800 | "dev": true
801 | }
802 | }
803 | },
804 | "escape-string-regexp": {
805 | "version": "1.0.5",
806 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
807 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
808 | "dev": true
809 | },
810 | "escodegen": {
811 | "version": "1.11.0",
812 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
813 | "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
814 | "dev": true,
815 | "requires": {
816 | "esprima": "^3.1.3",
817 | "estraverse": "^4.2.0",
818 | "esutils": "^2.0.2",
819 | "optionator": "^0.8.1",
820 | "source-map": "~0.6.1"
821 | },
822 | "dependencies": {
823 | "source-map": {
824 | "version": "0.6.1",
825 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
826 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
827 | "dev": true,
828 | "optional": true
829 | }
830 | }
831 | },
832 | "escope": {
833 | "version": "3.6.0",
834 | "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
835 | "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
836 | "dev": true,
837 | "requires": {
838 | "es6-map": "^0.1.3",
839 | "es6-weak-map": "^2.0.1",
840 | "esrecurse": "^4.1.0",
841 | "estraverse": "^4.1.1"
842 | }
843 | },
844 | "espower": {
845 | "version": "2.1.1",
846 | "resolved": "https://registry.npmjs.org/espower/-/espower-2.1.1.tgz",
847 | "integrity": "sha512-F4TY1qYJB1aUyzB03NsZksZzUQmQoEBaTUjRJGR30GxbkbjKI41NhCyYjrF+bGgWN7x/ZsczYppRpz/0WdI0ug==",
848 | "dev": true,
849 | "requires": {
850 | "array-find": "^1.0.0",
851 | "escallmatch": "^1.5.0",
852 | "escodegen": "^1.7.0",
853 | "escope": "^3.3.0",
854 | "espower-location-detector": "^1.0.0",
855 | "espurify": "^1.3.0",
856 | "estraverse": "^4.1.0",
857 | "source-map": "^0.5.0",
858 | "type-name": "^2.0.0",
859 | "xtend": "^4.0.0"
860 | },
861 | "dependencies": {
862 | "source-map": {
863 | "version": "0.5.7",
864 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
865 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
866 | "dev": true
867 | }
868 | }
869 | },
870 | "espower-location-detector": {
871 | "version": "1.0.0",
872 | "resolved": "https://registry.npmjs.org/espower-location-detector/-/espower-location-detector-1.0.0.tgz",
873 | "integrity": "sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=",
874 | "dev": true,
875 | "requires": {
876 | "is-url": "^1.2.1",
877 | "path-is-absolute": "^1.0.0",
878 | "source-map": "^0.5.0",
879 | "xtend": "^4.0.0"
880 | },
881 | "dependencies": {
882 | "source-map": {
883 | "version": "0.5.7",
884 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
885 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
886 | "dev": true
887 | }
888 | }
889 | },
890 | "espower-source": {
891 | "version": "2.3.0",
892 | "resolved": "https://registry.npmjs.org/espower-source/-/espower-source-2.3.0.tgz",
893 | "integrity": "sha512-Wc4kC4zUAEV7Qt31JRPoBUc5jjowHRylml2L2VaDQ1XEbnqQofGWx+gPR03TZAPokAMl5dqyL36h3ITyMXy3iA==",
894 | "dev": true,
895 | "requires": {
896 | "acorn": "^5.0.0",
897 | "acorn-es7-plugin": "^1.0.10",
898 | "convert-source-map": "^1.1.1",
899 | "empower-assert": "^1.0.0",
900 | "escodegen": "^1.10.0",
901 | "espower": "^2.1.1",
902 | "estraverse": "^4.0.0",
903 | "merge-estraverse-visitors": "^1.0.0",
904 | "multi-stage-sourcemap": "^0.2.1",
905 | "path-is-absolute": "^1.0.0",
906 | "xtend": "^4.0.0"
907 | }
908 | },
909 | "espower-typescript": {
910 | "version": "9.0.1",
911 | "resolved": "https://registry.npmjs.org/espower-typescript/-/espower-typescript-9.0.1.tgz",
912 | "integrity": "sha512-WmEm8Hs0SX06izEdi4Qlu3GPOgshejXXA22OA5i+9oN0yC9pWLxlomyPkNkksAQl+ZV5dOGyTdC4gBAEfwqBww==",
913 | "dev": true,
914 | "requires": {
915 | "espower-source": "^2.3.0",
916 | "minimatch": "^3.0.3",
917 | "source-map-support": "^0.5.9",
918 | "ts-node": "^7.0.1"
919 | }
920 | },
921 | "esprima": {
922 | "version": "3.1.3",
923 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
924 | "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
925 | "dev": true
926 | },
927 | "espurify": {
928 | "version": "1.8.1",
929 | "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.8.1.tgz",
930 | "integrity": "sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==",
931 | "dev": true,
932 | "requires": {
933 | "core-js": "^2.0.0"
934 | }
935 | },
936 | "esrecurse": {
937 | "version": "4.2.1",
938 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
939 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
940 | "dev": true,
941 | "requires": {
942 | "estraverse": "^4.1.0"
943 | }
944 | },
945 | "estraverse": {
946 | "version": "4.2.0",
947 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
948 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
949 | "dev": true
950 | },
951 | "esutils": {
952 | "version": "2.0.2",
953 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
954 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
955 | "dev": true
956 | },
957 | "event-emitter": {
958 | "version": "0.3.5",
959 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
960 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
961 | "dev": true,
962 | "requires": {
963 | "d": "1",
964 | "es5-ext": "~0.10.14"
965 | }
966 | },
967 | "fast-levenshtein": {
968 | "version": "2.0.6",
969 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
970 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
971 | "dev": true
972 | },
973 | "find-up": {
974 | "version": "2.1.0",
975 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
976 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
977 | "dev": true,
978 | "requires": {
979 | "locate-path": "^2.0.0"
980 | }
981 | },
982 | "fs.realpath": {
983 | "version": "1.0.0",
984 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
985 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
986 | "dev": true
987 | },
988 | "get-pkg-repo": {
989 | "version": "1.4.0",
990 | "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
991 | "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
992 | "dev": true,
993 | "requires": {
994 | "hosted-git-info": "^2.1.4",
995 | "meow": "^3.3.0",
996 | "normalize-package-data": "^2.3.0",
997 | "parse-github-repo-url": "^1.3.0",
998 | "through2": "^2.0.0"
999 | },
1000 | "dependencies": {
1001 | "camelcase": {
1002 | "version": "2.1.1",
1003 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
1004 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
1005 | "dev": true
1006 | },
1007 | "camelcase-keys": {
1008 | "version": "2.1.0",
1009 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
1010 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
1011 | "dev": true,
1012 | "requires": {
1013 | "camelcase": "^2.0.0",
1014 | "map-obj": "^1.0.0"
1015 | }
1016 | },
1017 | "indent-string": {
1018 | "version": "2.1.0",
1019 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
1020 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
1021 | "dev": true,
1022 | "requires": {
1023 | "repeating": "^2.0.0"
1024 | }
1025 | },
1026 | "map-obj": {
1027 | "version": "1.0.1",
1028 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
1029 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
1030 | "dev": true
1031 | },
1032 | "meow": {
1033 | "version": "3.7.0",
1034 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
1035 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
1036 | "dev": true,
1037 | "requires": {
1038 | "camelcase-keys": "^2.0.0",
1039 | "decamelize": "^1.1.2",
1040 | "loud-rejection": "^1.0.0",
1041 | "map-obj": "^1.0.1",
1042 | "minimist": "^1.1.3",
1043 | "normalize-package-data": "^2.3.4",
1044 | "object-assign": "^4.0.1",
1045 | "read-pkg-up": "^1.0.1",
1046 | "redent": "^1.0.0",
1047 | "trim-newlines": "^1.0.0"
1048 | }
1049 | },
1050 | "minimist": {
1051 | "version": "1.2.0",
1052 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1053 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1054 | "dev": true
1055 | },
1056 | "redent": {
1057 | "version": "1.0.0",
1058 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
1059 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
1060 | "dev": true,
1061 | "requires": {
1062 | "indent-string": "^2.1.0",
1063 | "strip-indent": "^1.0.1"
1064 | }
1065 | },
1066 | "strip-indent": {
1067 | "version": "1.0.1",
1068 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
1069 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
1070 | "dev": true,
1071 | "requires": {
1072 | "get-stdin": "^4.0.1"
1073 | }
1074 | },
1075 | "trim-newlines": {
1076 | "version": "1.0.0",
1077 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
1078 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
1079 | "dev": true
1080 | }
1081 | }
1082 | },
1083 | "get-stdin": {
1084 | "version": "4.0.1",
1085 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
1086 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
1087 | "dev": true
1088 | },
1089 | "git-raw-commits": {
1090 | "version": "2.0.0",
1091 | "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz",
1092 | "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==",
1093 | "dev": true,
1094 | "requires": {
1095 | "dargs": "^4.0.1",
1096 | "lodash.template": "^4.0.2",
1097 | "meow": "^4.0.0",
1098 | "split2": "^2.0.0",
1099 | "through2": "^2.0.0"
1100 | }
1101 | },
1102 | "git-remote-origin-url": {
1103 | "version": "2.0.0",
1104 | "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
1105 | "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
1106 | "dev": true,
1107 | "requires": {
1108 | "gitconfiglocal": "^1.0.0",
1109 | "pify": "^2.3.0"
1110 | },
1111 | "dependencies": {
1112 | "pify": {
1113 | "version": "2.3.0",
1114 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1115 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1116 | "dev": true
1117 | }
1118 | }
1119 | },
1120 | "git-semver-tags": {
1121 | "version": "2.0.0",
1122 | "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.0.tgz",
1123 | "integrity": "sha512-lSgFc3zQTul31nFje2Q8XdNcTOI6B4I3mJRPCgFzHQQLfxfqdWTYzdtCaynkK5Xmb2wQlSJoKolhXJ1VhKROnQ==",
1124 | "dev": true,
1125 | "requires": {
1126 | "meow": "^4.0.0",
1127 | "semver": "^5.5.0"
1128 | }
1129 | },
1130 | "gitconfiglocal": {
1131 | "version": "1.0.0",
1132 | "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
1133 | "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
1134 | "dev": true,
1135 | "requires": {
1136 | "ini": "^1.3.2"
1137 | }
1138 | },
1139 | "glob": {
1140 | "version": "7.1.2",
1141 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
1142 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
1143 | "dev": true,
1144 | "requires": {
1145 | "fs.realpath": "^1.0.0",
1146 | "inflight": "^1.0.4",
1147 | "inherits": "2",
1148 | "minimatch": "^3.0.4",
1149 | "once": "^1.3.0",
1150 | "path-is-absolute": "^1.0.0"
1151 | }
1152 | },
1153 | "graceful-fs": {
1154 | "version": "4.1.11",
1155 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
1156 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
1157 | "dev": true
1158 | },
1159 | "growl": {
1160 | "version": "1.10.5",
1161 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
1162 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
1163 | "dev": true
1164 | },
1165 | "handlebars": {
1166 | "version": "4.0.11",
1167 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
1168 | "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
1169 | "dev": true,
1170 | "requires": {
1171 | "async": "^1.4.0",
1172 | "optimist": "^0.6.1",
1173 | "source-map": "^0.4.4",
1174 | "uglify-js": "^2.6"
1175 | }
1176 | },
1177 | "has-ansi": {
1178 | "version": "2.0.0",
1179 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
1180 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
1181 | "dev": true,
1182 | "requires": {
1183 | "ansi-regex": "^2.0.0"
1184 | }
1185 | },
1186 | "has-flag": {
1187 | "version": "3.0.0",
1188 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1189 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1190 | "dev": true
1191 | },
1192 | "he": {
1193 | "version": "1.1.1",
1194 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
1195 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
1196 | "dev": true
1197 | },
1198 | "hosted-git-info": {
1199 | "version": "2.7.1",
1200 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
1201 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
1202 | "dev": true
1203 | },
1204 | "indent-string": {
1205 | "version": "3.2.0",
1206 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
1207 | "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
1208 | "dev": true
1209 | },
1210 | "indexof": {
1211 | "version": "0.0.1",
1212 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
1213 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
1214 | "dev": true
1215 | },
1216 | "inflight": {
1217 | "version": "1.0.6",
1218 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1219 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1220 | "dev": true,
1221 | "requires": {
1222 | "once": "^1.3.0",
1223 | "wrappy": "1"
1224 | }
1225 | },
1226 | "inherits": {
1227 | "version": "2.0.3",
1228 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1229 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1230 | "dev": true
1231 | },
1232 | "ini": {
1233 | "version": "1.3.5",
1234 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
1235 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
1236 | "dev": true
1237 | },
1238 | "is-arrayish": {
1239 | "version": "0.2.1",
1240 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1241 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1242 | "dev": true
1243 | },
1244 | "is-buffer": {
1245 | "version": "1.1.6",
1246 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
1247 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
1248 | "dev": true
1249 | },
1250 | "is-builtin-module": {
1251 | "version": "1.0.0",
1252 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
1253 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
1254 | "dev": true,
1255 | "requires": {
1256 | "builtin-modules": "^1.0.0"
1257 | }
1258 | },
1259 | "is-finite": {
1260 | "version": "1.0.2",
1261 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1262 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1263 | "dev": true,
1264 | "requires": {
1265 | "number-is-nan": "^1.0.0"
1266 | }
1267 | },
1268 | "is-obj": {
1269 | "version": "1.0.1",
1270 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
1271 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
1272 | "dev": true
1273 | },
1274 | "is-plain-obj": {
1275 | "version": "1.1.0",
1276 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
1277 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
1278 | "dev": true
1279 | },
1280 | "is-subset": {
1281 | "version": "0.1.1",
1282 | "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
1283 | "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
1284 | "dev": true
1285 | },
1286 | "is-text-path": {
1287 | "version": "1.0.1",
1288 | "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
1289 | "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
1290 | "dev": true,
1291 | "requires": {
1292 | "text-extensions": "^1.0.0"
1293 | }
1294 | },
1295 | "is-url": {
1296 | "version": "1.2.4",
1297 | "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
1298 | "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
1299 | "dev": true
1300 | },
1301 | "is-utf8": {
1302 | "version": "0.2.1",
1303 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
1304 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
1305 | "dev": true
1306 | },
1307 | "isarray": {
1308 | "version": "1.0.0",
1309 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1310 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1311 | "dev": true
1312 | },
1313 | "js-tokens": {
1314 | "version": "3.0.2",
1315 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
1316 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
1317 | "dev": true
1318 | },
1319 | "js-yaml": {
1320 | "version": "3.12.0",
1321 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
1322 | "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
1323 | "dev": true,
1324 | "requires": {
1325 | "argparse": "^1.0.7",
1326 | "esprima": "^4.0.0"
1327 | },
1328 | "dependencies": {
1329 | "esprima": {
1330 | "version": "4.0.1",
1331 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1332 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1333 | "dev": true
1334 | }
1335 | }
1336 | },
1337 | "json-parse-better-errors": {
1338 | "version": "1.0.2",
1339 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1340 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
1341 | "dev": true
1342 | },
1343 | "json-stringify-safe": {
1344 | "version": "5.0.1",
1345 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1346 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1347 | "dev": true
1348 | },
1349 | "jsonparse": {
1350 | "version": "1.3.1",
1351 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
1352 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
1353 | "dev": true
1354 | },
1355 | "kind-of": {
1356 | "version": "3.2.2",
1357 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1358 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1359 | "dev": true,
1360 | "requires": {
1361 | "is-buffer": "^1.1.5"
1362 | }
1363 | },
1364 | "lazy-cache": {
1365 | "version": "1.0.4",
1366 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
1367 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
1368 | "dev": true,
1369 | "optional": true
1370 | },
1371 | "levn": {
1372 | "version": "0.3.0",
1373 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
1374 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
1375 | "dev": true,
1376 | "requires": {
1377 | "prelude-ls": "~1.1.2",
1378 | "type-check": "~0.3.2"
1379 | }
1380 | },
1381 | "load-json-file": {
1382 | "version": "4.0.0",
1383 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
1384 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
1385 | "dev": true,
1386 | "requires": {
1387 | "graceful-fs": "^4.1.2",
1388 | "parse-json": "^4.0.0",
1389 | "pify": "^3.0.0",
1390 | "strip-bom": "^3.0.0"
1391 | }
1392 | },
1393 | "locate-path": {
1394 | "version": "2.0.0",
1395 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
1396 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
1397 | "dev": true,
1398 | "requires": {
1399 | "p-locate": "^2.0.0",
1400 | "path-exists": "^3.0.0"
1401 | }
1402 | },
1403 | "lodash": {
1404 | "version": "4.17.10",
1405 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
1406 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
1407 | "dev": true
1408 | },
1409 | "lodash._reinterpolate": {
1410 | "version": "3.0.0",
1411 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
1412 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
1413 | "dev": true
1414 | },
1415 | "lodash.template": {
1416 | "version": "4.4.0",
1417 | "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
1418 | "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
1419 | "dev": true,
1420 | "requires": {
1421 | "lodash._reinterpolate": "~3.0.0",
1422 | "lodash.templatesettings": "^4.0.0"
1423 | }
1424 | },
1425 | "lodash.templatesettings": {
1426 | "version": "4.1.0",
1427 | "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
1428 | "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
1429 | "dev": true,
1430 | "requires": {
1431 | "lodash._reinterpolate": "~3.0.0"
1432 | }
1433 | },
1434 | "longest": {
1435 | "version": "1.0.1",
1436 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
1437 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
1438 | "dev": true
1439 | },
1440 | "loud-rejection": {
1441 | "version": "1.6.0",
1442 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
1443 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
1444 | "dev": true,
1445 | "requires": {
1446 | "currently-unhandled": "^0.4.1",
1447 | "signal-exit": "^3.0.0"
1448 | }
1449 | },
1450 | "lru-cache": {
1451 | "version": "4.1.3",
1452 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
1453 | "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
1454 | "dev": true,
1455 | "requires": {
1456 | "pseudomap": "^1.0.2",
1457 | "yallist": "^2.1.2"
1458 | }
1459 | },
1460 | "make-error": {
1461 | "version": "1.3.5",
1462 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
1463 | "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
1464 | "dev": true
1465 | },
1466 | "map-obj": {
1467 | "version": "2.0.0",
1468 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
1469 | "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
1470 | "dev": true
1471 | },
1472 | "meow": {
1473 | "version": "4.0.1",
1474 | "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
1475 | "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
1476 | "dev": true,
1477 | "requires": {
1478 | "camelcase-keys": "^4.0.0",
1479 | "decamelize-keys": "^1.0.0",
1480 | "loud-rejection": "^1.0.0",
1481 | "minimist": "^1.1.3",
1482 | "minimist-options": "^3.0.1",
1483 | "normalize-package-data": "^2.3.4",
1484 | "read-pkg-up": "^3.0.0",
1485 | "redent": "^2.0.0",
1486 | "trim-newlines": "^2.0.0"
1487 | },
1488 | "dependencies": {
1489 | "minimist": {
1490 | "version": "1.2.0",
1491 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1492 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1493 | "dev": true
1494 | },
1495 | "read-pkg": {
1496 | "version": "3.0.0",
1497 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
1498 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
1499 | "dev": true,
1500 | "requires": {
1501 | "load-json-file": "^4.0.0",
1502 | "normalize-package-data": "^2.3.2",
1503 | "path-type": "^3.0.0"
1504 | }
1505 | },
1506 | "read-pkg-up": {
1507 | "version": "3.0.0",
1508 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
1509 | "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
1510 | "dev": true,
1511 | "requires": {
1512 | "find-up": "^2.0.0",
1513 | "read-pkg": "^3.0.0"
1514 | }
1515 | }
1516 | }
1517 | },
1518 | "merge-estraverse-visitors": {
1519 | "version": "1.0.0",
1520 | "resolved": "https://registry.npmjs.org/merge-estraverse-visitors/-/merge-estraverse-visitors-1.0.0.tgz",
1521 | "integrity": "sha1-65aDOLXe1c7tgs7AMH3sui2OqZQ=",
1522 | "dev": true,
1523 | "requires": {
1524 | "estraverse": "^4.0.0"
1525 | }
1526 | },
1527 | "minimatch": {
1528 | "version": "3.0.4",
1529 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1530 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1531 | "dev": true,
1532 | "requires": {
1533 | "brace-expansion": "^1.1.7"
1534 | }
1535 | },
1536 | "minimist": {
1537 | "version": "0.0.10",
1538 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
1539 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
1540 | "dev": true
1541 | },
1542 | "minimist-options": {
1543 | "version": "3.0.2",
1544 | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
1545 | "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
1546 | "dev": true,
1547 | "requires": {
1548 | "arrify": "^1.0.1",
1549 | "is-plain-obj": "^1.1.0"
1550 | }
1551 | },
1552 | "mkdirp": {
1553 | "version": "0.5.1",
1554 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1555 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1556 | "dev": true,
1557 | "requires": {
1558 | "minimist": "0.0.8"
1559 | },
1560 | "dependencies": {
1561 | "minimist": {
1562 | "version": "0.0.8",
1563 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1564 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1565 | "dev": true
1566 | }
1567 | }
1568 | },
1569 | "mocha": {
1570 | "version": "5.2.0",
1571 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
1572 | "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
1573 | "dev": true,
1574 | "requires": {
1575 | "browser-stdout": "1.3.1",
1576 | "commander": "2.15.1",
1577 | "debug": "3.1.0",
1578 | "diff": "3.5.0",
1579 | "escape-string-regexp": "1.0.5",
1580 | "glob": "7.1.2",
1581 | "growl": "1.10.5",
1582 | "he": "1.1.1",
1583 | "minimatch": "3.0.4",
1584 | "mkdirp": "0.5.1",
1585 | "supports-color": "5.4.0"
1586 | }
1587 | },
1588 | "modify-values": {
1589 | "version": "1.0.1",
1590 | "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
1591 | "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
1592 | "dev": true
1593 | },
1594 | "ms": {
1595 | "version": "2.0.0",
1596 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1597 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1598 | "dev": true
1599 | },
1600 | "multi-stage-sourcemap": {
1601 | "version": "0.2.1",
1602 | "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz",
1603 | "integrity": "sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU=",
1604 | "dev": true,
1605 | "requires": {
1606 | "source-map": "^0.1.34"
1607 | },
1608 | "dependencies": {
1609 | "source-map": {
1610 | "version": "0.1.43",
1611 | "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
1612 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
1613 | "dev": true,
1614 | "requires": {
1615 | "amdefine": ">=0.0.4"
1616 | }
1617 | }
1618 | }
1619 | },
1620 | "next-tick": {
1621 | "version": "1.0.0",
1622 | "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
1623 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
1624 | "dev": true
1625 | },
1626 | "normalize-package-data": {
1627 | "version": "2.4.0",
1628 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
1629 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
1630 | "dev": true,
1631 | "requires": {
1632 | "hosted-git-info": "^2.1.4",
1633 | "is-builtin-module": "^1.0.0",
1634 | "semver": "2 || 3 || 4 || 5",
1635 | "validate-npm-package-license": "^3.0.1"
1636 | }
1637 | },
1638 | "number-is-nan": {
1639 | "version": "1.0.1",
1640 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1641 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1642 | "dev": true
1643 | },
1644 | "object-assign": {
1645 | "version": "4.1.1",
1646 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1647 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1648 | "dev": true
1649 | },
1650 | "object-keys": {
1651 | "version": "1.0.12",
1652 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
1653 | "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
1654 | "dev": true
1655 | },
1656 | "once": {
1657 | "version": "1.4.0",
1658 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1659 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1660 | "dev": true,
1661 | "requires": {
1662 | "wrappy": "1"
1663 | }
1664 | },
1665 | "optimist": {
1666 | "version": "0.6.1",
1667 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
1668 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
1669 | "dev": true,
1670 | "requires": {
1671 | "minimist": "~0.0.1",
1672 | "wordwrap": "~0.0.2"
1673 | }
1674 | },
1675 | "optionator": {
1676 | "version": "0.8.2",
1677 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
1678 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
1679 | "dev": true,
1680 | "requires": {
1681 | "deep-is": "~0.1.3",
1682 | "fast-levenshtein": "~2.0.4",
1683 | "levn": "~0.3.0",
1684 | "prelude-ls": "~1.1.2",
1685 | "type-check": "~0.3.2",
1686 | "wordwrap": "~1.0.0"
1687 | },
1688 | "dependencies": {
1689 | "wordwrap": {
1690 | "version": "1.0.0",
1691 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
1692 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
1693 | "dev": true
1694 | }
1695 | }
1696 | },
1697 | "os-tmpdir": {
1698 | "version": "1.0.2",
1699 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1700 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1701 | "dev": true
1702 | },
1703 | "p-limit": {
1704 | "version": "1.3.0",
1705 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
1706 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
1707 | "dev": true,
1708 | "requires": {
1709 | "p-try": "^1.0.0"
1710 | }
1711 | },
1712 | "p-locate": {
1713 | "version": "2.0.0",
1714 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
1715 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
1716 | "dev": true,
1717 | "requires": {
1718 | "p-limit": "^1.1.0"
1719 | }
1720 | },
1721 | "p-try": {
1722 | "version": "1.0.0",
1723 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
1724 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
1725 | "dev": true
1726 | },
1727 | "parse-github-repo-url": {
1728 | "version": "1.4.1",
1729 | "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
1730 | "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
1731 | "dev": true
1732 | },
1733 | "parse-json": {
1734 | "version": "4.0.0",
1735 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
1736 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
1737 | "dev": true,
1738 | "requires": {
1739 | "error-ex": "^1.3.1",
1740 | "json-parse-better-errors": "^1.0.1"
1741 | }
1742 | },
1743 | "path-exists": {
1744 | "version": "3.0.0",
1745 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1746 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
1747 | "dev": true
1748 | },
1749 | "path-is-absolute": {
1750 | "version": "1.0.1",
1751 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1752 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1753 | "dev": true
1754 | },
1755 | "path-parse": {
1756 | "version": "1.0.6",
1757 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1758 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
1759 | "dev": true
1760 | },
1761 | "path-type": {
1762 | "version": "3.0.0",
1763 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
1764 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
1765 | "dev": true,
1766 | "requires": {
1767 | "pify": "^3.0.0"
1768 | }
1769 | },
1770 | "pify": {
1771 | "version": "3.0.0",
1772 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
1773 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
1774 | "dev": true
1775 | },
1776 | "pinkie": {
1777 | "version": "2.0.4",
1778 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
1779 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
1780 | "dev": true
1781 | },
1782 | "pinkie-promise": {
1783 | "version": "2.0.1",
1784 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
1785 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
1786 | "dev": true,
1787 | "requires": {
1788 | "pinkie": "^2.0.0"
1789 | }
1790 | },
1791 | "power-assert": {
1792 | "version": "1.6.1",
1793 | "resolved": "https://registry.npmjs.org/power-assert/-/power-assert-1.6.1.tgz",
1794 | "integrity": "sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ==",
1795 | "dev": true,
1796 | "requires": {
1797 | "define-properties": "^1.1.2",
1798 | "empower": "^1.3.1",
1799 | "power-assert-formatter": "^1.4.1",
1800 | "universal-deep-strict-equal": "^1.2.1",
1801 | "xtend": "^4.0.0"
1802 | }
1803 | },
1804 | "power-assert-context-formatter": {
1805 | "version": "1.2.0",
1806 | "resolved": "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz",
1807 | "integrity": "sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg==",
1808 | "dev": true,
1809 | "requires": {
1810 | "core-js": "^2.0.0",
1811 | "power-assert-context-traversal": "^1.2.0"
1812 | }
1813 | },
1814 | "power-assert-context-reducer-ast": {
1815 | "version": "1.2.0",
1816 | "resolved": "https://registry.npmjs.org/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz",
1817 | "integrity": "sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw==",
1818 | "dev": true,
1819 | "requires": {
1820 | "acorn": "^5.0.0",
1821 | "acorn-es7-plugin": "^1.0.12",
1822 | "core-js": "^2.0.0",
1823 | "espurify": "^1.6.0",
1824 | "estraverse": "^4.2.0"
1825 | }
1826 | },
1827 | "power-assert-context-traversal": {
1828 | "version": "1.2.0",
1829 | "resolved": "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz",
1830 | "integrity": "sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ==",
1831 | "dev": true,
1832 | "requires": {
1833 | "core-js": "^2.0.0",
1834 | "estraverse": "^4.1.0"
1835 | }
1836 | },
1837 | "power-assert-formatter": {
1838 | "version": "1.4.1",
1839 | "resolved": "https://registry.npmjs.org/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz",
1840 | "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=",
1841 | "dev": true,
1842 | "requires": {
1843 | "core-js": "^2.0.0",
1844 | "power-assert-context-formatter": "^1.0.7",
1845 | "power-assert-context-reducer-ast": "^1.0.7",
1846 | "power-assert-renderer-assertion": "^1.0.7",
1847 | "power-assert-renderer-comparison": "^1.0.7",
1848 | "power-assert-renderer-diagram": "^1.0.7",
1849 | "power-assert-renderer-file": "^1.0.7"
1850 | }
1851 | },
1852 | "power-assert-renderer-assertion": {
1853 | "version": "1.2.0",
1854 | "resolved": "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz",
1855 | "integrity": "sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg==",
1856 | "dev": true,
1857 | "requires": {
1858 | "power-assert-renderer-base": "^1.1.1",
1859 | "power-assert-util-string-width": "^1.2.0"
1860 | }
1861 | },
1862 | "power-assert-renderer-base": {
1863 | "version": "1.1.1",
1864 | "resolved": "https://registry.npmjs.org/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz",
1865 | "integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s=",
1866 | "dev": true
1867 | },
1868 | "power-assert-renderer-comparison": {
1869 | "version": "1.2.0",
1870 | "resolved": "https://registry.npmjs.org/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz",
1871 | "integrity": "sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g==",
1872 | "dev": true,
1873 | "requires": {
1874 | "core-js": "^2.0.0",
1875 | "diff-match-patch": "^1.0.0",
1876 | "power-assert-renderer-base": "^1.1.1",
1877 | "stringifier": "^1.3.0",
1878 | "type-name": "^2.0.1"
1879 | }
1880 | },
1881 | "power-assert-renderer-diagram": {
1882 | "version": "1.2.0",
1883 | "resolved": "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz",
1884 | "integrity": "sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg==",
1885 | "dev": true,
1886 | "requires": {
1887 | "core-js": "^2.0.0",
1888 | "power-assert-renderer-base": "^1.1.1",
1889 | "power-assert-util-string-width": "^1.2.0",
1890 | "stringifier": "^1.3.0"
1891 | }
1892 | },
1893 | "power-assert-renderer-file": {
1894 | "version": "1.2.0",
1895 | "resolved": "https://registry.npmjs.org/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz",
1896 | "integrity": "sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg==",
1897 | "dev": true,
1898 | "requires": {
1899 | "power-assert-renderer-base": "^1.1.1"
1900 | }
1901 | },
1902 | "power-assert-util-string-width": {
1903 | "version": "1.2.0",
1904 | "resolved": "https://registry.npmjs.org/power-assert-util-string-width/-/power-assert-util-string-width-1.2.0.tgz",
1905 | "integrity": "sha512-lX90G0igAW0iyORTILZ/QjZWsa1MZ6VVY3L0K86e2eKun3S4LKPH4xZIl8fdeMYLfOjkaszbNSzf1uugLeAm2A==",
1906 | "dev": true,
1907 | "requires": {
1908 | "eastasianwidth": "^0.2.0"
1909 | }
1910 | },
1911 | "prelude-ls": {
1912 | "version": "1.1.2",
1913 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
1914 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
1915 | "dev": true
1916 | },
1917 | "process-nextick-args": {
1918 | "version": "2.0.0",
1919 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
1920 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
1921 | "dev": true
1922 | },
1923 | "pseudomap": {
1924 | "version": "1.0.2",
1925 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
1926 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
1927 | "dev": true
1928 | },
1929 | "q": {
1930 | "version": "1.5.1",
1931 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
1932 | "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
1933 | "dev": true
1934 | },
1935 | "quick-lru": {
1936 | "version": "1.1.0",
1937 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
1938 | "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
1939 | "dev": true
1940 | },
1941 | "read-pkg": {
1942 | "version": "1.1.0",
1943 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
1944 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
1945 | "dev": true,
1946 | "requires": {
1947 | "load-json-file": "^1.0.0",
1948 | "normalize-package-data": "^2.3.2",
1949 | "path-type": "^1.0.0"
1950 | },
1951 | "dependencies": {
1952 | "load-json-file": {
1953 | "version": "1.1.0",
1954 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
1955 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
1956 | "dev": true,
1957 | "requires": {
1958 | "graceful-fs": "^4.1.2",
1959 | "parse-json": "^2.2.0",
1960 | "pify": "^2.0.0",
1961 | "pinkie-promise": "^2.0.0",
1962 | "strip-bom": "^2.0.0"
1963 | }
1964 | },
1965 | "parse-json": {
1966 | "version": "2.2.0",
1967 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
1968 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
1969 | "dev": true,
1970 | "requires": {
1971 | "error-ex": "^1.2.0"
1972 | }
1973 | },
1974 | "path-type": {
1975 | "version": "1.1.0",
1976 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
1977 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
1978 | "dev": true,
1979 | "requires": {
1980 | "graceful-fs": "^4.1.2",
1981 | "pify": "^2.0.0",
1982 | "pinkie-promise": "^2.0.0"
1983 | }
1984 | },
1985 | "pify": {
1986 | "version": "2.3.0",
1987 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1988 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1989 | "dev": true
1990 | },
1991 | "strip-bom": {
1992 | "version": "2.0.0",
1993 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
1994 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
1995 | "dev": true,
1996 | "requires": {
1997 | "is-utf8": "^0.2.0"
1998 | }
1999 | }
2000 | }
2001 | },
2002 | "read-pkg-up": {
2003 | "version": "1.0.1",
2004 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
2005 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
2006 | "dev": true,
2007 | "requires": {
2008 | "find-up": "^1.0.0",
2009 | "read-pkg": "^1.0.0"
2010 | },
2011 | "dependencies": {
2012 | "find-up": {
2013 | "version": "1.1.2",
2014 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
2015 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
2016 | "dev": true,
2017 | "requires": {
2018 | "path-exists": "^2.0.0",
2019 | "pinkie-promise": "^2.0.0"
2020 | }
2021 | },
2022 | "path-exists": {
2023 | "version": "2.1.0",
2024 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
2025 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
2026 | "dev": true,
2027 | "requires": {
2028 | "pinkie-promise": "^2.0.0"
2029 | }
2030 | }
2031 | }
2032 | },
2033 | "readable-stream": {
2034 | "version": "2.3.6",
2035 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
2036 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
2037 | "dev": true,
2038 | "requires": {
2039 | "core-util-is": "~1.0.0",
2040 | "inherits": "~2.0.3",
2041 | "isarray": "~1.0.0",
2042 | "process-nextick-args": "~2.0.0",
2043 | "safe-buffer": "~5.1.1",
2044 | "string_decoder": "~1.1.1",
2045 | "util-deprecate": "~1.0.1"
2046 | }
2047 | },
2048 | "redent": {
2049 | "version": "2.0.0",
2050 | "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
2051 | "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
2052 | "dev": true,
2053 | "requires": {
2054 | "indent-string": "^3.0.0",
2055 | "strip-indent": "^2.0.0"
2056 | }
2057 | },
2058 | "repeat-string": {
2059 | "version": "1.6.1",
2060 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
2061 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
2062 | "dev": true
2063 | },
2064 | "repeating": {
2065 | "version": "2.0.1",
2066 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
2067 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
2068 | "dev": true,
2069 | "requires": {
2070 | "is-finite": "^1.0.0"
2071 | }
2072 | },
2073 | "resolve": {
2074 | "version": "1.8.1",
2075 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
2076 | "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
2077 | "dev": true,
2078 | "requires": {
2079 | "path-parse": "^1.0.5"
2080 | }
2081 | },
2082 | "right-align": {
2083 | "version": "0.1.3",
2084 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
2085 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
2086 | "dev": true,
2087 | "optional": true,
2088 | "requires": {
2089 | "align-text": "^0.1.1"
2090 | }
2091 | },
2092 | "safe-buffer": {
2093 | "version": "5.1.2",
2094 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2095 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2096 | "dev": true
2097 | },
2098 | "semver": {
2099 | "version": "5.5.1",
2100 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
2101 | "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
2102 | "dev": true
2103 | },
2104 | "sigmund": {
2105 | "version": "1.0.1",
2106 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
2107 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
2108 | "dev": true
2109 | },
2110 | "signal-exit": {
2111 | "version": "3.0.2",
2112 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
2113 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
2114 | "dev": true
2115 | },
2116 | "source-map": {
2117 | "version": "0.4.4",
2118 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
2119 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
2120 | "dev": true,
2121 | "requires": {
2122 | "amdefine": ">=0.0.4"
2123 | }
2124 | },
2125 | "source-map-support": {
2126 | "version": "0.5.9",
2127 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
2128 | "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
2129 | "dev": true,
2130 | "requires": {
2131 | "buffer-from": "^1.0.0",
2132 | "source-map": "^0.6.0"
2133 | },
2134 | "dependencies": {
2135 | "source-map": {
2136 | "version": "0.6.1",
2137 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2138 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2139 | "dev": true
2140 | }
2141 | }
2142 | },
2143 | "spdx-correct": {
2144 | "version": "3.0.0",
2145 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
2146 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
2147 | "dev": true,
2148 | "requires": {
2149 | "spdx-expression-parse": "^3.0.0",
2150 | "spdx-license-ids": "^3.0.0"
2151 | }
2152 | },
2153 | "spdx-exceptions": {
2154 | "version": "2.1.0",
2155 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
2156 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
2157 | "dev": true
2158 | },
2159 | "spdx-expression-parse": {
2160 | "version": "3.0.0",
2161 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
2162 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
2163 | "dev": true,
2164 | "requires": {
2165 | "spdx-exceptions": "^2.1.0",
2166 | "spdx-license-ids": "^3.0.0"
2167 | }
2168 | },
2169 | "spdx-license-ids": {
2170 | "version": "3.0.0",
2171 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
2172 | "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
2173 | "dev": true
2174 | },
2175 | "split": {
2176 | "version": "1.0.1",
2177 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
2178 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
2179 | "dev": true,
2180 | "requires": {
2181 | "through": "2"
2182 | }
2183 | },
2184 | "split2": {
2185 | "version": "2.2.0",
2186 | "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
2187 | "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
2188 | "dev": true,
2189 | "requires": {
2190 | "through2": "^2.0.2"
2191 | }
2192 | },
2193 | "sprintf-js": {
2194 | "version": "1.0.3",
2195 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2196 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2197 | "dev": true
2198 | },
2199 | "string_decoder": {
2200 | "version": "1.1.1",
2201 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2202 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2203 | "dev": true,
2204 | "requires": {
2205 | "safe-buffer": "~5.1.0"
2206 | }
2207 | },
2208 | "stringifier": {
2209 | "version": "1.4.0",
2210 | "resolved": "https://registry.npmjs.org/stringifier/-/stringifier-1.4.0.tgz",
2211 | "integrity": "sha512-cNsMOqqrcbLcHTXEVmkw9y0fwDwkdgtZwlfyolzpQDoAE1xdNGhQhxBUfiDvvZIKl1hnUEgMv66nHwtMz3OjPw==",
2212 | "dev": true,
2213 | "requires": {
2214 | "core-js": "^2.0.0",
2215 | "traverse": "^0.6.6",
2216 | "type-name": "^2.0.1"
2217 | }
2218 | },
2219 | "strip-ansi": {
2220 | "version": "3.0.1",
2221 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
2222 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
2223 | "dev": true,
2224 | "requires": {
2225 | "ansi-regex": "^2.0.0"
2226 | }
2227 | },
2228 | "strip-bom": {
2229 | "version": "3.0.0",
2230 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
2231 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
2232 | "dev": true
2233 | },
2234 | "strip-indent": {
2235 | "version": "2.0.0",
2236 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
2237 | "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
2238 | "dev": true
2239 | },
2240 | "supports-color": {
2241 | "version": "5.4.0",
2242 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
2243 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
2244 | "dev": true,
2245 | "requires": {
2246 | "has-flag": "^3.0.0"
2247 | }
2248 | },
2249 | "tempfile": {
2250 | "version": "1.1.1",
2251 | "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
2252 | "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
2253 | "dev": true,
2254 | "requires": {
2255 | "os-tmpdir": "^1.0.0",
2256 | "uuid": "^2.0.1"
2257 | }
2258 | },
2259 | "text-extensions": {
2260 | "version": "1.7.0",
2261 | "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz",
2262 | "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==",
2263 | "dev": true
2264 | },
2265 | "through": {
2266 | "version": "2.3.8",
2267 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2268 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2269 | "dev": true
2270 | },
2271 | "through2": {
2272 | "version": "2.0.3",
2273 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
2274 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
2275 | "dev": true,
2276 | "requires": {
2277 | "readable-stream": "^2.1.5",
2278 | "xtend": "~4.0.1"
2279 | }
2280 | },
2281 | "traverse": {
2282 | "version": "0.6.6",
2283 | "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
2284 | "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
2285 | "dev": true
2286 | },
2287 | "trim-newlines": {
2288 | "version": "2.0.0",
2289 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
2290 | "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
2291 | "dev": true
2292 | },
2293 | "trim-off-newlines": {
2294 | "version": "1.0.1",
2295 | "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
2296 | "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
2297 | "dev": true
2298 | },
2299 | "ts-node": {
2300 | "version": "7.0.1",
2301 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz",
2302 | "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==",
2303 | "dev": true,
2304 | "requires": {
2305 | "arrify": "^1.0.0",
2306 | "buffer-from": "^1.1.0",
2307 | "diff": "^3.1.0",
2308 | "make-error": "^1.1.1",
2309 | "minimist": "^1.2.0",
2310 | "mkdirp": "^0.5.1",
2311 | "source-map-support": "^0.5.6",
2312 | "yn": "^2.0.0"
2313 | },
2314 | "dependencies": {
2315 | "minimist": {
2316 | "version": "1.2.0",
2317 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
2318 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
2319 | "dev": true
2320 | }
2321 | }
2322 | },
2323 | "tslib": {
2324 | "version": "1.9.3",
2325 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
2326 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
2327 | "dev": true
2328 | },
2329 | "tslint": {
2330 | "version": "5.11.0",
2331 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz",
2332 | "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=",
2333 | "dev": true,
2334 | "requires": {
2335 | "babel-code-frame": "^6.22.0",
2336 | "builtin-modules": "^1.1.1",
2337 | "chalk": "^2.3.0",
2338 | "commander": "^2.12.1",
2339 | "diff": "^3.2.0",
2340 | "glob": "^7.1.1",
2341 | "js-yaml": "^3.7.0",
2342 | "minimatch": "^3.0.4",
2343 | "resolve": "^1.3.2",
2344 | "semver": "^5.3.0",
2345 | "tslib": "^1.8.0",
2346 | "tsutils": "^2.27.2"
2347 | }
2348 | },
2349 | "tsutils": {
2350 | "version": "2.29.0",
2351 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
2352 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
2353 | "dev": true,
2354 | "requires": {
2355 | "tslib": "^1.8.1"
2356 | }
2357 | },
2358 | "type-check": {
2359 | "version": "0.3.2",
2360 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
2361 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
2362 | "dev": true,
2363 | "requires": {
2364 | "prelude-ls": "~1.1.2"
2365 | }
2366 | },
2367 | "type-name": {
2368 | "version": "2.0.2",
2369 | "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz",
2370 | "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=",
2371 | "dev": true
2372 | },
2373 | "typescript": {
2374 | "version": "3.0.1",
2375 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.1.tgz",
2376 | "integrity": "sha512-zQIMOmC+372pC/CCVLqnQ0zSBiY7HHodU7mpQdjiZddek4GMj31I3dUJ7gAs9o65X7mnRma6OokOkc6f9jjfBg==",
2377 | "dev": true
2378 | },
2379 | "typescript-formatter": {
2380 | "version": "7.2.2",
2381 | "resolved": "https://registry.npmjs.org/typescript-formatter/-/typescript-formatter-7.2.2.tgz",
2382 | "integrity": "sha512-V7vfI9XArVhriOTYHPzMU2WUnm5IMdu9X/CPxs8mIMGxmTBFpDABlbkBka64PZJ9/xgQeRpK8KzzAG4MPzxBDQ==",
2383 | "dev": true,
2384 | "requires": {
2385 | "commandpost": "^1.0.0",
2386 | "editorconfig": "^0.15.0"
2387 | }
2388 | },
2389 | "uglify-js": {
2390 | "version": "2.8.29",
2391 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
2392 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
2393 | "dev": true,
2394 | "optional": true,
2395 | "requires": {
2396 | "source-map": "~0.5.1",
2397 | "uglify-to-browserify": "~1.0.0",
2398 | "yargs": "~3.10.0"
2399 | },
2400 | "dependencies": {
2401 | "source-map": {
2402 | "version": "0.5.7",
2403 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
2404 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
2405 | "dev": true,
2406 | "optional": true
2407 | }
2408 | }
2409 | },
2410 | "uglify-to-browserify": {
2411 | "version": "1.0.2",
2412 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
2413 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
2414 | "dev": true,
2415 | "optional": true
2416 | },
2417 | "universal-deep-strict-equal": {
2418 | "version": "1.2.2",
2419 | "resolved": "https://registry.npmjs.org/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz",
2420 | "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=",
2421 | "dev": true,
2422 | "requires": {
2423 | "array-filter": "^1.0.0",
2424 | "indexof": "0.0.1",
2425 | "object-keys": "^1.0.0"
2426 | }
2427 | },
2428 | "util-deprecate": {
2429 | "version": "1.0.2",
2430 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2431 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2432 | "dev": true
2433 | },
2434 | "uuid": {
2435 | "version": "2.0.3",
2436 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
2437 | "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
2438 | "dev": true
2439 | },
2440 | "validate-npm-package-license": {
2441 | "version": "3.0.4",
2442 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
2443 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
2444 | "dev": true,
2445 | "requires": {
2446 | "spdx-correct": "^3.0.0",
2447 | "spdx-expression-parse": "^3.0.0"
2448 | }
2449 | },
2450 | "window-size": {
2451 | "version": "0.1.0",
2452 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
2453 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
2454 | "dev": true,
2455 | "optional": true
2456 | },
2457 | "wordwrap": {
2458 | "version": "0.0.3",
2459 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
2460 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
2461 | "dev": true
2462 | },
2463 | "wrappy": {
2464 | "version": "1.0.2",
2465 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2466 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2467 | "dev": true
2468 | },
2469 | "xtend": {
2470 | "version": "4.0.1",
2471 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
2472 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
2473 | "dev": true
2474 | },
2475 | "yallist": {
2476 | "version": "2.1.2",
2477 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
2478 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
2479 | "dev": true
2480 | },
2481 | "yargs": {
2482 | "version": "3.10.0",
2483 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
2484 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
2485 | "dev": true,
2486 | "optional": true,
2487 | "requires": {
2488 | "camelcase": "^1.0.2",
2489 | "cliui": "^2.1.0",
2490 | "decamelize": "^1.0.0",
2491 | "window-size": "0.1.0"
2492 | }
2493 | },
2494 | "yn": {
2495 | "version": "2.0.0",
2496 | "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
2497 | "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
2498 | "dev": true
2499 | }
2500 | }
2501 | }
2502 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "commandpost",
3 | "author": "vvakame",
4 | "version": "1.4.0",
5 | "description": "commandline option parser",
6 | "main": "./lib/index.js",
7 | "types": "./lib/index.d.ts",
8 | "repository": {
9 | "type": "git",
10 | "url": "https://github.com/vvakame/commandpost.git"
11 | },
12 | "bugs": {
13 | "url": "https://github.com/vvakame/commandpost/issues"
14 | },
15 | "homepage": "https://github.com/vvakame/commandpost",
16 | "license": "MIT",
17 | "scripts": {
18 | "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
19 | "build": "tslint --fix -c tslint.json -p tsconfig.json && tsfmt -r && tsc -p tsconfig.lib.json",
20 | "test": "mocha --reporter spec --timeout 20000 --require espower-typescript/guess test/**/*Spec.ts",
21 | "test:watch": "npm run test -- --watch --watch-extensions ts",
22 | "tsc:watch": "tsc --watch --pretty"
23 | },
24 | "directories": {
25 | "test": "test"
26 | },
27 | "dependencies": {},
28 | "devDependencies": {
29 | "@types/mocha": "^5.2.5",
30 | "@types/node": "^10.7.1",
31 | "conventional-changelog-cli": "^2.0.1",
32 | "espower-typescript": "^9.0.1",
33 | "mocha": "^5.2.0",
34 | "power-assert": "^1.6.1",
35 | "tslint": "^5.11.0",
36 | "typescript": "^3.0.1",
37 | "typescript-formatter": "^7.0.1"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/setup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | ISERROR=0
3 |
4 | which npm > /dev/null 2>&1
5 | if [ $? -ne 0 ] ; then
6 | echo "command not found: npm"
7 | echo "please install npm. e.g. sudo port install npm"
8 | ISERROR=1
9 | fi
10 |
11 | if [ $ISERROR == 1 ] ; then
12 | exit
13 | fi
14 |
15 | rm -rf node_modules typings && \
16 | npm install && \
17 | echo "OK!"
18 |
--------------------------------------------------------------------------------
/src/argument.ts:
--------------------------------------------------------------------------------
1 | import { CommandpostError, ErrorReason } from "./error";
2 |
3 | // jsdoc, see constructor.
4 | export default class Argument {
5 | /** argument name */
6 | name: string;
7 | /** this argument is required */
8 | required: boolean;
9 | /** this argument is variadic */
10 | variadic: boolean;
11 |
12 | /**
13 | * class of argument.
14 | * ```
15 | * cmd --path foo/bar buzz.txt
16 | * ↑ this one!
17 | * ```
18 | * @param arg pass ''(required) or '[foo]'(optional) or ''(required & variadic) or '[foo...]'(optional & variadic)
19 | * @class
20 | */
21 | constructor(arg: string) {
22 | switch (arg.charAt(0)) {
23 | case "<":
24 | this.required = true;
25 | this.name = arg.slice(1, -1);
26 | break;
27 | case "[":
28 | this.required = false;
29 | this.name = arg.slice(1, -1);
30 | break;
31 | default:
32 | throw new CommandpostError({
33 | message: `unsupported format: ${arg}`,
34 | parts: [arg],
35 | reason: ErrorReason.UnsupportedFormatArgument,
36 | params: {
37 | origin: this,
38 | arg,
39 | },
40 | });
41 | }
42 | if (/\.\.\.$/.test(this.name)) {
43 | this.name = this.name.slice(0, -3);
44 | this.variadic = true;
45 | } else {
46 | this.variadic = false;
47 | }
48 | }
49 |
50 | /**
51 | * parse args.
52 | * build to opts.
53 | *
54 | * e.g. #1
55 | * instance member: name=foo, required=true, variadic=false
56 | * method arguments: opts={}, args=["foo!", "bar!"].
57 | * opts are modified to { foo: "foo!" } and return ["bar!"].
58 | *
59 | * e.g. #2
60 | * instance member: name=foo, required=false, variadic=true
61 | * method arguments: opts={}, args=["foo!", "bar!"].
62 | * opts are modified to { foo: ["foo!", "bar!"] } and return [].
63 | *
64 | * @param opts build target object
65 | * @param args
66 | * @returns {string[]} rest args
67 | */
68 | parse(opts: any, args: string[]): string[] {
69 | if (this.required && this.variadic && args.length === 0) {
70 | throw new CommandpostError({
71 | message: `${this.name} requires more than one argument`,
72 | parts: [this.name],
73 | reason: ErrorReason.ArgumentsRequired,
74 | params: {
75 | origin: this,
76 | opts,
77 | args,
78 | },
79 | });
80 | }
81 | if (this.variadic) {
82 | opts[this.name] = args;
83 | args = [];
84 | return args;
85 | }
86 | let arg = args.shift();
87 | if (this.required && !arg) {
88 | throw new CommandpostError({
89 | message: `${this.name} is required`,
90 | reason: ErrorReason.ArgumentRequired,
91 | parts: [this.name],
92 | params: {
93 | origin: this,
94 | opts,
95 | args,
96 | },
97 | });
98 | }
99 | opts[this.name] = arg;
100 | return args;
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/src/command.ts:
--------------------------------------------------------------------------------
1 | import Option from "./option";
2 | import Argument from "./argument";
3 | import { CommandpostError, ErrorReason } from "./error";
4 |
5 | import * as utils from "./utils";
6 |
7 | // jsdoc, see constructor.
8 | export default class Command {
9 | /**
10 | * @private
11 | */
12 | _description?: string;
13 | /**
14 | * @private
15 | */
16 | _usage?: string;
17 | /**
18 | * @private
19 | */
20 | _help = new Option("-h, --help", "display help");
21 | /**
22 | * @private
23 | */
24 | _version?: Option;
25 | /**
26 | * @private
27 | */
28 | _versionStr?: string;
29 | /**
30 | * @private
31 | */
32 | _action: (opts: Opt, args: Arg, rest: string[]) => any;
33 |
34 | /**
35 | * e.g. -abc --foo bar
36 | * @private
37 | */
38 | _rawArgs?: string[];
39 | /**
40 | * e.g. -a -b -c --foo bar
41 | * @private
42 | */
43 | _args?: string[];
44 | /**
45 | * e.g. bar
46 | * @private
47 | */
48 | _rest: string[] = [];
49 |
50 | /**
51 | * @private
52 | */
53 | _allowUnknownOption?: boolean;
54 |
55 | /**
56 | * parent command.
57 | */
58 | parent?: Command;
59 | /**
60 | * name of this command.
61 | */
62 | name: string;
63 |
64 | /**
65 | * e.g.
66 | * ```
67 | * git -p clone git@github.com:vvakame/dtsm.git
68 | * ↑ this!
69 | * ```
70 | * @type {Array}
71 | */
72 | options: Option[] = [];
73 | /**
74 | * e.g.
75 | * ```
76 | * git -p clone git@github.com:vvakame/dtsm.git
77 | * ↑ this!
78 | * ```
79 | * @type {Array}
80 | */
81 | subCommands: Command[] = [];
82 | /**
83 | * e.g.
84 | * ```
85 | * git -p clone git@github.com:vvakame/dtsm.git
86 | * ↑ this!
87 | * ```
88 | * @type {Array}
89 | */
90 | args: Argument[];
91 |
92 | /**
93 | * parsed option values.
94 | * @type {any}
95 | */
96 | parsedOpts: Opt = {};
97 | /**
98 | * parsed option arguments.
99 | * @type {any}
100 | */
101 | parsedArgs: Arg = {};
102 |
103 | /**
104 | * unknown options.
105 | * @type {Array}
106 | */
107 | unknownOptions: string[] = [];
108 |
109 | /**
110 | * class of command.
111 | * ```
112 | * cmd -v sub --path foo/bar buzz.txt
113 | * ↑ this one!
114 | * ```
115 | * @param name name and flags pass flags pass 'foo'(sub command) or 'foo '(sub command & required argument) or 'foo [bar]'(sub command & optional argument) or 'foo '(sub command & required variadic argument) or 'foo [bar...]'(sub command & optional variadic argument).
116 | * @class
117 | */
118 | constructor(name: string) {
119 | let args = name.split(/\s+/);
120 | this.name = args.shift()!;
121 |
122 | let findOptional = false;
123 | let findVariadic = false;
124 | this.args = args.map(argStr => {
125 | if (findVariadic) {
126 | throw new CommandpostError({
127 | parts: [argStr],
128 | message: "parameter can not placed after variadic parameter",
129 | reason: ErrorReason.ParameterCantPlacedAfterVariadic,
130 | });
131 | }
132 | let arg = new Argument(argStr);
133 | if (arg.required && findOptional) {
134 | throw new CommandpostError({
135 | parts: [argStr],
136 | message: "parameter can not placed after variadic parameter",
137 | reason: ErrorReason.ParameterCannPlacedAfterOptional,
138 | });
139 | }
140 | if (!arg.required) {
141 | findOptional = true;
142 | }
143 | if (arg.variadic) {
144 | findVariadic = true;
145 | }
146 | return arg;
147 | });
148 |
149 | this._action = () => {
150 | process.stdout.write(this.helpText() + "\n");
151 | };
152 | }
153 |
154 | /**
155 | * set description for this command.
156 | * @param desc
157 | * @returns {Command}
158 | * @method
159 | */
160 | description(desc: string): Command {
161 | this._description = desc;
162 | return this;
163 | }
164 |
165 | /**
166 | * set usage for this command.
167 | * @param usage
168 | * @returns {Command}
169 | * @method
170 | */
171 | usage(usage: string): Command {
172 | this._usage = usage;
173 | return this;
174 | }
175 |
176 | /**
177 | * add option for this command.
178 | * see {@link Option}.
179 | * @param flags
180 | * @param description
181 | * @param defaultValue
182 | * @returns {Command}
183 | */
184 | option(flags: string, description?: string, defaultValue?: any): Command {
185 | let option = new Option(flags, description, defaultValue);
186 | this.options.push(option);
187 | return this;
188 | }
189 |
190 | /**
191 | * allow unknown option.
192 | * by default, An error occured if unknown option is included.
193 | * @param flag
194 | * @returns {Command}
195 | */
196 | allowUnknownOption(flag = true): Command {
197 | this._allowUnknownOption = flag;
198 | return this;
199 | }
200 |
201 | /**
202 | * add action at this command selected.
203 | * @param fn
204 | * @returns {Command}
205 | */
206 | action(fn: (opts: Opt, args: Arg, rest: string[]) => any): Command {
207 | this._action = fn;
208 | return this;
209 | }
210 |
211 | /**
212 | * create sub command.
213 | * @param name
214 | * @returns {Command} new command instance
215 | */
216 | subCommand(name: string): Command {
217 | let command = new Command(name);
218 | command.parent = this;
219 | this.subCommands.push(command);
220 | return command;
221 | }
222 |
223 | /**
224 | * check arg is matches this command.
225 | * @param arg
226 | * @returns {boolean}
227 | */
228 | is(arg: string) {
229 | return this.name === arg;
230 | }
231 |
232 | /**
233 | * add help this option.
234 | * in general case, use default help option.
235 | * @param flags
236 | * @param description
237 | * @returns {Command}
238 | */
239 | help(flags: string, description: string) {
240 | this._help = new Option(flags, description);
241 | return this;
242 | }
243 |
244 | /**
245 | * add show version option to this command.
246 | * @param version
247 | * @param flags
248 | * @param description
249 | * @returns {Command}
250 | */
251 | version(version: string, flags: string, description: string = "output the version number"): Command {
252 | this._version = new Option(flags, description);
253 | this._versionStr = version;
254 | return this;
255 | }
256 |
257 | /**
258 | * exec action of command.
259 | * this method MUST call after parse process.
260 | * @returns {Promise<{}>}
261 | */
262 | exec(): Promise<{}> {
263 | return Promise.resolve(this._action(this.parsedOpts, this.parsedArgs, this._rest));
264 | }
265 |
266 | /**
267 | * parse argv.
268 | * @param argv
269 | * @returns {Promise<{}>}
270 | */
271 | parse(argv: string[]): Promise<{}> {
272 | return Promise
273 | .resolve(null)
274 | .then(() => {
275 | let rest = this._parseRawArgs(argv);
276 | // resolve help action
277 | if (this._args!.some(arg => this._help.is(arg))) {
278 | // include help option. (help for this command
279 | process.stdout.write(this.helpText() + "\n");
280 | process.exit(0);
281 |
282 | return Promise.resolve({});
283 | }
284 | let subCommand: Command;
285 | if (this.parent == null) {
286 | // only for top level (why? because I can't decide which is natural syntax between `foo help bar buzz` and `foo bar help buzz`.
287 | if (this._rest.some(arg => this._help.name() === arg)) {
288 | // include help sub command. (help for deeper level sub command
289 | if (rest[0]) {
290 | subCommand = this.subCommands.filter(cmd => cmd.is(rest[0]))[0];
291 | if (subCommand) {
292 | process.stdout.write(subCommand.helpText() + "\n");
293 | process.exit(0);
294 |
295 | return Promise.resolve({});
296 | }
297 | }
298 | // TODO raise error? pass through?
299 | }
300 | }
301 | // resolve version option
302 | if (this._version && this._args!.some(arg => this._version!.is(arg))) {
303 | process.stdout.write((this._versionStr || "unknown") + "\n");
304 | process.exit(0);
305 |
306 | return Promise.resolve({});
307 | }
308 |
309 | if (rest[0]) {
310 | subCommand = this.subCommands.filter(cmd => cmd.is(rest[0]))[0];
311 | if (subCommand) {
312 | return subCommand.parse(rest.slice(1));
313 | }
314 | }
315 | return this.exec();
316 | });
317 | }
318 |
319 | /**
320 | * @returns {*}
321 | * @private
322 | */
323 | _getAncestorsAndMe(): Command[] {
324 | if (!this.parent) {
325 | return [this];
326 | } else {
327 | return this.parent._getAncestorsAndMe().concat([this]);
328 | }
329 | }
330 |
331 | /**
332 | * @param args
333 | * @returns {string[]}
334 | * @private
335 | */
336 | _parseRawArgs(args: string[]) {
337 | args = args.slice(0);
338 | let target: string[] = [];
339 | let rest: string[] = [];
340 |
341 | for (let i = 0; i < args.length; i++) {
342 | let arg = args[i];
343 | if (arg === "--") {
344 | // Honor option terminator
345 | target = target.concat(args.slice(i));
346 | break;
347 | }
348 | let cmd = this.subCommands.filter(cmd => cmd.is(arg))[0];
349 | if (cmd) {
350 | rest = args.slice(i);
351 | break;
352 | }
353 | target.push(arg);
354 | }
355 |
356 | this._rawArgs = target.slice(0);
357 | this._args = this._normalize(target);
358 | this._rest = this._parseOptions(this._args);
359 | let cmds = this._getAncestorsAndMe();
360 | let allowUnknownOption = cmds.reverse().map(cmd => cmd._allowUnknownOption).filter(allowUnknownOption => typeof allowUnknownOption !== "undefined")[0];
361 | if (this.unknownOptions.length !== 0 && !allowUnknownOption) {
362 | let errMsg = "unknown option";
363 | errMsg += this.unknownOptions.length === 1 ? " " : "s ";
364 | errMsg += this.unknownOptions.join(", ") + "\n";
365 | errMsg += this.helpText();
366 | throw new CommandpostError({
367 | message: errMsg,
368 | reason: ErrorReason.UnknownOption,
369 | parts: this.unknownOptions,
370 | params: {
371 | origin: this,
372 | args,
373 | },
374 | });
375 | }
376 | if (this._matchSubCommand(rest)) {
377 | return rest;
378 | }
379 | this._rest = this._parseArgs(this._rest);
380 |
381 | return rest;
382 | }
383 |
384 | /**
385 | * @param rest
386 | * @returns {boolean}
387 | * @private
388 | */
389 | _matchSubCommand(rest: string[]): boolean {
390 | if (rest == null || !rest[0]) {
391 | return false;
392 | }
393 | let subCommand = this.subCommands.filter(cmd => cmd.is(rest[0]))[0];
394 | return !!subCommand;
395 | }
396 |
397 | /**
398 | * @param args
399 | * @returns {string[]}
400 | * @private
401 | */
402 | _parseOptions(args: string[]) {
403 | args = args.slice(0);
404 | let rest: string[] = [];
405 | let processedOptions: Option[] = [];
406 | while (args.length !== 0) {
407 | let arg = args.shift()!;
408 | if (arg === "--") {
409 | rest = rest.concat(args);
410 | break;
411 | }
412 | let opt = this.options.filter(opt => opt.is(arg))[0];
413 | if (!opt) {
414 | rest.push(arg);
415 | if (arg.indexOf("-") === 0 && !this._help.is(arg) && (!this._version || !this._version.is(arg))) {
416 | this.unknownOptions.push(arg);
417 | }
418 | continue;
419 | }
420 | args = opt.parse(this.parsedOpts, [arg].concat(args));
421 | processedOptions.push(opt);
422 | }
423 | this.options
424 | .filter(opt => processedOptions.indexOf(opt) === -1)
425 | .forEach(opt => {
426 | let optName = utils.kebabToLowerCamelCase(opt.name());
427 | if (opt.required || opt.optional) {
428 | // string[]
429 | (this.parsedOpts)[optName] = (this.parsedOpts)[optName] || [];
430 | if (opt.defaultValue) {
431 | (this.parsedOpts)[optName].push(opt.defaultValue);
432 | }
433 | } else {
434 | (this.parsedOpts)[optName] = opt.defaultValue;
435 | }
436 | });
437 | return rest;
438 | }
439 |
440 | /**
441 | * @param rest
442 | * @returns {string[]}
443 | * @private
444 | */
445 | _parseArgs(rest: string[]) {
446 | rest = rest.slice(0);
447 | this.args.forEach(argInfo => {
448 | rest = argInfo.parse(this.parsedArgs, rest);
449 | });
450 | return rest;
451 | }
452 |
453 | /**
454 | * @param args
455 | * @returns {string[]}
456 | * @private
457 | */
458 | _normalize(args: string[]): string[] {
459 | let result: string[] = [];
460 | for (let i = 0; i < args.length; i++) {
461 | let arg = args[i];
462 | let lastOpt: Option | undefined;
463 | if (0 < i) {
464 | lastOpt = this.options.filter(opt => opt.is(args[i - 1]))[0];
465 | }
466 | if (arg === "--") {
467 | // Honor option terminator
468 | result = result.concat(args.slice(i));
469 | break;
470 | } else if (lastOpt && lastOpt.required) {
471 | result.push(arg);
472 | } else if (/^-[^-]/.test(arg)) {
473 | // expand combined short hand option. "-abc" to "-a -b -c"
474 | arg.slice(1).split("").forEach(c => result.push("-" + c));
475 | } else if (/^--/.test(arg) && arg.indexOf("=") !== -1) {
476 | result.push(arg.slice(0, arg.indexOf("=")), arg.slice(arg.indexOf("=") + 1));
477 | } else {
478 | result.push(arg);
479 | }
480 | }
481 | return result;
482 | }
483 |
484 | /**
485 | * generate help text.
486 | * @returns {string}
487 | */
488 | helpText(): string {
489 | let result = "";
490 | if (this._description) {
491 | result += this._description + "\n\n";
492 | }
493 | // usage part
494 | result += " Usage: ";
495 | if (this._usage != null) {
496 | result += this._usage;
497 | } else {
498 | result += this._getAncestorsAndMe().map(cmd => cmd.name).join(" ") + " ";
499 | if (this.options.length !== 0) {
500 | result += "[options] ";
501 | }
502 | if (this.subCommands.length !== 0) {
503 | result += "[command] ";
504 | }
505 | if (this.args.length !== 0) {
506 | result += "[--] ";
507 | result += this.args.map(arg => {
508 | if (arg.required) {
509 | return "<" + arg.name + (arg.variadic ? "..." : "") + ">";
510 | } else {
511 | return "[" + arg.name + (arg.variadic ? "..." : "") + "]";
512 | }
513 | }).join(" ");
514 | }
515 | }
516 | result += "\n\n";
517 |
518 | // options part
519 | if (this.options.length !== 0) {
520 | result += " Options:\n\n";
521 | let optionsMaxLength = utils.maxLength(this.options.map(opt => opt.flags));
522 | result += this.options.map(opt => {
523 | let result = " ";
524 | result += utils.pad(opt.flags, optionsMaxLength);
525 | result += " ";
526 | result += opt.description || "";
527 | result += "\n";
528 | return result;
529 | }).join("");
530 | result += "\n\n";
531 | }
532 |
533 | // sub commands part
534 | if (this.subCommands.length !== 0) {
535 | result += " Commands:\n\n";
536 | let subCommandsMaxLength = utils.maxLength(this.subCommands.map(cmd => cmd.name));
537 | result += this.subCommands.map(cmd => {
538 | let result = " ";
539 | result += utils.pad(cmd.name, subCommandsMaxLength);
540 | result += " ";
541 | result += cmd._description || "";
542 | result += "\n";
543 | return result;
544 | }).join("");
545 | result += "\n\n";
546 | }
547 |
548 | return result;
549 | }
550 | }
551 |
--------------------------------------------------------------------------------
/src/error.ts:
--------------------------------------------------------------------------------
1 | import * as util from "util";
2 |
3 | import Command from "./command";
4 | import Argument from "./argument";
5 | import Option from "./option";
6 |
7 | export interface ErrorParameters {
8 | message?: string;
9 | reason: ErrorReason;
10 | parts: string[];
11 | params?:
12 | { origin: Argument; arg: string; } |
13 | { origin: Argument; opts: any; args: string[]; } |
14 | { origin: Command; args: string[]; } |
15 | { option: Option; opts: any; args: string[]; };
16 | }
17 |
18 | export enum ErrorReason {
19 | UnsupportedFormatArgument = "unsupported format",
20 | ArgumentsRequired = "1 or more arguments required",
21 | ArgumentRequired = "argument required",
22 | ParameterCantPlacedAfterVariadic = "parameter can not placed after variadic parameter",
23 | ParameterCannPlacedAfterOptional = "required parameter is not placed after optional parameter",
24 | UnknownOption = "unknown option",
25 | OptionNameMismatch = "short or long option name mismatch",
26 | OptionValueRequired = "option value required",
27 | }
28 |
29 | export class CommandpostError {
30 | stack?: string;
31 |
32 | constructor(public params: ErrorParameters) {
33 | Error.captureStackTrace(this, this.constructor);
34 | }
35 |
36 | get name() {
37 | return this.constructor.name;
38 | }
39 |
40 | get message() {
41 | return this.params.message;
42 | }
43 | }
44 |
45 | util.inherits(CommandpostError, Error);
46 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import Command from "./command";
2 | import Option from "./option";
3 | import Argument from "./argument";
4 | export { CommandpostError, ErrorReason } from "./error";
5 |
6 | export { Command, Option, Argument };
7 |
8 | /**
9 | * Create new top level command.
10 | * @param cmdName
11 | * @returns {Command}
12 | */
13 | export function create(cmdName: string): Command {
14 | return new Command(cmdName);
15 | }
16 |
17 | /**
18 | * exec parsing and call callback.
19 | * @param cmd it created by create function.
20 | * @param argv pass process.argv
21 | * @returns {Promise<{}>}
22 | */
23 | export function exec(cmd: Command, argv: string[]): Promise<{}> {
24 | return Promise
25 | .resolve(null)
26 | .then(() => {
27 | argv = argv.slice(2);
28 | // cmd.parse throw an exception often.
29 | return cmd.parse(argv);
30 | });
31 | }
32 |
--------------------------------------------------------------------------------
/src/option.ts:
--------------------------------------------------------------------------------
1 | import { CommandpostError, ErrorReason } from "./error";
2 | import * as utils from "./utils";
3 |
4 | // jsdoc, see constructor.
5 | export default class Option {
6 | /** this option need parameter value. it is required. */
7 | required: boolean;
8 | /** this option need parameter value. it is optional. */
9 | optional: boolean;
10 | /** this option is default true. if specified this option, value is become false. */
11 | no: boolean;
12 | /** short style. e.g. -o */
13 | short?: string;
14 | /** long style. e.g. --option */
15 | long: string;
16 | /** description of this option */
17 | description: string;
18 |
19 | /**
20 | * class of option.
21 | * ```
22 | * cmd --path foo/bar buzz.txt
23 | * ↑ this one!
24 | * ```
25 | * @param flags pass '-f, --foo'(boolean) or '--foo'(boolean) or '--foo '(string[]) or '--foo [bar]'(string[]).
26 | * @param description
27 | * @param defaultValue
28 | * @class
29 | */
30 | constructor(public flags: string, description?: string, public defaultValue?: any) {
31 | this.required = flags.indexOf("<") !== -1;
32 | this.optional = flags.indexOf("[") !== -1;
33 | this.no = flags.indexOf("-no-") === -1;
34 | let splittedFlags = flags.split(/[ ,|]+/);
35 | if (splittedFlags.length > 1 && !/^[[<]/.test(splittedFlags[1])) {
36 | this.short = splittedFlags.shift()!;
37 | }
38 | this.long = splittedFlags.shift()!;
39 | this.description = description || "";
40 | if (typeof this.defaultValue === "undefined") {
41 | if (this.required || this.optional) {
42 | this.defaultValue = "";
43 | } else {
44 | this.defaultValue = !this.no;
45 | }
46 | }
47 | }
48 |
49 | /**
50 | * name of this option.
51 | * @returns {any}
52 | */
53 | name() {
54 | return this.long.replace("--", "").replace("no-", "");
55 | }
56 |
57 | /**
58 | * check arg is matches this option.
59 | * @param arg
60 | * @returns {boolean}
61 | */
62 | is(arg: string) {
63 | return arg === this.short || arg === this.long;
64 | }
65 |
66 | /**
67 | * parse args.
68 | * build to opts.
69 | *
70 | * e.g. #1
71 | * instance member: required=true, optional=false, short=-f, long=--foo
72 | * method arguments: opts={}, args=["--foo", "foo!", "bar!"].
73 | * opts are modified to { foo: ["foo!"] } and return ["bar!"].
74 | *
75 | * e.g. #2
76 | * instance member: required=true, optional=false, short=-f, long=--foo
77 | * method arguments: opts={ foo: ["foo?"] }, args=["--foo", "foo!", "bar!"].
78 | * opts are modified to { foo: ["foo?", "foo!"] } and return ["bar!"].
79 | *
80 | * e.g. #3
81 | * instance member: required=false, optional=false, short=-f, long=--foo
82 | * method arguments: opts={}, args=["-f", "foo!", "bar!"].
83 | * opts are modified to { foo: true } and return ["foo!", "bar!"].
84 | *
85 | * @param opts
86 | * @param args
87 | * @returns {string[]}
88 | */
89 | parse(opts: any, args: string[]): string[] {
90 | if (!this.is(args[0])) {
91 | throw new CommandpostError({
92 | message: `${args[0]} is not match ${this.short} or ${this.long}`,
93 | reason: ErrorReason.OptionNameMismatch,
94 | parts: [args[0]],
95 | params: {
96 | option: this,
97 | opts,
98 | args,
99 | },
100 | });
101 | }
102 | let next = args[1];
103 | let propertyName = utils.kebabToLowerCamelCase(this.name());
104 | if (this.required) {
105 | if (next == null) {
106 | throw new CommandpostError({
107 | message: `${args[0]} is required parameter value`,
108 | reason: ErrorReason.OptionValueRequired,
109 | parts: [args[0]],
110 | params: {
111 | option: this,
112 | opts,
113 | args,
114 | },
115 | });
116 | }
117 | opts[propertyName] = opts[propertyName] || [];
118 | opts[propertyName].push(next);
119 | return args.slice(2);
120 | } else if (this.optional) {
121 | if (next != null && !/^-/.test(next)) {
122 | opts[propertyName] = opts[propertyName] || [];
123 | opts[propertyName].push(next);
124 | return args.slice(2);
125 | } else {
126 | opts[propertyName] = opts[propertyName] || [];
127 | opts[propertyName].push(this.defaultValue);
128 | return args.slice(1);
129 | }
130 | } else {
131 | opts[propertyName] = this.no ? true : false;
132 | return args.slice(1);
133 | }
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * calc max length of strs.
3 | * @param strs
4 | * @returns {number}
5 | * @private
6 | */
7 | export function maxLength(strs: string[]): number {
8 | return strs.map(str => str.length).reduce((p, c) => Math.max(p, c), 0);
9 | }
10 |
11 | /**
12 | * padding string with pad.
13 | * @param str
14 | * @param length
15 | * @param pad
16 | * @returns {string}
17 | * @private
18 | */
19 | export function pad(str: string, length: number, pad = " "): string {
20 | if (length <= str.length) {
21 | return str;
22 | }
23 | if (pad === "") {
24 | throw new Error("pad can't to be empty string");
25 | }
26 | while (str.length < length) {
27 | str += pad;
28 | }
29 | return str;
30 | }
31 |
32 | /**
33 | * convert foo-bar to fooBar.
34 | * @param str
35 | * @returns {string}
36 | * @private
37 | */
38 | export function kebabToLowerCamelCase(str: string): string {
39 | let nextCamel = false;
40 | return str
41 | .split("")
42 | .map(char => {
43 | if (char === "-") {
44 | nextCamel = true;
45 | return "";
46 | } else if (nextCamel) {
47 | nextCamel = false;
48 | return char.toUpperCase();
49 | } else {
50 | return char;
51 | }
52 | })
53 | .join("");
54 | }
55 |
--------------------------------------------------------------------------------
/test/argumentSpec.ts:
--------------------------------------------------------------------------------
1 | import assert = require("assert");
2 |
3 | import Argument from "../src/argument";
4 | import { CommandpostError } from "../src/error";
5 |
6 | describe("Argument", () => {
7 | describe("constructor", () => {
8 | it("parse required argument", () => {
9 | let arg = new Argument("");
10 |
11 | assert(arg.name === "foobar");
12 | assert(arg.required === true);
13 | assert(arg.variadic === false);
14 | });
15 | it("parse optional argument", () => {
16 | let arg = new Argument("[foobar]");
17 |
18 | assert(arg.name === "foobar");
19 | assert(arg.required === false);
20 | assert(arg.variadic === false);
21 | });
22 | it("parse required variadic argument", () => {
23 | let arg = new Argument("");
24 |
25 | assert(arg.name === "foobar");
26 | assert(arg.required === true);
27 | assert(arg.variadic === true);
28 | });
29 | it("parse optional variadic argument", () => {
30 | let arg = new Argument("[foobar...]");
31 |
32 | assert(arg.name === "foobar");
33 | assert(arg.required === false);
34 | assert(arg.variadic === true);
35 | });
36 | });
37 | describe("#parse", () => {
38 | it("parse required argument", () => {
39 | let arg = new Argument("");
40 |
41 | let parsed: any = {};
42 | arg.parse(parsed, ["abc"]);
43 |
44 | assert(parsed.foobar === "abc");
45 | });
46 | it("raise error if can't get required argument", () => {
47 | let arg = new Argument("");
48 |
49 | let parsed: any = {};
50 | let caught = false;
51 | try {
52 | arg.parse(parsed, []);
53 | } catch (e) {
54 | caught = true;
55 | assert(e instanceof Error);
56 | assert(e instanceof CommandpostError);
57 | let err = e as CommandpostError;
58 | assert(err.params.message === "foobar is required");
59 | }
60 |
61 | assert(caught);
62 | assert(parsed.foobar == null);
63 | });
64 | it("parse optional argument", () => {
65 | let arg = new Argument("[foobar]");
66 |
67 | let parsed: any = {};
68 | arg.parse(parsed, ["abc"]);
69 |
70 | assert(parsed.foobar === "abc");
71 | });
72 | it("not raise error when can't get optional argument", () => {
73 | let arg = new Argument("[foobar]");
74 |
75 | let parsed: any = {};
76 | arg.parse(parsed, []);
77 |
78 | assert(parsed.foobar == null);
79 | });
80 | it("parse variadic required argument", () => {
81 | let arg = new Argument("");
82 |
83 | let parsed: any = {};
84 | arg.parse(parsed, ["abc", "def"]);
85 |
86 | assert(parsed.foobar.length === 2);
87 | assert(parsed.foobar[0] === "abc");
88 | assert(parsed.foobar[1] === "def");
89 | });
90 | it("raise error if no argument passed to variadic required argument", () => {
91 | let arg = new Argument("");
92 |
93 | let parsed: any = {};
94 | let caught = false;
95 | try {
96 | arg.parse(parsed, []);
97 | } catch (e) {
98 | caught = true;
99 | }
100 |
101 | assert(caught);
102 | assert(parsed.foobar == null);
103 | });
104 | it("parse variadic optional argument", () => {
105 | let arg = new Argument("[foobar...]");
106 |
107 | let parsed: any = {};
108 | arg.parse(parsed, ["abc", "def"]);
109 |
110 | assert(parsed.foobar.length === 2);
111 | assert(parsed.foobar[0] === "abc");
112 | assert(parsed.foobar[1] === "def");
113 | });
114 | it("not raise error when can't get optional variadic argument", () => {
115 | let arg = new Argument("[foobar...]");
116 |
117 | let parsed: any = {};
118 | arg.parse(parsed, []);
119 |
120 | assert(parsed.foobar instanceof Array);
121 | assert(parsed.foobar.length === 0);
122 | });
123 | });
124 | });
125 |
--------------------------------------------------------------------------------
/test/commandSpec.ts:
--------------------------------------------------------------------------------
1 | import assert = require("assert");
2 |
3 | import Command from "../src/command";
4 |
5 | describe("Command", () => {
6 | describe("#subCommand", () => {
7 | it("create sub command", () => {
8 | let cmd = new Command("test");
9 | let remote = cmd.subCommand("remote");
10 |
11 | assert(cmd.name === "test");
12 | assert(cmd.parent == null);
13 | assert(cmd.subCommands.length === 1);
14 | assert(cmd.subCommands[0] === remote);
15 |
16 | assert(remote.name === "remote");
17 | assert(remote.parent === cmd);
18 | assert(remote.subCommands.length === 0);
19 | });
20 | });
21 | describe("#allowUnknownOption", () => {
22 | it("not allowed unknown option default", () => {
23 | let cmd = new Command("test");
24 | return cmd
25 | .parse(["--unknown"])
26 | .then(() => {
27 | throw new Error("expected error is not raised");
28 | }, () => {
29 | return true;
30 | });
31 | });
32 | it("allowed unknown option if allowUnknownOption() called", () => {
33 | let cmd = new Command("test");
34 | return cmd
35 | .allowUnknownOption()
36 | .action(() => {
37 | false;
38 | })
39 | .parse(["--unknown"]);
40 | });
41 | });
42 | describe("#parse", () => {
43 | it("parse args with single value", () => {
44 | let cmd = new Command("test");
45 | cmd.option("-r, --replace");
46 |
47 | let remote = cmd.subCommand<{ config: string[]; }, {}>("remote");
48 | remote.option("-c, --config ");
49 | remote.action(opts => {
50 | assert(opts.config.length === 1);
51 | assert(opts.config[0] === "hoge.json");
52 | });
53 |
54 | return cmd.parse(["-r", "remote", "-c", "hoge.json", "piyo.txt"]);
55 | });
56 | it("parse args with multiple value", () => {
57 | let cmd = new Command("test");
58 | cmd.option("-r, --replace");
59 |
60 | let remote = cmd.subCommand<{ config: string[]; }, {}>("remote");
61 | remote.option("-c, --config ");
62 | remote.action(opts => {
63 | assert(opts.config.length === 3);
64 | assert(opts.config[0] === "hoge.json");
65 | assert(opts.config[1] === "fuga.json");
66 | assert(opts.config[2] === "piyo.json");
67 | });
68 |
69 | return cmd.parse(["-r", "remote", "-c", "hoge.json", "-c", "fuga.json", "--config=piyo.json", "foo.txt"]);
70 | });
71 | });
72 | describe("#_parseRawArgs", () => {
73 | it("parse args without sub command", () => {
74 | let cmd = new Command("test");
75 | cmd.option("-r, --replace");
76 | cmd.option("-c");
77 |
78 | let rest = cmd._parseRawArgs(["-r", "remote", "-c", "hoge.json", "piyo.txt"]);
79 |
80 | assert(cmd._args!.length === 5);
81 | assert(cmd._args![0] === "-r");
82 |
83 | assert(rest.length === 0);
84 | });
85 | it("parse args with sub command", () => {
86 | let cmd = new Command("test");
87 | cmd.option("-r, --replace");
88 |
89 | let remote = cmd.subCommand("remote");
90 | remote.option("-c, --config ");
91 |
92 | let rest = cmd._parseRawArgs(["-r", "remote", "-c", "hoge.json", "piyo.txt"]);
93 |
94 | assert(cmd._args!.length === 1);
95 | assert(cmd._args![0] === "-r");
96 |
97 | assert(rest.length === 4);
98 | assert(rest[0] === "remote");
99 | });
100 | it("parse args with normalized", () => {
101 | let cmd = new Command("test");
102 | cmd.option("-a");
103 | cmd.option("-b");
104 | cmd.option("-c");
105 |
106 | cmd._parseRawArgs(["-abc"]);
107 |
108 | assert(cmd._args!.length === 3);
109 | assert(cmd._args![0] === "-a");
110 | assert(cmd._args![1] === "-b");
111 | assert(cmd._args![2] === "-c");
112 | });
113 | it("parse args with --", () => {
114 | let cmd = new Command("test");
115 | cmd.option("-r, --replace [file]");
116 |
117 | cmd._parseRawArgs(["-r", "hoge.json", "fuga.json", "-r", "--", "piyo.json"]);
118 |
119 | assert(cmd._args!.length === 6);
120 | assert(cmd._args![0] === "-r");
121 | assert(cmd._args![1] === "hoge.json");
122 | assert(cmd._args![2] === "fuga.json");
123 | assert(cmd._args![3] === "-r");
124 | assert(cmd._args![4] === "--");
125 | assert(cmd._args![5] === "piyo.json");
126 |
127 | assert(cmd._rest.length === 2);
128 | assert(cmd._rest[0] === "fuga.json");
129 | assert(cmd._rest[1] === "piyo.json");
130 | });
131 | });
132 | describe("#_parseOptions", () => {
133 | it("parse opts", () => {
134 | let cmd = new Command("test");
135 | cmd.option("-a, --alpha-value", "", false);
136 | cmd.option("-b, --beta-value", "", false);
137 |
138 | let rest = cmd._parseOptions(["-a"]);
139 |
140 | assert((cmd.parsedOpts as any)["alphaValue"] === true);
141 | assert((cmd.parsedOpts as any)["betaValue"] === false);
142 | assert(rest.length === 0);
143 | });
144 | });
145 | describe("#helpText", () => {
146 | it("construct humanreadable text", () => {
147 | let cmd = new Command("test");
148 | cmd.description("this is command description");
149 | cmd.option("-r, --replace [file]");
150 |
151 | let text = cmd.helpText().trim();
152 | let expect = `
153 | this is command description
154 |
155 | Usage: test [options]
156 |
157 | Options:
158 |
159 | -r, --replace [file]
160 | `.trim();
161 | assert(text === expect);
162 | });
163 | });
164 | });
165 |
--------------------------------------------------------------------------------
/test/optionSpec.ts:
--------------------------------------------------------------------------------
1 | import assert = require("assert");
2 |
3 | import Option from "../src/option";
4 |
5 | describe("Option", () => {
6 | describe("constructor", () => {
7 | it("parse flags, pattern A", () => {
8 | let opt = new Option("-C, --chdir ");
9 |
10 | assert(opt.short === "-C");
11 | assert(opt.long === "--chdir");
12 | assert(opt.required === true);
13 | assert(opt.optional === false);
14 | assert(opt.no === true);
15 | assert(opt.name() === "chdir");
16 | assert(opt.is("-C") === true);
17 | assert(opt.is("--chdir") === true);
18 | });
19 | it("parse flags, pattern B", () => {
20 | let opt = new Option("-c, --cheese [type]");
21 |
22 | assert(opt.short === "-c");
23 | assert(opt.long === "--cheese");
24 | assert(opt.required === false);
25 | assert(opt.optional === true);
26 | assert(opt.no === true);
27 | assert(opt.name() === "cheese");
28 | assert(opt.is("-c") === true);
29 | assert(opt.is("--cheese") === true);
30 | });
31 | it("parse flags, pattern C", () => {
32 | let opt = new Option("-T, --no-tests");
33 |
34 | assert(opt.short === "-T");
35 | assert(opt.long === "--no-tests");
36 | assert(opt.required === false);
37 | assert(opt.optional === false);
38 | assert(opt.no === false);
39 | assert(opt.name() === "tests");
40 | assert(opt.is("-T") === true);
41 | assert(opt.is("--no-tests") === true);
42 | });
43 | });
44 | describe("#name", () => {
45 | it("return option name", () => {
46 | let opt = new Option("-C, --chdir ");
47 |
48 | assert(opt.name() === "chdir");
49 | });
50 | it("return option name without --long", () => {
51 | let opt = new Option("-C ");
52 |
53 | assert(opt.name() === "-C");
54 | });
55 | });
56 | describe("#is", () => {
57 | it("detect with --long syntax", () => {
58 | let opt = new Option("-C, --chdir ");
59 |
60 | assert(opt.is("--chdir"));
61 | });
62 | it("detect with -s syntax", () => {
63 | let opt = new Option("-C, --chdir ");
64 |
65 | assert(opt.is("-C"));
66 | });
67 | });
68 | describe("#parse", () => {
69 | it("parse in require", () => {
70 | let opt = new Option("-C, --chdir ");
71 |
72 | let opts: any = {};
73 | let rest = opt.parse(opts, ["-C", "value", "foo"]);
74 | assert(opts.chdir.length === 1);
75 | assert(opts.chdir[0] === "value");
76 | assert(rest.length === 1);
77 | assert(rest[0] === "foo");
78 | });
79 | it("parse in optional with value", () => {
80 | let opt = new Option("-C, --chdir [path]");
81 |
82 | let opts: any = {};
83 | let rest = opt.parse(opts, ["-C", "value", "foo"]);
84 | assert(opts.chdir.length === 1);
85 | assert(opts.chdir[0] === "value");
86 | assert(rest.length === 1);
87 | assert(rest[0] === "foo");
88 | });
89 | it("parse in optional without value", () => {
90 | let opt = new Option("-C, --chdir [path]");
91 |
92 | let opts: any = {};
93 | let rest = opt.parse(opts, ["-C"]);
94 | assert(opts.chdir.length === 1);
95 | assert(opts.chdir[0] === ""); // TODO is this right?
96 | assert(rest.length === 0);
97 | });
98 | it("property name convert chain case to lower camel case", () => {
99 | let opt = new Option("--dry-run");
100 |
101 | let opts: any = {};
102 | opt.parse(opts, ["--dry-run"]);
103 | assert(opts.dryRun);
104 | });
105 | it("property name convert chain case to lower camel case", () => {
106 | let opt = new Option("--no-exec");
107 |
108 | let opts: any = {};
109 | opt.parse(opts, ["--no-exec"]);
110 | assert(opts.exec === false);
111 | });
112 | });
113 | });
114 |
--------------------------------------------------------------------------------
/test/utilsSpec.ts:
--------------------------------------------------------------------------------
1 | import assert = require("assert");
2 |
3 | import utils = require("../src/utils");
4 |
5 | describe("utils", () => {
6 | describe("pad", () => {
7 | it("not padding if satisfied", () => {
8 | assert(utils.pad("foobar", 5) === "foobar");
9 | });
10 | it("padding shortage char", () => {
11 | assert(utils.pad("foobar", 10) === "foobar ");
12 | });
13 | it("padding shortage char with specific har", () => {
14 | assert(utils.pad("foobar", 10, "+") === "foobar++++");
15 | });
16 | });
17 | describe("kebabToLowerCamelCase", () => {
18 | it("convert kebab case to lower camel case", () => {
19 | assert(utils.kebabToLowerCamelCase("foo-bar") === "fooBar");
20 | });
21 | });
22 | });
23 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Basic Options */
4 | "target": "es2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
5 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
6 | "lib": [
7 | "es2015"
8 | ], /* Specify library files to be included in the compilation. */
9 | // "allowJs": true, /* Allow javascript files to be compiled. */
10 | // "checkJs": true, /* Report errors in .js files. */
11 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
12 | "declaration": true, /* Generates corresponding '.d.ts' file. */
13 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
14 | "sourceMap": true, /* Generates corresponding '.map' file. */
15 | // "outFile": "./", /* Concatenate and emit output to single file. */
16 | // "outDir": "./", /* Redirect output structure to the directory. */
17 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
18 | // "composite": true, /* Enable project compilation */
19 | // "removeComments": true, /* Do not emit comments to output. */
20 | "noEmit": true, /* Do not emit outputs. */
21 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
22 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
23 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
24 |
25 | /* Strict Type-Checking Options */
26 | "strict": true, /* Enable all strict type-checking options. */
27 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
28 | // "strictNullChecks": true, /* Enable strict null checks. */
29 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */
30 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
31 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
32 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
33 |
34 | /* Additional Checks */
35 | "noUnusedLocals": true, /* Report errors on unused locals. */
36 | "noUnusedParameters": true, /* Report errors on unused parameters. */
37 | "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
38 | "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
39 |
40 | /* Module Resolution Options */
41 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
42 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
43 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
44 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
45 | // "typeRoots": [], /* List of folders to include type definitions from. */
46 | "types": [
47 | "node",
48 | "mocha"
49 | ], /* Type declaration files to be included in compilation. */
50 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
51 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
52 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
53 |
54 | /* Source Map Options */
55 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
56 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
57 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
58 | "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
59 |
60 | /* Experimental Options */
61 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
62 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
63 |
64 | "stripInternal": true
65 | },
66 | "include": [
67 | "src/**/*.ts",
68 | "test/**/*.ts"
69 | ]
70 | }
71 |
--------------------------------------------------------------------------------
/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig",
3 | "compilerOptions": {
4 | "outDir": "./lib", /* Redirect output structure to the directory. */
5 | "noEmit": false, /* Emit outputs. */
6 | },
7 | "include": [
8 | "src/**/*.ts",
9 | ]
10 | }
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "rules": {
3 | "align": [
4 | false,
5 | "parameters",
6 | "arguments",
7 | "statements"
8 | ],
9 | "ban": false,
10 | "class-name": true,
11 | "comment-format": [
12 | true,
13 | "check-space"
14 | ],
15 | "curly": true,
16 | "eofline": true,
17 | "forin": false,
18 | "indent": [
19 | false,
20 | "spaces"
21 | ],
22 | "interface-name": [
23 | true,
24 | "never-prefix"
25 | ],
26 | "jsdoc-format": false,
27 | "label-position": true,
28 | "max-line-length": [
29 | false,
30 | 140
31 | ],
32 | "member-access": false,
33 | "member-ordering": [
34 | false,
35 | "public-before-private",
36 | "static-before-instance"
37 | ],
38 | "new-parens": true,
39 | "no-angle-bracket-type-assertion": false,
40 | "no-any": false,
41 | "no-arg": true,
42 | "no-bitwise": true,
43 | "no-conditional-assignment": true,
44 | "no-consecutive-blank-lines": false,
45 | "no-console": [
46 | true,
47 | "debug",
48 | "info",
49 | "time",
50 | "timeEnd",
51 | "trace"
52 | ],
53 | "no-construct": true,
54 | "no-debugger": true,
55 | "no-duplicate-variable": true,
56 | "no-empty": false,
57 | "no-eval": true,
58 | "no-inferrable-types": false,
59 | "no-internal-module": true,
60 | "no-invalid-this": false,
61 | "no-mergeable-namespace": false,
62 | "no-namespace": [
63 | true,
64 | "allow-declarations"
65 | ],
66 | "no-null-keyword": false,
67 | "no-reference": true,
68 | "no-require-imports": false,
69 | "no-shadowed-variable": false,
70 | "no-string-literal": false,
71 | "no-switch-case-fall-through": false,
72 | "no-trailing-whitespace": false,
73 | "no-unused-expression": false,
74 | "no-use-before-declare": true,
75 | "no-var-keyword": true,
76 | "no-var-requires": false,
77 | "object-literal-sort-keys": false,
78 | "one-line": [
79 | true,
80 | "check-open-brace",
81 | "check-catch",
82 | "check-else",
83 | "check-finally",
84 | "check-whitespace"
85 | ],
86 | "quotemark": [
87 | true,
88 | "double",
89 | "avoid-escape"
90 | ],
91 | "radix": true,
92 | "semicolon": [true, "always"],
93 | "switch-default": true,
94 | "trailing-comma": [
95 | true,
96 | {
97 | "multiline": "always",
98 | "singleline": "never"
99 | }
100 | ],
101 | "triple-equals": [
102 | true,
103 | "allow-null-check"
104 | ],
105 | "typedef": [
106 | false,
107 | "call-signature",
108 | "parameter",
109 | "property-declaration",
110 | "variable-declaration",
111 | "member-variable-declaration"
112 | ],
113 | "typedef-whitespace": [
114 | false,
115 | {
116 | "call-signature": "nospace",
117 | "index-signature": "nospace",
118 | "parameter": "nospace",
119 | "property-declaration": "nospace",
120 | "variable-declaration": "nospace"
121 | },
122 | {
123 | "call-signature": "space",
124 | "index-signature": "space",
125 | "parameter": "space",
126 | "property-declaration": "space",
127 | "variable-declaration": "space"
128 | }
129 | ],
130 | "use-isnan": true,
131 | "variable-name": [
132 | true,
133 | "check-format",
134 | "allow-leading-underscore",
135 | "ban-keywords"
136 | ],
137 | "whitespace": [
138 | true,
139 | "check-branch",
140 | "check-decl",
141 | "check-operator",
142 | "check-separator",
143 | "check-type"
144 | ]
145 | }
146 | }
147 |
--------------------------------------------------------------------------------