From 9d68e23559b4c0245b05bb171c0de2064404a885 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Tue, 23 Jun 2020 21:32:14 -0700 Subject: [PATCH 01/24] Fix a vulnerability from a crafted argument to 'bunyan -p ARG' This was reported privately as: https://hackerone.com/reports/902739 bunyan - RCE via insecure command formatting After this change: % ./bin/bunyan -p "S'11;touch hacked ;'\\" bunyan: error: no matching PIDs found for "S'11;touch hacked ;'\" With bunyan's self-trace logging to show the escaped command: % BUNYAN_SELF_TRACE=1 ./bin/bunyan -p "S'11;touch hacked ;'\\" [bunyan self-trace] exec cmd: "ps -A -o pid,command | grep '[S]'\\''11;touch hacked ;'\\''\\\\'" bunyan: error: no matching PIDs found for "S'11;touch hacked ;'\" [bunyan self-trace] cleanupAndExit(2, undefined) [bunyan self-trace] process.exit(2) Before this change these would create a "hacked" file in the current dir. --- CHANGES.md | 14 ++++++++++++++ bin/bunyan | 14 +++++++++++--- package.json | 17 +++++++++++------ 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 463f7667..08645671 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,20 @@ Known issues: (nothing yet) +## 2.0.3 (beta) + +- Fix a vulnerability from a crafted argument to 'bunyan -p ARG' + + This was reported privately as: + https://hackerone.com/reports/902739 + bunyan - RCE via insecure command formatting + + Previous to this version the 'bunyan' CLI was not escaping a given argument + to the '-p' option before executing `ps -A -o pid,command | grep '$ARG'` + which could lead to unintended execution. + + (This same change is also in bunyan@1.8.3.) + ## 2.0.2 (beta) - [issue #444] Fix the `bunyan` CLI to not duplicate the "HTTP/1.1 ..." status diff --git a/bin/bunyan b/bin/bunyan index 178f4938..4eca819b 100755 --- a/bin/bunyan +++ b/bin/bunyan @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * Copyright 2017 Trent Mick - * Copyright 2017 Joyent Inc. + * Copyright 2020 Trent Mick + * Copyright 2020 Joyent Inc. * * bunyan -- filter and pretty-print Bunyan log files (line-delimited JSON) * @@ -1221,7 +1221,15 @@ function processPids(opts, stylize, callback) { // own search. regex = '[' + regex[0] + ']' + regex.slice(1); } - exec(format('ps -A -o pid,command | grep \'%s\'', regex), + var cmd = format('ps -A -o pid,command | grep \'%s\'', + // Escape single-quotes to avoid breaking the grep arg quoting + // (leading to a possible *code execution*) and backslashes to + // avoid undoing that escaping. + regex.replace(/\\/g, '\\\\') + // JSSTYLED + .replace(/'/g, "'\\''")); + _selfTrace('exec cmd: %j', cmd); + exec(cmd, function (pidsErr, stdout, stderr) { if (pidsErr) { warn('bunyan: error getting PIDs for "%s": %s\n%s\n%s', diff --git a/package.json b/package.json index 00a48037..76b50f20 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,27 @@ { "name": "bunyan", - "version": "2.0.2", + "version": "2.0.3", "description": "a JSON logging library for node.js services", "author": "Trent Mick (http://trentm.com)", "main": "./lib/bunyan.js", "bin": { "bunyan": "./bin/bunyan" }, - "repository": { "type": "git", "url": "git://github.com/trentm/node-bunyan.git" }, - "engines": ["node >=0.10.0"], - "keywords": ["log", "logging", "log4j", "json", "bunyan"], + "engines": [ + "node >=0.10.0" + ], + "keywords": [ + "log", + "logging", + "log4j", + "json", + "bunyan" + ], "license": "MIT", - "dependencies": { "exeunt": "1.1.0" }, @@ -35,7 +41,6 @@ "verror": "1.3.3", "vasync": "1.4.3" }, - "scripts": { "test": "make test" } From 6cb828cfe9afc3ed4a5c60c6f9541cd7d7ca20f9 Mon Sep 17 00:00:00 2001 From: Chinmay Date: Wed, 24 Jun 2020 10:26:38 +0530 Subject: [PATCH 02/24] Fixed typo in README (#620) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 67caf1dc..5a87a3e6 100644 --- a/README.md +++ b/README.md @@ -411,7 +411,7 @@ log.addSerializers({req: reqSerializer}); A serializer function is passed unprotected objects that are passed to the `log.info`, `log.debug`, etc. call. This means a poorly written serializer -function can case side-effects. Logging shouldn't do that. Here are a few +function can cause side-effects. Logging shouldn't do that. Here are a few rules and best practices for serializer functions: - A serializer function *should never throw*. The bunyan library *does* From 89cda5beae9a88cc493dd4b242c7ffdc65906f7a Mon Sep 17 00:00:00 2001 From: Randall Date: Wed, 24 Jun 2020 01:22:12 -0400 Subject: [PATCH 03/24] Add tip about --no-optional (#625) Installing with `--no-optional` can reduce a bunyan 1.x install from ~3-4MB to ~450kB. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 5a87a3e6..48f637f1 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,12 @@ all versions of Bunyan logs. Therefore you might want to `npm install -g bunyan` to get the bunyan CLI on your PATH, then use local bunyan installs for node.js library usage of bunyan in your apps. +**Tip**: Installing without optional dependencies can dramatically reduce +bunyan's install size. **dtrace-provider** is used for dtrace features, +**mv** is used for RotatingFileStream, and **moment** is used for local time. +If you don't need these features, consider installing with the +`--no-optional` flag. + # Features From 44c0491501583a696e5dc675d91a7301993ad199 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Fri, 26 Jun 2020 21:16:40 -0700 Subject: [PATCH 04/24] Fix a test failure in node >=12 due to util.format edge case change THis is a slight change in how `log.info(undefined, 'some message')` is rendered by Bunyan, but that's been a fact since node v12. https://github.com/nodejs/node/pull/23162 was the relevant change. --- test/log.test.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/test/log.test.js b/test/log.test.js index 64414636..ace863c2 100644 --- a/test/log.test.js +++ b/test/log.test.js @@ -89,11 +89,20 @@ var names = ['trace', 'debug', 'info', 'warn', 'error', 'fatal']; var fields = {one: 'un'}; test('log.info(undefined, )', function (t) { + // https://github.com/nodejs/node/pull/23162 (starting in node v12) changed + // util.format() handling such that this test case expected string differs. + var expect; + if (Number(process.versions.node.split('.')[0]) >= 12) { + expect = 'undefined some message'; + } else { + expect = 'undefined \'some message\''; + } + names.forEach(function (lvl) { log3[lvl].call(log3, undefined, 'some message'); var rec = catcher.records[catcher.records.length - 1]; - t.equal(rec.msg, 'undefined \'some message\'', - format('log.%s msg is "some message"', lvl)); + t.equal(rec.msg, expect, + format('log.%s(undefined, "some message")', lvl)); }); t.end(); }); From b38eae896f1b15d3d4f544f467d9e1c0c858a011 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Fri, 26 Jun 2020 22:18:40 -0700 Subject: [PATCH 05/24] Fix test suite failure in node v14 due to util.inspect change with circular refs In https://github.com/nodejs/node/pull/27685 (part of node v14), how objects with circular references are stringified with `util.inspect` changed. --- test/cycles.test.js | 24 +++++++++++++++++++----- test/log.test.js | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/test/cycles.test.js b/test/cycles.test.js index 3f1cda6d..293de788 100644 --- a/test/cycles.test.js +++ b/test/cycles.test.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick. * * Make sure cycles are safe. */ @@ -27,7 +27,6 @@ outstr.end = function (c) { this.emit('end'); }; -// these are lacking a few fields that will probably never match var expect = [ { @@ -67,24 +66,39 @@ var log = new Logger({ }); test('cycles', function (t) { + var rec; + outstr.on('end', function () { output.forEach(function (o, i) { // Drop variable parts for comparison. delete o.hostname; delete o.pid; delete o.time; - // Hack object/dict comparison: JSONify. + + // In change https://github.com/nodejs/node/pull/27685 (part of + // node v14), how objects with circular references are stringified + // with `util.inspect` changed. + if (Number(process.versions.node.split('.')[0]) >= 14) { + expect[i].msg = expect[i].msg.replace( + // JSSTYLED + /{ bang: 'boom', KABOOM: \[Circular\] }/, + ' { bang: \'boom\', KABOOM: [Circular *1] }' + ); + } + t.equal(JSON.stringify(o), JSON.stringify(expect[i]), - 'log item ' + i + ' matches'); + 'log record ' + i + ' matches'); }); t.end(); }); var obj = { bang: 'boom' }; - obj.KABOOM = obj; + obj.KABOOM = obj; // This creates a circular reference. + log.info('bango', obj); log.info('kaboom', obj.KABOOM); log.info(obj); + outstr.end(); t.ok('did not throw'); }); diff --git a/test/log.test.js b/test/log.test.js index ace863c2..55906513 100644 --- a/test/log.test.js +++ b/test/log.test.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick. * * Test the `log.trace(...)`, `log.debug(...)`, ..., `log.fatal(...)` API. */ From a5cd893346124b48cc3a521a0ecc462fd219a73f Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Fri, 26 Jun 2020 22:23:15 -0700 Subject: [PATCH 06/24] travis: test with more node versions --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index cb67b54f..808fc65b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,11 +9,12 @@ env: node_js: - '0.10' - - '0.12' - '4' - - '5' - '6' - - 'node' + - '8' + - '10' + - '12' + - '14' # Gives us faster boot time, see https://docs.travis-ci.com/user/ci-environment/ From 28be9a0f8f70ff9e0b747adc212eb1f6beaf39b5 Mon Sep 17 00:00:00 2001 From: douira Date: Sat, 27 Jun 2020 07:36:05 +0200 Subject: [PATCH 07/24] Typo fixes in readme and contributing.md (#588) fixes #576 --- CONTRIBUTING.md | 2 +- README.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 628c7c29..532c5be2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,7 +24,7 @@ If you want to help me here, great! Thank you! Some ideas: place to start. - [Once I've made a once over - triaging](https://github.com/trentm/node-bunyan/issues/335) and consolodating + triaging](https://github.com/trentm/node-bunyan/issues/335) and consolidating issues and PRs, volunteering for issues in a particular [component](#component) with which you have familiarity would be great. diff --git a/README.md b/README.md index 48f637f1..39ed2beb 100644 --- a/README.md +++ b/README.md @@ -423,7 +423,7 @@ rules and best practices for serializer functions: - A serializer function *should never throw*. The bunyan library *does* protect somewhat from this: if the serializer throws an error, then bunyan will (a) write an ugly message on stderr (along with the traceback), - and (b) the field in the log record will be replace with a short error message. + and (b) the field in the log record will be replaced with a short error message. For example: ``` @@ -445,7 +445,7 @@ rules and best practices for serializer functions: - A serializer function *should never mutate the given object*. Doing so will change the object in your application. -- A serializer function *should be defensive*. In my experience it is common to +- A serializer function *should be defensive*. In my experience, it is common to set a serializer in an app, say for field name "foo", and then accidentally have a log line that passes a "foo" that is undefined, or null, or of some unexpected type. A good start at defensiveness is to start with this: @@ -655,7 +655,7 @@ Pretty-printed: is the name of the service/app using Bunyan for logging. - `hostname`: Required. String. Provided or determined at Logger creation. You can specify your hostname at Logger creation or it will be retrieved - vi `os.hostname()`. + via `os.hostname()`. - `pid`: Required. Integer. Filled in automatically at Logger creation. - `time`: Required. String. Added by Bunyan. Can be overridden. The date and time of the event in [ISO 8601 @@ -732,7 +732,7 @@ follow (feedback from actual users welcome). - `req.username`: Authenticated user (or for a 401, the user attempting to auth). - Some mechanism to calculate response latency. "restify" users will have - a "X-Response-Time" header. A `latency` custom field would be fine. + an "X-Response-Time" header. A `latency` custom field would be fine. - `req.body`: If you know that request bodies are small (common in APIs, for example), then logging the request body is good. @@ -1066,7 +1066,7 @@ used for anything else. **Note on log rotation**: Often you may be using external log rotation utilities like `logrotate` on Linux or `logadm` on SmartOS/Illumos. In those cases, unless -your are ensuring "copy and truncate" semantics (via `copytruncate` with +you are ensuring "copy and truncate" semantics (via `copytruncate` with logrotate or `-c` with logadm) then the fd for your 'file' stream will change. You can tell bunyan to reopen the file stream with code like this in your app: From 3908e7b212dea4d7781e8ade013462b491b6572c Mon Sep 17 00:00:00 2001 From: Piper Date: Fri, 26 Jun 2020 22:38:29 -0700 Subject: [PATCH 08/24] Fix typo (#587) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39ed2beb..ac497b6f 100644 --- a/README.md +++ b/README.md @@ -760,7 +760,7 @@ var log = bunyan.createLogger({ }); ``` -For convenience, if there is only one stream, it can specified with the +For convenience, if there is only one stream, it can be specified with the "stream" and "level" options (internally converted to a `Logger.streams`). ```js From 33adee5237b042c64fc5caa292a5d96072f3719a Mon Sep 17 00:00:00 2001 From: Bryan Knight Date: Sat, 27 Jun 2020 01:43:01 -0400 Subject: [PATCH 09/24] Use os.EOL for line endings for text loggers (#590) This change uses `os.EOL` for line endings instead of `\n` This is useful for those of us using NodeJS on Windows where the easiest log reader is Notepad.exe Fixes #589 --- lib/bunyan.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bunyan.js b/lib/bunyan.js index cc7ce5d5..85d33a4e 100644 --- a/lib/bunyan.js +++ b/lib/bunyan.js @@ -906,7 +906,7 @@ Logger.prototype._emit = function (rec, noemit) { // Stringify the object (creates a warning str on error). var str; if (noemit || this.haveNonRawStreams) { - str = fastAndSafeJsonStringify(rec) + '\n'; + str = fastAndSafeJsonStringify(rec) + os.EOL; } if (noemit) From 4e5107b02b5a002b9285eac526757c9d5e54a8bc Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Fri, 26 Jun 2020 22:45:58 -0700 Subject: [PATCH 10/24] changelog entry for recent fix --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 08645671..c3150628 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,7 +7,8 @@ Known issues: ## not yet released -(nothing yet) +- [issue #589] Use `os.EOL` for newlines in bunyan output, which helps with + some Unix-EOL-naive apps like notepad. (By @bwknight877.) ## 2.0.3 (beta) From 0df66f4eede5ab90716145425d0ce04958a6d6f0 Mon Sep 17 00:00:00 2001 From: Ron Korving Date: Sat, 27 Jun 2020 14:50:10 +0900 Subject: [PATCH 11/24] Remove old hack for some old Node 0.6 versions (#567) Co-authored-by: Ron Korving --- bin/bunyan | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/bin/bunyan b/bin/bunyan index 4eca819b..289bab0e 100755 --- a/bin/bunyan +++ b/bin/bunyan @@ -1671,16 +1671,5 @@ function main(argv) { } if (require.main === module) { - // HACK guard for . - // We override the `process.stdout.end` guard that core node.js puts in - // place. The real fix is that `.end()` shouldn't be called on stdout - // in node core. Node v0.6.9 fixes that. Only guard for v0.6.0..v0.6.8. - if ([0, 6, 0] <= nodeVer && nodeVer <= [0, 6, 8]) { - var stdout = process.stdout; - stdout.end = stdout.destroy = stdout.destroySoon = function () { - /* pass */ - }; - } - main(process.argv); } From 86f0a56fa04907b09980584ee80f28ca68192169 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Sat, 27 Jun 2020 17:11:20 -0700 Subject: [PATCH 12/24] Switch from travis to github actions for CI This also: - adds "files" to package.json which removes a lot of dev files from the published package - adds a package-lock.json file for 'npm ci' usage --- .github/workflows/check.yml | 12 + .github/workflows/test.yml | 57 + .travis.yml | 24 - Makefile | 6 +- package-lock.json | 2954 ++++++++++++++++++++++++++++++ package.json | 7 +- test/{ => dtrace}/dtrace.test.js | 8 +- 7 files changed, 3035 insertions(+), 33 deletions(-) create mode 100644 .github/workflows/check.yml create mode 100644 .github/workflows/test.yml delete mode 100644 .travis.yml create mode 100644 package-lock.json rename test/{ => dtrace}/dtrace.test.js (94%) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 00000000..a18a526d --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,12 @@ +name: Check Lint/Style +on: [push, pull_request] +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '12.x' + - run: npm ci + - run: npm run check diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..c4e07d9b --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,57 @@ +name: Test + +on: + push: + paths-ignore: + - 'docs/**' + - '*.md' + pull_request: + - 'docs/**' + - '*.md' + +jobs: + # Test once on every (available) plat, using LTS node version + # (https://nodejs.org/en/about/releases/). + test-plats: + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '12.x' + - run: npm ci + - run: npm test + + # Test once for every supported node version (don't repeat the LTS + # node version from the previous step). Only test on one + # platform to not overkill the number of builds. + test-vers: + strategy: + matrix: + node: ['8.x', '10.x', '14.x'] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + - run: npm ci + - run: npm test + + # Test older versions separately because really old node/npm don't support + # 'npm ci'. + test-old-vers: + strategy: + matrix: + node: ['0.10.x', '4.x', '6.x'] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + - run: npm install + - run: npm test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 808fc65b..00000000 --- a/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: node_js - -os: - - linux - - osx - -env: - - SKIP_DTRACE=1 - -node_js: - - '0.10' - - '4' - - '6' - - '8' - - '10' - - '12' - - '14' - - -# Gives us faster boot time, see https://docs.travis-ci.com/user/ci-environment/ -sudo: false - -script: - - npm test diff --git a/Makefile b/Makefile index b7eec228..c9ac746c 100644 --- a/Makefile +++ b/Makefile @@ -22,8 +22,6 @@ NODEOPT ?= $(HOME)/opt #---- Files JSSTYLE_FILES := $(shell find lib test tools examples -name "*.js") bin/bunyan -# All test files *except* dtrace.test.js. -NON_DTRACE_TEST_FILES := $(shell ls -1 test/*.test.js | grep -v dtrace | xargs) #---- Targets @@ -95,8 +93,8 @@ test: $(NODEUNIT) test -z "$(DTRACE_UP_IN_HERE)" || test -n "$(SKIP_DTRACE)" || \ (node -e 'require("dtrace-provider").createDTraceProvider("isthisthingon")' && \ echo "\nNote: Use 'SKIP_DTRACE=1 make test' to skip parts of the test suite that require root." && \ - $(SUDO) $(NODEUNIT) test/dtrace.test.js) - $(NODEUNIT) $(NON_DTRACE_TEST_FILES) + $(SUDO) $(NODEUNIT) test/dtrace/*.test.js) + $(NODEUNIT) test/*.test.js # Test with all node supported versions (presumes install locations I use on # my machine -- "~/opt/node-VER"): diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..4c40cf64 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2954 @@ +{ + "name": "bunyan", + "version": "2.0.3", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "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==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "autolinker": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", + "integrity": "sha1-BlK0kYgYefB3XazgzcoyM5QqTkc=", + "dev": true, + "requires": { + "gulp-header": "^1.7.1" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "ben": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ben/-/ben-0.0.0.tgz", + "integrity": "sha1-xrX63l/7SuCeogQXDPEjTCWE5gQ=", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "clean-yaml-object": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", + "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", + "dev": true + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "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==", + "dev": true, + "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 + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "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=", + "dev": true + }, + "coveralls": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz", + "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==", + "dev": true, + "requires": { + "js-yaml": "3.6.1", + "lcov-parse": "0.0.10", + "log-driver": "1.2.5", + "minimist": "1.2.0", + "request": "2.79.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "js-yaml": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "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" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.x.x" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "deeper": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deeper/-/deeper-2.1.0.tgz", + "integrity": "sha1-vFZOX3MXT98gHgiwADDooU2nQ2g=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "optional": true, + "requires": { + "nan": "^2.14.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "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==", + "dev": true + }, + "events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", + "dev": true + }, + "exeunt": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/exeunt/-/exeunt-1.1.0.tgz", + "integrity": "sha1-r3Lbb5Szy3XpIa7jddUTBJhD0oQ=" + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "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" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "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 + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "requires": { + "is-property": "^1.0.2" + } + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "gray-matter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz", + "integrity": "sha1-MELZrewqHe1qdwep7SOA+KF6Qw4=", + "dev": true, + "requires": { + "ansi-red": "^0.1.1", + "coffee-script": "^1.12.4", + "extend-shallow": "^2.0.1", + "js-yaml": "^3.8.1", + "toml": "^2.3.2" + } + }, + "gulp-header": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", + "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==", + "dev": true, + "requires": { + "concat-with-sourcemaps": "*", + "lodash.template": "^4.4.0", + "through2": "^2.0.0" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.1.tgz", + "integrity": "sha512-KWo8x7CYK5goqyYFJM4ZmapN2DvIGKkx5C1WLHyo2Dcr4R9u4Y9ofpZxn5+LF/d0FHR3AeFcYxVlqIA2OOwuJA==", + "dev": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "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=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "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=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "^0.1.0" + } + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "list-item": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", + "integrity": "sha1-DGXQDih8tmPMs8s4Sad+iewmilY=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "extend-shallow": "^2.0.1", + "is-number": "^2.1.0", + "repeat-string": "^1.5.2" + } + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "log-driver": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", + "dev": true + }, + "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" + } + }, + "markdown-link": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", + "integrity": "sha1-MsXGUZmmRXMWMi0eQinRNAfIx88=", + "dev": true + }, + "markdown-toc": { + "version": "0.12.16", + "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-0.12.16.tgz", + "integrity": "sha1-jxT0uUswx4XzZAITzOoMMAH3n7M=", + "dev": true, + "requires": { + "concat-stream": "^1.5.1", + "gray-matter": "^2.0.2", + "lazy-cache": "^2.0.1", + "list-item": "^1.1.1", + "markdown-link": "^0.1.1", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "object.pick": "^1.1.2", + "remarkable": "^1.6.2", + "repeat-string": "^1.5.4", + "strip-color": "^0.1.0" + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "optional": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==", + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + } + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "optional": true + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "optional": true + }, + "nodeunit": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.9.5.tgz", + "integrity": "sha1-C2MjaAB9lGUczwoYmZgHmC8HOGY=", + "dev": true, + "requires": { + "tap": "^7.0.0" + } + }, + "nyc": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-7.1.0.tgz", + "integrity": "sha1-jhSXHzoV0au+x6xhDvVMuInp/7Q=", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "caching-transform": "^1.0.0", + "convert-source-map": "^1.3.0", + "default-require-extensions": "^1.0.0", + "find-cache-dir": "^0.1.1", + "find-up": "^1.1.2", + "foreground-child": "^1.5.3", + "glob": "^7.0.3", + "istanbul-lib-coverage": "^1.0.0-alpha.4", + "istanbul-lib-hook": "^1.0.0-alpha.4", + "istanbul-lib-instrument": "^1.1.0-alpha.3", + "istanbul-lib-report": "^1.0.0-alpha.3", + "istanbul-lib-source-maps": "^1.0.0-alpha.10", + "istanbul-reports": "^1.0.0-alpha.8", + "md5-hex": "^1.2.0", + "micromatch": "^2.3.11", + "mkdirp": "^0.5.0", + "pkg-up": "^1.0.0", + "resolve-from": "^2.0.0", + "rimraf": "^2.5.4", + "signal-exit": "^3.0.0", + "spawn-wrap": "^1.2.4", + "test-exclude": "^1.1.0", + "yargs": "^4.8.1", + "yargs-parser": "^2.4.1" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "amdefine": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "ansi-regex": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "append-transform": { + "version": "0.3.0", + "bundled": true, + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "arrify": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "async": { + "version": "1.5.2", + "bundled": true, + "dev": true + }, + "babel-code-frame": { + "version": "6.11.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "^6.0.0", + "chalk": "^1.1.0", + "esutils": "^2.0.2", + "js-tokens": "^2.0.0" + } + }, + "babel-generator": { + "version": "6.11.4", + "bundled": true, + "dev": true, + "requires": { + "babel-messages": "^6.8.0", + "babel-runtime": "^6.9.0", + "babel-types": "^6.10.2", + "detect-indent": "^3.0.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0" + } + }, + "babel-messages": { + "version": "6.8.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "^6.0.0" + } + }, + "babel-runtime": { + "version": "6.9.2", + "bundled": true, + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.9.5" + } + }, + "babel-template": { + "version": "6.9.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "^6.9.0", + "babel-traverse": "^6.9.0", + "babel-types": "^6.9.0", + "babylon": "^6.7.0", + "lodash": "^4.2.0" + } + }, + "babel-traverse": { + "version": "6.11.4", + "bundled": true, + "dev": true, + "requires": { + "babel-code-frame": "^6.8.0", + "babel-messages": "^6.8.0", + "babel-runtime": "^6.9.0", + "babel-types": "^6.9.0", + "babylon": "^6.7.0", + "debug": "^2.2.0", + "globals": "^8.3.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" + } + }, + "babel-types": { + "version": "6.11.1", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "^6.9.1", + "babel-traverse": "^6.9.0", + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^1.0.1" + } + }, + "babylon": { + "version": "6.8.4", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "^6.0.0" + } + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "bundled": true, + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "builtin-modules": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "caching-transform": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "md5-hex": "^1.2.0", + "mkdirp": "^0.5.1", + "write-file-atomic": "^1.1.4" + } + }, + "camelcase": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cliui": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "code-point-at": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "core-js": { + "version": "2.4.1", + "bundled": true, + "dev": true + }, + "cross-spawn": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "debug": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + } + }, + "detect-indent": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "minimist": "^1.1.0", + "repeating": "^1.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true + } + } + }, + "error-ex": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "esutils": { + "version": "2.0.2", + "bundled": true, + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "bundled": true, + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "filename-regex": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "bundled": true, + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "for-in": { + "version": "0.1.5", + "bundled": true, + "dev": true + }, + "for-own": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "for-in": "^0.1.5" + } + }, + "foreground-child": { + "version": "1.5.3", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "get-caller-file": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "bundled": true, + "dev": true + }, + "glob": { + "version": "7.0.5", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "globals": { + "version": "8.18.0", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.4", + "bundled": true, + "dev": true + }, + "handlebars": { + "version": "4.0.5", + "bundled": true, + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "2.1.5", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "invariant": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-buffer": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-dotfile": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-finite": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.0.0-alpha.4", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.0.0-alpha.4", + "bundled": true, + "dev": true, + "requires": { + "append-transform": "^0.3.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.1.0-alpha.4", + "bundled": true, + "dev": true, + "requires": { + "babel-generator": "^6.11.3", + "babel-template": "^6.9.0", + "babel-traverse": "^6.9.0", + "babel-types": "^6.10.2", + "babylon": "^6.8.1", + "istanbul-lib-coverage": "^1.0.0-alpha.4" + } + }, + "istanbul-lib-report": { + "version": "1.0.0-alpha.3", + "bundled": true, + "dev": true, + "requires": { + "async": "^1.4.2", + "istanbul-lib-coverage": "^1.0.0-alpha", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "rimraf": "^2.4.3", + "supports-color": "^3.1.2" + }, + "dependencies": { + "supports-color": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.0.0-alpha.10", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.0.0-alpha.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.4.4", + "source-map": "^0.5.3" + } + }, + "istanbul-reports": { + "version": "1.0.0-alpha.8", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "js-tokens": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "^1.0.2" + } + }, + "lazy-cache": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.13.1", + "bundled": true, + "dev": true + }, + "lodash.assign": { + "version": "4.0.9", + "bundled": true, + "dev": true, + "requires": { + "lodash.keys": "^4.0.0", + "lodash.rest": "^4.0.0" + } + }, + "lodash.keys": { + "version": "4.0.7", + "bundled": true, + "dev": true + }, + "lodash.rest": { + "version": "4.0.3", + "bundled": true, + "dev": true + }, + "longest": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "loose-envify": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "js-tokens": "^1.0.1" + }, + "dependencies": { + "js-tokens": { + "version": "1.0.3", + "bundled": true, + "dev": true + } + } + }, + "lru-cache": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "md5-hex": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "md5-o-matic": "^0.1.1" + } + }, + "md5-o-matic": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "minimatch": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.0.0" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "0.7.1", + "bundled": true, + "dev": true + }, + "normalize-package-data": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "number-is-nan": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "object.omit": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "for-own": "^0.1.3", + "is-extendable": "^0.1.1" + } + }, + "once": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "os-homedir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + }, + "pkg-up": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + }, + "preserve": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "randomatic": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "requires": { + "is-number": "^2.0.2", + "kind-of": "^3.0.2" + } + }, + "read-pkg": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "regenerator-runtime": { + "version": "0.9.5", + "bundled": true, + "dev": true + }, + "regex-cache": { + "version": "0.4.3", + "bundled": true, + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3", + "is-primitive": "^2.0.0" + } + }, + "repeat-element": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "repeat-string": { + "version": "1.5.4", + "bundled": true, + "dev": true + }, + "repeating": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve-from": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "right-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.5.4", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "slide": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "source-map": { + "version": "0.5.6", + "bundled": true, + "dev": true + }, + "spawn-wrap": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "^1.3.3", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.3.3", + "signal-exit": "^2.0.0", + "which": "^1.2.4" + }, + "dependencies": { + "signal-exit": { + "version": "2.1.2", + "bundled": true, + "dev": true + } + } + }, + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "spdx-license-ids": "^1.0.2" + } + }, + "spdx-exceptions": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^1.0.4", + "spdx-license-ids": "^1.0.0" + } + }, + "spdx-license-ids": { + "version": "1.2.1", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "arrify": "^1.0.1", + "lodash.assign": "^4.0.9", + "micromatch": "^2.3.8", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + } + }, + "to-fast-properties": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uglify-js": { + "version": "2.7.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "bundled": true, + "dev": true, + "optional": true + }, + "yargs": { + "version": "3.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + } + }, + "which": { + "version": "1.2.10", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^1.1.1" + } + }, + "which-module": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "window-size": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "4.8.1", + "bundled": true, + "dev": true, + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + }, + "dependencies": { + "cliui": { + "version": "3.2.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "window-size": { + "version": "0.2.0", + "bundled": true, + "dev": true + } + } + }, + "yargs-parser": { + "version": "2.4.1", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "only-shallow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/only-shallow/-/only-shallow-1.2.0.tgz", + "integrity": "sha1-cc7O26kyS8BRiu8Q7AgNMkncJGU=", + "dev": true + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, + "os-homedir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz", + "integrity": "sha1-DWK99EuRb9O73PLKsZGUj7CU8Ac=", + "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=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "remarkable": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", + "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", + "dev": true, + "requires": { + "argparse": "^1.0.10", + "autolinker": "~0.28.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "qs": "~6.3.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1", + "uuid": "^3.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "optional": true, + "requires": { + "glob": "^6.0.1" + } + }, + "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 + }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "set-getter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "dev": true, + "requires": { + "to-object-path": "^0.3.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "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 + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "stack-utils": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-0.4.0.tgz", + "integrity": "sha1-lAy4L8z6hOj/Lz/fKT/ngBa+zNE=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-color": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", + "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tap": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/tap/-/tap-7.1.2.tgz", + "integrity": "sha1-36w+zxSshUe7rSW70Wzyw3Q/Zc8=", + "dev": true, + "requires": { + "bluebird": "^3.3.1", + "clean-yaml-object": "^0.1.0", + "color-support": "^1.1.0", + "coveralls": "^2.11.2", + "deeper": "^2.1.0", + "foreground-child": "^1.3.3", + "glob": "^7.0.0", + "isexe": "^1.0.0", + "js-yaml": "^3.3.1", + "nyc": "^7.1.0", + "only-shallow": "^1.0.2", + "opener": "^1.4.1", + "os-homedir": "1.0.1", + "readable-stream": "^2.0.2", + "signal-exit": "^3.0.0", + "stack-utils": "^0.4.0", + "tap-mocha-reporter": "^2.0.0", + "tap-parser": "^2.2.0", + "tmatch": "^2.0.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" + } + } + } + }, + "tap-mocha-reporter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-2.0.1.tgz", + "integrity": "sha1-xwMWFz1uOhbFjhupLV1s2N5YoS4=", + "dev": true, + "requires": { + "color-support": "^1.1.0", + "debug": "^2.1.3", + "diff": "^1.3.2", + "escape-string-regexp": "^1.0.3", + "glob": "^7.0.5", + "js-yaml": "^3.3.1", + "readable-stream": "^2.1.5", + "tap-parser": "^2.0.0", + "unicode-length": "^1.0.0" + }, + "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" + } + } + } + }, + "tap-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-2.2.3.tgz", + "integrity": "sha1-rebpbje/04zg8WLaBn80A08GiwE=", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "js-yaml": "^3.2.7", + "readable-stream": "^2" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "tmatch": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", + "integrity": "sha1-DFYkbzPzDaG409colauvFmYPOM8=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "toml": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.6.tgz", + "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "unicode-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", + "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", + "dev": true, + "requires": { + "punycode": "^1.3.2", + "strip-ansi": "^3.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "vasync": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.4.3.tgz", + "integrity": "sha1-yG1S4rcWE9Ke7fFZ8xNdvnSc7jc=", + "dev": true, + "requires": { + "jsprim": "0.3.0", + "verror": "1.1.0" + }, + "dependencies": { + "extsprintf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.0.tgz", + "integrity": "sha1-TVi4Fazlvr/E6/A8+YsKdgSpm4Y=", + "dev": true + }, + "json-schema": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz", + "integrity": "sha1-UDVPGfYDkXxpX3C4Wvp3w7DyNQY=", + "dev": true + }, + "jsprim": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-0.3.0.tgz", + "integrity": "sha1-zRNGbqJIDb2DlqVw1H0x3aR2+LE=", + "dev": true, + "requires": { + "extsprintf": "1.0.0", + "json-schema": "0.2.2", + "verror": "1.3.3" + }, + "dependencies": { + "verror": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.3.tgz", + "integrity": "sha1-impKw6jHdLb2h/7OSb3/14VS4s0=", + "dev": true, + "requires": { + "extsprintf": "1.0.0" + } + } + } + }, + "verror": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.1.0.tgz", + "integrity": "sha1-KktOsUogcFHnWm+U7lExW/FzobA=", + "dev": true, + "requires": { + "extsprintf": "1.0.0" + } + } + } + }, + "verror": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.3.tgz", + "integrity": "sha1-impKw6jHdLb2h/7OSb3/14VS4s0=", + "dev": true, + "requires": { + "extsprintf": "1.0.0" + }, + "dependencies": { + "extsprintf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.0.tgz", + "integrity": "sha1-TVi4Fazlvr/E6/A8+YsKdgSpm4Y=", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 76b50f20..f2ce6189 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,10 @@ "bunyan" ], "license": "MIT", + "files": [ + "bin", + "lib" + ], "dependencies": { "exeunt": "1.1.0" }, @@ -42,6 +46,7 @@ "vasync": "1.4.3" }, "scripts": { - "test": "make test" + "check": "make check", + "test": "nodeunit test/*.test.js # skip dtrace tests" } } diff --git a/test/dtrace.test.js b/test/dtrace/dtrace.test.js similarity index 94% rename from test/dtrace.test.js rename to test/dtrace/dtrace.test.js index e4943b75..a9ea27b9 100644 --- a/test/dtrace.test.js +++ b/test/dtrace/dtrace.test.js @@ -7,12 +7,12 @@ var spawn = require('child_process').spawn; var format = require('util').format; -var bunyan = require('../lib/bunyan'); +var bunyan = require('../../lib/bunyan'); // node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); +if (require.cache[__dirname + '/../tap4nodeunit.js']) + delete require.cache[__dirname + '/../tap4nodeunit.js']; +var tap4nodeunit = require('../tap4nodeunit.js'); var after = tap4nodeunit.after; var before = tap4nodeunit.before; var test = tap4nodeunit.test; From 383b0037e9697894ae8403983640f1e6c951dd6d Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Sat, 27 Jun 2020 17:25:36 -0700 Subject: [PATCH 13/24] flail to guess why 'make check' is failing only on GH actions --- .github/workflows/check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index a18a526d..253c8c87 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -9,4 +9,5 @@ jobs: with: node-version: '12.x' - run: npm ci + - run: perl -V - run: npm run check From 92c3e3054fa517f03563072981ae2a12e6f47a11 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Sat, 27 Jun 2020 19:13:53 -0700 Subject: [PATCH 14/24] fix 'make check' in GH actions env; fix 'test' action (#641) - fix more jsstyle issues with newer Perl - drop windows testing for now until using node-tap that handles globs --- .github/workflows/test.yml | 6 +++++- .gitignore | 2 +- Makefile | 6 ++++-- tools/jsstyle | 6 +++--- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c4e07d9b..d21cca26 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,16 +6,20 @@ on: - 'docs/**' - '*.md' pull_request: + paths-ignore: - 'docs/**' - '*.md' jobs: # Test once on every (available) plat, using LTS node version # (https://nodejs.org/en/about/releases/). + # + # TODO: add windows-latest when moved to node-tap and don't have to + # rely on shell globbing test-plats: strategy: matrix: - os: [ubuntu-latest, windows-latest, macos-latest] + os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 diff --git a/.gitignore b/.gitignore index ae1a99ec..f183c74c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ *.log !/test/corpus/*.log /*.tgz -/test/*.log.0 +/test/log.test.rot.log.* diff --git a/Makefile b/Makefile index c9ac746c..4df01adf 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,6 @@ +SHELL := bash + #---- Tools NODEUNIT := ./node_modules/.bin/nodeunit @@ -32,8 +34,8 @@ all $(NODEUNIT): # Ensure all version-carrying files have the same version. .PHONY: versioncheck versioncheck: - @echo version is: $(shell cat package.json | json version) - [[ `cat package.json | json version` == `grep '^## ' CHANGES.md | head -2 | tail -1 | awk '{print $$2}'` ]] + @echo version is: $(shell node -e 'console.log(require("./package.json").version)') + [[ `node -e 'console.log(require("./package.json").version)'` == `grep '^## ' CHANGES.md | head -2 | tail -1 | awk '{print $$2}'` ]] @echo Version check ok. .PHONY: cutarelease diff --git a/tools/jsstyle b/tools/jsstyle index 9df33c98..0ea2c011 100755 --- a/tools/jsstyle +++ b/tools/jsstyle @@ -649,7 +649,7 @@ line: while (<$filehandle>) { if (/^\s*\(void\)[^ ]/) { err("missing space after (void) cast"); } - if (/\S{/ && !/({|\(){/ && + if (/\S\{/ && !/(\{|\()\{/ && # Allow a brace in a regex quantifier. !/\/.*?\{\d+,?\d*\}.*?\//) { err("missing space before left brace"); @@ -767,8 +767,8 @@ process_indent($) # skip over enumerations, array definitions, initializers, etc. if ($cont_off <= 0 && !/^\s*$special/ && - (/(?:(?:\b(?:enum|struct|union)\s*[^\{]*)|(?:\s+=\s*)){/ || - (/^\s*{/ && $prev =~ /=\s*(?:\/\*.*\*\/\s*)*$/))) { + (/(?:(?:\b(?:enum|struct|union)\s*[^\{]*)|(?:\s+=\s*))\{/ || + (/^\s*\{/ && $prev =~ /=\s*(?:\/\*.*\*\/\s*)*$/))) { $cont_in = 0; $cont_off = tr/{/{/ - tr/}/}/; return; From 90699beb29a77ca0062cd6baa1b66ef550274b93 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Sat, 27 Jun 2020 19:15:19 -0700 Subject: [PATCH 15/24] drop debugging perl ver check from 'check' GH action --- .github/workflows/check.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 253c8c87..a18a526d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -9,5 +9,4 @@ jobs: with: node-version: '12.x' - run: npm ci - - run: perl -V - run: npm run check From 19201383dc0140537719f4d061a5ce0e64aee993 Mon Sep 17 00:00:00 2001 From: Michael Holloway Date: Sun, 28 Jun 2020 19:59:33 -0400 Subject: [PATCH 16/24] Update moment to resolve regex DoS vulnerability (#558) CVE-2017-18214 https://nodesecurity.io/advisories/532 See the upstream issue resolved by the update: https://github.com/moment/moment/issues/4163 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f2ce6189..1463d0d1 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dtrace-provider": "~0.8", "mv": "~2", "safe-json-stringify": "~1", - "moment": "^2.10.6" + "moment": "^2.19.3" }, "devDependencies": { "nodeunit": "0.9", From a63608396e35c760ba6b0e06363a19fba477100d Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Sun, 28 Jun 2020 17:11:02 -0700 Subject: [PATCH 17/24] 2.0.4 (beta) --- CHANGES.md | 7 ++++++- package.json | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c3150628..8e813e6d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,9 +7,14 @@ Known issues: ## not yet released +(nothing yet) + +## 2.0.4 (beta) + +- [pull #558] Update minimum "moment" version to 2.19.3 for CVE-2017-18214. - [issue #589] Use `os.EOL` for newlines in bunyan output, which helps with some Unix-EOL-naive apps like notepad. (By @bwknight877.) - +- Development change: Switched to GitHub Actions for CI. ## 2.0.3 (beta) diff --git a/package.json b/package.json index 1463d0d1..72e421e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bunyan", - "version": "2.0.3", + "version": "2.0.4", "description": "a JSON logging library for node.js services", "author": "Trent Mick (http://trentm.com)", "main": "./lib/bunyan.js", From 13e00c75a5eb4f272d9e9f5494af78fdd4626149 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Fri, 3 Jul 2020 17:27:04 -0700 Subject: [PATCH 18/24] nodeunit -> node-tap for testing (#644) Currently just tap v9 because that is the last major version of node-tap that supports back to node v0.10. --- .github/workflows/check.yml | 2 +- .github/workflows/test.yml | 5 +- CHANGES.md | 4 +- Makefile | 44 +- package-lock.json | 999 ++++++++++++++++++------------- package.json | 8 +- test/add-stream.test.js | 8 +- test/buffer.test.js | 19 +- test/child-behaviour.test.js | 13 +- test/cli-client-req.test.js | 16 +- test/cli-res.test.js | 16 +- test/cli.test.js | 121 ++-- test/ctor.test.js | 15 +- test/cycles.test.js | 12 +- test/dtrace/dtrace.test.js | 11 +- test/error-event.test.js | 11 +- test/level.test.js | 11 +- test/log.test.js | 11 +- test/other-api.test.js | 12 +- test/process-exit.test.js | 7 +- test/raw-stream.test.js | 12 +- test/ringbuffer.test.js | 12 +- test/safe-json-stringify.test.js | 13 +- test/serializers.test.js | 13 +- test/src.test.js | 13 +- test/stream-levels.test.js | 10 +- test/tap4nodeunit.js | 61 -- 27 files changed, 719 insertions(+), 760 deletions(-) delete mode 100644 test/tap4nodeunit.js diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index a18a526d..7152b31d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,4 +1,4 @@ -name: Check Lint/Style +name: Check Lint & Style on: [push, pull_request] jobs: check: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d21cca26..f325a852 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,13 +13,10 @@ on: jobs: # Test once on every (available) plat, using LTS node version # (https://nodejs.org/en/about/releases/). - # - # TODO: add windows-latest when moved to node-tap and don't have to - # rely on shell globbing test-plats: strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest, windows-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 diff --git a/CHANGES.md b/CHANGES.md index 8e813e6d..d775fa3b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,7 +7,9 @@ Known issues: ## not yet released -(nothing yet) +- Development change: Switch to node-tap for testing (from nodeunit, which is + now obsolete). Currently just tap v9 because that is the last major version + of node-tap that supports back to node v0.10. ## 2.0.4 (beta) diff --git a/Makefile b/Makefile index 4df01adf..6a159fcf 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ SHELL := bash #---- Tools -NODEUNIT := ./node_modules/.bin/nodeunit +TAP_EXEC := ./node_modules/.bin/tap SUDO := sudo ifeq ($(shell uname -s),SunOS) # On SunOS (e.g. SmartOS) we expect to run the test suite as the @@ -18,7 +18,6 @@ endif ifeq ($(shell uname -s),Darwin) DTRACE_UP_IN_HERE=1 endif -NODEOPT ?= $(HOME)/opt #---- Files @@ -28,7 +27,7 @@ JSSTYLE_FILES := $(shell find lib test tools examples -name "*.js") bin/bunyan #---- Targets -all $(NODEUNIT): +all $(TAP_EXEC): npm install $(NPM_INSTALL_FLAGS) # Ensure all version-carrying files have the same version. @@ -91,45 +90,12 @@ distclean: #---- test .PHONY: test -test: $(NODEUNIT) +test: $(TAP_EXEC) test -z "$(DTRACE_UP_IN_HERE)" || test -n "$(SKIP_DTRACE)" || \ (node -e 'require("dtrace-provider").createDTraceProvider("isthisthingon")' && \ echo "\nNote: Use 'SKIP_DTRACE=1 make test' to skip parts of the test suite that require root." && \ - $(SUDO) $(NODEUNIT) test/dtrace/*.test.js) - $(NODEUNIT) test/*.test.js - -# Test with all node supported versions (presumes install locations I use on -# my machine -- "~/opt/node-VER"): -# Note: 'test4' is last so (if all is well) I end up with a binary -# dtrace-provider build for my current default node version. -.PHONY: testall -testall: test7 test6 test012 test010 test4 - -.PHONY: test7 -test7: - @echo "# Test node 7.x (with node `$(NODEOPT)/node-7/bin/node --version`)" - @$(NODEOPT)/node-7/bin/node --version | grep '^v7\.' - PATH="$(NODEOPT)/node-7/bin:$(PATH)" make distclean all test -.PHONY: test6 -test6: - @echo "# Test node 6.x (with node `$(NODEOPT)/node-6/bin/node --version`)" - @$(NODEOPT)/node-6/bin/node --version | grep '^v6\.' - PATH="$(NODEOPT)/node-6/bin:$(PATH)" make distclean all test -.PHONY: test4 -test4: - @echo "# Test node 4.x (with node `$(NODEOPT)/node-4/bin/node --version`)" - @$(NODEOPT)/node-4/bin/node --version | grep '^v4\.' - PATH="$(NODEOPT)/node-4/bin:$(PATH)" make distclean all test -.PHONY: test012 -test012: - @echo "# Test node 0.12.x (with node `$(NODEOPT)/node-0.12/bin/node --version`)" - @$(NODEOPT)/node-0.12/bin/node --version | grep '^v0\.12\.' - PATH="$(NODEOPT)/node-0.12/bin:$(PATH)" make distclean all test -.PHONY: test010 -test010: - @echo "# Test node 0.10.x (with node `$(NODEOPT)/node-0.10/bin/node --version`)" - @$(NODEOPT)/node-0.10/bin/node --version | grep '^v0\.10\.' - PATH="$(NODEOPT)/node-0.10/bin:$(PATH)" make distclean all test + $(SUDO) $(TAP_EXEC) test/dtrace/*.test.js) + $(TAP_EXEC) test/*.test.js #---- check diff --git a/package-lock.json b/package-lock.json index 4c40cf64..d47c5412 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "bunyan", - "version": "2.0.3", + "version": "2.0.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -938,51 +938,45 @@ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "optional": true }, - "nodeunit": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.9.5.tgz", - "integrity": "sha1-C2MjaAB9lGUczwoYmZgHmC8HOGY=", - "dev": true, - "requires": { - "tap": "^7.0.0" - } - }, "nyc": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-7.1.0.tgz", - "integrity": "sha1-jhSXHzoV0au+x6xhDvVMuInp/7Q=", + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-10.3.2.tgz", + "integrity": "sha1-8n9NkfKp2zbCT1dP9cbv/wIz3kY=", "dev": true, "requires": { + "archy": "^1.0.0", "arrify": "^1.0.1", "caching-transform": "^1.0.0", "convert-source-map": "^1.3.0", + "debug-log": "^1.0.1", "default-require-extensions": "^1.0.0", "find-cache-dir": "^0.1.1", "find-up": "^1.1.2", "foreground-child": "^1.5.3", - "glob": "^7.0.3", - "istanbul-lib-coverage": "^1.0.0-alpha.4", - "istanbul-lib-hook": "^1.0.0-alpha.4", - "istanbul-lib-instrument": "^1.1.0-alpha.3", - "istanbul-lib-report": "^1.0.0-alpha.3", - "istanbul-lib-source-maps": "^1.0.0-alpha.10", - "istanbul-reports": "^1.0.0-alpha.8", + "glob": "^7.0.6", + "istanbul-lib-coverage": "^1.1.0", + "istanbul-lib-hook": "^1.0.6", + "istanbul-lib-instrument": "^1.7.1", + "istanbul-lib-report": "^1.1.0", + "istanbul-lib-source-maps": "^1.2.0", + "istanbul-reports": "^1.1.0", "md5-hex": "^1.2.0", + "merge-source-map": "^1.0.2", "micromatch": "^2.3.11", "mkdirp": "^0.5.0", - "pkg-up": "^1.0.0", "resolve-from": "^2.0.0", "rimraf": "^2.5.4", - "signal-exit": "^3.0.0", - "spawn-wrap": "^1.2.4", - "test-exclude": "^1.1.0", - "yargs": "^4.8.1", - "yargs-parser": "^2.4.1" + "signal-exit": "^3.0.1", + "spawn-wrap": "1.2.4", + "test-exclude": "^4.1.0", + "yargs": "^7.1.0", + "yargs-parser": "^5.0.0" }, "dependencies": { "align-text": { "version": "0.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "optional": true, "requires": { @@ -992,150 +986,175 @@ } }, "amdefine": { - "version": "1.0.0", - "bundled": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, "ansi-regex": { - "version": "2.0.0", - "bundled": true, + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "append-transform": { - "version": "0.3.0", - "bundled": true, + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "arr-diff": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { "arr-flatten": "^1.0.1" } }, "arr-flatten": { - "version": "1.0.1", - "bundled": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", "dev": true }, "array-unique": { "version": "0.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, "arrify": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, "async": { "version": "1.5.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, "babel-code-frame": { - "version": "6.11.0", - "bundled": true, + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", "dev": true, "requires": { - "babel-runtime": "^6.0.0", "chalk": "^1.1.0", "esutils": "^2.0.2", - "js-tokens": "^2.0.0" + "js-tokens": "^3.0.0" } }, "babel-generator": { - "version": "6.11.4", - "bundled": true, + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.24.1.tgz", + "integrity": "sha1-5xX0hsWN7SVknYiJRNUqoHxdlJc=", "dev": true, "requires": { - "babel-messages": "^6.8.0", - "babel-runtime": "^6.9.0", - "babel-types": "^6.10.2", - "detect-indent": "^3.0.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", "lodash": "^4.2.0", - "source-map": "^0.5.0" + "source-map": "^0.5.0", + "trim-right": "^1.0.1" } }, "babel-messages": { - "version": "6.8.0", - "bundled": true, + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "^6.0.0" + "babel-runtime": "^6.22.0" } }, "babel-runtime": { - "version": "6.9.2", - "bundled": true, + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", "dev": true, "requires": { "core-js": "^2.4.0", - "regenerator-runtime": "^0.9.5" + "regenerator-runtime": "^0.10.0" } }, "babel-template": { - "version": "6.9.0", - "bundled": true, + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.24.1.tgz", + "integrity": "sha1-BK5RTx+Ts6JTfyoPYKWkX7gwgzM=", "dev": true, "requires": { - "babel-runtime": "^6.9.0", - "babel-traverse": "^6.9.0", - "babel-types": "^6.9.0", - "babylon": "^6.7.0", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1", + "babylon": "^6.11.0", "lodash": "^4.2.0" } }, "babel-traverse": { - "version": "6.11.4", - "bundled": true, + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.24.1.tgz", + "integrity": "sha1-qzZnP9NW+aCUhlnnszjV/q2zFpU=", "dev": true, "requires": { - "babel-code-frame": "^6.8.0", - "babel-messages": "^6.8.0", - "babel-runtime": "^6.9.0", - "babel-types": "^6.9.0", - "babylon": "^6.7.0", + "babel-code-frame": "^6.22.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1", + "babylon": "^6.15.0", "debug": "^2.2.0", - "globals": "^8.3.0", + "globals": "^9.0.0", "invariant": "^2.2.0", "lodash": "^4.2.0" } }, "babel-types": { - "version": "6.11.1", - "bundled": true, + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.24.1.tgz", + "integrity": "sha1-oTaHncFbNga9oNkMH8dDBML/CXU=", "dev": true, "requires": { - "babel-runtime": "^6.9.1", - "babel-traverse": "^6.9.0", + "babel-runtime": "^6.22.0", "esutils": "^2.0.2", "lodash": "^4.2.0", "to-fast-properties": "^1.0.1" } }, "babylon": { - "version": "6.8.4", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.0.0" - } + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.0.tgz", + "integrity": "sha1-N9qUiHhIi5xOPEA4iT+jMUs/yTI=", + "dev": true }, "balanced-match": { "version": "0.4.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, "brace-expansion": { - "version": "1.1.6", - "bundled": true, + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", "dev": true, "requires": { "balanced-match": "^0.4.1", @@ -1144,7 +1163,8 @@ }, "braces": { "version": "1.8.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { "expand-range": "^1.8.1", @@ -1154,12 +1174,14 @@ }, "builtin-modules": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "caching-transform": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", + "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", "dev": true, "requires": { "md5-hex": "^1.2.0", @@ -1169,13 +1191,15 @@ }, "camelcase": { "version": "1.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true, "optional": true }, "center-align": { "version": "0.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "optional": true, "requires": { @@ -1185,7 +1209,8 @@ }, "chalk": { "version": "1.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { "ansi-styles": "^2.2.1", @@ -1197,7 +1222,8 @@ }, "cliui": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "optional": true, "requires": { @@ -1208,43 +1234,47 @@ "dependencies": { "wordwrap": { "version": "0.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true, "optional": true } } }, "code-point-at": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "commondir": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "convert-source-map": { - "version": "1.3.0", - "bundled": true, + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", "dev": true }, "core-js": { "version": "2.4.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", "dev": true }, "cross-spawn": { - "version": "4.0.0", - "bundled": true, + "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", @@ -1252,46 +1282,48 @@ } }, "debug": { - "version": "2.2.0", - "bundled": true, + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.6.tgz", + "integrity": "sha1-qfpvvpykPPHnn3O3XAGJy7fW21o=", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "0.7.3" } }, + "debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "dev": true + }, "decamelize": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "default-require-extensions": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { "strip-bom": "^2.0.0" } }, "detect-indent": { - "version": "3.0.1", - "bundled": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "get-stdin": "^4.0.1", - "minimist": "^1.1.0", - "repeating": "^1.1.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true - } + "repeating": "^2.0.0" } }, "error-ex": { - "version": "1.3.0", - "bundled": true, + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -1299,17 +1331,20 @@ }, "escape-string-regexp": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "esutils": { "version": "2.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, "expand-brackets": { "version": "0.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { "is-posix-bracket": "^0.1.0" @@ -1317,7 +1352,8 @@ }, "expand-range": { "version": "1.8.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { "fill-range": "^2.1.0" @@ -1325,20 +1361,23 @@ }, "extglob": { "version": "0.3.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { "is-extglob": "^1.0.0" } }, "filename-regex": { - "version": "2.0.0", - "bundled": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, "fill-range": { "version": "2.2.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { "is-number": "^2.1.0", @@ -1350,7 +1389,8 @@ }, "find-cache-dir": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, "requires": { "commondir": "^1.0.1", @@ -1360,7 +1400,8 @@ }, "find-up": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { "path-exists": "^2.0.0", @@ -1368,21 +1409,24 @@ } }, "for-in": { - "version": "0.1.5", - "bundled": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, "for-own": { - "version": "0.1.4", - "bundled": true, + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "^0.1.5" + "for-in": "^1.0.1" } }, "foreground-child": { - "version": "1.5.3", - "bundled": true, + "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", @@ -1391,22 +1435,20 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "get-caller-file": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "bundled": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, "glob": { - "version": "7.0.5", - "bundled": true, + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1419,7 +1461,8 @@ }, "glob-base": { "version": "0.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { "glob-parent": "^2.0.0", @@ -1428,25 +1471,29 @@ }, "glob-parent": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { "is-glob": "^2.0.0" } }, "globals": { - "version": "8.18.0", - "bundled": true, + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz", + "integrity": "sha1-DAymltm5u2lNLlRwvTd3fKrVAoY=", "dev": true }, "graceful-fs": { - "version": "4.1.4", - "bundled": true, + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, "handlebars": { - "version": "4.0.5", - "bundled": true, + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.8.tgz", + "integrity": "sha1-Irh1zT8ObL6jAxTxROgrx6cv9CA=", "dev": true, "requires": { "async": "^1.4.0", @@ -1457,7 +1504,8 @@ "dependencies": { "source-map": { "version": "0.4.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { "amdefine": ">=0.0.4" @@ -1467,7 +1515,8 @@ }, "has-ansi": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -1475,22 +1524,26 @@ }, "has-flag": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, "hosted-git-info": { - "version": "2.1.5", - "bundled": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", + "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=", "dev": true }, "imurmurhash": { "version": "0.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { - "version": "1.0.5", - "bundled": true, + "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", @@ -1498,13 +1551,15 @@ } }, "inherits": { - "version": "2.0.1", - "bundled": true, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "invariant": { - "version": "2.2.1", - "bundled": true, + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true, "requires": { "loose-envify": "^1.0.0" @@ -1512,22 +1567,26 @@ }, "invert-kv": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, "is-arrayish": { "version": "0.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-buffer": { - "version": "1.1.3", - "bundled": true, + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", "dev": true }, "is-builtin-module": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { "builtin-modules": "^1.0.0" @@ -1535,12 +1594,14 @@ }, "is-dotfile": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", + "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", "dev": true }, "is-equal-shallow": { "version": "0.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { "is-primitive": "^2.0.0" @@ -1548,17 +1609,20 @@ }, "is-extendable": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-extglob": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, "is-finite": { - "version": "1.0.1", - "bundled": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { "number-is-nan": "^1.0.0" @@ -1566,7 +1630,8 @@ }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" @@ -1574,7 +1639,8 @@ }, "is-glob": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { "is-extglob": "^1.0.0" @@ -1582,7 +1648,8 @@ }, "is-number": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -1590,79 +1657,89 @@ }, "is-posix-bracket": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "dev": true }, "is-primitive": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, "is-utf8": { "version": "0.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { - "version": "1.1.2", - "bundled": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isobject": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { "isarray": "1.0.0" } }, "istanbul-lib-coverage": { - "version": "1.0.0-alpha.4", - "bundled": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz", + "integrity": "sha1-ysoZ3srvNSW11jMdcB8/O3rUhSg=", "dev": true }, "istanbul-lib-hook": { - "version": "1.0.0-alpha.4", - "bundled": true, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz", + "integrity": "sha1-wIZtHoHPLVMZJJUQEx/Bbe5JIx8=", "dev": true, "requires": { - "append-transform": "^0.3.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.1.0-alpha.4", - "bundled": true, + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz", + "integrity": "sha1-Fp4xvGLHeIUamUOd2Zw8wSGE02A=", "dev": true, "requires": { - "babel-generator": "^6.11.3", - "babel-template": "^6.9.0", - "babel-traverse": "^6.9.0", - "babel-types": "^6.10.2", - "babylon": "^6.8.1", - "istanbul-lib-coverage": "^1.0.0-alpha.4" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.13.0", + "istanbul-lib-coverage": "^1.1.0", + "semver": "^5.3.0" } }, "istanbul-lib-report": { - "version": "1.0.0-alpha.3", - "bundled": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz", + "integrity": "sha1-RExOzKmvqTz1hPVrEPGVv3aMB3A=", "dev": true, "requires": { - "async": "^1.4.2", - "istanbul-lib-coverage": "^1.0.0-alpha", + "istanbul-lib-coverage": "^1.1.0", "mkdirp": "^0.5.1", "path-parse": "^1.0.5", - "rimraf": "^2.4.3", "supports-color": "^3.1.2" }, "dependencies": { "supports-color": { - "version": "3.1.2", - "bundled": true, + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -1671,46 +1748,59 @@ } }, "istanbul-lib-source-maps": { - "version": "1.0.0-alpha.10", - "bundled": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz", + "integrity": "sha1-jHcG1Jfib+62rz4MKP1bBmlZjQ4=", "dev": true, "requires": { - "istanbul-lib-coverage": "^1.0.0-alpha.0", + "debug": "^2.6.3", + "istanbul-lib-coverage": "^1.1.0", "mkdirp": "^0.5.1", - "rimraf": "^2.4.4", + "rimraf": "^2.6.1", "source-map": "^0.5.3" } }, "istanbul-reports": { - "version": "1.0.0-alpha.8", - "bundled": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.0.tgz", + "integrity": "sha1-HvO3lYiSGc+1+tFjZfbOEI1fjGY=", "dev": true, "requires": { "handlebars": "^4.0.3" } }, "js-tokens": { - "version": "2.0.0", - "bundled": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", + "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, "kind-of": { - "version": "3.0.3", - "bundled": true, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.0.tgz", + "integrity": "sha1-tYq+TVwEStM3JqjBUltIz4kb/wc=", "dev": true, "requires": { - "is-buffer": "^1.0.2" + "is-buffer": "^1.1.5" } }, "lazy-cache": { "version": "1.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true, "optional": true }, "lcid": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { "invert-kv": "^1.0.0" @@ -1718,7 +1808,8 @@ }, "load-json-file": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -1729,53 +1820,31 @@ } }, "lodash": { - "version": "4.13.1", - "bundled": true, - "dev": true - }, - "lodash.assign": { - "version": "4.0.9", - "bundled": true, - "dev": true, - "requires": { - "lodash.keys": "^4.0.0", - "lodash.rest": "^4.0.0" - } - }, - "lodash.keys": { - "version": "4.0.7", - "bundled": true, - "dev": true - }, - "lodash.rest": { - "version": "4.0.3", - "bundled": true, + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", "dev": true }, "longest": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true, "optional": true }, "loose-envify": { - "version": "1.2.0", - "bundled": true, + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "^1.0.1" - }, - "dependencies": { - "js-tokens": { - "version": "1.0.3", - "bundled": true, - "dev": true - } + "js-tokens": "^3.0.0" } }, "lru-cache": { - "version": "4.0.1", - "bundled": true, + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", "dev": true, "requires": { "pseudomap": "^1.0.1", @@ -1784,7 +1853,8 @@ }, "md5-hex": { "version": "1.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", + "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", "dev": true, "requires": { "md5-o-matic": "^0.1.1" @@ -1792,12 +1862,23 @@ }, "md5-o-matic": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", + "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", "dev": true }, + "merge-source-map": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.3.tgz", + "integrity": "sha1-2hQV8nIqURnbB7FMT5c0EIY6Kr8=", + "dev": true, + "requires": { + "source-map": "^0.5.3" + } + }, "micromatch": { "version": "2.3.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { "arr-diff": "^2.0.0", @@ -1816,8 +1897,9 @@ } }, "minimatch": { - "version": "3.0.2", - "bundled": true, + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", "dev": true, "requires": { "brace-expansion": "^1.0.0" @@ -1825,25 +1907,29 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" } }, "ms": { - "version": "0.7.1", - "bundled": true, + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", "dev": true }, "normalize-package-data": { - "version": "2.3.5", - "bundled": true, + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", + "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -1853,27 +1939,40 @@ } }, "normalize-path": { - "version": "2.0.1", - "bundled": true, - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } }, "number-is-nan": { - "version": "1.0.0", - "bundled": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object.omit": { - "version": "2.0.0", - "bundled": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "^0.1.3", + "for-own": "^0.1.4", "is-extendable": "^0.1.1" } }, "once": { - "version": "1.3.3", - "bundled": true, + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" @@ -1881,7 +1980,8 @@ }, "optimist": { "version": "0.6.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { "minimist": "~0.0.1", @@ -1889,13 +1989,15 @@ } }, "os-homedir": { - "version": "1.0.1", - "bundled": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "os-locale": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { "lcid": "^1.0.0" @@ -1903,7 +2005,8 @@ }, "parse-glob": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { "glob-base": "^0.3.0", @@ -1914,7 +2017,8 @@ }, "parse-json": { "version": "2.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { "error-ex": "^1.2.0" @@ -1922,25 +2026,29 @@ }, "path-exists": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { - "version": "1.0.0", - "bundled": true, + "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.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, "path-type": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -1950,17 +2058,20 @@ }, "pify": { "version": "2.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pinkie": { "version": "2.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "dev": true }, "pinkie-promise": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { "pinkie": "^2.0.0" @@ -1968,15 +2079,8 @@ }, "pkg-dir": { "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - }, - "pkg-up": { - "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { "find-up": "^1.0.0" @@ -1984,17 +2088,20 @@ }, "preserve": { "version": "0.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, "pseudomap": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "randomatic": { - "version": "1.1.5", - "bundled": true, + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", "dev": true, "requires": { "is-number": "^2.0.2", @@ -2003,7 +2110,8 @@ }, "read-pkg": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { "load-json-file": "^1.0.0", @@ -2013,7 +2121,8 @@ }, "read-pkg-up": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { "find-up": "^1.0.0", @@ -2021,32 +2130,43 @@ } }, "regenerator-runtime": { - "version": "0.9.5", - "bundled": true, + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "dev": true }, "regex-cache": { "version": "0.4.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", "dev": true, "requires": { "is-equal-shallow": "^0.1.3", "is-primitive": "^2.0.0" } }, + "remove-trailing-separator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", + "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=", + "dev": true + }, "repeat-element": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "dev": true }, "repeat-string": { - "version": "1.5.4", - "bundled": true, + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "repeating": { - "version": "1.1.3", - "bundled": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { "is-finite": "^1.0.0" @@ -2054,22 +2174,26 @@ }, "require-directory": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, "resolve-from": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", "dev": true }, "right-align": { "version": "0.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "optional": true, "requires": { @@ -2077,8 +2201,9 @@ } }, "rimraf": { - "version": "2.5.4", - "bundled": true, + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "dev": true, "requires": { "glob": "^7.0.5" @@ -2086,32 +2211,38 @@ }, "semver": { "version": "5.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "signal-exit": { - "version": "3.0.0", - "bundled": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "slide": { "version": "1.1.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, "source-map": { "version": "0.5.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", "dev": true }, "spawn-wrap": { "version": "1.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.2.4.tgz", + "integrity": "sha1-kg6yEadpwJPuv71bDnpdLmirLkA=", "dev": true, "requires": { "foreground-child": "^1.3.3", @@ -2124,41 +2255,37 @@ "dependencies": { "signal-exit": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-2.1.2.tgz", + "integrity": "sha1-N1h5sfkuvDszRIDQONxUam1VhWQ=", "dev": true } } }, "spdx-correct": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { "spdx-license-ids": "^1.0.2" } }, - "spdx-exceptions": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, "spdx-expression-parse": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^1.0.4", - "spdx-license-ids": "^1.0.0" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true }, "spdx-license-ids": { - "version": "1.2.1", - "bundled": true, + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", "dev": true }, "string-width": { - "version": "1.0.1", - "bundled": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", @@ -2168,7 +2295,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -2176,7 +2304,8 @@ }, "strip-bom": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { "is-utf8": "^0.2.0" @@ -2184,47 +2313,51 @@ }, "supports-color": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, "test-exclude": { - "version": "1.1.0", - "bundled": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.0.tgz", + "integrity": "sha1-BMpwtzkN04yY1KADoXOAbKeZHJE=", "dev": true, "requires": { "arrify": "^1.0.1", - "lodash.assign": "^4.0.9", - "micromatch": "^2.3.8", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", "read-pkg-up": "^1.0.1", "require-main-filename": "^1.0.1" } }, "to-fast-properties": { - "version": "1.0.2", - "bundled": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, "uglify-js": { - "version": "2.7.0", - "bundled": true, + "version": "2.8.22", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.22.tgz", + "integrity": "sha1-1Uk0d4qNoUkD+imjJvskwKtRoaA=", "dev": true, "optional": true, "requires": { - "async": "~0.2.6", "source-map": "~0.5.1", "uglify-to-browserify": "~1.0.0", "yargs": "~3.10.0" }, "dependencies": { - "async": { - "version": "0.2.10", - "bundled": true, - "dev": true, - "optional": true - }, "yargs": { "version": "3.10.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "optional": true, "requires": { @@ -2238,13 +2371,15 @@ }, "uglify-to-browserify": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "dev": true, "optional": true }, "validate-npm-package-license": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, "requires": { "spdx-correct": "~1.0.0", @@ -2252,112 +2387,125 @@ } }, "which": { - "version": "1.2.10", - "bundled": true, + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { - "isexe": "^1.1.1" + "isexe": "^2.0.0" } }, "which-module": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, "window-size": { "version": "0.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "wrap-ansi": { - "version": "2.0.0", - "bundled": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "^1.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write-file-atomic": { - "version": "1.1.4", - "bundled": true, + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "slide": "^1.1.5" } }, "y18n": { "version": "3.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, "yallist": { - "version": "2.0.0", - "bundled": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yargs": { - "version": "4.8.1", - "bundled": true, + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dev": true, "requires": { + "camelcase": "^3.0.0", "cliui": "^3.2.0", "decamelize": "^1.1.1", "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", "os-locale": "^1.4.0", "read-pkg-up": "^1.0.1", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", - "string-width": "^1.0.1", + "string-width": "^1.0.2", "which-module": "^1.0.0", - "window-size": "^0.2.0", "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" + "yargs-parser": "^5.0.0" }, "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, "cliui": { "version": "3.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" } - }, - "window-size": { - "version": "0.2.0", - "bundled": true, - "dev": true } } }, "yargs-parser": { - "version": "2.4.1", - "bundled": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" + "camelcase": "^3.0.0" }, "dependencies": { "camelcase": { "version": "3.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true } } @@ -2678,9 +2826,9 @@ "dev": true }, "tap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/tap/-/tap-7.1.2.tgz", - "integrity": "sha1-36w+zxSshUe7rSW70Wzyw3Q/Zc8=", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/tap/-/tap-9.0.3.tgz", + "integrity": "sha1-vT3uy1B/TjaEhu66jxDNePQvcoM=", "dev": true, "requires": { "bluebird": "^3.3.1", @@ -2692,16 +2840,16 @@ "glob": "^7.0.0", "isexe": "^1.0.0", "js-yaml": "^3.3.1", - "nyc": "^7.1.0", + "nyc": "^10.0.0", "only-shallow": "^1.0.2", "opener": "^1.4.1", "os-homedir": "1.0.1", "readable-stream": "^2.0.2", "signal-exit": "^3.0.0", "stack-utils": "^0.4.0", - "tap-mocha-reporter": "^2.0.0", - "tap-parser": "^2.2.0", - "tmatch": "^2.0.1" + "tap-mocha-reporter": "^3.0.1", + "tap-parser": "^4.2.2", + "tmatch": "^3.0.0" }, "dependencies": { "glob": { @@ -2721,9 +2869,9 @@ } }, "tap-mocha-reporter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-2.0.1.tgz", - "integrity": "sha1-xwMWFz1uOhbFjhupLV1s2N5YoS4=", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-3.0.9.tgz", + "integrity": "sha512-VO07vhC9EG27EZdOe7bWBj1ldbK+DL9TnRadOgdQmiQOVZjFpUEQuuqO7+rNSO2kfmkq5hWeluYXDWNG/ytXTQ==", "dev": true, "requires": { "color-support": "^1.1.0", @@ -2733,7 +2881,7 @@ "glob": "^7.0.5", "js-yaml": "^3.3.1", "readable-stream": "^2.1.5", - "tap-parser": "^2.0.0", + "tap-parser": "^5.1.0", "unicode-length": "^1.0.0" }, "dependencies": { @@ -2750,13 +2898,24 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } + }, + "tap-parser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz", + "integrity": "sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA==", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "js-yaml": "^3.2.7", + "readable-stream": "^2" + } } } }, "tap-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-2.2.3.tgz", - "integrity": "sha1-rebpbje/04zg8WLaBn80A08GiwE=", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-4.2.4.tgz", + "integrity": "sha1-ZaKmAuSeF9uD+h8pX1P60DAlzE0=", "dev": true, "requires": { "events-to-array": "^1.0.1", @@ -2775,9 +2934,9 @@ } }, "tmatch": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", - "integrity": "sha1-DFYkbzPzDaG409colauvFmYPOM8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-3.1.0.tgz", + "integrity": "sha512-W3MSATOCN4pVu2qFxmJLIArSifeSOFqnfx9hiUaVgOmeRoI2NbU7RNga+6G+L8ojlFeQge+ZPCclWyUpQ8UeNQ==", "dev": true }, "to-object-path": { diff --git a/package.json b/package.json index 72e421e4..d7ceb328 100644 --- a/package.json +++ b/package.json @@ -39,14 +39,14 @@ "moment": "^2.19.3" }, "devDependencies": { - "nodeunit": "0.9", "ben": "0.0.0", "markdown-toc": "0.12.x", - "verror": "1.3.3", - "vasync": "1.4.3" + "tap": "^9.0.3", + "vasync": "1.4.3", + "verror": "1.3.3" }, "scripts": { "check": "make check", - "test": "nodeunit test/*.test.js # skip dtrace tests" + "test": "tap test/*.test.js # skip dtrace tests" } } diff --git a/test/add-stream.test.js b/test/add-stream.test.js index 757274f2..d463d682 100644 --- a/test/add-stream.test.js +++ b/test/add-stream.test.js @@ -4,13 +4,9 @@ * Test stream adding. */ -var bunyan = require('../lib/bunyan'); +var test = require('tap').test; -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var test = tap4nodeunit.test; +var bunyan = require('../lib/bunyan'); test('non-writables passed as stream', function (t) { diff --git a/test/buffer.test.js b/test/buffer.test.js index 53c63762..ab74832b 100644 --- a/test/buffer.test.js +++ b/test/buffer.test.js @@ -1,6 +1,6 @@ /* - * Copyright (c) 2012 Trent Mick. All rights reserved. - * Copyright (c) 2012 Joyent Inc. All rights reserved. + * Copyright 2020 Trent Mick + * Copyright 2012 Joyent Inc. * * Test logging with (accidental) usage of buffers. */ @@ -8,16 +8,9 @@ var util = require('util'), inspect = util.inspect, format = util.format; -var bunyan = require('../lib/bunyan'); - -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var test = require('tap').test; +var bunyan = require('../lib/bunyan'); function Catcher() { @@ -41,7 +34,7 @@ var log = new bunyan.createLogger({ test('log.info(BUFFER)', function (t) { - var b = new Buffer('foo'); + var b = Buffer.from ? Buffer.from('foo') : new Buffer('foo'); ['trace', 'debug', @@ -69,7 +62,7 @@ test('log.info(BUFFER)', function (t) { //test('log.info({buf: BUFFER})', function (t) { -// var b = new Buffer('foo'); +// var b = Buffer.from ? Buffer.from('foo') : new Buffer('foo'); // // // Really there isn't much Bunyan can do here. See // // . An unwelcome hack would diff --git a/test/child-behaviour.test.js b/test/child-behaviour.test.js index ddc2896b..b882ec98 100644 --- a/test/child-behaviour.test.js +++ b/test/child-behaviour.test.js @@ -1,19 +1,12 @@ /* - * Copyright (c) 2012 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * Test some `.child(...)` behaviour. */ -var bunyan = require('../lib/bunyan'); - -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var test = require('tap').test; +var bunyan = require('../lib/bunyan'); function CapturingStream(recs) { diff --git a/test/cli-client-req.test.js b/test/cli-client-req.test.js index 8ef4a099..176ef09e 100644 --- a/test/cli-client-req.test.js +++ b/test/cli-client-req.test.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Trent Mick. + * Copyright 2020 Trent Mick * * Test the bunyan CLI's handling of the "client_req" field. * "client_req" is a common-ish Bunyan log field from restify-clients. See: @@ -9,22 +9,18 @@ var exec = require('child_process').exec; var fs = require('fs'); +var os = require('os'); var path = require('path'); var _ = require('util').format; -var vasync = require('vasync'); - -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var test = require('tap').test; // ---- globals var BUNYAN = path.resolve(__dirname, '../bin/bunyan'); +if (os.platform() === 'win32') { + BUNYAN = process.execPath + ' ' + BUNYAN; +} // ---- tests diff --git a/test/cli-res.test.js b/test/cli-res.test.js index 75cb5dde..923ea7ff 100644 --- a/test/cli-res.test.js +++ b/test/cli-res.test.js @@ -1,27 +1,23 @@ /* - * Copyright (c) 2017, Trent Mick. + * Copyright 2020 Trent Mick * * Test the bunyan CLI's handling of the "res" field. */ var exec = require('child_process').exec; var fs = require('fs'); +var os = require('os'); var path = require('path'); var _ = require('util').format; -var vasync = require('vasync'); - -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var test = require('tap').test; // ---- globals var BUNYAN = path.resolve(__dirname, '../bin/bunyan'); +if (os.platform() === 'win32') { + BUNYAN = process.execPath + ' ' + BUNYAN; +} // ---- tests diff --git a/test/cli.test.js b/test/cli.test.js index 5ba4e0fc..3908159b 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * Test the `bunyan` CLI. */ @@ -7,22 +7,19 @@ var p = console.warn; var exec = require('child_process').exec; var fs = require('fs'); +var os = require('os'); var path = require('path'); var _ = require('util').format; +var test = require('tap').test; var vasync = require('vasync'); -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; - // ---- globals var BUNYAN = path.resolve(__dirname, '../bin/bunyan'); +if (os.platform() === 'win32') { + BUNYAN = process.execPath + ' ' + BUNYAN; +} // ---- support stuff @@ -99,50 +96,64 @@ test('cat simple.log', function (t) { ); }); -// A stable 'TZ' for 'local' timezone output. -tzEnv = objCopy(process.env); -tzEnv.TZ = 'Pacific/Honolulu'; - -test('time: simple.log local long', function (t) { - exec(_('%s -o long -L %s/corpus/simple.log', BUNYAN, __dirname), - {env: tzEnv}, function (err, stdout, stderr) { - t.ifError(err) - t.equal(stdout, - // JSSTYLED - '[2012-02-08T12:56:52.856-10:00] INFO: myservice/123 on example.com: ' - + 'My message\n'); - t.end(); +// Test some local/UTC time handling by changing to a known non-UTC timezone +// for some tests. +// +// I don't know how to effectively do this on Windows (at least +// https://stackoverflow.com/questions/2611017 concurs), so we skip these on +// Windows. Help is welcome if you know how to do this on Windows. +test('time TZ tests', { + skip: os.platform() === 'win32' + ? 'do not know how to set timezone on Windows' : false +}, function (suite) { + // A stable 'TZ' for 'local' timezone output. + tzEnv = objCopy(process.env); + tzEnv.TZ = 'Pacific/Honolulu'; + + test('time: simple.log local long', function (t) { + exec(_('%s -o long -L %s/corpus/simple.log', BUNYAN, __dirname), + {env: tzEnv}, function (err, stdout, stderr) { + t.ifError(err) + t.equal(stdout, + // JSSTYLED + '[2012-02-08T12:56:52.856-10:00] INFO: myservice/123 on example.com: ' + + 'My message\n'); + t.end(); + }); }); -}); -test('time: simple.log utc long', function (t) { - exec(_('%s -o long --time utc %s/corpus/simple.log', BUNYAN, __dirname), - {env: tzEnv}, function (err, stdout, stderr) { - t.ifError(err) - t.equal(stdout, - '[2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: ' - + 'My message\n'); - t.end(); + test('time: simple.log utc long', function (t) { + exec(_('%s -o long --time utc %s/corpus/simple.log', BUNYAN, __dirname), + {env: tzEnv}, function (err, stdout, stderr) { + t.ifError(err) + t.equal(stdout, + // JSSTYLED + '[2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: ' + + 'My message\n'); + t.end(); + }); }); -}); -test('time: simple.log local short', function (t) { - exec(_('%s -o short -L %s/corpus/simple.log', BUNYAN, __dirname), - {env: tzEnv}, function (err, stdout, stderr) { - t.ifError(err) - t.equal(stdout, - '12:56:52.856 INFO myservice: ' - + 'My message\n'); - t.end(); + test('time: simple.log local short', function (t) { + exec(_('%s -o short -L %s/corpus/simple.log', BUNYAN, __dirname), + {env: tzEnv}, function (err, stdout, stderr) { + t.ifError(err) + t.equal(stdout, + '12:56:52.856 INFO myservice: ' + + 'My message\n'); + t.end(); + }); }); -}); -test('time: simple.log utc short', function (t) { - exec(_('%s -o short %s/corpus/simple.log', BUNYAN, __dirname), - {env: tzEnv}, function (err, stdout, stderr) { - t.ifError(err) - t.equal(stdout, - '22:56:52.856Z INFO myservice: ' - + 'My message\n'); - t.end(); + test('time: simple.log utc short', function (t) { + exec(_('%s -o short %s/corpus/simple.log', BUNYAN, __dirname), + {env: tzEnv}, function (err, stdout, stderr) { + t.ifError(err) + t.equal(stdout, + '22:56:52.856Z INFO myservice: ' + + 'My message\n'); + t.end(); + }); }); + + suite.end(); }); test('simple.log with color', function (t) { @@ -221,12 +232,16 @@ test('simple.log doesnotexist1.log doesnotexist2.log', function (t) { // ENOENT, open 'asdf.log' // io.js 2.2 (at least): // ENOENT: no such file or directory, open 'doesnotexist1.log' + // in GitHub Actions windows-latest runner: + // JSSTYLED + // ENOENT: no such file or directory, open 'D:\\a\\node-bunyan\\node-bunyan\\doesnotexist1.log var matches = [ - /^bunyan: ENOENT.*?, open 'doesnotexist1.log'/m, - /^bunyan: ENOENT.*?, open 'doesnotexist2.log'/m, + /^bunyan: ENOENT.*?, open '.*?doesnotexist1.log'/m, + /^bunyan: ENOENT.*?, open '.*?doesnotexist2.log'/m, ]; matches.forEach(function (match) { - t.ok(match.test(stderr), 'stderr matches ' + match.toString()); + t.ok(match.test(stderr), 'stderr matches ' + match.toString() + + ', stderr=' + JSON .stringify(stderr)); }); t.end(); } @@ -390,7 +405,7 @@ test('--condition "this.level === TRACE', function (t) { exec(cmd, function (err, stdout, stderr) { t.ifError(err); t.equal(stdout, expect); - t.done(); + t.end(); }); }); diff --git a/test/ctor.test.js b/test/ctor.test.js index f47cb9dc..0f1164d9 100644 --- a/test/ctor.test.js +++ b/test/ctor.test.js @@ -1,20 +1,13 @@ /* - * Copyright (c) 2012 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * Test type checking on creation of the Logger. */ -var bunyan = require('../lib/bunyan'), - Logger = bunyan; - -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var test = require('tap').test; +var bunyan = require('../lib/bunyan') +var Logger = bunyan; test('ensure Logger creation options', function (t) { diff --git a/test/cycles.test.js b/test/cycles.test.js index 293de788..1c1d29d0 100644 --- a/test/cycles.test.js +++ b/test/cycles.test.js @@ -5,14 +5,7 @@ */ var Logger = require('../lib/bunyan.js'); - -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var test = require('tap').test; var Stream = require('stream').Stream; @@ -99,6 +92,7 @@ test('cycles', function (t) { log.info('kaboom', obj.KABOOM); log.info(obj); - outstr.end(); t.ok('did not throw'); + + outstr.end(); }); diff --git a/test/dtrace/dtrace.test.js b/test/dtrace/dtrace.test.js index a9ea27b9..a1d4b719 100644 --- a/test/dtrace/dtrace.test.js +++ b/test/dtrace/dtrace.test.js @@ -1,22 +1,15 @@ /* - * Copyright 2016 Trent Mick + * Copyright 2020 Trent Mick * * If available, test dtrace support. */ var spawn = require('child_process').spawn; var format = require('util').format; +var test = require('tap').test; var bunyan = require('../../lib/bunyan'); -// node-tap API -if (require.cache[__dirname + '/../tap4nodeunit.js']) - delete require.cache[__dirname + '/../tap4nodeunit.js']; -var tap4nodeunit = require('../tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; - // Determine if we can run the dtrace tests. var dtracePlats = ['sunos', 'darwin', 'freebsd']; diff --git a/test/error-event.test.js b/test/error-event.test.js index 2318d425..0052d534 100644 --- a/test/error-event.test.js +++ b/test/error-event.test.js @@ -1,23 +1,16 @@ /* - * Copyright 2016 Trent Mick + * Copyright 2020 Trent Mick * * Test emission and handling of 'error' event in a logger with a 'path' * stream. */ var EventEmitter = require('events').EventEmitter; +var test = require('tap').test; var util = require('util'); var bunyan = require('../lib/bunyan'); -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; - var BOGUS_PATH = '/this/path/is/bogus.log'; diff --git a/test/level.test.js b/test/level.test.js index ab619f27..b39f28bf 100644 --- a/test/level.test.js +++ b/test/level.test.js @@ -1,9 +1,10 @@ /* - * Copyright (c) 2014 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * Test the `log.level(...)`. */ +var test = require('tap').test; var util = require('util'), format = util.format, inspect = util.inspect; @@ -11,14 +12,6 @@ var p = console.log; var bunyan = require('../lib/bunyan'); -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; - // ---- test boolean `log.()` calls diff --git a/test/log.test.js b/test/log.test.js index 55906513..f86f75f9 100644 --- a/test/log.test.js +++ b/test/log.test.js @@ -1,5 +1,5 @@ /* - * Copyright 2020 Trent Mick. + * Copyright 2020 Trent Mick * * Test the `log.trace(...)`, `log.debug(...)`, ..., `log.fatal(...)` API. */ @@ -7,18 +7,11 @@ var util = require('util'), format = util.format, inspect = util.inspect; +var test = require('tap').test; var p = console.log; var bunyan = require('../lib/bunyan'); -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; - // ---- test boolean `log.()` calls diff --git a/test/other-api.test.js b/test/other-api.test.js index 0d9304b4..0649fa3d 100644 --- a/test/other-api.test.js +++ b/test/other-api.test.js @@ -1,18 +1,12 @@ /* - * Copyright (c) 2012 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * Test other parts of the exported API. */ -var bunyan = require('../lib/bunyan'); +var test = require('tap').test; -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var bunyan = require('../lib/bunyan'); test('bunyan.s', function (t) { diff --git a/test/process-exit.test.js b/test/process-exit.test.js index 2b7a6214..46454e17 100644 --- a/test/process-exit.test.js +++ b/test/process-exit.test.js @@ -8,12 +8,7 @@ */ var exec = require('child_process').exec; - -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var test = tap4nodeunit.test; +var test = require('tap').test; var nodeVer = process.versions.node.split('.').map(Number); diff --git a/test/raw-stream.test.js b/test/raw-stream.test.js index 88432f39..104d7003 100644 --- a/test/raw-stream.test.js +++ b/test/raw-stream.test.js @@ -1,19 +1,13 @@ /* - * Copyright (c) 2012 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * Test `type: 'raw'` Logger streams. */ var format = require('util').format; -var Logger = require('../lib/bunyan'); +var test = require('tap').test; -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var Logger = require('../lib/bunyan'); function CapturingStream(recs) { diff --git a/test/ringbuffer.test.js b/test/ringbuffer.test.js index 79d193a4..08c88396 100644 --- a/test/ringbuffer.test.js +++ b/test/ringbuffer.test.js @@ -2,17 +2,11 @@ * Test the RingBuffer output stream. */ -var Logger = require('../lib/bunyan'); -var ringbuffer = new Logger.RingBuffer({ 'limit': 5 }); +var test = require('tap').test; -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var Logger = require('../lib/bunyan'); +var ringbuffer = new Logger.RingBuffer({ 'limit': 5 }); var log1 = new Logger({ name: 'log1', diff --git a/test/safe-json-stringify.test.js b/test/safe-json-stringify.test.js index 6b8dc400..e83247c4 100644 --- a/test/safe-json-stringify.test.js +++ b/test/safe-json-stringify.test.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * If available, use `safe-json-stringfy` as a fallback stringifier. * This covers the case where an enumerable property throws an error @@ -8,17 +8,8 @@ * See */ -var p = console.warn; var exec = require('child_process').exec; - -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; - +var test = require('tap').test; test('__defineGetter__ boom', function (t) { var cmd = process.execPath + ' ' + __dirname + '/safe-json-stringify-1.js'; diff --git a/test/serializers.test.js b/test/serializers.test.js index 1cddec02..c65ef66d 100644 --- a/test/serializers.test.js +++ b/test/serializers.test.js @@ -1,21 +1,14 @@ /* - * Copyright (c) 2012 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * Test the standard serializers in Bunyan. */ var http = require('http'); - -var bunyan = require('../lib/bunyan'); +var test = require('tap').test; var verror = require('verror'); -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var bunyan = require('../lib/bunyan'); function CapturingStream(recs) { diff --git a/test/src.test.js b/test/src.test.js index 43553d1c..82bc817d 100644 --- a/test/src.test.js +++ b/test/src.test.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Trent Mick. + * Copyright 2020 Trent Mick. * * Test `src: true` usage. */ @@ -7,17 +7,10 @@ // Intentionally on line 8 for tests below: function logSomething(log) { log.info('something'); } - +var test = require('tap').test; var format = require('util').format; -var Logger = require('../lib/bunyan'); -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var after = tap4nodeunit.after; -var before = tap4nodeunit.before; -var test = tap4nodeunit.test; +var Logger = require('../lib/bunyan'); function CapturingStream(recs) { diff --git a/test/stream-levels.test.js b/test/stream-levels.test.js index 6e12e095..93c86651 100644 --- a/test/stream-levels.test.js +++ b/test/stream-levels.test.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Trent Mick. All rights reserved. + * Copyright 2020 Trent Mick * * Test that streams (the various way they can be added to * a Logger instance) get the appropriate level. @@ -8,16 +8,10 @@ var util = require('util'), format = util.format, inspect = util.inspect; -var p = console.log; +var test = require('tap').test; var bunyan = require('../lib/bunyan'); -// node-tap API -if (require.cache[__dirname + '/tap4nodeunit.js']) - delete require.cache[__dirname + '/tap4nodeunit.js']; -var tap4nodeunit = require('./tap4nodeunit.js'); -var test = tap4nodeunit.test; - // ---- Tests diff --git a/test/tap4nodeunit.js b/test/tap4nodeunit.js deleted file mode 100644 index 5c46e4db..00000000 --- a/test/tap4nodeunit.js +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2012 Mark Cavage. All rights reserved. - * - * Help nodeunit API feel like node-tap's. - * - * Usage: - * if (require.cache[__dirname + '/tap4nodeunit.js']) - * delete require.cache[__dirname + '/tap4nodeunit.js']; - * var tap4nodeunit = require('./tap4nodeunit.js'); - * var after = tap4nodeunit.after; - * var before = tap4nodeunit.before; - * var test = tap4nodeunit.test; - */ - - - -//---- Exports - -module.exports = { - after: function after(teardown) { - module.parent.exports.tearDown = function _teardown(callback) { - try { - teardown.call(this, callback); - } catch (e) { - console.error('after:\n' + e.stack); - process.exit(1); - } - }; - }, - - before: function before(setup) { - module.parent.exports.setUp = function _setup(callback) { - try { - setup.call(this, callback); - } catch (e) { - console.error('before:\n' + e.stack); - process.exit(1); - } - }; - }, - - test: function test(name, tester) { - module.parent.exports[name] = function _(t) { - var _done = false; - t.end = function end() { - if (!_done) { - _done = true; - t.done(); - } - }; - t.notOk = function notOk(ok, message) { - return (t.ok(!ok, message)); - }; - t.error = t.ifError; - - tester.call(this, t); - }; - } - - -}; From 7641566f12e9fdbc96815cc29e42cfa42eb04345 Mon Sep 17 00:00:00 2001 From: twelve17 Date: Tue, 7 Jul 2020 21:09:25 -0700 Subject: [PATCH 19/24] express support: use req.originalUrl for "req" serializer (#575) --- CHANGES.md | 4 ++ lib/bunyan.js | 4 +- test/serializers.test.js | 111 +++++++++++++++++---------------------- 3 files changed, 56 insertions(+), 63 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index d775fa3b..4b4eb5fa 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,10 @@ Known issues: ## not yet released +- [pull #575, #278] Change the default "req" serializer to accept expressjs's + `req.originalUrl` for the "url" field per + . (By @twelve17 and + @kingcody.) - Development change: Switch to node-tap for testing (from nodeunit, which is now obsolete). Currently just tap v9 because that is the last major version of node-tap that supports back to node v0.10. diff --git a/lib/bunyan.js b/lib/bunyan.js index 85d33a4e..405cdb24 100644 --- a/lib/bunyan.js +++ b/lib/bunyan.js @@ -1090,7 +1090,9 @@ Logger.stdSerializers.req = function (req) { return req; return { method: req.method, - url: req.url, + // Accept `req.originalUrl` for expressjs usage. + // https://expressjs.com/en/api.html#req.originalUrl + url: req.originalUrl || req.url, headers: req.headers, remoteAddress: req.connection.remoteAddress, remotePort: req.connection.remotePort diff --git a/test/serializers.test.js b/test/serializers.test.js index c65ef66d..d1efe15e 100644 --- a/test/serializers.test.js +++ b/test/serializers.test.js @@ -18,10 +18,8 @@ CapturingStream.prototype.write = function (rec) { this.recs.push(rec); } - -test('req serializer', function (t) { - var records = []; - var log = bunyan.createLogger({ +function createLogger(serializers, records) { + return bunyan.createLogger({ name: 'serializer-test', streams: [ { @@ -29,10 +27,13 @@ test('req serializer', function (t) { type: 'raw' } ], - serializers: { - req: bunyan.stdSerializers.req - } + serializers: serializers }); +} + +test('req serializer', function (t) { + var records = []; + var log = createLogger({ req: bunyan.stdSerializers.req }, records); // None of these should blow up. var bogusReqs = [ @@ -78,20 +79,42 @@ test('req serializer', function (t) { }); -test('res serializer', function (t) { +test('req serializer - express.originalUrl', function (t) { var records = []; - var log = bunyan.createLogger({ - name: 'serializer-test', - streams: [ - { - stream: new CapturingStream(records), - type: 'raw' - } - ], - serializers: { - res: bunyan.stdSerializers.res - } + var log = createLogger({ req: bunyan.stdSerializers.req }, records); + + // Get http request and response objects to play with and test. + var theReq, theRes; + var server = http.createServer(function (req, res) { + theReq = req; + theRes = res; + req.originalUrl = '/original-url' + req.url; + res.writeHead(200, {'Content-Type': 'text/plain'}); + res.end('Hello World\n'); + }) + server.listen(8765, function () { + http.get({host: '127.0.0.1', port: 8765, path: '/'}, function (res) { + res.resume(); + log.info({req: theReq}, 'the request'); + var lastRecord = records[records.length-1]; + t.equal(lastRecord.req.method, 'GET'); + t.equal(lastRecord.req.url, '/original-url' + theReq.url); + t.equal(lastRecord.req.remoteAddress, + theReq.connection.remoteAddress); + t.equal(lastRecord.req.remotePort, theReq.connection.remotePort); + server.close(); + t.end(); + }).on('error', function (err) { + t.ok(false, 'error requesting to our test server: ' + err); + server.close(); + t.end(); + }); }); +}); + +test('res serializer', function (t) { + var records = []; + var log = createLogger({ res: bunyan.stdSerializers.res }, records); // None of these should blow up. var bogusRess = [ @@ -136,18 +159,7 @@ test('res serializer', function (t) { test('err serializer', function (t) { var records = []; - var log = bunyan.createLogger({ - name: 'serializer-test', - streams: [ - { - stream: new CapturingStream(records), - type: 'raw' - } - ], - serializers: { - err: bunyan.stdSerializers.err - } - }); + var log = createLogger({ err: bunyan.stdSerializers.err }, records); // None of these should blow up. var bogusErrs = [ @@ -186,18 +198,7 @@ test('err serializer: custom serializer', function (t) { }; } - var log = bunyan.createLogger({ - name: 'serializer-test', - streams: [ - { - stream: new CapturingStream(records), - type: 'raw' - } - ], - serializers: { - err: customSerializer - } - }); + var log = createLogger({ err: customSerializer }, records); var e1 = new Error('message1'); e1.beep = 'bop'; @@ -214,16 +215,7 @@ test('err serializer: custom serializer', function (t) { test('err serializer: long stack', function (t) { var records = []; - var log = bunyan.createLogger({ - name: 'serializer-test', - streams: [ { - stream: new CapturingStream(records), - type: 'raw' - } ], - serializers: { - err: bunyan.stdSerializers.err - } - }); + var log = createLogger({ err: bunyan.stdSerializers.err }, records); var topErr, midErr, bottomErr; @@ -301,19 +293,14 @@ test('err serializer: long stack', function (t) { // serializers that don't handle an `undefined` value will blow up. test('do not apply serializers if no record key', function (t) { var records = []; - var log = bunyan.createLogger({ - name: 'serializer-test', - streams: [ { - stream: new CapturingStream(records), - type: 'raw' - } ], - serializers: { + var log = createLogger({ err: bunyan.stdSerializers.err, boom: function (value) { throw new Error('boom'); } - } - }); + }, + records + ); log.info({foo: 'bar'}, 'record one'); log.info({err: new Error('record two err')}, 'record two'); From f5a8d1dc263d6785325e3f7369a3aa9988254ebd Mon Sep 17 00:00:00 2001 From: jacamera Date: Wed, 8 Jul 2020 00:19:28 -0400 Subject: [PATCH 20/24] updated webpack configuration instructions (#574) --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ac497b6f..0cd5757f 100644 --- a/README.md +++ b/README.md @@ -1380,19 +1380,19 @@ var log = bunyan.createLogger({ log.info('hi on info'); ``` -## Webpack -Webpack can work with the same example Browserify above. To do this, we need to make webpack ignore optional files: +## webpack +To include bunyan in your webpack bundle you need to tell webpack to +ignore the optional dependencies that are unavailable in browser environments. + +Mark the following dependencies as +[externals](https://webpack.js.org/configuration/externals/) in your webpack +configuration file to exclude them from the bundle: -Now tell webpack to ignore files for -[optional dependencies](https://webpack.js.org/configuration/module/#module-noparse) -in your "webpack.config.js": ``` module: { - noParse: [/dtrace-provider$/, /safe-json-stringify$/, /mv/], - ... + externals: ['dtrace-provider', 'fs', 'mv', 'os', 'source-map-support'] } ``` -Now webpack builds. # Versioning From a72af248b57a908a5d39e72b7e9efed7b24e5808 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Thu, 1 Oct 2020 10:48:29 -0700 Subject: [PATCH 21/24] TODO: review logpp --- TODO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 5e51d404..6ac918f2 100644 --- a/TODO.md +++ b/TODO.md @@ -79,7 +79,7 @@ TODO: - full-on docs - better examples/ - better coloring -- look at pino (bunyan style, perf benefits) +- look at pino (bunyan style, perf benefits), also logpp (https://github.com/mrkmarron/logpp) - would be exciting to have bunyan support in http://lnav.org/ if that made sense - "template" support for 'rotating-file' stream to get dated rolled files From 0ff1ae29cc9e028c6c11cd6b60e3b90217b66a10 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Fri, 8 Jan 2021 15:32:52 -0800 Subject: [PATCH 22/24] version 2.0.5 (beta) --- CHANGES.md | 8 ++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4b4eb5fa..90a221c6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,12 +1,20 @@ # bunyan Changelog +See [the bunyan@1.x changelog](https://github.com/trentm/node-bunyan/blob/1.x/CHANGES.md) +for details on recent 1.x releases. + Known issues: - [issue #58] Can't install to a dir with spaces. This is [this node-gyp bug](https://github.com/TooTallNate/node-gyp/issues/65). + ## not yet released +(nothing yet) + +## 2.0.5 (beta) + - [pull #575, #278] Change the default "req" serializer to accept expressjs's `req.originalUrl` for the "url" field per . (By @twelve17 and diff --git a/package-lock.json b/package-lock.json index d47c5412..1403b3a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "bunyan", - "version": "2.0.4", + "version": "2.0.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d7ceb328..b154b498 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bunyan", - "version": "2.0.4", + "version": "2.0.5", "description": "a JSON logging library for node.js services", "author": "Trent Mick (http://trentm.com)", "main": "./lib/bunyan.js", From cb70cc7d0c3bd397d4c0f06ece03cf03f7d83598 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Jul 2022 22:37:38 -0700 Subject: [PATCH 23/24] Bump moment from 2.27.0 to 2.29.4 (#693) Refs: #692 --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1403b3a6..a9305a5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -904,9 +904,9 @@ } }, "moment": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", - "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==", + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "optional": true }, "ms": { From 5c2258ecb1d33ba34bd7fbd6167e33023dc06e40 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Fri, 22 Jul 2022 23:09:08 -0700 Subject: [PATCH 24/24] typo: minor correction in changelog ver ref --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 90a221c6..bcfd7fdf 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -42,7 +42,7 @@ Known issues: to the '-p' option before executing `ps -A -o pid,command | grep '$ARG'` which could lead to unintended execution. - (This same change is also in bunyan@1.8.3.) + (This same change is also in bunyan@1.8.13.) ## 2.0.2 (beta)