pax_global_header00006660000000000000000000000064135672614540014527gustar00rootroot0000000000000052 comment=2e2b108c68ba1b42901846537c60f714235bc78e node-coveralls-3.0.9/000077500000000000000000000000001356726145400144555ustar00rootroot00000000000000node-coveralls-3.0.9/.github/000077500000000000000000000000001356726145400160155ustar00rootroot00000000000000node-coveralls-3.0.9/.github/workflows/000077500000000000000000000000001356726145400200525ustar00rootroot00000000000000node-coveralls-3.0.9/.github/workflows/test.yml000066400000000000000000000016051356726145400215560ustar00rootroot00000000000000name: Tests on: [push, pull_request] env: CI: true jobs: run: name: Node ${{ matrix.node }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: node: [6, 8, 10, 12] os: [ubuntu-latest, windows-latest] steps: - name: Clone repository uses: actions/checkout@v1 - name: Set Node.js version uses: actions/setup-node@v1 with: node-version: ${{ matrix.node }} - run: node --version - run: npm --version - name: Install npm dependencies run: npm install # switch to `npm ci` when Node.js 6 support is dropped - name: Run lint run: npm run lint - name: Run tests run: npm run test-cov - name: Coveralls uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} node-coveralls-3.0.9/.gitignore000066400000000000000000000001521356726145400164430ustar00rootroot00000000000000node_modules/ coverage/ lib-cov/ .nyc_output/ coverage.json npm-debug.log # Webstorm IDE .idea .DS_Store node-coveralls-3.0.9/.jshintrc000066400000000000000000000003751356726145400163070ustar00rootroot00000000000000{ "curly": true, "debug": true, "eqeqeq": true, "esversion": 6, "forin": true, "latedef": false, "mocha": true, "noarg": true, "nocomma": true, "node": true, "nonbsp": true, "strict": "global", "undef": true, "unused": true }node-coveralls-3.0.9/LICENSE000066400000000000000000000027461356726145400154730ustar00rootroot00000000000000Copyright (c) 2013, Coveralls, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Coveralls, LLC. node-coveralls-3.0.9/README.md000066400000000000000000000200061356726145400157320ustar00rootroot00000000000000# node-coveralls [![Build Status][ci-image]][ci-url] [![Coverage Status][coveralls-image]][coveralls-url] [Coveralls.io](https://coveralls.io/) support for Node.js. Get the great coverage reporting of coveralls.io and add a cool coverage button (like the one above) to your README. Supported CI services: [Travis CI](https://travis-ci.org/), [CodeShip](https://codeship.com/), [CircleCI](https://circleci.com/), [Jenkins](https://jenkins.io/), [Gitlab CI](https://gitlab.com/), [AppVeyor](https://www.appveyor.com/), [Buildkite](https://buildkite.com/), [GitHub Actions CI](https://github.com/features/actions) ## Installation: Add the latest version of `coveralls` to your package.json: ```shell npm install coveralls --save-dev ``` If you're using mocha, add `mocha-lcov-reporter` to your package.json: ```shell npm install mocha-lcov-reporter --save-dev ``` ## Usage: This script `bin/coveralls.js` can take standard input from any tool that emits the lcov data format (including [mocha](https://mochajs.org/)'s [LCOV reporter](https://npmjs.org/package/mocha-lcov-reporter)) and send it to coveralls.io to report your code coverage there. Once your app is instrumented for coverage, and building, you need to pipe the lcov output to `./node_modules/coveralls/bin/coveralls.js`. This library currently supports [Travis CI](https://travis-ci.org/) with no extra effort beyond piping the lcov output to coveralls. However, if you're using a different build system, there are a few environment variables that are necessary: - `COVERALLS_SERVICE_NAME` (the name of your build system) - `COVERALLS_REPO_TOKEN` (the secret repo token from coveralls.io) - `COVERALLS_GIT_BRANCH` (the branch name) There are optional environment variables for other build systems as well: - `COVERALLS_SERVICE_JOB_ID` (an id that uniquely identifies the build job) - `COVERALLS_RUN_AT` (a date string for the time that the job ran. RFC 3339 dates work. This defaults to your build system's date/time if you don't set it.) - `COVERALLS_PARALLEL` (more info here: ) ### GitHub Actions CI If you are using GitHub Actions CI, you should look into [coverallsapp/github-action](https://github.com/coverallsapp/github-action). If you prefer to use this package you can do it like this: ```yml env: COVERALLS_REPO_TOKEN: "${{ secrets.COVERALLS_REPO_TOKEN }}" COVERALLS_GIT_BRANCH: "${{ github.ref }}" ``` ### [Jest](https://jestjs.io/) - Install [jest](https://jestjs.io/docs/en/getting-started) - Use the following to run tests and push files to coveralls: ```sh jest --coverage --coverageReporters=text-lcov | coveralls ``` Check out an example [here](https://github.com/Ethan-Arrowood/harperdb-connect/blob/master/.travis.yml) which makes use of Travis CI build stages ### [Mocha](https://mochajs.org/) + [Blanket.js](https://github.com/alex-seville/blanket) - Install [blanket.js](https://github.com/alex-seville/blanket) - Configure blanket according to [docs](https://github.com/alex-seville/blanket/blob/master/docs/getting_started_node.md). - Run your tests with a command like this: ```sh NODE_ENV=test YOURPACKAGE_COVERAGE=1 ./node_modules/.bin/mocha \ --require blanket \ --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js ``` ### [Mocha](https://mochajs.org/) + [JSCoverage](https://github.com/fishbar/jscoverage) Instrumenting your app for coverage is probably harder than it needs to be (read [here](http://seejohncode.com/2012/03/13/setting-up-mocha-jscoverage//)), but that's also a necessary step. In mocha, if you've got your code instrumented for coverage, the command for a Travis CI build would look something like this: ```sh YOURPACKAGE_COVERAGE=1 ./node_modules/.bin/mocha test -R mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js ``` Check out an example [Makefile](https://github.com/cainus/urlgrey/blob/master/Makefile) from one of my projects for an example, especially the test-coveralls build target. Note: Travis CI runs `npm test`, so whatever target you create in your Makefile must be the target that `npm test` runs (This is set in package.json's `scripts` property). ### [Istanbul](https://github.com/gotwarlost/istanbul) #### With Mocha: ```sh istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage ``` #### With Jasmine: ```sh istanbul cover jasmine-node --captureExceptions spec/ && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage ``` ### [Nodeunit](https://github.com/caolan/nodeunit) + [JSCoverage](https://github.com/fishbar/jscoverage) Depend on nodeunit, jscoverage and coveralls: ```sh npm install nodeunit jscoverage coveralls --save-dev ``` Add a coveralls script to "scripts" in your `package.json`: ```json "scripts": { "test": "nodeunit test", "coveralls": "jscoverage lib && YOURPACKAGE_COVERAGE=1 nodeunit --reporter=lcov test | coveralls" } ``` Ensure your app requires instrumented code when `process.env.YOURPACKAGE_COVERAGE` variable is defined. Run your tests with a command like this: ```sh npm run coveralls ``` For detailed instructions on requiring instrumented code, running on Travis CI and submitting to coveralls [see this guide](https://github.com/alanshaw/nodeunit-lcov-coveralls-example). ### [Poncho](https://github.com/deepsweet/poncho) Client-side JS code coverage using [PhantomJS](https://github.com/ariya/phantomjs), [Mocha](https://mochajs.org/) and [Blanket](https://github.com/alex-seville/blanket): - [Configure](https://mochajs.org/#running-mocha-in-the-browser) Mocha for browser - [Mark](https://github.com/deepsweet/poncho#usage) target script(s) with `data-cover` HTML attribute - Run your tests with a command like this: ```sh ./node_modules/.bin/poncho -R lcov test/test.html | ./node_modules/coveralls/bin/coveralls.js ``` ### [Lab](https://github.com/hapijs/lab) ```sh lab -r lcov | ./node_modules/.bin/coveralls ``` ### [nyc](https://github.com/istanbuljs/nyc) Works with almost any testing framework. Simply execute `npm test` with the `nyc` bin followed by running its reporter: ```shell nyc npm test && nyc report --reporter=text-lcov | coveralls ``` ### [TAP](https://github.com/isaacs/node-tap) Simply run your tap tests with the `COVERALLS_REPO_TOKEN` environment variable set and tap will automatically use `nyc` to report coverage to coveralls. ### Command Line Parameters ```shell Usage: coveralls.js [-v] filepath ``` #### Optional arguments: - `-v`, `--verbose` - `filepath` - optionally defines the base filepath of your source files. ## Running locally If you're running locally, you must have a `.coveralls.yml` file, as documented in [their documentation](https://docs.coveralls.io/ruby-on-rails#configuration), with your `repo_token` in it; or, you must provide a `COVERALLS_REPO_TOKEN` environment variable on the command-line. If you want to send commit data to coveralls, you can set the `COVERALLS_GIT_COMMIT` environment-variable to the commit hash you wish to reference. If you don't want to use a hash, you can set it to `HEAD` to supply coveralls with the latest commit data. This requires git to be installed and executable on the current PATH. ## Contributing I generally don't accept pull requests that are untested, or break the build, because I'd like to keep the quality high (this is a coverage tool after all!). I also don't care for "soft-versioning" or "optimistic versioning" (dependencies that have ^, x, > in them, or anything other than numbers and dots). There have been too many problems with bad semantic versioning in dependencies, and I'd rather have a solid library than a bleeding edge one. [ci-image]: https://github.com/nickmerwin/node-coveralls/workflows/Tests/badge.svg [ci-url]: https://github.com/nickmerwin/node-coveralls/actions?workflow=Tests [coveralls-image]: https://coveralls.io/repos/nickmerwin/node-coveralls/badge.svg?branch=master&service=github [coveralls-url]: https://coveralls.io/github/nickmerwin/node-coveralls?branch=master node-coveralls-3.0.9/bin/000077500000000000000000000000001356726145400152255ustar00rootroot00000000000000node-coveralls-3.0.9/bin/coveralls.js000077500000000000000000000005021356726145400175550ustar00rootroot00000000000000#!/usr/bin/env node 'use strict'; const { handleInput } = require('..'); process.stdin.resume(); process.stdin.setEncoding('utf8'); let input = ''; process.stdin.on('data', chunk => { input += chunk; }); process.stdin.on('end', () => { handleInput(input, err => { if (err) { throw err; } }); }); node-coveralls-3.0.9/fixtures/000077500000000000000000000000001356726145400163265ustar00rootroot00000000000000node-coveralls-3.0.9/fixtures/istanbul.lcov000066400000000000000000000032701356726145400210360ustar00rootroot00000000000000TN: SF:/Users/deepsweet/Dropbox/projects/svgo/lib/svgo/config.js FN:14,(anonymous_1) FN:51,preparePluginsArray FN:56,(anonymous_3) FN:101,extendConfig FN:108,(anonymous_5) FN:115,(anonymous_6) FN:161,optimizePluginsArray FN:165,(anonymous_8) FN:169,(anonymous_9) FNF:9 FNH:9 FNDA:87,(anonymous_1) FNDA:87,preparePluginsArray FNDA:141,(anonymous_3) FNDA:1,extendConfig FNDA:3,(anonymous_5) FNDA:84,(anonymous_6) FNDA:87,optimizePluginsArray FNDA:141,(anonymous_8) FNDA:141,(anonymous_9) DA:1,1 DA:3,1 DA:5,1 DA:14,1 DA:16,87 DA:18,87 DA:20,85 DA:22,85 DA:23,85 DA:24,85 DA:29,2 DA:31,2 DA:33,2 DA:34,1 DA:37,2 DA:41,87 DA:51,1 DA:53,87 DA:56,87 DA:59,141 DA:61,85 DA:62,85 DA:65,85 DA:66,0 DA:67,0 DA:70,85 DA:71,0 DA:74,85 DA:75,85 DA:78,85 DA:83,56 DA:84,56 DA:88,141 DA:101,1 DA:103,1 DA:106,1 DA:108,1 DA:111,3 DA:113,3 DA:115,3 DA:117,84 DA:119,3 DA:120,2 DA:121,2 DA:124,1 DA:125,1 DA:128,0 DA:129,0 DA:142,1 DA:143,0 DA:147,1 DA:148,0 DA:151,1 DA:161,1 DA:163,87 DA:165,87 DA:166,141 DA:169,87 DA:171,141 DA:172,44 DA:173,44 DA:176,97 DA:178,97 DA:182,87 LF:64 LH:57 BRDA:18,1,0,85 BRDA:18,1,1,2 BRDA:18,2,0,87 BRDA:18,2,1,86 BRDA:22,3,0,85 BRDA:22,3,1,0 BRDA:33,4,0,1 BRDA:33,4,1,1 BRDA:59,5,0,85 BRDA:59,5,1,56 BRDA:65,6,0,0 BRDA:65,6,1,85 BRDA:66,7,0,0 BRDA:66,7,1,0 BRDA:70,8,0,0 BRDA:70,8,1,85 BRDA:74,9,0,85 BRDA:74,9,1,0 BRDA:106,10,0,1 BRDA:106,10,1,0 BRDA:111,11,0,3 BRDA:111,11,1,0 BRDA:117,12,0,3 BRDA:117,12,1,81 BRDA:119,13,0,2 BRDA:119,13,1,1 BRDA:120,14,0,2 BRDA:120,14,1,1 BRDA:124,15,0,1 BRDA:124,15,1,0 BRDA:128,16,0,0 BRDA:128,16,1,0 BRDA:142,17,0,0 BRDA:142,17,1,1 BRDA:147,18,0,0 BRDA:147,18,1,1 BRDA:171,19,0,44 BRDA:171,19,1,97 BRDA:171,20,0,141 BRDA:171,20,1,54 BRF:40 BRH:27 end_of_record node-coveralls-3.0.9/fixtures/istanbul.remap.lcov000066400000000000000000000035311356726145400221410ustar00rootroot00000000000000TN: SF:/Users/deepsweet/Dropbox/projects/svgo/node_modules/angular2-template-loader/index.js!/Users/deepsweet/Dropbox/projects/svgo/node_modules/tslint-loader/index.js!/Users/deepsweet/Dropbox/projects/svgo/lib/svgo/config.js FN:14,(anonymous_1) FN:51,preparePluginsArray FN:56,(anonymous_3) FN:101,extendConfig FN:108,(anonymous_5) FN:115,(anonymous_6) FN:161,optimizePluginsArray FN:165,(anonymous_8) FN:169,(anonymous_9) FNF:9 FNH:9 FNDA:87,(anonymous_1) FNDA:87,preparePluginsArray FNDA:141,(anonymous_3) FNDA:1,extendConfig FNDA:3,(anonymous_5) FNDA:84,(anonymous_6) FNDA:87,optimizePluginsArray FNDA:141,(anonymous_8) FNDA:141,(anonymous_9) DA:1,1 DA:3,1 DA:5,1 DA:14,1 DA:16,87 DA:18,87 DA:20,85 DA:22,85 DA:23,85 DA:24,85 DA:29,2 DA:31,2 DA:33,2 DA:34,1 DA:37,2 DA:41,87 DA:51,1 DA:53,87 DA:56,87 DA:59,141 DA:61,85 DA:62,85 DA:65,85 DA:66,0 DA:67,0 DA:70,85 DA:71,0 DA:74,85 DA:75,85 DA:78,85 DA:83,56 DA:84,56 DA:88,141 DA:101,1 DA:103,1 DA:106,1 DA:108,1 DA:111,3 DA:113,3 DA:115,3 DA:117,84 DA:119,3 DA:120,2 DA:121,2 DA:124,1 DA:125,1 DA:128,0 DA:129,0 DA:142,1 DA:143,0 DA:147,1 DA:148,0 DA:151,1 DA:161,1 DA:163,87 DA:165,87 DA:166,141 DA:169,87 DA:171,141 DA:172,44 DA:173,44 DA:176,97 DA:178,97 DA:182,87 LF:64 LH:57 BRDA:18,1,0,85 BRDA:18,1,1,2 BRDA:18,2,0,87 BRDA:18,2,1,86 BRDA:22,3,0,85 BRDA:22,3,1,0 BRDA:33,4,0,1 BRDA:33,4,1,1 BRDA:59,5,0,85 BRDA:59,5,1,56 BRDA:65,6,0,0 BRDA:65,6,1,85 BRDA:66,7,0,0 BRDA:66,7,1,0 BRDA:70,8,0,0 BRDA:70,8,1,85 BRDA:74,9,0,85 BRDA:74,9,1,0 BRDA:106,10,0,1 BRDA:106,10,1,0 BRDA:111,11,0,3 BRDA:111,11,1,0 BRDA:117,12,0,3 BRDA:117,12,1,81 BRDA:119,13,0,2 BRDA:119,13,1,1 BRDA:120,14,0,2 BRDA:120,14,1,1 BRDA:124,15,0,1 BRDA:124,15,1,0 BRDA:128,16,0,0 BRDA:128,16,1,0 BRDA:142,17,0,0 BRDA:142,17,1,1 BRDA:147,18,0,0 BRDA:147,18,1,1 BRDA:171,19,0,44 BRDA:171,19,1,97 BRDA:171,20,0,141 BRDA:171,20,1,54 BRF:40 BRH:27 end_of_record node-coveralls-3.0.9/fixtures/lib/000077500000000000000000000000001356726145400170745ustar00rootroot00000000000000node-coveralls-3.0.9/fixtures/lib/index.js000066400000000000000000000101551356726145400205430ustar00rootroot00000000000000var nodeUrl = require('url'); var querystring = require('querystring'); var _ = require('underscore'); var UrlGrey = function(url){ this.url = url; this._parsed = null; }; UrlGrey.prototype.parsed = function(){ if (!this._parsed){ this._parsed = nodeUrl.parse(this.url); var p = this._parsed; if (p.protocol){ p.protocol = p.protocol.slice(0,-1); } else { p.protocol = 'http'; } if (p.hash){ p.hash = p.hash.substring(1); } p.username = ''; p.password = ''; if (!p.hostname){ p.hostname = 'localhost'; } if (!p.port){ p.port = 80; } else { p.port = parseInt(p.port, 10); } if (p.auth){ var auth = p.auth.split(':'); p.username = auth[0]; p.password = auth[1]; } } return this._parsed; }; UrlGrey.prototype.query = function(mergeObject){ var path; if (mergeObject === false){ // clear the query entirely if the input === false return this.queryString(''); } var url = this.url; if (!mergeObject){ var parsed = nodeUrl.parse(url); if (!!parsed.search){ var qstr = parsed.search.substring(1); return querystring.parse(qstr); } return {}; } else { // read the object out var oldQuery = querystring.parse(this.queryString()); _.each(mergeObject, function(v, k){ if (v === null){ delete oldQuery[k]; } else { oldQuery[k] = v; } }); var newString = querystring.stringify(oldQuery, '&', '='); return this.queryString(newString); } }; addPropertyGetterSetter('protocol'); addPropertyGetterSetter('port'); addPropertyGetterSetter('username'); addPropertyGetterSetter('password'); addPropertyGetterSetter('hostname'); addPropertyGetterSetter('hash'); // add a method called queryString that manipulates 'query' addPropertyGetterSetter('query', 'queryString'); addPropertyGetterSetter('pathname', 'path'); UrlGrey.prototype.path = function(){ var args = _.toArray(arguments); if (args.length !== 0){ var obj = new UrlGrey(this.toString()); var str = _.flatten(args).join('/'); str = str.replace(/\/+/g, '/'); // remove double slashes str = str.replace(/\/$/, ''); // remove all trailing slashes if (str[0] !== '/'){ str = '/' + str; } obj.parsed().pathname = str; return obj; } return this.parsed().pathname; }; UrlGrey.prototype.encode = function(str){ return querystring.escape(str); }; UrlGrey.prototype.decode = function(str){ return querystring.unescape(str); }; UrlGrey.prototype.parent = function(){ // read-only. (can't SET parent) var pieces = this.path().split("/"); var popped = pieces.pop(); if (popped === ''){ // ignore trailing slash pieces.pop(); } return this.path(pieces.join("/")); }; UrlGrey.prototype.child = function(suffix){ if (suffix){ suffix = encodeURIComponent(suffix); return this.path(this.path(), suffix); } else { // if no suffix, return the child var pieces = this.path().split("/"); var last = _.last(pieces); if ((pieces.length > 1) && (last === '')){ // ignore trailing slashes pieces.pop(); last = _.last(pieces); } return last; } }; UrlGrey.prototype.toJSON = function(){ return this.toString(); }; UrlGrey.prototype.toString = function(){ var p = this.parsed(); var userinfo = p.username + ':' + p.password; var retval = this.protocol() + '://'; if (userinfo != ':'){ retval += userinfo + '@'; } retval += p.hostname; if (this.port() !== 80){ retval += ':' + this.port(); } retval += this.path() === '/' ? '' : this.path(); var qs = this.queryString(); if (qs){ retval += '?' + qs; } if (p.hash){ retval += '#' + p.hash; } return retval; }; module.exports = function(url){ return new UrlGrey(url); }; function addPropertyGetterSetter(propertyName, methodName){ if (!methodName){ methodName = propertyName; } UrlGrey.prototype[methodName] = function(str){ if (!!str || str === ''){ var obj = new UrlGrey(this.toString()); obj.parsed()[propertyName] = str; return obj; } return this.parsed()[propertyName]; }; } node-coveralls-3.0.9/fixtures/onefile.lcov000066400000000000000000000021251356726145400206340ustar00rootroot00000000000000make[1]: Entering directory `/home/cainus/urlgrey' SF:index.js DA:1,1 DA:2,1 DA:3,1 DA:5,1 DA:6,66 DA:7,66 DA:10,1 DA:11,323 DA:12,63 DA:13,63 DA:14,63 DA:15,60 DA:17,3 DA:19,63 DA:20,32 DA:22,63 DA:23,63 DA:24,63 DA:25,3 DA:27,63 DA:28,60 DA:30,3 DA:32,63 DA:33,27 DA:34,27 DA:35,27 DA:38,323 DA:41,1 DA:42,5 DA:43,5 DA:45,2 DA:48,3 DA:49,3 DA:50,1 DA:51,1 DA:52,1 DA:53,1 DA:55,0 DA:58,2 DA:59,2 DA:60,2 DA:61,0 DA:63,2 DA:66,2 DA:67,2 DA:72,1 DA:73,1 DA:74,1 DA:75,1 DA:76,1 DA:77,1 DA:79,1 DA:80,1 DA:82,1 DA:83,87 DA:84,87 DA:85,6 DA:86,6 DA:87,6 DA:88,6 DA:89,9 DA:90,6 DA:91,6 DA:93,81 DA:97,1 DA:98,1 DA:101,1 DA:102,1 DA:105,1 DA:107,2 DA:108,2 DA:109,2 DA:110,1 DA:112,2 DA:115,1 DA:116,3 DA:117,1 DA:118,1 DA:121,2 DA:122,2 DA:123,2 DA:125,1 DA:126,1 DA:128,2 DA:132,1 DA:133,1 DA:136,1 DA:137,50 DA:138,50 DA:139,50 DA:140,50 DA:141,20 DA:143,50 DA:144,50 DA:145,2 DA:147,50 DA:148,50 DA:149,50 DA:150,31 DA:152,50 DA:153,24 DA:155,50 DA:210,40 DA:212,1 DA:213,8 DA:214,6 DA:216,8 DA:217,186 DA:218,21 DA:219,21 DA:220,21 DA:222,165 end_of_record make[1]: Leaving directory `/home/cainus/urlgrey' node-coveralls-3.0.9/index.js000066400000000000000000000013221356726145400161200ustar00rootroot00000000000000'use strict'; const minimist = require('minimist'); // this needs to go before the other require()s so that // the other files can already use index.options module.exports.options = minimist(process.argv.slice(2), { boolean: [ 'verbose', 'stdout' ], alias: { 'v': 'verbose', 's': 'stdout' } }); module.exports.convertLcovToCoveralls = require('./lib/convertLcovToCoveralls'); module.exports.sendToCoveralls = require('./lib/sendToCoveralls'); module.exports.getBaseOptions = require('./lib/getOptions').getBaseOptions; module.exports.getOptions = require('./lib/getOptions').getOptions; module.exports.handleInput = require('./lib/handleInput'); module.exports.logger = require('./lib/logger'); node-coveralls-3.0.9/lib/000077500000000000000000000000001356726145400152235ustar00rootroot00000000000000node-coveralls-3.0.9/lib/convertLcovToCoveralls.js000066400000000000000000000067601356726145400222540ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const path = require('path'); const lcovParse = require('lcov-parse'); const logger = require('./logger')(); const detailsToCoverage = (length, details) => { const coverage = new Array(length); details.forEach(obj => { coverage[obj.line - 1] = obj.hit; }); return coverage; }; const detailsToBranches = details => { const branches = []; details.forEach(obj => { ['line', 'block', 'branch', 'taken'].forEach(key => { branches.push(obj[key] || 0); }); }); return branches; }; const convertLcovFileObject = (file, filepath) => { const rootpath = filepath; filepath = path.resolve(rootpath, file.file); const source = fs.readFileSync(filepath, 'utf8'); const lines = source.split('\n'); const coverage = detailsToCoverage(lines.length, file.lines.details); const branches = detailsToBranches(file.branches.details); return { name: path.relative(rootpath, path.resolve(rootpath, file.file)).split(path.sep).join('/'), source, coverage, branches }; }; const cleanFilePath = file => { if (file.includes('!')) { const regex = /^(.*!)(.*)$/g; const matches = regex.exec(file); return matches[matches.length - 1]; } return file; }; const convertLcovToCoveralls = (input, options, cb) => { let filepath = options.filepath || ''; logger.debug('in: ', filepath); filepath = path.resolve(process.cwd(), filepath); lcovParse(input, (err, parsed) => { if (err) { logger.error('error from lcovParse: ', err); logger.error('input: ', input); return cb(err); } const postJson = { source_files: [] }; if (options.flag_name) { postJson.flag_name = options.flag_name; } if (options.git) { postJson.git = options.git; } if (options.run_at) { postJson.run_at = options.run_at; } if (options.service_name) { postJson.service_name = options.service_name; } if (options.service_job_id) { postJson.service_job_id = options.service_job_id; } if (options.service_pull_request) { postJson.service_pull_request = options.service_pull_request; } if (options.repo_token) { postJson.repo_token = options.repo_token; } if (options.parallel) { postJson.parallel = options.parallel; } if (options.service_pull_request) { postJson.service_pull_request = options.service_pull_request; } parsed.forEach(file => { file.file = cleanFilePath(file.file); const currentFilePath = path.resolve(filepath, file.file); if (fs.existsSync(currentFilePath)) { postJson.source_files.push(convertLcovFileObject(file, filepath)); } }); return cb(null, postJson); }); }; module.exports = convertLcovToCoveralls; /* example coveralls json file { "service_job_id": "1234567890", "service_name": "travis-ci", "source_files": [ { "name": "example.rb", "source": "def four\n 4\nend", "coverage": [null, 1, null] }, { "name": "two.rb", "source": "def seven\n eight\n nine\nend", "coverage": [null, 1, 0, null] } ] } example output from lcov parser: [ { "file": "index.js", "lines": { "found": 0, "hit": 0, "details": [ { "line": 1, "hit": 1 }, { "line": 2, "hit": 1 }, { "line": 3, "hit": 1 }, { "line": 5, "hit": 1 }, */ node-coveralls-3.0.9/lib/detectLocalGit.js000066400000000000000000000025741356726145400204600ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const path = require('path'); // branch naming only has a few excluded characters, see git-check-ref-format(1) const REGEX_BRANCH = /^ref: refs\/heads\/([^?*[\\~^:]+)$/; function detectLocalGit() { let dir = process.cwd(); let gitDir; while (path.resolve('/') !== dir) { gitDir = path.join(dir, '.git'); if (fs.existsSync(path.join(gitDir, 'HEAD'))) { break; } dir = path.dirname(dir); } if (path.resolve('/') === dir) { return; } const head = fs.readFileSync(path.join(dir, '.git', 'HEAD'), 'utf-8').trim(); const branch = (head.match(REGEX_BRANCH) || [])[1]; if (!branch) { return { git_commit: head }; } const commit = _parseCommitHashFromRef(dir, branch); return { git_commit: commit, git_branch: branch }; } function _parseCommitHashFromRef(dir, branch) { const ref = path.join(dir, '.git', 'refs', 'heads', branch); if (fs.existsSync(ref)) { return fs.readFileSync(ref, 'utf-8').trim(); } // ref does not exist; get it from packed-refs let commit = ''; const packedRefs = path.join(dir, '.git', 'packed-refs'); const packedRefsText = fs.readFileSync(packedRefs, 'utf-8'); packedRefsText.split('\n').forEach(line => { if (line.match(`refs/heads/${branch}`)) { commit = line.split(' ')[0]; } }); return commit; } module.exports = detectLocalGit; node-coveralls-3.0.9/lib/fetchGitData.js000066400000000000000000000056271356726145400201220ustar00rootroot00000000000000'use strict'; const { exec } = require('child_process'); require('./logger')(); function fetchGitData(git, cb) { if (!cb) { throw new Error('fetchGitData requires a callback'); } //-- Malformed/undefined git object if (typeof git === 'undefined') { return cb(new Error('No options passed')); } if (!Object.prototype.hasOwnProperty.call(git, 'head')) { return cb(new Error('You must provide the head')); } if (!Object.prototype.hasOwnProperty.call(git.head, 'id')) { return cb(new Error('You must provide the head.id')); } //-- Set required properties of git if they weren"t provided if (!Object.prototype.hasOwnProperty.call(git, 'branch')) { git.branch = ''; } if (!Object.prototype.hasOwnProperty.call(git, 'remotes')) { git.remotes = []; } //-- Assert the property types if (typeof git.branch !== 'string') { git.branch = ''; } if (!(Array.isArray(git.remotes))) { git.remotes = []; } //-- Use git? exec(`git rev-parse --verify ${git.head.id}`, err => { if (err) { // git is not available... git.head.author_name = git.head.author_name || 'Unknown Author'; git.head.author_email = git.head.author_email || ''; git.head.committer_name = git.head.committer_name || 'Unknown Committer'; git.head.committer_email = git.head.committer_email || ''; git.head.message = git.head.message || 'Unknown Commit Message'; return cb(null, git); } fetchHeadDetails(git, cb); }); } function fetchBranch(git, cb) { exec('git branch', (err, branches) => { if (err) { return cb(err); } git.branch = (branches.match(/^\* (\w+)/) || [])[1]; fetchRemotes(git, cb); }); } const REGEX_COMMIT_DETAILS = /\nauthor (.+?) <([^>]*)>.+\ncommitter (.+?) <([^>]*)>.+[\S\s]*?\n\n(.*)/m; function fetchHeadDetails(git, cb) { exec(`git cat-file -p ${git.head.id}`, (err, response) => { if (err) { return cb(err); } const items = response.match(REGEX_COMMIT_DETAILS).slice(1); const fields = ['author_name', 'author_email', 'committer_name', 'committer_email', 'message']; fields.forEach((field, index) => { git.head[field] = items[index]; }); if (git.branch) { fetchRemotes(git, cb); } else { fetchBranch(git, cb); } }); } function fetchRemotes(git, cb) { exec('git remote -v', (err, remotes) => { if (err) { return cb(err); } const processed = {}; remotes.split('\n').forEach(remote => { if (!/\s\(push\)$/.test(remote)) { return; } remote = remote.split(/\s+/); saveRemote(processed, git, remote[0], remote[1]); }); cb(null, git); }); } function saveRemote(processed, git, name, url) { const key = `${name}-${url}`; if (Object.prototype.hasOwnProperty.call(processed, key)) { return; } processed[key] = true; git.remotes.push({ name, url }); } module.exports = fetchGitData; node-coveralls-3.0.9/lib/getOptions.js000066400000000000000000000165751356726145400177320ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const path = require('path'); const yaml = require('js-yaml'); const logger = require('./logger')(); const fetchGitData = require('./fetchGitData'); const detectLocalGit = require('./detectLocalGit'); const index = require('..'); const getBaseOptions = cb => { const options = {}; let git_commit = process.env.COVERALLS_GIT_COMMIT; let git_branch = process.env.COVERALLS_GIT_BRANCH; let git_committer_name; let git_committer_email; let git_message; const match = (process.env.CI_PULL_REQUEST || '').match(/(\d+)$/); if (match) { options.service_pull_request = match[1]; } if (process.env.TRAVIS) { options.service_name = 'travis-ci'; options.service_job_id = process.env.TRAVIS_JOB_ID; options.service_pull_request = process.env.TRAVIS_PULL_REQUEST; git_commit = 'HEAD'; git_branch = process.env.TRAVIS_BRANCH; } if (process.env.DRONE) { options.service_name = 'drone'; options.service_job_id = process.env.DRONE_BUILD_NUMBER; options.service_pull_request = process.env.DRONE_PULL_REQUEST; git_committer_name = process.env.DRONE_COMMIT_AUTHOR; git_committer_email = process.env.DRONE_COMMIT_AUTHOR_EMAIL; git_commit = process.env.DRONE_COMMIT; git_branch = process.env.DRONE_BRANCH; git_message = process.env.DRONE_COMMIT_MESSAGE; } if (process.env.JENKINS_URL || process.env.JENKINS_HOME) { options.service_name = 'jenkins'; options.service_job_id = process.env.BUILD_ID; options.service_pull_request = process.env.CHANGE_ID || process.env.ghprbPullId; git_committer_name = process.env.CHANGE_AUTHOR; git_committer_email = process.env.CHANGE_AUTHOR_EMAIL; git_commit = process.env.GIT_COMMIT; git_branch = process.env.CHANGE_BRANCH || process.env.GIT_BRANCH || process.env.BRANCH_NAME; } if (process.env.CIRCLECI) { options.service_name = 'circleci'; options.service_job_id = process.env.CIRCLE_BUILD_NUM; if (process.env.CI_PULL_REQUEST) { const pr = process.env.CI_PULL_REQUEST.split('/pull/'); options.service_pull_request = pr[1]; } git_commit = process.env.CIRCLE_SHA1; git_branch = process.env.CIRCLE_BRANCH; } if (process.env.CI_NAME && process.env.CI_NAME === 'codeship') { options.service_name = 'codeship'; options.service_job_id = process.env.CI_BUILD_NUMBER; git_commit = process.env.CI_COMMIT_ID; git_branch = process.env.CI_BRANCH; git_committer_name = process.env.CI_COMMITTER_NAME; git_committer_email = process.env.CI_COMMITTER_EMAIL; git_message = process.env.CI_COMMIT_MESSAGE; } if (process.env.WERCKER) { options.service_name = 'wercker'; options.service_job_id = process.env.WERCKER_BUILD_ID; git_commit = process.env.WERCKER_GIT_COMMIT; git_branch = process.env.WERCKER_GIT_BRANCH; } if (process.env.GITLAB_CI) { options.service_name = 'gitlab-ci'; options.service_job_number = process.env.CI_BUILD_NAME; options.service_job_id = process.env.CI_BUILD_ID; options.service_pull_request = process.env.CI_MERGE_REQUEST_IID; git_commit = process.env.CI_BUILD_REF; git_branch = process.env.CI_BUILD_REF_NAME; } if (process.env.APPVEYOR) { options.service_name = 'appveyor'; options.service_job_number = process.env.APPVEYOR_BUILD_NUMBER; options.service_job_id = process.env.APPVEYOR_BUILD_ID; git_commit = process.env.APPVEYOR_REPO_COMMIT; git_branch = process.env.APPVEYOR_REPO_BRANCH; } if (process.env.SURF_SHA1) { options.service_name = 'surf'; git_commit = process.env.SURF_SHA1; git_branch = process.env.SURF_REF; } if (process.env.BUILDKITE) { options.service_name = 'buildkite'; options.service_job_number = process.env.BUILDKITE_BUILD_NUMBER; options.service_job_id = process.env.BUILDKITE_BUILD_ID; options.service_pull_request = process.env.BUILDKITE_PULL_REQUEST; git_commit = process.env.BUILDKITE_COMMIT; git_branch = process.env.BUILDKITE_BRANCH; git_committer_name = process.env.BUILDKITE_BUILD_CREATOR; git_committer_email = process.env.BUILDKITE_BUILD_CREATOR_EMAIL; git_message = process.env.BUILDKITE_MESSAGE; } if (process.env.SEMAPHORE) { options.service_name = 'semaphore'; options.service_job_id = process.env.SEMAPHORE_BUILD_NUMBER; git_commit = process.env.REVISION; git_branch = process.env.BRANCH_NAME; } if (process.env.TF_BUILD) { options.service_name = 'Azure Pipelines'; options.service_job_id = process.env.BUILD_BUILDID; options.service_pull_request = process.env.SYSTEM_PULLREQUEST_PULLREQUESTNUMBER; git_commit = process.env.BUILD_SOURCEVERSION; git_branch = process.env.BUILD_SOURCEBRANCHNAME; } options.run_at = process.env.COVERALLS_RUN_AT || JSON.stringify(new Date()).slice(1, -1); if (process.env.COVERALLS_SERVICE_NAME) { options.service_name = process.env.COVERALLS_SERVICE_NAME; } if (process.env.COVERALLS_SERVICE_JOB_ID) { options.service_job_id = process.env.COVERALLS_SERVICE_JOB_ID; } if (!git_commit || !git_branch) { const data = detectLocalGit(); if (data) { git_commit = git_commit || data.git_commit; git_branch = git_branch || data.git_branch; } } if (process.env.COVERALLS_PARALLEL) { options.parallel = true; } // try to get the repo token as an environment variable if (process.env.COVERALLS_REPO_TOKEN) { options.repo_token = process.env.COVERALLS_REPO_TOKEN; } else { // try to get the repo token from a .coveralls.yml file const yml = path.join(process.cwd(), '.coveralls.yml'); try { if (fs.statSync(yml).isFile()) { const coveralls_yaml_conf = yaml.safeLoad(fs.readFileSync(yml, 'utf8')); options.repo_token = coveralls_yaml_conf.repo_token; if (coveralls_yaml_conf.service_name) { options.service_name = coveralls_yaml_conf.service_name; } } } catch (_) { logger.warn('Repo token could not be determined. Continuing without it. ' + 'This is necessary for private repos only, so may not be an issue at all.'); } } if (process.env.COVERALLS_FLAG_NAME) { options.flag_name = process.env.COVERALLS_FLAG_NAME; } if (git_commit) { fetchGitData({ head: { id: git_commit, committer_name: git_committer_name, committer_email: git_committer_email, message: git_message }, branch: git_branch }, (err, git) => { if (err) { logger.warn('there was an error getting git data: ', err); } else { options.git = git; } return cb(err, options); }); } else { return cb(null, options); } }; const getOptions = (cb, _userOptions) => { if (!cb) { throw new Error('getOptions requires a callback'); } const userOptions = _userOptions || {}; getBaseOptions((err, options) => { // minimist populates options._ with non-option command line arguments const firstNonOptionArgument = index.options._[0]; if (firstNonOptionArgument) { options.filepath = firstNonOptionArgument; } // lodash or else would be better, but no need for the extra dependency for (const option in userOptions) { if (Object.prototype.hasOwnProperty.call(userOptions, option)) { options[option] = userOptions[option]; } } cb(err, options); }); }; module.exports.getBaseOptions = getBaseOptions; module.exports.getOptions = getOptions; node-coveralls-3.0.9/lib/handleInput.js000066400000000000000000000020441356726145400200340ustar00rootroot00000000000000'use strict'; const logger = require('./logger')(); const index = require('..'); function handleInput(input, cb, userOptions) { logger.debug(input); logger.debug(`user options ${userOptions}`); index.getOptions((err, options) => { if (err) { logger.error('error from getOptions'); cb(err); return; } logger.debug(options); index.convertLcovToCoveralls(input, options, (err, postData) => { if (err) { logger.error('error from convertLcovToCoveralls'); cb(err); return; } logger.info('sending this to coveralls.io: ', JSON.stringify(postData)); index.sendToCoveralls(postData, (err, response, body) => { if (err) { cb(err); return; } if (response.statusCode >= 400) { cb(`Bad response: ${response.statusCode} ${body}`); return; } logger.debug(response.statusCode); logger.debug(body); cb(null, body); }); }); }, userOptions); } module.exports = handleInput; node-coveralls-3.0.9/lib/logger.js000066400000000000000000000005161356726145400170420ustar00rootroot00000000000000'use strict'; const logDriver = require('log-driver'); const index = require('..'); module.exports = () => logDriver({ level: getLogLevel() }); function getLogLevel() { if (index.options.verbose || process.env.NODE_COVERALLS_DEBUG === 1 || process.env.NODE_COVERALLS_DEBUG === '1') { return 'debug'; } return 'error'; } node-coveralls-3.0.9/lib/sendToCoveralls.js000066400000000000000000000011571356726145400206740ustar00rootroot00000000000000'use strict'; const request = require('request'); const index = require('..'); const sendToCoveralls = (obj, cb) => { let urlBase = 'https://coveralls.io'; if (process.env.COVERALLS_ENDPOINT) { urlBase = process.env.COVERALLS_ENDPOINT; } const str = JSON.stringify(obj); const url = `${urlBase}/api/v1/jobs`; if (index.options.stdout) { process.stdout.write(str); cb(null, { statusCode: 200 }, ''); } else { request.post({ url, form: { json: str } }, (err, response, body) => { cb(err, response, body); }); } }; module.exports = sendToCoveralls; node-coveralls-3.0.9/package-lock.json000066400000000000000000002560401356726145400177000ustar00rootroot00000000000000{ "name": "coveralls", "version": "3.0.8", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/generator": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz", "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==", "dev": true, "requires": { "@babel/types": "^7.7.2", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/helper-function-name": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz", "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.7.0", "@babel/template": "^7.7.0", "@babel/types": "^7.7.0" } }, "@babel/helper-get-function-arity": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz", "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==", "dev": true, "requires": { "@babel/types": "^7.7.0" } }, "@babel/helper-split-export-declaration": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz", "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==", "dev": true, "requires": { "@babel/types": "^7.7.0" } }, "@babel/highlight": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz", "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==", "dev": true }, "@babel/template": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz", "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.0", "@babel/types": "^7.7.0" } }, "@babel/traverse": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz", "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", "@babel/generator": "^7.7.2", "@babel/helper-function-name": "^7.7.0", "@babel/helper-split-export-declaration": "^7.7.0", "@babel/parser": "^7.7.2", "@babel/types": "^7.7.2", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" }, "dependencies": { "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" } } } }, "@babel/types": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz", "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==", "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "append-transform": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { "default-require-extensions": "^2.0.0" } }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { "sprintf-js": "~1.0.2" } }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "requires": { "safer-buffer": "~2.1.0" } }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { "tweetnacl": "^0.14.3" } }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "buster-core": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/buster-core/-/buster-core-0.6.4.tgz", "integrity": "sha1-J79rrWdCROpyDzEdkAoMoct4YFA=", "dev": true }, "buster-format": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/buster-format/-/buster-format-0.5.6.tgz", "integrity": "sha1-K4bDIuz14bCubm55Bev884fSq5U=", "dev": true, "requires": { "buster-core": "=0.6.4" } }, "caching-transform": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", "dev": true, "requires": { "hasha": "^3.0.0", "make-dir": "^2.0.0", "package-hash": "^3.0.0", "write-file-atomic": "^2.4.2" }, "dependencies": { "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "dependencies": { "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", "dev": true, "requires": { "exit": "0.1.2", "glob": "^7.1.1" }, "dependencies": { "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } } } }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "optional": true }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { "date-now": "^0.1.4" } }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true } } }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cp-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "make-dir": "^2.0.0", "nested-error-stacks": "^2.0.0", "pify": "^4.0.1", "safe-buffer": "^5.0.1" }, "dependencies": { "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "^1.0.0" } }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "default-require-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { "strip-bom": "^3.0.0" } }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { "object-keys": "^1.0.12" } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { "domelementtype": "^2.0.1", "entities": "^2.0.0" }, "dependencies": { "domelementtype": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", "dev": true }, "entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", "dev": true } } }, "domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, "requires": { "domelementtype": "1" } }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { "dom-serializer": "0", "domelementtype": "1" } }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "entities": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.0", "is-callable": "^1.1.4", "is-regex": "^1.0.4", "object-inspect": "^1.6.0", "object-keys": "^1.1.1", "string.prototype.trimleft": "^2.1.0", "string.prototype.trimright": "^2.1.0" } }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "es6-object-assign": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" }, "dependencies": { "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" } }, "flat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", "dev": true, "requires": { "is-buffer": "~2.0.3" } }, "foreground-child": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" }, "dependencies": { "cross-spawn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" } }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true } } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "^1.0.0" } }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "graceful-fs": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "dev": true }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "handlebars": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", "dev": true, "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" }, "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" } }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "hasha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", "dev": true, "requires": { "is-stream": "^1.0.1" } }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hosted-git-info": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, "htmlparser2": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { "domelementtype": "1", "domhandler": "2.3", "domutils": "1.5", "entities": "1.0", "readable-stream": "1.1" } }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "interpret": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-buffer": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", "dev": true }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { "has": "^1.0.1" } }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { "has-symbols": "^1.0.0" } }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-lib-coverage": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-hook": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { "@babel/generator": "^7.4.0", "@babel/parser": "^7.4.3", "@babel/template": "^7.4.0", "@babel/traverse": "^7.4.3", "@babel/types": "^7.4.0", "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "istanbul-lib-report": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "supports-color": "^6.1.0" }, "dependencies": { "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } }, "istanbul-lib-source-maps": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "dependencies": { "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" } }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "istanbul-reports": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { "handlebars": "^4.1.2" } }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "jshint": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.3.tgz", "integrity": "sha512-d8AoXcNNYzmm7cdmulQ3dQApbrPYArtVBO6n4xOICe4QsXGNHCAKDcFORzqP52LhK61KX0VhY39yYzCsNq+bxQ==", "dev": true, "requires": { "cli": "~1.0.0", "console-browserify": "1.1.x", "exit": "0.1.x", "htmlparser2": "3.8.x", "lodash": "~4.17.11", "minimatch": "~3.0.2", "shelljs": "0.3.x", "strip-json-comments": "1.0.x" } }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" } }, "lcov-parse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=" }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" } }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==" }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { "chalk": "^2.0.1" } }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { "source-map": "^0.6.1" }, "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "mime-db": { "version": "1.42.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" }, "mime-types": { "version": "2.1.25", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", "requires": { "mime-db": "1.42.0" } }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } } }, "mocha": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.2.tgz", "integrity": "sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A==", "dev": true, "requires": { "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", "debug": "3.2.6", "diff": "3.5.0", "escape-string-regexp": "1.0.5", "find-up": "3.0.0", "glob": "7.1.3", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.13.1", "log-symbols": "2.2.0", "minimatch": "3.0.4", "mkdirp": "0.5.1", "ms": "2.1.1", "node-environment-flags": "1.0.5", "object.assign": "4.1.0", "strip-json-comments": "2.0.1", "supports-color": "6.0.0", "which": "1.3.1", "wide-align": "1.1.3", "yargs": "13.3.0", "yargs-parser": "13.1.1", "yargs-unparser": "1.6.0" }, "dependencies": { "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "supports-color": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, "neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, "nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "node-environment-flags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", "dev": true, "requires": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" } }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" }, "dependencies": { "resolve": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { "path-parse": "^1.0.6" } } } }, "nyc": { "version": "14.1.1", "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "requires": { "archy": "^1.0.0", "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", "cp-file": "^6.2.0", "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-hook": "^2.0.7", "istanbul-lib-instrument": "^3.3.0", "istanbul-lib-report": "^2.0.8", "istanbul-lib-source-maps": "^3.0.6", "istanbul-reports": "^2.2.4", "js-yaml": "^3.13.1", "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", "test-exclude": "^5.2.3", "uuid": "^3.3.2", "yargs": "^13.2.2", "yargs-parser": "^13.0.0" }, "dependencies": { "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "uuid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true } } }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-inspect": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", "has-symbols": "^1.0.0", "object-keys": "^1.0.11" } }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.5.1" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true } } }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "p-limit": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "package-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", "dev": true, "requires": { "graceful-fs": "^4.1.15", "hasha": "^3.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" } }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" } }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { "find-up": "^3.0.0" } }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "psl": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "read-pkg-up": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" } }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" } }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { "resolve": "^1.1.6" } }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { "es6-error": "^4.0.1" } }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.0", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" }, "dependencies": { "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } } } }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "shelljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", "dev": true }, "should": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/should/-/should-9.0.2.tgz", "integrity": "sha1-tVD2keccZniODpbp9yHVi+aSDlo=", "dev": true, "requires": { "should-equal": "^1.0.0", "should-format": "^1.0.0", "should-type": "^1.0.0" } }, "should-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz", "integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=", "dev": true, "requires": { "should-type": "^1.0.0" } }, "should-format": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/should-format/-/should-format-1.0.0.tgz", "integrity": "sha1-CjDNq0o70UJ7vMuLc4VnvacpDXg=", "dev": true, "requires": { "should-type": "^1.0.0" } }, "should-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", "dev": true }, "shx": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.2.tgz", "integrity": "sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==", "dev": true, "requires": { "es6-object-assign": "^1.0.3", "minimist": "^1.2.0", "shelljs": "^0.8.1" }, "dependencies": { "shelljs": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "dev": true, "requires": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" } } } }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "sinon": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.5.2.tgz", "integrity": "sha1-nKvGx4vfRF1/gxHVSWhi+VRoxPg=", "dev": true, "requires": { "buster-format": "~0.5" } }, "sinon-restore": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sinon-restore/-/sinon-restore-1.0.1.tgz", "integrity": "sha1-mZx7q3f0XdewOCfKYoax9NAw1cU=", "dev": true, "requires": { "sinon": "1.5.2" } }, "spawn-wrap": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", "dev": true, "requires": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", "os-homedir": "^1.0.1", "rimraf": "^2.6.2", "signal-exit": "^3.0.2", "which": "^1.3.0" } }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" } }, "string.prototype.trimleft": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", "dev": true, "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1" } }, "string.prototype.trimright": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", "dev": true, "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1" } }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", "dev": true }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "requires": { "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", "require-main-filename": "^2.0.0" } }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" }, "dependencies": { "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "uglify-js": { "version": "3.6.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.9.tgz", "integrity": "sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw==", "dev": true, "optional": true, "requires": { "commander": "~2.20.3", "source-map": "~0.6.1" }, "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "optional": true } } }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { "punycode": "^2.1.0" } }, "uuid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { "string-width": "^1.0.2 || 2" } }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yargs": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.1" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "yargs-parser": { "version": "13.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "yargs-unparser": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, "requires": { "flat": "^4.1.0", "lodash": "^4.17.15", "yargs": "^13.3.0" } } } } node-coveralls-3.0.9/package.json000066400000000000000000000037251356726145400167520ustar00rootroot00000000000000{ "name": "coveralls", "description": "takes json-cov output into stdin and POSTs to coveralls.io", "keywords": [ "coverage", "coveralls" ], "version": "3.0.9", "bugs": { "url": "https://github.com/nickmerwin/node-coveralls/issues" }, "scripts": { "lint": "jshint ./lib ./test ./index.js", "mocha": "_mocha -b -R spec", "test-cov": "nyc npm run mocha", "test-coveralls": "nyc npm run mocha && shx cat ./coverage/lcov.info | node ./bin/coveralls.js --verbose", "test": "npm run lint && npm run mocha" }, "bin": { "coveralls": "./bin/coveralls.js" }, "maintainers": [ "Nick Merwin (https://coveralls.io)" ], "contributors": [ "Gregg Caines (http://caines.ca)", "Joshua Ma (http://joshma.com)", "Alan Gutierrez (http://www.prettyrobots.com/)", "Kir Belevich (https://github.com/svg)", "elliotcable (http://elliottcable.name/)", "Slotos (http://slotos.net)", "mattjmorrison (http://mattjmorrison.com)", "Arpad Borsos (http://swatinem.de/)", "Adam Moss (https://github.com/adam-moss)" ], "dependencies": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.0", "request": "^2.88.0" }, "devDependencies": { "jshint": "^2.10.3", "mocha": "^6.2.2", "nyc": "^14.1.1", "should": "^9.0.2", "shx": "^0.3.2", "sinon-restore": "^1.0.1" }, "engines": { "node": ">=6" }, "main": "index.js", "directories": { "test": "test" }, "repository": { "type": "git", "url": "git://github.com/nickmerwin/node-coveralls.git" }, "author": "Gregg Caines", "license": "BSD-2-Clause", "nyc": { "reporter": [ "lcov", "text-summary" ] }, "files": [ "{bin,lib}/*.js", "index.js" ] } node-coveralls-3.0.9/test/000077500000000000000000000000001356726145400154345ustar00rootroot00000000000000node-coveralls-3.0.9/test/convertLcovToCoveralls.js000066400000000000000000000143011356726145400224530ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const path = require('path'); const should = require('should'); const logDriver = require('log-driver'); const { convertLcovToCoveralls, getOptions } = require('..'); logDriver({ level: false }); describe('convertLcovToCoveralls', () => { it('should convert a simple lcov file', done => { delete process.env.TRAVIS; const lcovpath = path.join(__dirname, '/../fixtures/onefile.lcov'); const input = fs.readFileSync(lcovpath, 'utf8'); const libpath = path.join(__dirname, '/../fixtures/lib'); convertLcovToCoveralls(input, { filepath: libpath }, (err, output) => { should.not.exist(err); output.source_files[0].name.should.equal('index.js'); output.source_files[0].source.split('\n').length.should.equal(173); output.source_files[0].coverage[54].should.equal(0); output.source_files[0].coverage[60].should.equal(0); done(); }); }); it('should pass on all appropriate parameters from the environment', done => { delete process.env.TRAVIS; process.env.COVERALLS_GIT_COMMIT = 'GIT_HASH'; process.env.COVERALLS_GIT_BRANCH = 'master'; process.env.COVERALLS_SERVICE_NAME = 'SERVICE_NAME'; process.env.COVERALLS_SERVICE_JOB_ID = 'SERVICE_JOB_ID'; process.env.COVERALLS_REPO_TOKEN = 'REPO_TOKEN'; process.env.CI_PULL_REQUEST = 'https://github.com/fake/fake/pulls/123'; process.env.COVERALLS_PARALLEL = 'true'; getOptions((err, options) => { const lcovpath = path.join(__dirname, '/../fixtures/onefile.lcov'); const input = fs.readFileSync(lcovpath, 'utf8'); const libpath = 'fixtures/lib'; should.not.exist(err); options.filepath = libpath; convertLcovToCoveralls(input, options, (err, output) => { should.not.exist(err); output.service_pull_request.should.equal('123'); output.parallel.should.equal(true); //output.git.should.equal("GIT_HASH"); done(); }); }); }); it('should work with a relative path as well', done => { delete process.env.TRAVIS; const lcovpath = path.join(__dirname, '/../fixtures/onefile.lcov'); const input = fs.readFileSync(lcovpath, 'utf8'); const libpath = 'fixtures/lib'; convertLcovToCoveralls(input, { filepath: libpath }, (err, output) => { should.not.exist(err); output.source_files[0].name.should.equal('index.js'); output.source_files[0].source.split('\n').length.should.equal(173); done(); }); }); it('should convert absolute input paths to relative', done => { delete process.env.TRAVIS; const lcovpath = path.join(__dirname, '/../fixtures/istanbul.lcov'); const input = fs.readFileSync(lcovpath, 'utf8'); const libpath = '/Users/deepsweet/Dropbox/projects/svgo/lib'; const sourcepath = path.resolve(libpath, 'svgo/config.js'); const originalReadFileSync = fs.readFileSync; fs.readFileSync = (filepath, ...args) => { if (filepath === sourcepath) { return ''; } return originalReadFileSync.apply(fs, args); }; const originalExistsSync = fs.existsSync; fs.existsSync = () => true; convertLcovToCoveralls(input, { filepath: libpath }, (err, output) => { fs.readFileSync = originalReadFileSync; fs.existsSync = originalExistsSync; should.not.exist(err); output.source_files[0].name.should.equal(path.posix.join("svgo", "config.js")); done(); }); }); it('should handle branch coverage data', done => { process.env.TRAVIS_JOB_ID = -1; const lcovpath = path.join(__dirname, '/../fixtures/istanbul.lcov'); const input = fs.readFileSync(lcovpath, 'utf8'); const libpath = '/Users/deepsweet/Dropbox/projects/svgo/lib'; const sourcepath = path.resolve(libpath, 'svgo/config.js'); const originalReadFileSync = fs.readFileSync; fs.readFileSync = (filepath, ...args) => { if (filepath === sourcepath) { return ''; } return originalReadFileSync.apply(fs, args); }; const originalExistsSync = fs.existsSync; fs.existsSync = () => true; convertLcovToCoveralls(input, { filepath: libpath }, (err, output) => { fs.readFileSync = originalReadFileSync; fs.existsSync = originalExistsSync; should.not.exist(err); output.source_files[0].branches.slice(0, 8).should.eql([18, 1, 0, 85, 18, 1, 1, 2]); done(); }); }); it('should ignore files that do not exists', done => { delete process.env.TRAVIS; const lcovpath = path.join(__dirname, '/../fixtures/istanbul.lcov'); const input = fs.readFileSync(lcovpath, 'utf8'); const libpath = '/Users/deepsweet/Dropbox/projects/svgo/lib'; const sourcepath = path.resolve(libpath, 'svgo/config.js'); const originalReadFileSync = fs.readFileSync; fs.readFileSync = (filepath, ...args) => { if (filepath === sourcepath) { return ''; } return originalReadFileSync.apply(fs, args); }; const originalExistsSync = fs.existsSync; fs.existsSync = () => false; convertLcovToCoveralls(input, { filepath: libpath }, (err, output) => { fs.readFileSync = originalReadFileSync; fs.existsSync = originalExistsSync; should.not.exist(err); output.source_files.should.be.empty(); done(); }); }); it('should parse file paths concatenated by typescript and ng 2', done => { process.env.TRAVIS_JOB_ID = -1; const lcovpath = path.join(__dirname, '/../fixtures/istanbul.remap.lcov'); const input = fs.readFileSync(lcovpath, 'utf8'); const libpath = '/Users/deepsweet/Dropbox/projects/svgo/lib'; const sourcepath = path.resolve(libpath, 'svgo/config.js'); const originalReadFileSync = fs.readFileSync; fs.readFileSync = (filepath, ...args) => { if (filepath === sourcepath) { return ''; } return originalReadFileSync.apply(fs, args); }; const originalExistsSync = fs.existsSync; fs.existsSync = () => true; convertLcovToCoveralls(input, { filepath: libpath }, (err, output) => { fs.readFileSync = originalReadFileSync; fs.existsSync = originalExistsSync; should.not.exist(err); output.source_files[0].name.should.equal(path.posix.join('svgo', 'config.js')); done(); }); }); }); node-coveralls-3.0.9/test/detectLocalGit.js000066400000000000000000000036341356726145400206670ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const path = require('path'); const should = require('should'); const detectLocalGit = require('../lib/detectLocalGit'); const ORIGINAL_CWD = process.cwd(); const TEST_DIR = path.resolve(__dirname); const TEMP_GIT_DIR = path.join(TEST_DIR, '.git'); describe('detectLocalGit', () => { before(() => { _makeTempGitDir(); process.chdir(TEST_DIR); }); after(() => { _cleanTempGitDir(); process.chdir(ORIGINAL_CWD); }); it('should get commit hash from packed-refs when refs/heads/master does not exist', () => { const results = detectLocalGit(); should.exist(results); (results).should.deepEqual({ git_commit: '0000000000000000ffffffffffffffffffffffff', git_branch: 'master' }); }); }); function _makeTempGitDir() { _cleanTempGitDir(); const dir = TEMP_GIT_DIR; fs.mkdirSync(dir); const HEAD = path.join(dir, 'HEAD'); const packedRefs = path.join(dir, 'packed-refs'); fs.writeFileSync(HEAD, 'ref: refs/heads/master'); fs.writeFileSync(packedRefs, '' + '# pack-refs with: peeled fully-peeled\n' + '0000000000000000000000000000000000000000 refs/heads/other/ref\n' + '0000000000000000ffffffffffffffffffffffff refs/heads/master\n' + 'ffffffffffffffffffffffffffffffffffffffff refs/remotes/origin/other\n'); } function _cleanTempGitDir() { _deleteFolderRecursive(TEMP_GIT_DIR); } function _deleteFolderRecursive(dir) { if (!dir.includes(path.normalize('node-coveralls/test'))) { throw new Error(`Tried to clean a temp git directory that did not match path: ${path.normalize('node-coveralls/test')}`); } if (fs.existsSync(dir)) { fs.readdirSync(dir).forEach(file => { const curPath = path.join(dir, file); if (fs.lstatSync(curPath).isDirectory()) { // recurse _deleteFolderRecursive(curPath); } else { // delete file fs.unlinkSync(curPath); } }); fs.rmdirSync(dir); } } node-coveralls-3.0.9/test/fetchGitData.js000066400000000000000000000116461356726145400203310ustar00rootroot00000000000000'use strict'; const should = require('should'); const fetchGitData = require('../lib/fetchGitData'); const { getOptions } = require('..'); describe('fetchGitData', () => { beforeEach(() => { process.env = { PATH: process.env.PATH }; }); it('should throw an error when no data is passed', () => { fetchGitData.should.throw(/fetchGitData requires a callback/); }); it('should throw an error when no git context is provided', done => { fetchGitData(undefined, err => { err.should.match(/No options passed/); done(); }); }); it('should throw an error if no head is provided', done => { fetchGitData({ }, err => { err.should.match(/You must provide the head/); done(); }); }); it('should throw an error if no head.id is provided', done => { fetchGitData({ head: {} }, err => { err.should.match(/You must provide the head.id/); done(); }); }); it('should return default values', done => { fetchGitData({ head: { id: 'COMMIT_HASH' } }, (err, options) => { should.not.exist(err); options.should.eql({ 'head': { 'id': 'COMMIT_HASH', 'author_name': 'Unknown Author', 'author_email': '', 'committer_name': 'Unknown Committer', 'committer_email': '', 'message': 'Unknown Commit Message' }, 'branch': '', 'remotes': [] }); done(); }); }); it('should override default values', done => { fetchGitData({ 'head': { 'id': 'COMMIT_HASH', 'author_name': 'MY AUTHOR', 'author_email': '', 'committer_name': 'MY COMMITTER', 'committer_email': '', 'message': 'MY COMMIT MESSAGE' }, 'branch': 'TEST', 'remotes': [ { 'name': 'TEST', 'url': 'test-url' } ] }, (err, options) => { should.not.exist(err); options.should.eql({ 'head': { 'id': 'COMMIT_HASH', 'author_name': 'MY AUTHOR', 'author_email': '', 'committer_name': 'MY COMMITTER', 'committer_email': '', 'message': 'MY COMMIT MESSAGE' }, 'branch': 'TEST', 'remotes': [ { 'name': 'TEST', 'url': 'test-url' } ] }); done(); }); }); it('should convert git.branch to a string', done => { fetchGitData({ 'head': { 'id': 'COMMIT_HASH' }, 'branch': { 'covert': 'to a string' } }, (err, str) => { should.not.exist(err); str.branch.should.be.String(); fetchGitData({ 'head': { 'id': 'COMMIT_HASH' }, 'branch': ['convert', 'to', 'a', 'string'] }, (err, str) => { should.not.exist(err); str.branch.should.be.String(); done(); }); }); }); it('should convert git.remotes to an array', done => { fetchGitData({ 'head': { 'id': 'COMMIT_HASH' }, 'remotes': 'convert from string to an array' }, (err, arr) => { should.not.exist(err); arr.remotes.should.be.instanceof(Array); fetchGitData({ 'head': { 'id': 'COMMIT_HASH' }, 'remotes': { 'convert': 'from object to an array' } }, (err, arr) => { should.not.exist(err); arr.remotes.should.be.instanceof(Array); done(); }); }); }); it('should save passed remotes', done => { fetchGitData({ 'head': { 'id': 'COMMIT_HASH' }, 'remotes': [ { 'name': 'test', 'url': 'https://my.test.url' } ] }, (err, options) => { should.not.exist(err); options.should.eql({ 'head': { 'id': 'COMMIT_HASH', 'author_name': 'Unknown Author', 'author_email': '', 'committer_name': 'Unknown Committer', 'committer_email': '', 'message': 'Unknown Commit Message' }, 'branch': '', 'remotes': [ { 'name': 'test', 'url': 'https://my.test.url' } ] }); done(); }); }); it('should execute git commands when a valid commit hash is given', done => { process.env.COVERALLS_GIT_COMMIT = 'HEAD'; process.env.COVERALLS_GIT_BRANCH = 'master'; getOptions((err, options) => { should.not.exist(err); options = options.git; options.head.should.be.Object(); options.head.author_name.should.not.equal('Unknown Author'); options.head.committer_name.should.not.equal('Unknown Committer'); options.head.message.should.not.equal('Unknown Commit Message'); options.branch.should.be.String(); options.should.have.property('remotes'); options.remotes.should.be.instanceof(Array); options.remotes.length.should.be.above(0); done(); }); }); }); node-coveralls-3.0.9/test/getOptions.js000066400000000000000000000521631356726145400201340ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const path = require('path'); const should = require('should'); const yaml = require('js-yaml'); const index = require('..'); const { getOptions, getBaseOptions } = index; describe('getBaseOptions', () => { beforeEach(() => { process.env = { PATH: process.env.PATH }; }); it('should set service_job_id if it exists', done => { testServiceJobId(getBaseOptions, done); }); it('should set git hash if it exists', done => { testGitHash(getBaseOptions, done); }); it('should set git branch if it exists', done => { testGitBranch(getBaseOptions, done); }); it('should detect current git hash if not passed in', done => { testGitHashDetection(getBaseOptions, done); }); it('should detect current git branch if not passed in', done => { testGitBranchDetection(getBaseOptions, done); }); it('should detect detached git head if no hash passed in', done => { testGitDetachedHeadDetection(getBaseOptions, done); }); it('should fail local Git detection if no .git directory', done => { testNoLocalGit(getBaseOptions, done); }); it('should set repo_token if it exists', done => { testRepoToken(getBaseOptions, done); }); it('should detect repo_token if not passed in', done => { testRepoTokenDetection(getBaseOptions, done); }); it('should set service_name if it exists', done => { testServiceName(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on travis-ci', done => { testTravisCi(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on jenkins', done => { testJenkins(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on circleci', done => { testCircleCi(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on codeship', done => { testCodeship(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on drone', done => { testDrone(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on wercker', done => { testWercker(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on Buildkite', done => { testBuildkite(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on Azure Pipelines', done => { testAzurePipelines(getBaseOptions, done); }); }); describe('getOptions', () => { beforeEach(() => { process.env = { PATH: process.env.PATH }; }); it('should require a callback', done => { ((() => { getOptions(); })).should.throw(); done(); }); it('should get a filepath if there is one', done => { index.options._ = ['somepath']; getOptions((err, options) => { should.not.exist(err); options.filepath.should.equal('somepath'); done(); }); }); it('should get a filepath if there is one, even in verbose mode', done => { index.options.verbose = 'true'; index.options._ = ['somepath']; getOptions((err, options) => { should.not.exist(err); options.filepath.should.equal('somepath'); done(); }); }); it('should set service_job_id if it exists', done => { testServiceJobId(getOptions, done); }); it('should set git hash if it exists', done => { testGitHash(getOptions, done); }); it('should set git branch if it exists', done => { testGitBranch(getOptions, done); }); it('should detect current git hash if not passed in', done => { testGitHashDetection(getOptions, done); }); it('should detect current git branch if not passed in', done => { testGitBranchDetection(getOptions, done); }); it('should detect detached git head if no hash passed in', done => { testGitDetachedHeadDetection(getOptions, done); }); it('should fail local Git detection if no .git directory', done => { testNoLocalGit(getOptions, done); }); it('should set repo_token if it exists', done => { testRepoToken(getOptions, done); }); it('should detect repo_token if not passed in', done => { testRepoTokenDetection(getOptions, done); }); it('should set paralell if env let set', done => { testParallel(getOptions, done); }); it('should set flag_name if it exists', done => { testFlagName(getOptions, done); }); it('should set service_name if it exists', done => { testServiceName(getOptions, done); }); it('should set service_pull_request if it exists', done => { testServicePullRequest(getOptions, done); }); it('should set service_name and service_job_id if it\'s running on travis-ci', done => { testTravisCi(getOptions, done); }); it('should set service_name and service_job_id if it\'s running on jenkins', done => { testJenkins(getOptions, done); }); it('should set service_name and service_job_id if it\'s running on circleci', done => { testCircleCi(getOptions, done); }); it('should set service_name and service_job_id if it\'s running on codeship', done => { testCodeship(getOptions, done); }); it('should set service_name and service_job_id if it\'s running on drone', done => { testDrone(getBaseOptions, done); }); it('should set service_name and service_job_id if it\'s running on wercker', done => { testWercker(getOptions, done); }); it('should set service_name and service_job_id if it\'s running on Gitlab', done => { testGitlab(getOptions, done); }); it ("should set service_name and service_job_id if it's running on AppVeyor", done => { testAppVeyor(getOptions, done); }); it('should set service_name and service_job_id if it\'s running via Surf', done => { testSurf(getOptions, done); }); it('should set service_name and service_job_id if it\'s running via Buildkite', done => { testBuildkite(getOptions, done); }); it('should set service_name and service_job_id if it\'s running via Semaphore', done => { testSemaphore(getOptions, done); }); it('should set service_name and service_job_id if it\'s running via Azure Pipelines', done => { testAzurePipelines(getOptions, done); }); it('should override set options with user options', done => { const userOptions = { service_name: 'OVERRIDDEN_SERVICE_NAME' }; process.env.COVERALLS_SERVICE_NAME = 'SERVICE_NAME'; getOptions((err, options) => { should.not.exist(err); options.service_name.should.equal('OVERRIDDEN_SERVICE_NAME'); done(); }, userOptions); }); }); const testServiceJobId = (sut, done) => { process.env.COVERALLS_SERVICE_JOB_ID = 'SERVICE_JOB_ID'; sut((err, options) => { should.not.exist(err); options.service_job_id.should.equal('SERVICE_JOB_ID'); done(); }); }; const testGitHash = (sut, done) => { process.env.COVERALLS_GIT_COMMIT = 'e3e3e3e3e3e3e3e3e'; sut((err, options) => { should.not.exist(err); options.git.head.id.should.equal('e3e3e3e3e3e3e3e3e'); done(); }); }; const testGitDetachedHeadDetection = (sut, done) => { const localGit = ensureLocalGitContext({ detached: true }); sut((err, options) => { should.not.exist(err); options.git.head.id.should.equal(localGit.id); localGit.wrapUp(); done(); }); }; const testGitHashDetection = (sut, done) => { const localGit = ensureLocalGitContext(); sut((err, options) => { should.not.exist(err); options.git.head.id.should.equal(localGit.id); localGit.wrapUp(); done(); }); }; const testGitBranch = (sut, done) => { process.env.COVERALLS_GIT_COMMIT = 'e3e3e3e3e3e3e3e3e'; process.env.COVERALLS_GIT_BRANCH = 'master'; sut((err, options) => { should.not.exist(err); options.git.branch.should.equal('master'); done(); }); }; const testGitBranchDetection = (sut, done) => { const localGit = ensureLocalGitContext(); sut((err, options) => { should.not.exist(err); if (localGit.branch) { options.git.branch.should.equal(localGit.branch); } else { options.git.should.not.have.key('branch'); } localGit.wrapUp(); done(); }); }; const testNoLocalGit = (sut, done) => { const localGit = ensureLocalGitContext({ noGit: true }); sut((err, options) => { should.not.exist(err); options.should.not.have.property('git'); localGit.wrapUp(); done(); }); }; const testRepoToken = (sut, done) => { process.env.COVERALLS_REPO_TOKEN = 'REPO_TOKEN'; sut((err, options) => { should.not.exist(err); options.repo_token.should.equal('REPO_TOKEN'); done(); }); }; const testParallel = (sut, done) => { process.env.COVERALLS_PARALLEL = 'true'; sut((err, options) => { should.not.exist(err); options.parallel.should.equal(true); done(); }); }; const testFlagName = (sut, done) => { process.env.COVERALLS_FLAG_NAME = 'test flag'; sut((err, options) => { should.not.exist(err); options.flag_name.should.equal('test flag'); done(); }); }; const testRepoTokenDetection = (sut, done) => { const file = path.join(process.cwd(), '.coveralls.yml'); let token; let service_name; let synthetic = false; if (fs.existsSync(file)) { const coverallsYmlDoc = yaml.safeLoad(fs.readFileSync(file, 'utf8')); token = coverallsYmlDoc.repo_token; if (coverallsYmlDoc.service_name) { service_name = coverallsYmlDoc.service_name; } } else { token = 'REPO_TOKEN'; service_name = 'travis-pro'; fs.writeFileSync(file, `repo_token: ${token}\nservice_name: ${service_name}`); synthetic = true; } sut((err, options) => { should.not.exist(err); options.repo_token.should.equal(token); if (service_name) { options.service_name.should.equal(service_name); } if (synthetic) { fs.unlink(file, done); } }); }; const testServiceName = (sut, done) => { process.env.COVERALLS_SERVICE_NAME = 'SERVICE_NAME'; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('SERVICE_NAME'); done(); }); }; const testServicePullRequest = (sut, done) => { process.env.CI_PULL_REQUEST = 'https://github.com/fake/fake/pulls/123'; sut((err, options) => { should.not.exist(err); options.service_pull_request.should.equal('123'); done(); }); }; const testTravisCi = (sut, done) => { process.env.TRAVIS = 'TRUE'; process.env.TRAVIS_JOB_ID = '1234'; process.env.TRAVIS_PULL_REQUEST = '123'; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('travis-ci'); options.service_job_id.should.equal('1234'); options.service_pull_request.should.equal('123'); done(); }); }; const testJenkins = (sut, done) => { process.env.JENKINS_URL = 'something'; process.env.BUILD_ID = '1234'; process.env.GIT_COMMIT = 'a12s2d3df4f435g45g45g67h5g6'; process.env.GIT_BRANCH = 'master'; const git = { head: { id: 'a12s2d3df4f435g45g45g67h5g6', author_name: 'Unknown Author', author_email: '', committer_name: 'Unknown Committer', committer_email: '', message: 'Unknown Commit Message' }, branch: 'master', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('jenkins'); options.service_job_id.should.equal('1234'); options.git.should.eql(git); done(); }); }; const testCircleCi = (sut, done) => { process.env.CIRCLECI = true; process.env.CIRCLE_BRANCH = 'master'; process.env.CIRCLE_BUILD_NUM = '1234'; process.env.CIRCLE_SHA1 = 'e3e3e3e3e3e3e3e3e'; process.env.CI_PULL_REQUEST = 'http://github.com/node-coveralls/pull/3'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'Unknown Committer', committer_email: '', message: 'Unknown Commit Message' }, branch: 'master', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('circleci'); options.service_job_id.should.equal('1234'); options.service_pull_request.should.equal('3'); options.git.should.eql(git); done(); }); }; const testCodeship = (sut, done) => { process.env.CI_NAME = 'codeship'; process.env.CI_BUILD_NUMBER = '1234'; process.env.CI_COMMIT_ID = 'e3e3e3e3e3e3e3e3e'; process.env.CI_BRANCH = 'master'; process.env.CI_COMMITTER_NAME = 'John Doe'; process.env.CI_COMMITTER_EMAIL = 'jd@example.com'; process.env.CI_COMMIT_MESSAGE = 'adadadadadadadadadad'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'John Doe', committer_email: 'jd@example.com', message: 'adadadadadadadadadad' }, branch: 'master', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('codeship'); options.service_job_id.should.equal('1234'); options.git.should.eql(git); done(); }); }; const testDrone = (sut, done) => { process.env.DRONE = true; process.env.DRONE_BUILD_NUMBER = '1234'; process.env.DRONE_COMMIT = 'e3e3e3e3e3e3e3e3e'; process.env.DRONE_BRANCH = 'master'; process.env.DRONE_PULL_REQUEST = '3'; process.env.DRONE_COMMIT_AUTHOR = 'john doe'; process.env.DRONE_COMMIT_AUTHOR_EMAIL = 'john@doe.com'; process.env.DRONE_COMMIT_MESSAGE = 'msgmsgmsg'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'john doe', committer_email: 'john@doe.com', message: 'msgmsgmsg' }, branch: 'master', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('drone'); options.service_job_id.should.equal('1234'); options.git.should.eql(git); done(); }); }; const testWercker = (sut, done) => { process.env.WERCKER = true; process.env.WERCKER_BUILD_ID = '1234'; process.env.WERCKER_GIT_COMMIT = 'e3e3e3e3e3e3e3e3e'; process.env.WERCKER_GIT_BRANCH = 'master'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'Unknown Committer', committer_email: '', message: 'Unknown Commit Message' }, branch: 'master', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('wercker'); options.service_job_id.should.equal('1234'); options.git.should.eql(git); done(); }); }; const testGitlab = (sut, done) => { process.env.GITLAB_CI = true; process.env.CI_BUILD_NAME = 'spec:one'; process.env.CI_BUILD_ID = '1234'; process.env.CI_BUILD_REF = 'e3e3e3e3e3e3e3e3e'; process.env.CI_BUILD_REF_NAME = 'feature'; process.env.CI_MERGE_REQUEST_IID = '1'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'Unknown Committer', committer_email: '', message: 'Unknown Commit Message' }, branch: 'feature', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('gitlab-ci'); options.service_job_id.should.equal('1234'); options.service_pull_request.should.equal('1'); options.git.should.eql(git); done(); }); }; const testAppVeyor = function(sut, done) { process.env.APPVEYOR = true; process.env.APPVEYOR_BUILD_ID = "1234"; process.env.APPVEYOR_BUILD_NUMBER = "5678"; process.env.APPVEYOR_REPO_COMMIT = "e3e3e3e3e3e3e3e3e"; process.env.APPVEYOR_REPO_BRANCH = "feature"; sut(function(err, options){ options.service_name.should.equal("appveyor"); options.service_job_id.should.equal("1234"); options.service_job_number.should.equal("5678"); options.git.should.eql({ head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'Unknown Committer', committer_email: '', message: 'Unknown Commit Message' }, branch: 'feature', remotes: [] }); done(); }); }; const testSurf = (sut, done) => { process.env.CI_NAME = 'surf'; process.env.SURF_SHA1 = 'e3e3e3e3e3e3e3e3e'; process.env.SURF_REF = 'feature'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'Unknown Committer', committer_email: '', message: 'Unknown Commit Message' }, branch: 'feature', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('surf'); options.git.should.eql(git); done(); }); }; const testBuildkite = (sut, done) => { process.env.BUILDKITE = true; process.env.BUILDKITE_BUILD_NUMBER = '1234'; process.env.BUILDKITE_COMMIT = 'e3e3e3e3e3e3e3e3e'; process.env.BUILDKITE_BRANCH = 'feature'; process.env.BUILDKITE_BUILD_CREATOR = 'john doe'; process.env.BUILDKITE_BUILD_CREATOR_EMAIL = 'john@doe.com'; process.env.BUILDKITE_MESSAGE = 'msgmsgmsg'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'john doe', committer_email: 'john@doe.com', message: 'msgmsgmsg' }, branch: 'feature', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('buildkite'); options.git.should.eql(git); done(); }); }; const testSemaphore = (sut, done) => { process.env.SEMAPHORE = true; process.env.SEMAPHORE_BUILD_NUMBER = '1234'; process.env.REVISION = 'e3e3e3e3e3e3e3e3e'; process.env.BRANCH_NAME = 'master'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'Unknown Committer', committer_email: '', message: 'Unknown Commit Message' }, branch: 'master', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('semaphore'); options.service_job_id.should.equal('1234'); options.git.should.eql(git); done(); }); }; const testAzurePipelines = (sut, done) => { process.env.TF_BUILD = 'true'; process.env.BUILD_SOURCEBRANCHNAME = 'hotfix'; process.env.BUILD_SOURCEVERSION = 'e3e3e3e3e3e3e3e3e'; process.env.BUILD_BUILDID = '1234'; process.env.SYSTEM_PULLREQUEST_PULLREQUESTNUMBER = '123'; const git = { head: { id: 'e3e3e3e3e3e3e3e3e', author_name: 'Unknown Author', author_email: '', committer_name: 'Unknown Committer', committer_email: '', message: 'Unknown Commit Message' }, branch: 'hotfix', remotes: [] }; sut((err, options) => { should.not.exist(err); options.service_name.should.equal('Azure Pipelines'); options.service_job_id.should.equal('1234'); options.service_pull_request.should.equal('123'); options.git.should.eql(git); done(); }); }; function ensureLocalGitContext(options) { const baseDir = process.cwd(); let dir = baseDir; let gitDir; while (path.resolve('/') !== dir) { gitDir = path.join(dir, '.git'); if (fs.existsSync(path.join(gitDir, 'HEAD'))) { break; } dir = path.dirname(dir); } options = options || {}; const synthetic = path.resolve('/') === dir; let gitHead; let content; let branch; let id; let wrapUp = () => {}; if (synthetic) { branch = 'synthetic'; id = '424242424242424242'; gitHead = path.join('.git', 'HEAD'); const gitBranch = path.join('.git', 'refs', 'heads', branch); fs.mkdirSync('.git'); if (options.detached) { fs.writeFileSync(gitHead, id, { encoding: 'utf8' }); } else { fs.mkdirSync(path.join('.git', 'refs')); fs.mkdirSync(path.join('.git', 'refs', 'heads')); fs.writeFileSync(gitHead, `ref: refs/heads/${branch}`, { encoding: 'utf8' }); fs.writeFileSync(gitBranch, id, { encoding: 'utf8' }); } wrapUp = () => { fs.unlinkSync(gitHead); if (!options.detached) { fs.unlinkSync(gitBranch); fs.rmdirSync(path.join('.git', 'refs', 'heads')); fs.rmdirSync(path.join('.git', 'refs')); } fs.rmdirSync('.git'); }; } else if (options.noGit) { fs.renameSync(gitDir, `${gitDir}.bak`); wrapUp = () => { fs.renameSync(`${gitDir}.bak`, gitDir); }; } else if (options.detached) { gitHead = path.join(gitDir, 'HEAD'); content = fs.readFileSync(gitHead, 'utf8').trim(); const b = (content.match(/^ref: refs\/heads\/(\S+)$/) || [])[1]; if (!b) { id = content; } else { id = fs.readFileSync(path.join(gitDir, 'refs', 'heads', b), 'utf8').trim(); fs.writeFileSync(gitHead, id, 'utf8'); wrapUp = () => { fs.writeFileSync(gitHead, content, 'utf8'); }; } } else { content = fs.readFileSync(path.join(gitDir, 'HEAD'), 'utf8').trim(); branch = (content.match(/^ref: refs\/heads\/(\S+)$/) || [])[1]; id = branch ? fs.readFileSync(path.join(gitDir, 'refs', 'heads', branch), 'utf8').trim() : content; } return { id, branch, wrapUp }; } node-coveralls-3.0.9/test/handleInput.js000066400000000000000000000050011356726145400202410ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const sysPath = require('path'); const should = require('should'); const sinon = require('sinon-restore'); const logDriver = require('log-driver'); const index = require('..'); logDriver({ level: false }); describe('handleInput', () => { afterEach(() => { sinon.restoreAll(); }); it('returns an error when there\'s an error getting options', done => { sinon.stub(index, 'getOptions', cb => cb('some error', {})); const path = sysPath.join(__dirname, '/../fixtures/onefile.lcov'); const input = fs.readFileSync(path, 'utf8'); index.handleInput(input, err => { err.should.equal('some error'); done(); }); }); it('returns an error when there\'s an error converting', done => { sinon.stub(index, 'getOptions', cb => cb(null, {})); sinon.stub(index, 'convertLcovToCoveralls', (input, options, cb) => { cb('some error'); }); const path = sysPath.join(__dirname, '/../fixtures/onefile.lcov'); const input = fs.readFileSync(path, 'utf8'); index.handleInput(input, err => { err.should.equal('some error'); done(); }); }); it('returns an error when there\'s an error sending', done => { sinon.stub(index, 'getOptions', cb => cb(null, {})); sinon.stub(index, 'sendToCoveralls', (postData, cb) => { cb('some error'); }); const path = sysPath.join(__dirname, '/../fixtures/onefile.lcov'); const input = fs.readFileSync(path, 'utf8'); index.handleInput(input, err => { err.should.equal('some error'); done(); }); }); it('returns an error when there\'s a bad status code', done => { sinon.stub(index, 'getOptions', cb => cb(null, {})); sinon.stub(index, 'sendToCoveralls', (postData, cb) => { cb(null, { statusCode: 500 }, 'body'); }); const path = sysPath.join(__dirname, '/../fixtures/onefile.lcov'); const input = fs.readFileSync(path, 'utf8'); index.handleInput(input, err => { err.should.equal('Bad response: 500 body'); done(); }); }); it('completes successfully when there are no errors', done => { sinon.stub(index, 'getOptions', cb => cb(null, {})); sinon.stub(index, 'sendToCoveralls', (postData, cb) => { cb(null, { statusCode: 200 }, 'body'); }); const path = sysPath.join(__dirname, '/../fixtures/onefile.lcov'); const input = fs.readFileSync(path, 'utf8'); index.handleInput(input, (err, body) => { should.not.exist(err); body.should.equal('body'); done(); }); }); }); node-coveralls-3.0.9/test/logger.js000066400000000000000000000017771356726145400172650ustar00rootroot00000000000000'use strict'; require('should')(); const index = require('..'); describe('logger', () => { it('should log at debug level when --verbose is set', () => { index.options.verbose = true; const logger = index.logger(); logger.level.should.equal('debug'); }); it('should log at debug level when NODE_COVERALLS_DEBUG is set in env', () => { index.options.verbose = false; process.env.NODE_COVERALLS_DEBUG = 1; const logger = index.logger(); logger.level.should.equal('debug'); }); it('should log at debug level when NODE_COVERALLS_DEBUG is set in env as a string', () => { index.options.verbose = false; process.env.NODE_COVERALLS_DEBUG = '1'; const logger = index.logger(); logger.level.should.equal('debug'); }); it('should log at warn level when NODE_COVERALLS_DEBUG not set and no --verbose', () => { index.options.verbose = false; process.env.NODE_COVERALLS_DEBUG = 0; const logger = index.logger(); logger.level.should.equal('error'); }); }); node-coveralls-3.0.9/test/sendToCoveralls.js000066400000000000000000000043501356726145400211030ustar00rootroot00000000000000'use strict'; const should = require('should'); const request = require('request'); const sinon = require('sinon-restore'); const logDriver = require('log-driver'); const index = require('..'); logDriver({ level: false }); describe('sendToCoveralls', () => { let realCoverallsHost; beforeEach(() => { realCoverallsHost = process.env.COVERALLS_ENDPOINT; }); afterEach(() => { sinon.restoreAll(); if (realCoverallsHost !== undefined) { process.env.COVERALLS_ENDPOINT = realCoverallsHost; } else { delete process.env.COVERALLS_ENDPOINT; } }); it('passes on the correct params to request.post', done => { sinon.stub(request, 'post', (obj, cb) => { obj.url.should.equal('https://coveralls.io/api/v1/jobs'); obj.form.should.eql({ json: '{"some":"obj"}' }); cb('err', 'response', 'body'); }); const obj = { 'some': 'obj' }; index.sendToCoveralls(obj, (err, response, body) => { err.should.equal('err'); response.should.equal('response'); body.should.equal('body'); done(); }); }); it('allows sending to enterprise url', done => { process.env.COVERALLS_ENDPOINT = 'https://coveralls-ubuntu.domain.com'; sinon.stub(request, 'post', (obj, cb) => { obj.url.should.equal('https://coveralls-ubuntu.domain.com/api/v1/jobs'); obj.form.should.eql({ json: '{"some":"obj"}' }); cb('err', 'response', 'body'); }); const obj = { 'some': 'obj' }; index.sendToCoveralls(obj, (err, response, body) => { err.should.equal('err'); response.should.equal('response'); body.should.equal('body'); done(); }); }); it('writes output to stdout when --stdout is passed', done => { const obj = { 'some': 'obj' }; // set up mock process.stdout.write temporarily const origStdoutWrite = process.stdout.write; process.stdout.write = function(string, ...args) { if (string === JSON.stringify(obj)) { process.stdout.write = origStdoutWrite; return done(); } origStdoutWrite.apply(this, args); }; index.options.stdout = true; index.sendToCoveralls(obj, (err, response) => { should.not.exist(err); response.statusCode.should.equal(200); }); }); });