├── .circleci └── config.yml ├── .editorconfig ├── .gitattributes ├── .github ├── .editorconfig └── main.workflow ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── appveyor.yml ├── index.js ├── package-lock.json ├── package.json ├── screenshot.png └── test.js /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | docker: 5 | - image: node:alpine 6 | steps: 7 | - checkout 8 | - run: npm install-ci-test 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_style = tab 7 | tab_width = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.{md,yml}] 12 | indent_style = space 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.github/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.workflow] 2 | indent_style = space 3 | -------------------------------------------------------------------------------- /.github/main.workflow: -------------------------------------------------------------------------------- 1 | workflow "Test" { 2 | on = "push" 3 | resolves = ["Test (without Git)", "Test (with Git)"] 4 | } 5 | 6 | action "Install" { 7 | uses = "docker://node:alpine" 8 | runs = "npm" 9 | args = "ci" 10 | } 11 | 12 | action "Test (without Git)" { 13 | uses = "docker://node:alpine" 14 | needs = ["Install"] 15 | runs = "npm" 16 | args = "test" 17 | secrets = ["CODECOV_TOKEN"] 18 | } 19 | 20 | action "Test (with Git)" { 21 | uses = "docker://node" 22 | needs = ["Install"] 23 | runs = "npm" 24 | args = "test" 25 | secrets = ["CODECOV_TOKEN"] 26 | } 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | coverage 2 | node_modules 3 | tmp 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | if: branch !~ ^v\d 2 | language: node_js 3 | node_js: node 4 | cache: npm 5 | jobs: 6 | include: 7 | - dist: bionic 8 | script: node . node . test.js 9 | - dist: xenial 10 | script: CI="" npx c8 node . node -p "'Test for non-CI environments'" && npx c8 report --reporter=text-lcov > coverage.lcov && bash <(curl -s https://codecov.io/bash) -X gcov -f coverage.lcov 11 | - os: windows 12 | script: npx c8 node . node -p "'Test for Windows'" && npx c8 report --reporter=text-lcov > coverage.lcov && bash <(curl -s https://codecov.io/bash) -X gcov -f coverage.lcov 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | ISC License (ISC) 2 | Copyright 2019 Shinnosuke Watanabe 3 | 4 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # coverage 2 | 3 | [![npm version](https://img.shields.io/npm/v/coverage.svg)](https://www.npmjs.com/package/coverage) 4 | [![Github Actions](https://action-badges.now.sh/shinnn/coverage)](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/results/shinnn/coverage) 5 | [![Build Status](https://travis-ci.com/shinnn/coverage.svg?branch=master)](https://travis-ci.com/shinnn/coverage) 6 | [![Build status](https://ci.appveyor.com/api/projects/status/x5huttqwjqfpl05q/branch/master?svg=true)](https://ci.appveyor.com/project/ShinnosukeWatanabe/coverage/branch/master) 7 | [![CircleCI](https://circleci.com/gh/shinnn/coverage/tree/master.svg?style=shield)](https://circleci.com/gh/shinnn/coverage/tree/master) 8 | [![codecov](https://codecov.io/gh/shinnn/coverage/branch/master/graph/badge.svg)](https://codecov.io/gh/shinnn/coverage) 9 | 10 | A command-line tool to collect and report code coverage of a JavaScript program 11 | 12 | ```console 13 | $ coverage test.js 14 | 15 | ✔ write a file 16 | ✔ create directories as needed 17 | ✔ validate arguments 18 | 19 | 3 of 3 passed. 20 | 21 | ----------|----------|----------|----------|----------|-------------------| 22 | File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s | 23 | ----------|----------|----------|----------|----------|-------------------| 24 | All files | 95.15 | 79.52 | 100 | 95.09 | | 25 | index.js | 90.6 | 75.38 | 100 | 90.52 |... 44,148,152,156 | 26 | lib.js | 100 | 94.44 | 100 | 100 | 107 | 27 | ----------|----------|----------|----------|----------|-------------------| 28 | ``` 29 | 30 | This is an opinionated wrapper of [c8](https://github.com/bcoe/c8), different in the following points: 31 | 32 | * Runs both [`html` and `text` reporter](https://github.com/istanbuljs/nyc#running-reports) by default 33 | * Automatically enables [ECMAScript module](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import) support for `.mjs` files 34 | * The first argument can be a JavaScript file path instead of a command 35 | * Built-in [Codecov](https://codecov.io) support 36 | 37 | ## Installation 38 | 39 | [Use](https://docs.npmjs.com/cli/install) [npm](https://docs.npmjs.com/about-npm/). 40 | 41 | ``` 42 | npm install coverage 43 | ``` 44 | 45 | Once this package is installed to the project directory, users can execute `coverage` command inside [npm scripts](https://docs.npmjs.com/misc/scripts#description). 46 | 47 | ## CLI 48 | 49 | ### `coverage [options] [args]` 50 | 51 | An example of the HTML report 52 | 53 | Execute the command, print code coverage to the stdout and write [HTML reports](https://istanbul.js.org/docs/advanced/alternative-reporters/#html) under the `./coverage` directory. 54 | 55 | `` can be either a JavaScript file path or a command. If a path is provided, the file is run with the `node` command. 56 | 57 | ```console 58 | $ coverage /path/to/entry-point.js # is the same as ↓ 59 | $ coverage node /path/to/entry-point.js 60 | ``` 61 | 62 | If the provided JavaScript path ends with `.mjs`, 63 | 64 | * [ECMAScript module mode](https://nodejs.org/api/esm.html) is automatically [enabled](https://nodejs.org/api/esm.html#esm_enabling). 65 | * [`--es-module-specifier-resolution`](https://nodejs.org/api/esm.html#esm_customizing_esm_specifier_resolution_algorithm) is automatically set to `node`. 66 | 67 | #### Reporters 68 | 69 | Users can override the default format of reports with `--reporter` option. 70 | 71 | ```console 72 | $ coverage example.js 73 | ------------|----------|----------|----------|----------|-------------------| 74 | File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s | 75 | ------------|----------|----------|----------|----------|-------------------| 76 | All files | 100 | 100 | 100 | 100 | | 77 | example.js | 100 | 100 | 100 | 100 | | 78 | ------------|----------|----------|----------|----------|-------------------| 79 | 80 | $ coverage --reporter=text-summary example.js 81 | 82 | =============================== Coverage summary =============================== 83 | Statements : 100% ( 1/1 ) 84 | Branches : 100% ( 1/1 ) 85 | Functions : 100% ( 0/0 ) 86 | Lines : 100% ( 1/1 ) 87 | ================================================================================ 88 | 89 | $ coverage --reporter=none example.js # No reports 90 | ``` 91 | 92 | #### Codecov integration 93 | 94 | When the execution exits with code `0` on a CI service or [GitHub Actions](https://github.com/features/actions), it automatically uploads the generated coverage to [Codecov](https://docs.codecov.io/docs). Whether `CODECOV_TOKEN` environment variable is required or not varies between [services](https://github.com/codecov/codecov-bash#ci-providers). 95 | 96 | ```console 97 | $ coverage test.js 98 | 99 | [... test results and coverage ...] 100 | 101 | ==> Travis CI detected. 102 | ==> Reading reports 103 | + /home/travis/build/shinnn/coverage/coverage/lcov.info bytes=1399 104 | ==> Gzipping contents 105 | ==> Uploading reports 106 | -> Uploading 107 | -> View reports at https://codecov.io/github/shinnn/coverage/commit/e4f5880b8ec5885e6a0b79030df5871e19d6de1d 108 | ``` 109 | 110 | `c8` command-line [options](https://github.com/bcoe/c8/blob/v3.4.0/lib/parse-args.js#L13-L74) are supported. Run `npx coverage --help` to show the detailed reference for them. 111 | 112 | ### `coverage report` 113 | 114 | Output a report in the format specified in `--reporter` option. 115 | 116 | This subcommand is only available after `coverage` has already been run. 117 | 118 | ## License 119 | 120 | [ISC License](./LICENSE) © 2019 Shinnosuke Watanabe 121 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | image: Visual Studio 2017 2 | platform: x64 3 | shallow_clone: true 4 | skip_tags: true 5 | install: 6 | - ps: Install-Product node '' x64 7 | - npm ci 8 | build: off 9 | test_script: node test.js 10 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | const {createWriteStream, promises: {mkdir}} = require('fs'); 5 | const {dirname, extname, join, resolve: resolvePath} = require('path'); 6 | const {once} = require('events'); 7 | const {promisify} = require('util'); 8 | const {spawn} = require('child_process'); 9 | 10 | const foregroundChild = require('foreground-child'); 11 | const normalizePackageData = require('normalize-package-data'); 12 | const slash = require('slash'); 13 | const which = require('which'); 14 | const yargsParser = require('yargs-parser'); 15 | 16 | const cwd = process.cwd(); 17 | const c8PackageJsonPath = require.resolve('c8/package.json'); 18 | const c8PackageData = require(c8PackageJsonPath); 19 | 20 | normalizePackageData(c8PackageData); 21 | 22 | const c8BinPath = join(dirname(c8PackageJsonPath), c8PackageData.bin.c8); 23 | const nodePath = process.execPath; 24 | const optionArgs = process.argv.slice(2); 25 | const {_: [command], reporter} = yargsParser(optionArgs); 26 | const promisifiedWhich = promisify(which); 27 | const timeout = 2 ** 32 / 2 - 1; 28 | const willUploadLcov = /^1|true$/ui.test(process.env.CI) || !!process.env.GITHUB_ACTION; 29 | const isTravisCi = process.env.TRAVIS === 'true'; 30 | // On Windows, write codecov-bash to a file instead of memory to avoid ENAMETOOLONG error 31 | const codecovBashPath = process.platform === 'win32' ? join(cwd, 'coverage', Math.random().toString()) : null; 32 | 33 | (async () => { 34 | if (command === undefined) { 35 | require(c8BinPath); 36 | return; 37 | } 38 | 39 | if (command === 'report') { 40 | foregroundChild(nodePath, [c8BinPath, ...optionArgs]); 41 | return; 42 | } 43 | 44 | const prepareArgs = (async () => { 45 | const ext = extname(command).slice(1).toLowerCase(); 46 | let isJavaScriptFile = false; 47 | 48 | if (ext === 'cjs' || ext === 'js' || ext === 'mjs') { 49 | isJavaScriptFile = true; 50 | } else { 51 | try { 52 | await promisifiedWhich(command); 53 | } catch { 54 | isJavaScriptFile = true; 55 | } 56 | } 57 | 58 | if (isJavaScriptFile) { 59 | let entryPath = resolvePath(cwd, command); 60 | 61 | try { 62 | entryPath = require.resolve(entryPath); 63 | } catch { 64 | console.error(`Both a command \`${command}\` and a Node.js entry point ${entryPath} don't exist.`); 65 | process.exit(127); 66 | } 67 | 68 | optionArgs.splice( 69 | optionArgs.indexOf(command), 70 | 1, 71 | nodePath, 72 | ...ext === 'mjs' ? [ 73 | '--experimental-modules', 74 | '--es-module-specifier-resolution=node', 75 | '--no-warnings' 76 | ] : [], 77 | entryPath 78 | ); 79 | } 80 | 81 | return [ 82 | nodePath, 83 | [ 84 | c8BinPath, 85 | ...require('test-exclude').defaultExclude.map(pattern => `--exclude="${ 86 | pattern 87 | // Remove this when https://github.com/istanbuljs/istanbuljs/pull/381 is merged 88 | .replace(/(?<=\.)(?=js$)/ui, '{,c,m}') 89 | // Remove this when https://github.com/istanbuljs/istanbuljs/pull/419 is merged 90 | .replace(/(?<=test)(?=\/)/ui, '{,s}') 91 | }"`), 92 | '--exclude="**/*.json"', 93 | ...reporter === undefined ? [ 94 | '--reporter=text', 95 | `--reporter=${willUploadLcov ? 'lcovonly' : 'html'}` 96 | ] : [], 97 | ...optionArgs 98 | ] 99 | ]; 100 | })(); 101 | 102 | if (!willUploadLcov) { 103 | foregroundChild(...await prepareArgs); 104 | return; 105 | } 106 | 107 | const [code, codecovBash] = await Promise.all([ 108 | (async () => (await once(spawn(...await prepareArgs, { 109 | cwd, 110 | stdio: 'inherit', 111 | timeout 112 | }), 'exit'))[0])(), 113 | (async () => { 114 | try { 115 | // The default shell of Travis CI Windows build is Git BASH 116 | if (!(process.platform === 'win32' && isTravisCi)) { 117 | await Promise.all([promisifiedWhich('bash'), promisifiedWhich('git')]); 118 | } 119 | } catch { 120 | await once(spawn('npm', [ 121 | 'install', 122 | '--no-package-lock', 123 | '--no-save', 124 | 'codecov@3' 125 | ], { 126 | cwd, 127 | shell: process.platform === 'win32', 128 | timeout 129 | }), 'exit'); 130 | 131 | return null; 132 | } 133 | 134 | const {connect} = require('http2'); 135 | const {pipeline, Writable} = require('stream'); 136 | 137 | const client = connect('https://codecov.io'); 138 | const request = client.request({':path': '/bash'}); 139 | let body = ''; 140 | 141 | request.setEncoding('utf8'); 142 | request.end(); 143 | 144 | if (codecovBashPath) { 145 | await mkdir(dirname(codecovBashPath), {recursive: true}); 146 | } 147 | 148 | await promisify(pipeline)([ 149 | request, 150 | codecovBashPath ? createWriteStream(codecovBashPath) : new Writable({ 151 | write(chunk, _, cb) { 152 | body += chunk; 153 | cb(); 154 | } 155 | }) 156 | ]); 157 | await promisify(client.close.bind(client))(); 158 | 159 | return body; 160 | })() 161 | ]); 162 | 163 | if (code !== 0) { 164 | process.exitCode = code; 165 | return; 166 | } 167 | 168 | if (isTravisCi) { 169 | console.log('travis_fold:start:codecov\nupload coverage to codecov.io'); 170 | } 171 | 172 | const reportArgs = codecovBash !== null ? [ 173 | 'bash', 174 | [ 175 | ...codecovBashPath ? [codecovBashPath] : ['-c', codecovBash, '--'], 176 | '-X', 177 | 'coveragepy', 178 | '-X', 179 | 'fix', 180 | '-X', 181 | 'gcov', 182 | '-X', 183 | 'gcovout', 184 | '-X', 185 | 'search', 186 | '-X', 187 | 'xcode', 188 | '-f', 189 | slash(join(cwd, 'coverage', 'lcov.info')) 190 | ] 191 | ] : [ 192 | 'npx', 193 | [ 194 | 'codecov', 195 | '--disable=gcov,search', 196 | `--file=${join(cwd, 'coverage', 'lcov.info')}` 197 | ] 198 | ]; 199 | 200 | if (process.env.GITHUB_ACTION) { 201 | const branch = (process.env.GITHUB_REF || '').replace(/^refs\/heads\//u, ''); 202 | 203 | if (codecovBash) { 204 | reportArgs[1].push( 205 | '-r', 206 | process.env.GITHUB_REPOSITORY, 207 | '-B', 208 | branch, 209 | '-C', 210 | process.env.GITHUB_SHA 211 | ); 212 | } else { 213 | reportArgs[1].push( 214 | '--disable=detect,gcov,search', 215 | `--slug=${process.env.GITHUB_REPOSITORY}`, 216 | `--branch=${branch}`, 217 | `--commit=${process.env.GITHUB_SHA}` 218 | ); 219 | } 220 | } 221 | 222 | foregroundChild(...reportArgs, ...isTravisCi ? [ 223 | done => { 224 | console.log('travis_fold:end:codecov'); 225 | done(); 226 | } 227 | ] : []); 228 | })(); 229 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coverage", 3 | "version": "0.4.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.0.0", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", 10 | "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/highlight": { 17 | "version": "7.0.0", 18 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", 19 | "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", 20 | "dev": true, 21 | "requires": { 22 | "chalk": "^2.0.0", 23 | "esutils": "^2.0.2", 24 | "js-tokens": "^4.0.0" 25 | } 26 | }, 27 | "@bcoe/v8-coverage": { 28 | "version": "0.2.1", 29 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.1.tgz", 30 | "integrity": "sha512-KioOCsSvSvXx6xUNLiJz+P+VMb7NRcePjoefOr74Y5P6lEKsiOn35eZyZzgpK4XCNJdXTDR7+zykj0lwxRvZ2g==" 31 | }, 32 | "@shinnn/eslint-config": { 33 | "version": "6.10.4", 34 | "resolved": "https://registry.npmjs.org/@shinnn/eslint-config/-/eslint-config-6.10.4.tgz", 35 | "integrity": "sha512-AA2YIFW76EKb1ifCgr2YJPTdj5nsLcRlXyA4Pvmvukpww15uV/gy9VLyljtf2fPDM9m+pOQD98oy8/8yDyEEbA==", 36 | "dev": true, 37 | "requires": { 38 | "eslint-plugin-html": "^5.0.5", 39 | "eslint-plugin-no-use-extend-native": "^0.4.0", 40 | "eslint-plugin-node": "^9.1.0", 41 | "eslint-plugin-promise": "^4.1.1", 42 | "is-resolvable": "^1.1.0", 43 | "lodash": "^4.17.11" 44 | } 45 | }, 46 | "@types/is-windows": { 47 | "version": "0.2.0", 48 | "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz", 49 | "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=" 50 | }, 51 | "acorn": { 52 | "version": "6.1.1", 53 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", 54 | "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", 55 | "dev": true 56 | }, 57 | "acorn-jsx": { 58 | "version": "5.0.1", 59 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", 60 | "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", 61 | "dev": true 62 | }, 63 | "ajv": { 64 | "version": "6.10.0", 65 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 66 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 67 | "dev": true, 68 | "requires": { 69 | "fast-deep-equal": "^2.0.1", 70 | "fast-json-stable-stringify": "^2.0.0", 71 | "json-schema-traverse": "^0.4.1", 72 | "uri-js": "^4.2.2" 73 | } 74 | }, 75 | "ansi-escapes": { 76 | "version": "3.2.0", 77 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 78 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 79 | "dev": true 80 | }, 81 | "ansi-regex": { 82 | "version": "4.1.0", 83 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 84 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" 85 | }, 86 | "ansi-styles": { 87 | "version": "3.2.1", 88 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 89 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 90 | "requires": { 91 | "color-convert": "^1.9.0" 92 | } 93 | }, 94 | "append-type": { 95 | "version": "1.0.2", 96 | "resolved": "https://registry.npmjs.org/append-type/-/append-type-1.0.2.tgz", 97 | "integrity": "sha512-hac740vT/SAbrFBLgLIWZqVT5PUAcGTWS5UkDDhr+OCizZSw90WKw6sWAEgGaYd2viIblggypMXwpjzHXOvAQg==", 98 | "dev": true 99 | }, 100 | "argparse": { 101 | "version": "1.0.10", 102 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 103 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 104 | "dev": true, 105 | "requires": { 106 | "sprintf-js": "~1.0.2" 107 | } 108 | }, 109 | "array-to-sentence": { 110 | "version": "1.1.0", 111 | "resolved": "https://registry.npmjs.org/array-to-sentence/-/array-to-sentence-1.1.0.tgz", 112 | "integrity": "sha1-yASVba+lMjJJWyBalFJ1OiWNOfw=", 113 | "dev": true 114 | }, 115 | "assert-valid-glob-opts": { 116 | "version": "1.0.0", 117 | "resolved": "https://registry.npmjs.org/assert-valid-glob-opts/-/assert-valid-glob-opts-1.0.0.tgz", 118 | "integrity": "sha512-/mttty5Xh7wE4o7ttKaUpBJl0l04xWe3y6muy1j27gyzSsnceK0AYU9owPtUoL9z8+9hnPxztmuhdFZ7jRoyWw==", 119 | "dev": true, 120 | "requires": { 121 | "glob-option-error": "^1.0.0", 122 | "validate-glob-opts": "^1.0.0" 123 | } 124 | }, 125 | "astral-regex": { 126 | "version": "1.0.0", 127 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 128 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 129 | "dev": true 130 | }, 131 | "balanced-match": { 132 | "version": "1.0.0", 133 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 134 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 135 | }, 136 | "brace-expansion": { 137 | "version": "1.1.11", 138 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 139 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 140 | "requires": { 141 | "balanced-match": "^1.0.0", 142 | "concat-map": "0.0.1" 143 | } 144 | }, 145 | "c8": { 146 | "version": "5.0.1", 147 | "resolved": "https://registry.npmjs.org/c8/-/c8-5.0.1.tgz", 148 | "integrity": "sha512-63V/XrzqX2wgByuJyafJYuaudvxxmGrm/acqRJpvbtKvRUj6h/85EFrVweQ14j1F7wRASp0W9zyZqj8fnWI+4Q==", 149 | "requires": { 150 | "@bcoe/v8-coverage": "^0.2.1", 151 | "find-up": "^3.0.0", 152 | "foreground-child": "^1.5.6", 153 | "furi": "^1.3.0", 154 | "istanbul-lib-coverage": "^2.0.1", 155 | "istanbul-lib-report": "^2.0.1", 156 | "istanbul-reports": "^2.2.4", 157 | "rimraf": "^2.6.2", 158 | "test-exclude": "^5.0.0", 159 | "v8-to-istanbul": "^3.1.3", 160 | "yargs": "^13.1.0", 161 | "yargs-parser": "^10.1.0" 162 | }, 163 | "dependencies": { 164 | "camelcase": { 165 | "version": "4.1.0", 166 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 167 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" 168 | }, 169 | "yargs-parser": { 170 | "version": "10.1.0", 171 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", 172 | "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", 173 | "requires": { 174 | "camelcase": "^4.1.0" 175 | } 176 | } 177 | } 178 | }, 179 | "callsites": { 180 | "version": "3.1.0", 181 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 182 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 183 | "dev": true 184 | }, 185 | "camelcase": { 186 | "version": "5.3.1", 187 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 188 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 189 | }, 190 | "chalk": { 191 | "version": "2.4.2", 192 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 193 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 194 | "dev": true, 195 | "requires": { 196 | "ansi-styles": "^3.2.1", 197 | "escape-string-regexp": "^1.0.5", 198 | "supports-color": "^5.3.0" 199 | }, 200 | "dependencies": { 201 | "supports-color": { 202 | "version": "5.5.0", 203 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 204 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 205 | "dev": true, 206 | "requires": { 207 | "has-flag": "^3.0.0" 208 | } 209 | } 210 | } 211 | }, 212 | "chardet": { 213 | "version": "0.7.0", 214 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 215 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 216 | "dev": true 217 | }, 218 | "cli-cursor": { 219 | "version": "2.1.0", 220 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 221 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 222 | "dev": true, 223 | "requires": { 224 | "restore-cursor": "^2.0.0" 225 | } 226 | }, 227 | "cli-width": { 228 | "version": "2.2.0", 229 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 230 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 231 | "dev": true 232 | }, 233 | "cliui": { 234 | "version": "5.0.0", 235 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 236 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 237 | "requires": { 238 | "string-width": "^3.1.0", 239 | "strip-ansi": "^5.2.0", 240 | "wrap-ansi": "^5.1.0" 241 | } 242 | }, 243 | "color-convert": { 244 | "version": "1.9.3", 245 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 246 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 247 | "requires": { 248 | "color-name": "1.1.3" 249 | } 250 | }, 251 | "color-name": { 252 | "version": "1.1.3", 253 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 254 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 255 | }, 256 | "commander": { 257 | "version": "2.20.0", 258 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", 259 | "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", 260 | "optional": true 261 | }, 262 | "concat-map": { 263 | "version": "0.0.1", 264 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 265 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 266 | }, 267 | "convert-source-map": { 268 | "version": "1.6.0", 269 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", 270 | "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", 271 | "requires": { 272 | "safe-buffer": "~5.1.1" 273 | } 274 | }, 275 | "cross-spawn": { 276 | "version": "4.0.2", 277 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", 278 | "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", 279 | "requires": { 280 | "lru-cache": "^4.0.1", 281 | "which": "^1.2.9" 282 | } 283 | }, 284 | "debug": { 285 | "version": "4.1.1", 286 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 287 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 288 | "dev": true, 289 | "requires": { 290 | "ms": "^2.1.1" 291 | } 292 | }, 293 | "decamelize": { 294 | "version": "1.2.0", 295 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 296 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 297 | }, 298 | "deep-equal": { 299 | "version": "1.0.1", 300 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", 301 | "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", 302 | "dev": true 303 | }, 304 | "deep-is": { 305 | "version": "0.1.3", 306 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 307 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 308 | "dev": true 309 | }, 310 | "define-properties": { 311 | "version": "1.1.3", 312 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 313 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 314 | "dev": true, 315 | "requires": { 316 | "object-keys": "^1.0.12" 317 | } 318 | }, 319 | "defined": { 320 | "version": "1.0.0", 321 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 322 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 323 | "dev": true 324 | }, 325 | "doctrine": { 326 | "version": "3.0.0", 327 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 328 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 329 | "dev": true, 330 | "requires": { 331 | "esutils": "^2.0.2" 332 | } 333 | }, 334 | "dom-serializer": { 335 | "version": "0.1.1", 336 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", 337 | "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", 338 | "dev": true, 339 | "requires": { 340 | "domelementtype": "^1.3.0", 341 | "entities": "^1.1.1" 342 | } 343 | }, 344 | "domelementtype": { 345 | "version": "1.3.1", 346 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 347 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 348 | "dev": true 349 | }, 350 | "domhandler": { 351 | "version": "2.4.2", 352 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 353 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 354 | "dev": true, 355 | "requires": { 356 | "domelementtype": "1" 357 | } 358 | }, 359 | "domutils": { 360 | "version": "1.7.0", 361 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", 362 | "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", 363 | "dev": true, 364 | "requires": { 365 | "dom-serializer": "0", 366 | "domelementtype": "1" 367 | } 368 | }, 369 | "emoji-regex": { 370 | "version": "7.0.3", 371 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 372 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" 373 | }, 374 | "end-of-stream": { 375 | "version": "1.4.1", 376 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 377 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 378 | "requires": { 379 | "once": "^1.4.0" 380 | } 381 | }, 382 | "entities": { 383 | "version": "1.1.2", 384 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 385 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", 386 | "dev": true 387 | }, 388 | "error-ex": { 389 | "version": "1.3.2", 390 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 391 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 392 | "requires": { 393 | "is-arrayish": "^0.2.1" 394 | } 395 | }, 396 | "es-abstract": { 397 | "version": "1.13.0", 398 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", 399 | "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", 400 | "dev": true, 401 | "requires": { 402 | "es-to-primitive": "^1.2.0", 403 | "function-bind": "^1.1.1", 404 | "has": "^1.0.3", 405 | "is-callable": "^1.1.4", 406 | "is-regex": "^1.0.4", 407 | "object-keys": "^1.0.12" 408 | } 409 | }, 410 | "es-to-primitive": { 411 | "version": "1.2.0", 412 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", 413 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", 414 | "dev": true, 415 | "requires": { 416 | "is-callable": "^1.1.4", 417 | "is-date-object": "^1.0.1", 418 | "is-symbol": "^1.0.2" 419 | } 420 | }, 421 | "escape-string-regexp": { 422 | "version": "1.0.5", 423 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 424 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 425 | "dev": true 426 | }, 427 | "eslint": { 428 | "version": "5.16.0", 429 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", 430 | "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", 431 | "dev": true, 432 | "requires": { 433 | "@babel/code-frame": "^7.0.0", 434 | "ajv": "^6.9.1", 435 | "chalk": "^2.1.0", 436 | "cross-spawn": "^6.0.5", 437 | "debug": "^4.0.1", 438 | "doctrine": "^3.0.0", 439 | "eslint-scope": "^4.0.3", 440 | "eslint-utils": "^1.3.1", 441 | "eslint-visitor-keys": "^1.0.0", 442 | "espree": "^5.0.1", 443 | "esquery": "^1.0.1", 444 | "esutils": "^2.0.2", 445 | "file-entry-cache": "^5.0.1", 446 | "functional-red-black-tree": "^1.0.1", 447 | "glob": "^7.1.2", 448 | "globals": "^11.7.0", 449 | "ignore": "^4.0.6", 450 | "import-fresh": "^3.0.0", 451 | "imurmurhash": "^0.1.4", 452 | "inquirer": "^6.2.2", 453 | "js-yaml": "^3.13.0", 454 | "json-stable-stringify-without-jsonify": "^1.0.1", 455 | "levn": "^0.3.0", 456 | "lodash": "^4.17.11", 457 | "minimatch": "^3.0.4", 458 | "mkdirp": "^0.5.1", 459 | "natural-compare": "^1.4.0", 460 | "optionator": "^0.8.2", 461 | "path-is-inside": "^1.0.2", 462 | "progress": "^2.0.0", 463 | "regexpp": "^2.0.1", 464 | "semver": "^5.5.1", 465 | "strip-ansi": "^4.0.0", 466 | "strip-json-comments": "^2.0.1", 467 | "table": "^5.2.3", 468 | "text-table": "^0.2.0" 469 | }, 470 | "dependencies": { 471 | "ansi-regex": { 472 | "version": "3.0.0", 473 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 474 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 475 | "dev": true 476 | }, 477 | "cross-spawn": { 478 | "version": "6.0.5", 479 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 480 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 481 | "dev": true, 482 | "requires": { 483 | "nice-try": "^1.0.4", 484 | "path-key": "^2.0.1", 485 | "semver": "^5.5.0", 486 | "shebang-command": "^1.2.0", 487 | "which": "^1.2.9" 488 | } 489 | }, 490 | "ignore": { 491 | "version": "4.0.6", 492 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 493 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 494 | "dev": true 495 | }, 496 | "strip-ansi": { 497 | "version": "4.0.0", 498 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 499 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 500 | "dev": true, 501 | "requires": { 502 | "ansi-regex": "^3.0.0" 503 | } 504 | } 505 | } 506 | }, 507 | "eslint-plugin-es": { 508 | "version": "1.4.0", 509 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", 510 | "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", 511 | "dev": true, 512 | "requires": { 513 | "eslint-utils": "^1.3.0", 514 | "regexpp": "^2.0.1" 515 | } 516 | }, 517 | "eslint-plugin-html": { 518 | "version": "5.0.5", 519 | "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-5.0.5.tgz", 520 | "integrity": "sha512-v/33i3OD0fuXcRXexVyXXBOe4mLBLBQoF1UO1Uy9D+XLq4MC8K45GcQKfqjC/FnHAHp3pYUjpHHktYNCtShGmg==", 521 | "dev": true, 522 | "requires": { 523 | "htmlparser2": "^3.10.0" 524 | } 525 | }, 526 | "eslint-plugin-no-use-extend-native": { 527 | "version": "0.4.0", 528 | "resolved": "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.4.0.tgz", 529 | "integrity": "sha512-9W2747CwC7aTJknLKY6ftdzj3AZz8DSaa64zONOMIemxH7YRr0+hqrvsNtHK/v9DusPuMxM9y9hBnfHwzKFmww==", 530 | "dev": true, 531 | "requires": { 532 | "is-get-set-prop": "^1.0.0", 533 | "is-js-type": "^2.0.0", 534 | "is-obj-prop": "^1.0.0", 535 | "is-proto-prop": "^2.0.0" 536 | } 537 | }, 538 | "eslint-plugin-node": { 539 | "version": "9.1.0", 540 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz", 541 | "integrity": "sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw==", 542 | "dev": true, 543 | "requires": { 544 | "eslint-plugin-es": "^1.4.0", 545 | "eslint-utils": "^1.3.1", 546 | "ignore": "^5.1.1", 547 | "minimatch": "^3.0.4", 548 | "resolve": "^1.10.1", 549 | "semver": "^6.1.0" 550 | }, 551 | "dependencies": { 552 | "semver": { 553 | "version": "6.1.1", 554 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", 555 | "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", 556 | "dev": true 557 | } 558 | } 559 | }, 560 | "eslint-plugin-promise": { 561 | "version": "4.1.1", 562 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz", 563 | "integrity": "sha512-faAHw7uzlNPy7b45J1guyjazw28M+7gJokKUjC5JSFoYfUEyy6Gw/i7YQvmv2Yk00sUjWcmzXQLpU1Ki/C2IZQ==", 564 | "dev": true 565 | }, 566 | "eslint-scope": { 567 | "version": "4.0.3", 568 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", 569 | "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", 570 | "dev": true, 571 | "requires": { 572 | "esrecurse": "^4.1.0", 573 | "estraverse": "^4.1.1" 574 | } 575 | }, 576 | "eslint-utils": { 577 | "version": "1.3.1", 578 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", 579 | "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", 580 | "dev": true 581 | }, 582 | "eslint-visitor-keys": { 583 | "version": "1.0.0", 584 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 585 | "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", 586 | "dev": true 587 | }, 588 | "espree": { 589 | "version": "5.0.1", 590 | "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", 591 | "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", 592 | "dev": true, 593 | "requires": { 594 | "acorn": "^6.0.7", 595 | "acorn-jsx": "^5.0.0", 596 | "eslint-visitor-keys": "^1.0.0" 597 | } 598 | }, 599 | "esprima": { 600 | "version": "4.0.1", 601 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 602 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 603 | "dev": true 604 | }, 605 | "esquery": { 606 | "version": "1.0.1", 607 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", 608 | "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", 609 | "dev": true, 610 | "requires": { 611 | "estraverse": "^4.0.0" 612 | } 613 | }, 614 | "esrecurse": { 615 | "version": "4.2.1", 616 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 617 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 618 | "dev": true, 619 | "requires": { 620 | "estraverse": "^4.1.0" 621 | } 622 | }, 623 | "estraverse": { 624 | "version": "4.2.0", 625 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 626 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 627 | "dev": true 628 | }, 629 | "esutils": { 630 | "version": "2.0.2", 631 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 632 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 633 | "dev": true 634 | }, 635 | "execa": { 636 | "version": "1.0.0", 637 | "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 638 | "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 639 | "requires": { 640 | "cross-spawn": "^6.0.0", 641 | "get-stream": "^4.0.0", 642 | "is-stream": "^1.1.0", 643 | "npm-run-path": "^2.0.0", 644 | "p-finally": "^1.0.0", 645 | "signal-exit": "^3.0.0", 646 | "strip-eof": "^1.0.0" 647 | }, 648 | "dependencies": { 649 | "cross-spawn": { 650 | "version": "6.0.5", 651 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 652 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 653 | "requires": { 654 | "nice-try": "^1.0.4", 655 | "path-key": "^2.0.1", 656 | "semver": "^5.5.0", 657 | "shebang-command": "^1.2.0", 658 | "which": "^1.2.9" 659 | } 660 | } 661 | } 662 | }, 663 | "external-editor": { 664 | "version": "3.0.3", 665 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", 666 | "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", 667 | "dev": true, 668 | "requires": { 669 | "chardet": "^0.7.0", 670 | "iconv-lite": "^0.4.24", 671 | "tmp": "^0.0.33" 672 | } 673 | }, 674 | "fast-deep-equal": { 675 | "version": "2.0.1", 676 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 677 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 678 | "dev": true 679 | }, 680 | "fast-json-stable-stringify": { 681 | "version": "2.0.0", 682 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 683 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 684 | "dev": true 685 | }, 686 | "fast-levenshtein": { 687 | "version": "2.0.6", 688 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 689 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 690 | "dev": true 691 | }, 692 | "figures": { 693 | "version": "2.0.0", 694 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 695 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 696 | "dev": true, 697 | "requires": { 698 | "escape-string-regexp": "^1.0.5" 699 | } 700 | }, 701 | "file-entry-cache": { 702 | "version": "5.0.1", 703 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 704 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 705 | "dev": true, 706 | "requires": { 707 | "flat-cache": "^2.0.1" 708 | } 709 | }, 710 | "find-up": { 711 | "version": "3.0.0", 712 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 713 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 714 | "requires": { 715 | "locate-path": "^3.0.0" 716 | } 717 | }, 718 | "flat-cache": { 719 | "version": "2.0.1", 720 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 721 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 722 | "dev": true, 723 | "requires": { 724 | "flatted": "^2.0.0", 725 | "rimraf": "2.6.3", 726 | "write": "1.0.3" 727 | } 728 | }, 729 | "flatted": { 730 | "version": "2.0.0", 731 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", 732 | "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", 733 | "dev": true 734 | }, 735 | "for-each": { 736 | "version": "0.3.3", 737 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 738 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 739 | "dev": true, 740 | "requires": { 741 | "is-callable": "^1.1.3" 742 | } 743 | }, 744 | "foreground-child": { 745 | "version": "1.5.6", 746 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", 747 | "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", 748 | "requires": { 749 | "cross-spawn": "^4", 750 | "signal-exit": "^3.0.0" 751 | } 752 | }, 753 | "fs.realpath": { 754 | "version": "1.0.0", 755 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 756 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 757 | }, 758 | "function-bind": { 759 | "version": "1.1.1", 760 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 761 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 762 | "dev": true 763 | }, 764 | "functional-red-black-tree": { 765 | "version": "1.0.1", 766 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 767 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 768 | "dev": true 769 | }, 770 | "furi": { 771 | "version": "1.3.0", 772 | "resolved": "https://registry.npmjs.org/furi/-/furi-1.3.0.tgz", 773 | "integrity": "sha512-TYoXEeRLKHXNWcCBP0VH1psPktQ9G8Y0GfZwMXCvwVbhbfNx7JItKWhB5mMBYufNjqxEHq+Ivd1nLtr5vQyVoQ==", 774 | "requires": { 775 | "@types/is-windows": "^0.2.0", 776 | "is-windows": "^1.0.2" 777 | } 778 | }, 779 | "get-caller-file": { 780 | "version": "2.0.5", 781 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 782 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 783 | }, 784 | "get-set-props": { 785 | "version": "0.1.0", 786 | "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", 787 | "integrity": "sha1-mYR1wXhEVobQsyJG2l3428++jqM=", 788 | "dev": true 789 | }, 790 | "get-stream": { 791 | "version": "4.1.0", 792 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 793 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 794 | "requires": { 795 | "pump": "^3.0.0" 796 | } 797 | }, 798 | "glob": { 799 | "version": "7.1.4", 800 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", 801 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", 802 | "requires": { 803 | "fs.realpath": "^1.0.0", 804 | "inflight": "^1.0.4", 805 | "inherits": "2", 806 | "minimatch": "^3.0.4", 807 | "once": "^1.3.0", 808 | "path-is-absolute": "^1.0.0" 809 | } 810 | }, 811 | "glob-option-error": { 812 | "version": "1.0.0", 813 | "resolved": "https://registry.npmjs.org/glob-option-error/-/glob-option-error-1.0.0.tgz", 814 | "integrity": "sha1-V8xl3vnH1cFGG68TEpu1QDz/YXY=", 815 | "dev": true 816 | }, 817 | "globals": { 818 | "version": "11.12.0", 819 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 820 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 821 | "dev": true 822 | }, 823 | "graceful-fs": { 824 | "version": "4.1.15", 825 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 826 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" 827 | }, 828 | "handlebars": { 829 | "version": "4.1.2", 830 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", 831 | "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", 832 | "requires": { 833 | "neo-async": "^2.6.0", 834 | "optimist": "^0.6.1", 835 | "source-map": "^0.6.1", 836 | "uglify-js": "^3.1.4" 837 | } 838 | }, 839 | "has": { 840 | "version": "1.0.3", 841 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 842 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 843 | "dev": true, 844 | "requires": { 845 | "function-bind": "^1.1.1" 846 | } 847 | }, 848 | "has-flag": { 849 | "version": "3.0.0", 850 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 851 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 852 | }, 853 | "has-symbols": { 854 | "version": "1.0.0", 855 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 856 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", 857 | "dev": true 858 | }, 859 | "hosted-git-info": { 860 | "version": "2.7.1", 861 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", 862 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" 863 | }, 864 | "htmlparser2": { 865 | "version": "3.10.1", 866 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", 867 | "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", 868 | "dev": true, 869 | "requires": { 870 | "domelementtype": "^1.3.1", 871 | "domhandler": "^2.3.0", 872 | "domutils": "^1.5.1", 873 | "entities": "^1.1.1", 874 | "inherits": "^2.0.1", 875 | "readable-stream": "^3.1.1" 876 | } 877 | }, 878 | "iconv-lite": { 879 | "version": "0.4.24", 880 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 881 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 882 | "dev": true, 883 | "requires": { 884 | "safer-buffer": ">= 2.1.2 < 3" 885 | } 886 | }, 887 | "ignore": { 888 | "version": "5.1.2", 889 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", 890 | "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", 891 | "dev": true 892 | }, 893 | "import-fresh": { 894 | "version": "3.0.0", 895 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", 896 | "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", 897 | "dev": true, 898 | "requires": { 899 | "parent-module": "^1.0.0", 900 | "resolve-from": "^4.0.0" 901 | } 902 | }, 903 | "imurmurhash": { 904 | "version": "0.1.4", 905 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 906 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 907 | "dev": true 908 | }, 909 | "indexed-filter": { 910 | "version": "1.0.3", 911 | "resolved": "https://registry.npmjs.org/indexed-filter/-/indexed-filter-1.0.3.tgz", 912 | "integrity": "sha512-oBIzs6EARNMzrLgVg20fK52H19WcRHBiukiiEkw9rnnI//8rinEBMLrYdwEfJ9d4K7bjV1L6nSGft6H/qzHNgQ==", 913 | "dev": true, 914 | "requires": { 915 | "append-type": "^1.0.1" 916 | } 917 | }, 918 | "inflight": { 919 | "version": "1.0.6", 920 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 921 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 922 | "requires": { 923 | "once": "^1.3.0", 924 | "wrappy": "1" 925 | } 926 | }, 927 | "inherits": { 928 | "version": "2.0.3", 929 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 930 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 931 | }, 932 | "inquirer": { 933 | "version": "6.3.1", 934 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", 935 | "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", 936 | "dev": true, 937 | "requires": { 938 | "ansi-escapes": "^3.2.0", 939 | "chalk": "^2.4.2", 940 | "cli-cursor": "^2.1.0", 941 | "cli-width": "^2.0.0", 942 | "external-editor": "^3.0.3", 943 | "figures": "^2.0.0", 944 | "lodash": "^4.17.11", 945 | "mute-stream": "0.0.7", 946 | "run-async": "^2.2.0", 947 | "rxjs": "^6.4.0", 948 | "string-width": "^2.1.0", 949 | "strip-ansi": "^5.1.0", 950 | "through": "^2.3.6" 951 | }, 952 | "dependencies": { 953 | "ansi-regex": { 954 | "version": "3.0.0", 955 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 956 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 957 | "dev": true 958 | }, 959 | "string-width": { 960 | "version": "2.1.1", 961 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 962 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 963 | "dev": true, 964 | "requires": { 965 | "is-fullwidth-code-point": "^2.0.0", 966 | "strip-ansi": "^4.0.0" 967 | }, 968 | "dependencies": { 969 | "strip-ansi": { 970 | "version": "4.0.0", 971 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 972 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 973 | "dev": true, 974 | "requires": { 975 | "ansi-regex": "^3.0.0" 976 | } 977 | } 978 | } 979 | } 980 | } 981 | }, 982 | "inspect-with-kind": { 983 | "version": "1.0.5", 984 | "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", 985 | "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", 986 | "dev": true, 987 | "requires": { 988 | "kind-of": "^6.0.2" 989 | } 990 | }, 991 | "invert-kv": { 992 | "version": "2.0.0", 993 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", 994 | "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" 995 | }, 996 | "is-arrayish": { 997 | "version": "0.2.1", 998 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 999 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 1000 | }, 1001 | "is-callable": { 1002 | "version": "1.1.4", 1003 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 1004 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", 1005 | "dev": true 1006 | }, 1007 | "is-date-object": { 1008 | "version": "1.0.1", 1009 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 1010 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", 1011 | "dev": true 1012 | }, 1013 | "is-fullwidth-code-point": { 1014 | "version": "2.0.0", 1015 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1016 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 1017 | }, 1018 | "is-get-set-prop": { 1019 | "version": "1.0.0", 1020 | "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", 1021 | "integrity": "sha1-JzGHfk14pqae3M5rudaLB3nnYxI=", 1022 | "dev": true, 1023 | "requires": { 1024 | "get-set-props": "^0.1.0", 1025 | "lowercase-keys": "^1.0.0" 1026 | } 1027 | }, 1028 | "is-js-type": { 1029 | "version": "2.0.0", 1030 | "resolved": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", 1031 | "integrity": "sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI=", 1032 | "dev": true, 1033 | "requires": { 1034 | "js-types": "^1.0.0" 1035 | } 1036 | }, 1037 | "is-obj-prop": { 1038 | "version": "1.0.0", 1039 | "resolved": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", 1040 | "integrity": "sha1-s03nnEULjXxzqyzfZ9yHWtuF+A4=", 1041 | "dev": true, 1042 | "requires": { 1043 | "lowercase-keys": "^1.0.0", 1044 | "obj-props": "^1.0.0" 1045 | } 1046 | }, 1047 | "is-plain-obj": { 1048 | "version": "1.1.0", 1049 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 1050 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", 1051 | "dev": true 1052 | }, 1053 | "is-promise": { 1054 | "version": "2.1.0", 1055 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 1056 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 1057 | "dev": true 1058 | }, 1059 | "is-proto-prop": { 1060 | "version": "2.0.0", 1061 | "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", 1062 | "integrity": "sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==", 1063 | "dev": true, 1064 | "requires": { 1065 | "lowercase-keys": "^1.0.0", 1066 | "proto-props": "^2.0.0" 1067 | } 1068 | }, 1069 | "is-regex": { 1070 | "version": "1.0.4", 1071 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 1072 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 1073 | "dev": true, 1074 | "requires": { 1075 | "has": "^1.0.1" 1076 | } 1077 | }, 1078 | "is-resolvable": { 1079 | "version": "1.1.0", 1080 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 1081 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 1082 | "dev": true 1083 | }, 1084 | "is-stream": { 1085 | "version": "1.1.0", 1086 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1087 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 1088 | }, 1089 | "is-symbol": { 1090 | "version": "1.0.2", 1091 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", 1092 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", 1093 | "dev": true, 1094 | "requires": { 1095 | "has-symbols": "^1.0.0" 1096 | } 1097 | }, 1098 | "is-windows": { 1099 | "version": "1.0.2", 1100 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 1101 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" 1102 | }, 1103 | "isexe": { 1104 | "version": "2.0.0", 1105 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1106 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 1107 | }, 1108 | "istanbul-lib-coverage": { 1109 | "version": "2.0.5", 1110 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", 1111 | "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" 1112 | }, 1113 | "istanbul-lib-report": { 1114 | "version": "2.0.8", 1115 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", 1116 | "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", 1117 | "requires": { 1118 | "istanbul-lib-coverage": "^2.0.5", 1119 | "make-dir": "^2.1.0", 1120 | "supports-color": "^6.1.0" 1121 | } 1122 | }, 1123 | "istanbul-reports": { 1124 | "version": "2.2.6", 1125 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", 1126 | "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", 1127 | "requires": { 1128 | "handlebars": "^4.1.2" 1129 | } 1130 | }, 1131 | "js-tokens": { 1132 | "version": "4.0.0", 1133 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1134 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1135 | "dev": true 1136 | }, 1137 | "js-types": { 1138 | "version": "1.0.0", 1139 | "resolved": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", 1140 | "integrity": "sha1-0kLmSU7Vcq08koCfyL7X92h8vwM=", 1141 | "dev": true 1142 | }, 1143 | "js-yaml": { 1144 | "version": "3.13.1", 1145 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1146 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1147 | "dev": true, 1148 | "requires": { 1149 | "argparse": "^1.0.7", 1150 | "esprima": "^4.0.0" 1151 | } 1152 | }, 1153 | "json-parse-better-errors": { 1154 | "version": "1.0.2", 1155 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1156 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" 1157 | }, 1158 | "json-schema-traverse": { 1159 | "version": "0.4.1", 1160 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1161 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1162 | "dev": true 1163 | }, 1164 | "json-stable-stringify-without-jsonify": { 1165 | "version": "1.0.1", 1166 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1167 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1168 | "dev": true 1169 | }, 1170 | "kind-of": { 1171 | "version": "6.0.2", 1172 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 1173 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 1174 | "dev": true 1175 | }, 1176 | "lcid": { 1177 | "version": "2.0.0", 1178 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", 1179 | "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", 1180 | "requires": { 1181 | "invert-kv": "^2.0.0" 1182 | } 1183 | }, 1184 | "levn": { 1185 | "version": "0.3.0", 1186 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1187 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1188 | "dev": true, 1189 | "requires": { 1190 | "prelude-ls": "~1.1.2", 1191 | "type-check": "~0.3.2" 1192 | } 1193 | }, 1194 | "load-json-file": { 1195 | "version": "4.0.0", 1196 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", 1197 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", 1198 | "requires": { 1199 | "graceful-fs": "^4.1.2", 1200 | "parse-json": "^4.0.0", 1201 | "pify": "^3.0.0", 1202 | "strip-bom": "^3.0.0" 1203 | }, 1204 | "dependencies": { 1205 | "pify": { 1206 | "version": "3.0.0", 1207 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1208 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" 1209 | } 1210 | } 1211 | }, 1212 | "locate-path": { 1213 | "version": "3.0.0", 1214 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 1215 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 1216 | "requires": { 1217 | "p-locate": "^3.0.0", 1218 | "path-exists": "^3.0.0" 1219 | } 1220 | }, 1221 | "lodash": { 1222 | "version": "4.17.11", 1223 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 1224 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", 1225 | "dev": true 1226 | }, 1227 | "lowercase-keys": { 1228 | "version": "1.0.1", 1229 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1230 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1231 | "dev": true 1232 | }, 1233 | "lru-cache": { 1234 | "version": "4.1.5", 1235 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 1236 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 1237 | "requires": { 1238 | "pseudomap": "^1.0.2", 1239 | "yallist": "^2.1.2" 1240 | } 1241 | }, 1242 | "make-dir": { 1243 | "version": "2.1.0", 1244 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", 1245 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 1246 | "requires": { 1247 | "pify": "^4.0.1", 1248 | "semver": "^5.6.0" 1249 | } 1250 | }, 1251 | "map-age-cleaner": { 1252 | "version": "0.1.3", 1253 | "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 1254 | "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 1255 | "requires": { 1256 | "p-defer": "^1.0.0" 1257 | } 1258 | }, 1259 | "mem": { 1260 | "version": "4.3.0", 1261 | "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", 1262 | "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", 1263 | "requires": { 1264 | "map-age-cleaner": "^0.1.1", 1265 | "mimic-fn": "^2.0.0", 1266 | "p-is-promise": "^2.0.0" 1267 | } 1268 | }, 1269 | "mimic-fn": { 1270 | "version": "2.1.0", 1271 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1272 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 1273 | }, 1274 | "minimatch": { 1275 | "version": "3.0.4", 1276 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1277 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1278 | "requires": { 1279 | "brace-expansion": "^1.1.7" 1280 | } 1281 | }, 1282 | "minimist": { 1283 | "version": "0.0.10", 1284 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 1285 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" 1286 | }, 1287 | "mkdirp": { 1288 | "version": "0.5.1", 1289 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1290 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1291 | "dev": true, 1292 | "requires": { 1293 | "minimist": "0.0.8" 1294 | }, 1295 | "dependencies": { 1296 | "minimist": { 1297 | "version": "0.0.8", 1298 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1299 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1300 | "dev": true 1301 | } 1302 | } 1303 | }, 1304 | "ms": { 1305 | "version": "2.1.2", 1306 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1307 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1308 | "dev": true 1309 | }, 1310 | "mute-stream": { 1311 | "version": "0.0.7", 1312 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 1313 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 1314 | "dev": true 1315 | }, 1316 | "natural-compare": { 1317 | "version": "1.4.0", 1318 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1319 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1320 | "dev": true 1321 | }, 1322 | "neo-async": { 1323 | "version": "2.6.1", 1324 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", 1325 | "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" 1326 | }, 1327 | "nice-try": { 1328 | "version": "1.0.5", 1329 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1330 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" 1331 | }, 1332 | "normalize-package-data": { 1333 | "version": "2.5.0", 1334 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1335 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1336 | "requires": { 1337 | "hosted-git-info": "^2.1.4", 1338 | "resolve": "^1.10.0", 1339 | "semver": "2 || 3 || 4 || 5", 1340 | "validate-npm-package-license": "^3.0.1" 1341 | } 1342 | }, 1343 | "npm-run-path": { 1344 | "version": "2.0.2", 1345 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1346 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 1347 | "requires": { 1348 | "path-key": "^2.0.0" 1349 | } 1350 | }, 1351 | "obj-props": { 1352 | "version": "1.1.0", 1353 | "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.1.0.tgz", 1354 | "integrity": "sha1-YmMT+qRCvv1KROmgLDy2vek3tRE=", 1355 | "dev": true 1356 | }, 1357 | "object-inspect": { 1358 | "version": "1.6.0", 1359 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", 1360 | "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", 1361 | "dev": true 1362 | }, 1363 | "object-keys": { 1364 | "version": "1.1.1", 1365 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1366 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1367 | "dev": true 1368 | }, 1369 | "once": { 1370 | "version": "1.4.0", 1371 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1372 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1373 | "requires": { 1374 | "wrappy": "1" 1375 | } 1376 | }, 1377 | "onetime": { 1378 | "version": "2.0.1", 1379 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 1380 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 1381 | "dev": true, 1382 | "requires": { 1383 | "mimic-fn": "^1.0.0" 1384 | }, 1385 | "dependencies": { 1386 | "mimic-fn": { 1387 | "version": "1.2.0", 1388 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 1389 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 1390 | "dev": true 1391 | } 1392 | } 1393 | }, 1394 | "optimist": { 1395 | "version": "0.6.1", 1396 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 1397 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 1398 | "requires": { 1399 | "minimist": "~0.0.1", 1400 | "wordwrap": "~0.0.2" 1401 | } 1402 | }, 1403 | "optionator": { 1404 | "version": "0.8.2", 1405 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 1406 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 1407 | "dev": true, 1408 | "requires": { 1409 | "deep-is": "~0.1.3", 1410 | "fast-levenshtein": "~2.0.4", 1411 | "levn": "~0.3.0", 1412 | "prelude-ls": "~1.1.2", 1413 | "type-check": "~0.3.2", 1414 | "wordwrap": "~1.0.0" 1415 | }, 1416 | "dependencies": { 1417 | "wordwrap": { 1418 | "version": "1.0.0", 1419 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1420 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 1421 | "dev": true 1422 | } 1423 | } 1424 | }, 1425 | "os-locale": { 1426 | "version": "3.1.0", 1427 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", 1428 | "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", 1429 | "requires": { 1430 | "execa": "^1.0.0", 1431 | "lcid": "^2.0.0", 1432 | "mem": "^4.0.0" 1433 | } 1434 | }, 1435 | "os-tmpdir": { 1436 | "version": "1.0.2", 1437 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1438 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1439 | "dev": true 1440 | }, 1441 | "p-defer": { 1442 | "version": "1.0.0", 1443 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 1444 | "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" 1445 | }, 1446 | "p-finally": { 1447 | "version": "1.0.0", 1448 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1449 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 1450 | }, 1451 | "p-is-promise": { 1452 | "version": "2.1.0", 1453 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", 1454 | "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" 1455 | }, 1456 | "p-limit": { 1457 | "version": "2.2.0", 1458 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", 1459 | "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", 1460 | "requires": { 1461 | "p-try": "^2.0.0" 1462 | } 1463 | }, 1464 | "p-locate": { 1465 | "version": "3.0.0", 1466 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1467 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1468 | "requires": { 1469 | "p-limit": "^2.0.0" 1470 | } 1471 | }, 1472 | "p-try": { 1473 | "version": "2.2.0", 1474 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1475 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1476 | }, 1477 | "parent-module": { 1478 | "version": "1.0.1", 1479 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1480 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1481 | "dev": true, 1482 | "requires": { 1483 | "callsites": "^3.0.0" 1484 | } 1485 | }, 1486 | "parse-json": { 1487 | "version": "4.0.0", 1488 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 1489 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 1490 | "requires": { 1491 | "error-ex": "^1.3.1", 1492 | "json-parse-better-errors": "^1.0.1" 1493 | } 1494 | }, 1495 | "path-exists": { 1496 | "version": "3.0.0", 1497 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1498 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 1499 | }, 1500 | "path-is-absolute": { 1501 | "version": "1.0.1", 1502 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1503 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1504 | }, 1505 | "path-is-inside": { 1506 | "version": "1.0.2", 1507 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1508 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1509 | "dev": true 1510 | }, 1511 | "path-key": { 1512 | "version": "2.0.1", 1513 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1514 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 1515 | }, 1516 | "path-parse": { 1517 | "version": "1.0.6", 1518 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1519 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 1520 | }, 1521 | "path-type": { 1522 | "version": "3.0.0", 1523 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", 1524 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", 1525 | "requires": { 1526 | "pify": "^3.0.0" 1527 | }, 1528 | "dependencies": { 1529 | "pify": { 1530 | "version": "3.0.0", 1531 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1532 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" 1533 | } 1534 | } 1535 | }, 1536 | "pify": { 1537 | "version": "4.0.1", 1538 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 1539 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" 1540 | }, 1541 | "prelude-ls": { 1542 | "version": "1.1.2", 1543 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1544 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1545 | "dev": true 1546 | }, 1547 | "progress": { 1548 | "version": "2.0.3", 1549 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1550 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1551 | "dev": true 1552 | }, 1553 | "proto-props": { 1554 | "version": "2.0.0", 1555 | "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", 1556 | "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", 1557 | "dev": true 1558 | }, 1559 | "pseudomap": { 1560 | "version": "1.0.2", 1561 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1562 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 1563 | }, 1564 | "pump": { 1565 | "version": "3.0.0", 1566 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1567 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1568 | "requires": { 1569 | "end-of-stream": "^1.1.0", 1570 | "once": "^1.3.1" 1571 | } 1572 | }, 1573 | "punycode": { 1574 | "version": "2.1.1", 1575 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1576 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1577 | "dev": true 1578 | }, 1579 | "read-pkg": { 1580 | "version": "3.0.0", 1581 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", 1582 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", 1583 | "requires": { 1584 | "load-json-file": "^4.0.0", 1585 | "normalize-package-data": "^2.3.2", 1586 | "path-type": "^3.0.0" 1587 | } 1588 | }, 1589 | "read-pkg-up": { 1590 | "version": "4.0.0", 1591 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", 1592 | "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", 1593 | "requires": { 1594 | "find-up": "^3.0.0", 1595 | "read-pkg": "^3.0.0" 1596 | } 1597 | }, 1598 | "readable-stream": { 1599 | "version": "3.4.0", 1600 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 1601 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 1602 | "dev": true, 1603 | "requires": { 1604 | "inherits": "^2.0.3", 1605 | "string_decoder": "^1.1.1", 1606 | "util-deprecate": "^1.0.1" 1607 | } 1608 | }, 1609 | "regexpp": { 1610 | "version": "2.0.1", 1611 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 1612 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 1613 | "dev": true 1614 | }, 1615 | "require-directory": { 1616 | "version": "2.1.1", 1617 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1618 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1619 | }, 1620 | "require-main-filename": { 1621 | "version": "2.0.0", 1622 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1623 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 1624 | }, 1625 | "resolve": { 1626 | "version": "1.11.0", 1627 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", 1628 | "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", 1629 | "requires": { 1630 | "path-parse": "^1.0.6" 1631 | } 1632 | }, 1633 | "resolve-from": { 1634 | "version": "4.0.0", 1635 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1636 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1637 | "dev": true 1638 | }, 1639 | "restore-cursor": { 1640 | "version": "2.0.0", 1641 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 1642 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 1643 | "dev": true, 1644 | "requires": { 1645 | "onetime": "^2.0.0", 1646 | "signal-exit": "^3.0.2" 1647 | } 1648 | }, 1649 | "resumer": { 1650 | "version": "0.0.0", 1651 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", 1652 | "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", 1653 | "dev": true, 1654 | "requires": { 1655 | "through": "~2.3.4" 1656 | } 1657 | }, 1658 | "rimraf": { 1659 | "version": "2.6.3", 1660 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1661 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1662 | "requires": { 1663 | "glob": "^7.1.3" 1664 | } 1665 | }, 1666 | "rmfr": { 1667 | "version": "2.0.0", 1668 | "resolved": "https://registry.npmjs.org/rmfr/-/rmfr-2.0.0.tgz", 1669 | "integrity": "sha512-nQptLCZeyyJfgbpf2x97k5YE8vzDn7bhwx9NlvODdhgbU0mL1ruh71X0HYdRaOEvWC7Cr+SfV0p5p+Ib5yOl7A==", 1670 | "dev": true, 1671 | "requires": { 1672 | "assert-valid-glob-opts": "^1.0.0", 1673 | "glob": "^7.1.2", 1674 | "graceful-fs": "^4.1.11", 1675 | "inspect-with-kind": "^1.0.4", 1676 | "rimraf": "^2.6.2" 1677 | } 1678 | }, 1679 | "run-async": { 1680 | "version": "2.3.0", 1681 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 1682 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 1683 | "dev": true, 1684 | "requires": { 1685 | "is-promise": "^2.1.0" 1686 | } 1687 | }, 1688 | "rxjs": { 1689 | "version": "6.5.2", 1690 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", 1691 | "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", 1692 | "dev": true, 1693 | "requires": { 1694 | "tslib": "^1.9.0" 1695 | } 1696 | }, 1697 | "safe-buffer": { 1698 | "version": "5.1.2", 1699 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1700 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1701 | }, 1702 | "safer-buffer": { 1703 | "version": "2.1.2", 1704 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1705 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1706 | "dev": true 1707 | }, 1708 | "semver": { 1709 | "version": "5.7.0", 1710 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 1711 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" 1712 | }, 1713 | "set-blocking": { 1714 | "version": "2.0.0", 1715 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1716 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1717 | }, 1718 | "shebang-command": { 1719 | "version": "1.2.0", 1720 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1721 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1722 | "requires": { 1723 | "shebang-regex": "^1.0.0" 1724 | } 1725 | }, 1726 | "shebang-regex": { 1727 | "version": "1.0.0", 1728 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1729 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 1730 | }, 1731 | "signal-exit": { 1732 | "version": "3.0.2", 1733 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1734 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 1735 | }, 1736 | "slash": { 1737 | "version": "3.0.0", 1738 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1739 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" 1740 | }, 1741 | "slice-ansi": { 1742 | "version": "2.1.0", 1743 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 1744 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 1745 | "dev": true, 1746 | "requires": { 1747 | "ansi-styles": "^3.2.0", 1748 | "astral-regex": "^1.0.0", 1749 | "is-fullwidth-code-point": "^2.0.0" 1750 | } 1751 | }, 1752 | "source-map": { 1753 | "version": "0.6.1", 1754 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1755 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1756 | }, 1757 | "spdx-correct": { 1758 | "version": "3.1.0", 1759 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", 1760 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", 1761 | "requires": { 1762 | "spdx-expression-parse": "^3.0.0", 1763 | "spdx-license-ids": "^3.0.0" 1764 | } 1765 | }, 1766 | "spdx-exceptions": { 1767 | "version": "2.2.0", 1768 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", 1769 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" 1770 | }, 1771 | "spdx-expression-parse": { 1772 | "version": "3.0.0", 1773 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 1774 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 1775 | "requires": { 1776 | "spdx-exceptions": "^2.1.0", 1777 | "spdx-license-ids": "^3.0.0" 1778 | } 1779 | }, 1780 | "spdx-license-ids": { 1781 | "version": "3.0.4", 1782 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", 1783 | "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" 1784 | }, 1785 | "sprintf-js": { 1786 | "version": "1.0.3", 1787 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1788 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1789 | "dev": true 1790 | }, 1791 | "string-width": { 1792 | "version": "3.1.0", 1793 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1794 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1795 | "requires": { 1796 | "emoji-regex": "^7.0.1", 1797 | "is-fullwidth-code-point": "^2.0.0", 1798 | "strip-ansi": "^5.1.0" 1799 | } 1800 | }, 1801 | "string.prototype.trim": { 1802 | "version": "1.1.2", 1803 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", 1804 | "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", 1805 | "dev": true, 1806 | "requires": { 1807 | "define-properties": "^1.1.2", 1808 | "es-abstract": "^1.5.0", 1809 | "function-bind": "^1.0.2" 1810 | } 1811 | }, 1812 | "string_decoder": { 1813 | "version": "1.2.0", 1814 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", 1815 | "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", 1816 | "dev": true, 1817 | "requires": { 1818 | "safe-buffer": "~5.1.0" 1819 | } 1820 | }, 1821 | "strip-ansi": { 1822 | "version": "5.2.0", 1823 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1824 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1825 | "requires": { 1826 | "ansi-regex": "^4.1.0" 1827 | } 1828 | }, 1829 | "strip-bom": { 1830 | "version": "3.0.0", 1831 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1832 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" 1833 | }, 1834 | "strip-eof": { 1835 | "version": "1.0.0", 1836 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 1837 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 1838 | }, 1839 | "strip-json-comments": { 1840 | "version": "2.0.1", 1841 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1842 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1843 | "dev": true 1844 | }, 1845 | "supports-color": { 1846 | "version": "6.1.0", 1847 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 1848 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 1849 | "requires": { 1850 | "has-flag": "^3.0.0" 1851 | } 1852 | }, 1853 | "table": { 1854 | "version": "5.4.0", 1855 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz", 1856 | "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", 1857 | "dev": true, 1858 | "requires": { 1859 | "ajv": "^6.9.1", 1860 | "lodash": "^4.17.11", 1861 | "slice-ansi": "^2.1.0", 1862 | "string-width": "^3.0.0" 1863 | } 1864 | }, 1865 | "tape": { 1866 | "version": "4.10.2", 1867 | "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.2.tgz", 1868 | "integrity": "sha512-mgl23h7W2yuk3N85FOYrin2OvThTYWdwbk6XQ1pr2PMJieyW2FM/4Bu/+kD/wecb3aZ0Enm+Syinyq467OPq2w==", 1869 | "dev": true, 1870 | "requires": { 1871 | "deep-equal": "~1.0.1", 1872 | "defined": "~1.0.0", 1873 | "for-each": "~0.3.3", 1874 | "function-bind": "~1.1.1", 1875 | "glob": "~7.1.4", 1876 | "has": "~1.0.3", 1877 | "inherits": "~2.0.3", 1878 | "minimist": "~1.2.0", 1879 | "object-inspect": "~1.6.0", 1880 | "resolve": "~1.10.1", 1881 | "resumer": "~0.0.0", 1882 | "string.prototype.trim": "~1.1.2", 1883 | "through": "~2.3.8" 1884 | }, 1885 | "dependencies": { 1886 | "minimist": { 1887 | "version": "1.2.0", 1888 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1889 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1890 | "dev": true 1891 | }, 1892 | "resolve": { 1893 | "version": "1.10.1", 1894 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", 1895 | "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", 1896 | "dev": true, 1897 | "requires": { 1898 | "path-parse": "^1.0.6" 1899 | } 1900 | } 1901 | } 1902 | }, 1903 | "test-exclude": { 1904 | "version": "5.2.3", 1905 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", 1906 | "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", 1907 | "requires": { 1908 | "glob": "^7.1.3", 1909 | "minimatch": "^3.0.4", 1910 | "read-pkg-up": "^4.0.0", 1911 | "require-main-filename": "^2.0.0" 1912 | } 1913 | }, 1914 | "text-table": { 1915 | "version": "0.2.0", 1916 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1917 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1918 | "dev": true 1919 | }, 1920 | "through": { 1921 | "version": "2.3.8", 1922 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1923 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1924 | "dev": true 1925 | }, 1926 | "tmp": { 1927 | "version": "0.0.33", 1928 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1929 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1930 | "dev": true, 1931 | "requires": { 1932 | "os-tmpdir": "~1.0.2" 1933 | } 1934 | }, 1935 | "tslib": { 1936 | "version": "1.10.0", 1937 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 1938 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", 1939 | "dev": true 1940 | }, 1941 | "type-check": { 1942 | "version": "0.3.2", 1943 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1944 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1945 | "dev": true, 1946 | "requires": { 1947 | "prelude-ls": "~1.1.2" 1948 | } 1949 | }, 1950 | "uglify-js": { 1951 | "version": "3.6.0", 1952 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", 1953 | "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", 1954 | "optional": true, 1955 | "requires": { 1956 | "commander": "~2.20.0", 1957 | "source-map": "~0.6.1" 1958 | } 1959 | }, 1960 | "uri-js": { 1961 | "version": "4.2.2", 1962 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1963 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1964 | "dev": true, 1965 | "requires": { 1966 | "punycode": "^2.1.0" 1967 | } 1968 | }, 1969 | "util-deprecate": { 1970 | "version": "1.0.2", 1971 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1972 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1973 | "dev": true 1974 | }, 1975 | "v8-to-istanbul": { 1976 | "version": "3.1.3", 1977 | "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-3.1.3.tgz", 1978 | "integrity": "sha512-btJfK2L4PhLMSkD1yiYEAAaz7xEwAiCJsxJ+mg+zc2ghYWGHcg6V3bgKpQmdBr7EmmnckZE0zvminOVF1tXk2g==", 1979 | "requires": { 1980 | "convert-source-map": "^1.6.0", 1981 | "source-map": "^0.7.3" 1982 | }, 1983 | "dependencies": { 1984 | "source-map": { 1985 | "version": "0.7.3", 1986 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1987 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" 1988 | } 1989 | } 1990 | }, 1991 | "validate-glob-opts": { 1992 | "version": "1.0.2", 1993 | "resolved": "https://registry.npmjs.org/validate-glob-opts/-/validate-glob-opts-1.0.2.tgz", 1994 | "integrity": "sha512-3PKjRQq/R514lUcG9OEiW0u9f7D4fP09A07kmk1JbNn2tfeQdAHhlT+A4dqERXKu2br2rrxSM3FzagaEeq9w+A==", 1995 | "dev": true, 1996 | "requires": { 1997 | "array-to-sentence": "^1.1.0", 1998 | "indexed-filter": "^1.0.0", 1999 | "inspect-with-kind": "^1.0.4", 2000 | "is-plain-obj": "^1.1.0" 2001 | } 2002 | }, 2003 | "validate-npm-package-license": { 2004 | "version": "3.0.4", 2005 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 2006 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 2007 | "requires": { 2008 | "spdx-correct": "^3.0.0", 2009 | "spdx-expression-parse": "^3.0.0" 2010 | } 2011 | }, 2012 | "which": { 2013 | "version": "1.3.1", 2014 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2015 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2016 | "requires": { 2017 | "isexe": "^2.0.0" 2018 | } 2019 | }, 2020 | "which-module": { 2021 | "version": "2.0.0", 2022 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2023 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 2024 | }, 2025 | "wordwrap": { 2026 | "version": "0.0.3", 2027 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 2028 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 2029 | }, 2030 | "wrap-ansi": { 2031 | "version": "5.1.0", 2032 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 2033 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 2034 | "requires": { 2035 | "ansi-styles": "^3.2.0", 2036 | "string-width": "^3.0.0", 2037 | "strip-ansi": "^5.0.0" 2038 | } 2039 | }, 2040 | "wrappy": { 2041 | "version": "1.0.2", 2042 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2043 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2044 | }, 2045 | "write": { 2046 | "version": "1.0.3", 2047 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 2048 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 2049 | "dev": true, 2050 | "requires": { 2051 | "mkdirp": "^0.5.1" 2052 | } 2053 | }, 2054 | "y18n": { 2055 | "version": "4.0.0", 2056 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 2057 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" 2058 | }, 2059 | "yallist": { 2060 | "version": "2.1.2", 2061 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 2062 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 2063 | }, 2064 | "yargs": { 2065 | "version": "13.2.4", 2066 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", 2067 | "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", 2068 | "requires": { 2069 | "cliui": "^5.0.0", 2070 | "find-up": "^3.0.0", 2071 | "get-caller-file": "^2.0.1", 2072 | "os-locale": "^3.1.0", 2073 | "require-directory": "^2.1.1", 2074 | "require-main-filename": "^2.0.0", 2075 | "set-blocking": "^2.0.0", 2076 | "string-width": "^3.0.0", 2077 | "which-module": "^2.0.0", 2078 | "y18n": "^4.0.0", 2079 | "yargs-parser": "^13.1.0" 2080 | } 2081 | }, 2082 | "yargs-parser": { 2083 | "version": "13.1.1", 2084 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", 2085 | "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", 2086 | "requires": { 2087 | "camelcase": "^5.0.0", 2088 | "decamelize": "^1.2.0" 2089 | } 2090 | } 2091 | } 2092 | } 2093 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coverage", 3 | "version": "0.4.1", 4 | "description": "A command-line tool to collect and report code coverage of a JavaScript program", 5 | "author": "Shinnosuke Watanabe (https://github.com/shinnn)", 6 | "repository": "shinnn/coverage", 7 | "license": "ISC", 8 | "scripts": { 9 | "pretest": "eslint .", 10 | "test": "node . node . test.js" 11 | }, 12 | "files": [ 13 | "index.js" 14 | ], 15 | "bin": { 16 | "coverage": "index.js" 17 | }, 18 | "keywords": [ 19 | "code", 20 | "coverage", 21 | "quality", 22 | "report", 23 | "analysis", 24 | "ecmascript", 25 | "command", 26 | "command-line", 27 | "cli", 28 | "travis-ci", 29 | "github-actions", 30 | "appveyor", 31 | "circleci", 32 | "codecov" 33 | ], 34 | "dependencies": { 35 | "c8": "^5.0.1", 36 | "foreground-child": "^1.5.6", 37 | "normalize-package-data": "^2.5.0", 38 | "slash": "^3.0.0", 39 | "test-exclude": "^5.2.3", 40 | "which": "^1.3.1", 41 | "yargs-parser": "^13.1.1" 42 | }, 43 | "devDependencies": { 44 | "@shinnn/eslint-config": "^6.10.4", 45 | "eslint": "^5.16.0", 46 | "lodash": "^4.17.11", 47 | "rmfr": "^2.0.0", 48 | "tape": "^4.10.2" 49 | }, 50 | "eslintConfig": { 51 | "extends": "@shinnn" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shinnn/coverage/c1e907424506a46ef2a3016d676aa5311874a380/screenshot.png -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const {dirname, join} = require('path'); 4 | const {execFile} = require('child_process'); 5 | const {mkdir, writeFile} = require('fs').promises; 6 | const {promisify} = require('util'); 7 | 8 | const attempt = require('lodash/attempt'); 9 | const rmfr = require('rmfr'); 10 | const test = require('tape'); 11 | 12 | const coverage = require.resolve('.'); 13 | const execNode = promisify(execFile).bind(null, process.execPath); 14 | const timeout = 1000000; 15 | 16 | test('A `coverage` command with a command', async t => { 17 | const {stderr, stdout} = await execNode([coverage, 'node', '-e', 'console.error("Hi")'], {timeout}); 18 | 19 | t.ok( 20 | stdout.includes('All files'), 21 | 'should print a coverage report.' 22 | ); 23 | 24 | t.ok( 25 | stderr.startsWith('Hi'), 26 | 'should print output of the original command.' 27 | ); 28 | 29 | const result = attempt(require.resolve, join(__dirname, 'coverage', 'index.html')); 30 | 31 | if (/^1|true$/ui.test(process.env.CI) || !!process.env.GITHUB_ACTION) { 32 | t.equal( 33 | result.code, 34 | 'MODULE_NOT_FOUND', 35 | 'should write no HTML reports to ./coverage.' 36 | ); 37 | } else { 38 | t.equal( 39 | typeof result, 40 | 'string', 41 | 'should write HTML reports to ./coverage.' 42 | ); 43 | } 44 | 45 | t.end(); 46 | }); 47 | 48 | test('A `coverage` command with a file path', async t => { 49 | const {stdout} = await execNode([coverage, require.resolve('./package.json')], {timeout}); 50 | 51 | t.ok( 52 | stdout.includes('All files'), 53 | 'should print a coverage report.' 54 | ); 55 | 56 | t.end(); 57 | }); 58 | 59 | test('A `coverage` command with c8 flags', async t => { 60 | try { 61 | await execNode([coverage, '--reporter=unknown', 'node', '--version'], {timeout}); 62 | t.fail('Unexpectedly succeeded.'); 63 | } catch ({stderr}) { 64 | t.ok( 65 | stderr.includes('Cannot find module \'unknown\''), 66 | 'should pass flags to the underlying `c8` command.' 67 | ); 68 | } 69 | 70 | t.end(); 71 | }); 72 | 73 | test('A `coverage` command with a non-executable path', async t => { 74 | try { 75 | await execNode([coverage, require.resolve('./.gitattributes')], {timeout}); 76 | t.fail('Unexpectedly succeeded.'); 77 | } catch ({code, stderr, stdout}) { 78 | t.ok( 79 | stderr.includes('SyntaxError'), 80 | 'should write error messages to the stderr.' 81 | ); 82 | 83 | t.ok( 84 | stdout.includes('All files'), 85 | 'should print a coverage report.' 86 | ); 87 | 88 | t.equal( 89 | code, 90 | 1, 91 | 'should reflect exit code of the spawned process.' 92 | ); 93 | } 94 | 95 | t.end(); 96 | }); 97 | 98 | test('A `coverage` command with a non-existing command', async t => { 99 | try { 100 | await execNode([coverage, 'this-command-does-not-exist'], {timeout}); 101 | t.fail('Unexpectedly succeeded.'); 102 | } catch ({code, stderr, stdout}) { 103 | t.equal( 104 | stderr, 105 | `Both a command \`this-command-does-not-exist\` and a Node.js entry point ${ 106 | join(__dirname, 'this-command-does-not-exist') 107 | } don't exist.\n`, 108 | 'should write an error message to the stderr.' 109 | ); 110 | 111 | t.equal( 112 | stdout, 113 | '', 114 | 'should write nothing to the stdout.' 115 | ); 116 | 117 | t.equal( 118 | code, 119 | 127, 120 | 'should exit with code 127.' 121 | ); 122 | } 123 | 124 | t.end(); 125 | }); 126 | 127 | test('A `coverage` command with no arguments', async t => { 128 | try { 129 | await execNode([coverage], {timeout}); 130 | t.fail('Unexpectedly succeeded.'); 131 | } catch ({code, stderr, stdout}) { 132 | t.ok( 133 | stderr.includes('check whether coverage is within thresholds provided'), 134 | 'should write help to the stderr.' 135 | ); 136 | 137 | t.equal( 138 | stdout, 139 | '', 140 | 'should write nothing to the stderr.' 141 | ); 142 | 143 | t.equal( 144 | code, 145 | 1, 146 | 'should exit with code 1.' 147 | ); 148 | } 149 | 150 | t.end(); 151 | }); 152 | 153 | test('A `coverage report` command', async t => { 154 | const {stdout} = await execNode([coverage, 'report', '--reporter=text-summary'], {timeout}); 155 | 156 | t.ok( 157 | stdout.includes('Coverage summary'), 158 | 'should report coverage.' 159 | ); 160 | 161 | t.end(); 162 | }); 163 | 164 | if (Number(process.versions.node.split('.')[0]) >= 12) { 165 | test('A `coverage` command with a .mjs file path', async t => { 166 | const tmpFile = join(__dirname, 'tmp', 'tmp.mjs'); 167 | 168 | await rmfr(dirname(tmpFile)); 169 | await mkdir(dirname(tmpFile)); 170 | await writeFile(tmpFile, 'import pkg from "../package"'); 171 | await execNode([ 172 | coverage, 173 | '--exclude=tmp.mjs', 174 | `--temp-directory=${join(dirname(tmpFile), '_')}`, 175 | tmpFile 176 | ], {timeout}); 177 | t.pass('should enable ECMAScript modules for .mjs files automatically.'); 178 | 179 | t.end(); 180 | }); 181 | } 182 | --------------------------------------------------------------------------------