From 07ea8763c663bdd3fe1f8446cdb62dae233f4916 Mon Sep 17 00:00:00 2001 From: "P. Roebuck" Date: Thu, 18 Apr 2019 14:04:30 -0500 Subject: [PATCH 001/441] Remove noise output from JSON reporter test (#3881) --- test/reporters/json.spec.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/reporters/json.spec.js b/test/reporters/json.spec.js index bf923bb171..5d7a37c564 100644 --- a/test/reporters/json.spec.js +++ b/test/reporters/json.spec.js @@ -1,5 +1,6 @@ 'use strict'; +var sinon = require('sinon'); var Mocha = require('../../'); var Suite = Mocha.Suite; var Runner = Mocha.Runner; @@ -28,7 +29,9 @@ describe('JSON reporter', function() { }) ); + var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { + stdoutWrite.restore(); expect(runner, 'to satisfy', { testResults: { failures: [ @@ -49,7 +52,9 @@ describe('JSON reporter', function() { it('should have 1 test pending', function(done) { suite.addTest(new Test(testTitle)); + var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { + stdoutWrite.restore(); expect(runner, 'to satisfy', { testResults: { pending: [ @@ -78,7 +83,9 @@ describe('JSON reporter', function() { }) ); + var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { + stdoutWrite.restore(); expect(runner, 'to satisfy', { testResults: { failures: [ From 63056f08b412fdb0908a1a829a3f37dd2bdc2ac8 Mon Sep 17 00:00:00 2001 From: Stephen Hess Date: Sat, 20 Apr 2019 00:19:12 -0400 Subject: [PATCH 002/441] fixed anchors to configuration section (#3841) --- docs/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.md b/docs/index.md index 0f99a5e39e..0117320279 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1055,7 +1055,7 @@ Can be specified as a comma-delimited list. > _New in v6.0.0._ -Specify an explicit path to a [configuration file](#configuring-mocha-node-js). +Specify an explicit path to a [configuration file](#configuring-mocha-nodejs). By default, Mocha will search for a config file if `--config` is not specified; use `--no-config` to suppress this behavior. @@ -1071,7 +1071,7 @@ By default, Mocha looks for a `mocha.opts` in `test/mocha.opts`; use `--no-opts` > _New in v6.0.0._ -Specify an explicit path to a [`package.json` file](#configuring-mocha-node-js) (ostensibly containing configuration in a `mocha` property). +Specify an explicit path to a [`package.json` file](#configuring-mocha-nodejs) (ostensibly containing configuration in a `mocha` property). By default, Mocha looks for a `package.json` in the current working directory or nearest ancestor, and will use the first file found (regardless of whether it contains a `mocha` property); to suppress `package.json` lookup, use `--no-package`. From 59fcf7158ad7a94148e47834d4d32117efcbf182 Mon Sep 17 00:00:00 2001 From: toyjhlee Date: Sat, 20 Apr 2019 16:01:25 +0900 Subject: [PATCH 003/441] Broken links in docs --- docs/api-tutorials/custom-reporter.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/api-tutorials/custom-reporter.md b/docs/api-tutorials/custom-reporter.md index 3f0313aac8..1555ce26d0 100644 --- a/docs/api-tutorials/custom-reporter.md +++ b/docs/api-tutorials/custom-reporter.md @@ -112,9 +112,9 @@ The event names are exported from the `constants` property of `Mocha.Runner`: > It's important to understand that all `Suite` callbacks will be run _before_ the [Runner] emits `EVENT_RUN_BEGIN`. Hooks and tests, however, won't run until _after_ the [Runner] emits `EVENT_RUN_BEGIN`. -[runner]: /api/mocha.runner -[test]: /api/mocha.test -[hook]: /api/mocha.hook -[suite]: /api/mocha.suite +[runner]: /api/runner +[test]: /api/test +[hook]: /api/hook +[suite]: /api/suite [base]: /api/mocha.reporters.base [delay]: /#delayed-root-suite From 57a97386109be02e6d665b01bfd5f2aa75b16ab6 Mon Sep 17 00:00:00 2001 From: "JeongHoon Byun (aka Outsider)" Date: Mon, 22 Apr 2019 14:52:46 -0700 Subject: [PATCH 004/441] Use sinon sandbox for reporter tests (#3888) --- test/reporters/landing.spec.js | 55 ++++--------- test/reporters/list.spec.js | 61 +++++---------- test/reporters/nyan.spec.js | 132 ++++++++++++-------------------- test/reporters/progress.spec.js | 72 +++++------------ 4 files changed, 104 insertions(+), 216 deletions(-) diff --git a/test/reporters/landing.spec.js b/test/reporters/landing.spec.js index e561c23d55..dd73d9e5b3 100644 --- a/test/reporters/landing.spec.js +++ b/test/reporters/landing.spec.js @@ -1,5 +1,6 @@ 'use strict'; +var sandbox = require('sinon').createSandbox(); var Mocha = require('../..'); var reporters = Mocha.reporters; var Landing = reporters.Landing; @@ -15,8 +16,6 @@ describe('Landing reporter', function() { var runner; var options = {}; var runReporter = makeRunReporter(Landing); - var useColors; - var windowWidth; var resetCode = '\u001b[0m'; var expectedArray = [ '\u001b[1D\u001b[2A', @@ -30,40 +29,32 @@ describe('Landing reporter', function() { ]; beforeEach(function() { - useColors = Base.useColors; - Base.useColors = false; - windowWidth = Base.window.width; - Base.window.width = 1; + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.window, 'width').value(1); }); afterEach(function() { - Base.useColors = useColors; - Base.window.width = windowWidth; + sandbox.restore(); runner = undefined; }); describe('on start', function() { it('should write new lines', function() { - var cachedCursor = Base.cursor; - Base.cursor.hide = function() {}; + sandbox.stub(Base.cursor, 'hide'); + runner = createMockRunner('start', 'start'); var stdout = runReporter({}, runner, options); expect(stdout[0], 'to equal', '\n\n\n '); - Base.cursor = cachedCursor; }); it('should call cursor hide', function() { - var cachedCursor = Base.cursor; - var calledCursorHide = false; - Base.cursor.hide = function() { - calledCursorHide = true; - }; + sandbox.stub(Base.cursor, 'hide'); + runner = createMockRunner('start', 'start'); runReporter({}, runner, options); - expect(calledCursorHide, 'to be', true); - Base.cursor = cachedCursor; + expect(Base.cursor.hide, 'was called'); }); }); @@ -95,28 +86,16 @@ describe('Landing reporter', function() { }); describe('on end', function() { it('should call cursor show and epilogue', function() { - var cachedCursor = Base.cursor; - var calledCursorShow = false; - Base.cursor.show = function() { - calledCursorShow = true; - }; + var reporterStub = {epilogue: function() {}}; + sandbox.stub(Base.cursor, 'show'); + sandbox.stub(reporterStub, 'epilogue'); + runner = createMockRunner('end', 'end'); - var calledEpilogue = false; - runReporter( - { - epilogue: function() { - calledEpilogue = true; - } - }, - runner, - options - ); - - expect(calledEpilogue, 'to be', true); - expect(calledCursorShow, 'to be', true); - - Base.cursor = cachedCursor; + runReporter(reporterStub, runner, options); + + expect(reporterStub.epilogue, 'was called'); + expect(Base.cursor.show, 'was called'); }); }); }); diff --git a/test/reporters/list.spec.js b/test/reporters/list.spec.js index 5abbe0bf69..c9eceb87fe 100644 --- a/test/reporters/list.spec.js +++ b/test/reporters/list.spec.js @@ -1,5 +1,6 @@ 'use strict'; +var sandbox = require('sinon').createSandbox(); var reporters = require('../../').reporters; var List = reporters.List; var Base = reporters.Base; @@ -11,7 +12,6 @@ describe('List reporter', function() { var runner; var options = {}; var runReporter = makeRunReporter(List); - var useColors; var expectedTitle = 'some title'; var expectedDuration = 100; var test = { @@ -23,12 +23,11 @@ describe('List reporter', function() { }; beforeEach(function() { - useColors = Base.useColors; - Base.useColors = false; + sandbox.stub(Base, 'useColors').value(false); }); afterEach(function() { - Base.useColors = useColors; + sandbox.restore(); runner = undefined; }); @@ -53,24 +52,18 @@ describe('List reporter', function() { }); describe('on pass', function() { it('should call cursor CR', function() { - var calledCursorCR = false; - var cachedCursor = Base.cursor; - Base.cursor.CR = function() { - calledCursorCR = true; - }; + sandbox.stub(Base.cursor, 'CR'); + runner = createMockRunner('pass', 'pass', null, null, test); runReporter({epilogue: function() {}}, runner, options); - expect(calledCursorCR, 'to be', true); - - Base.cursor = cachedCursor; + expect(Base.cursor.CR, 'was called'); }); it('should write expected symbol, title and duration to the console', function() { - var cachedSymbols = Base.symbols; var expectedOkSymbol = 'OK'; - Base.symbols.ok = expectedOkSymbol; - var cachedCursor = Base.cursor; - Base.cursor.CR = function() {}; + sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol); + sandbox.stub(Base.cursor, 'CR'); + runner = createMockRunner('pass', 'pass', null, null, test); var stdout = runReporter({epilogue: function() {}}, runner, options); @@ -85,29 +78,21 @@ describe('List reporter', function() { expectedDuration + 'ms\n' ); - - Base.cursor = cachedCursor; - Base.symbols = cachedSymbols; }); }); describe('on fail', function() { it('should call cursor CR', function() { - var calledCursorCR = false; - var cachedCursor = Base.cursor; - Base.cursor.CR = function() { - calledCursorCR = true; - }; + sandbox.stub(Base.cursor, 'CR'); + runner = createMockRunner('fail', 'fail', null, null, test); runReporter({epilogue: function() {}}, runner, options); - expect(calledCursorCR, 'to be', true); - - Base.cursor = cachedCursor; + expect(Base.cursor.CR, 'was called'); }); it('should write expected error number and title', function() { - var cachedCursor = Base.cursor; + sandbox.stub(Base.cursor, 'CR'); + var expectedErrorCount = 1; - Base.cursor.CR = function() {}; runner = createMockRunner('fail', 'fail', null, null, test); var stdout = runReporter({epilogue: function() {}}, runner, options); @@ -116,8 +101,6 @@ describe('List reporter', function() { 'to be', ' ' + expectedErrorCount + ') ' + expectedTitle + '\n' ); - - Base.cursor = cachedCursor; }); it('should immediately construct fail strings', function() { var actual = {a: 'actual'}; @@ -149,19 +132,13 @@ describe('List reporter', function() { describe('on end', function() { it('should call epilogue', function() { - var calledEpilogue = false; + var reporterStub = {epilogue: function() {}}; + sandbox.stub(reporterStub, 'epilogue'); + runner = createMockRunner('end', 'end'); - runReporter( - { - epilogue: function() { - calledEpilogue = true; - } - }, - runner, - options - ); + runReporter(reporterStub, runner, options); - expect(calledEpilogue, 'to be', true); + expect(reporterStub.epilogue, 'was called'); }); }); }); diff --git a/test/reporters/nyan.spec.js b/test/reporters/nyan.spec.js index 96bbda6766..b1ad3a22a3 100644 --- a/test/reporters/nyan.spec.js +++ b/test/reporters/nyan.spec.js @@ -1,5 +1,6 @@ 'use strict'; +var sandbox = require('sinon').createSandbox(); var reporters = require('../../').reporters; var NyanCat = reporters.Nyan; var Base = reporters.Base; @@ -10,110 +11,90 @@ var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Nyan reporter', function() { describe('events', function() { var runner; - var calledDraw; var options = {}; var runReporter = makeRunReporter(NyanCat); afterEach(function() { + sandbox.restore(); runner = undefined; }); describe('on start', function() { it('should call draw', function() { - calledDraw = false; + var reporterStub = { + draw: function() {}, + generateColors: function() {} + }; + sandbox.stub(reporterStub, 'draw'); + runner = createMockRunner('start', 'start'); - runReporter( - { - draw: function() { - calledDraw = true; - }, - generateColors: function() {} - }, - runner, - options - ); + runReporter(reporterStub, runner, options); - expect(calledDraw, 'to be', true); + expect(reporterStub.draw, 'was called'); }); }); describe('on pending', function() { it('should call draw', function() { - calledDraw = false; + var reporterStub = { + draw: function() {}, + generateColors: function() {} + }; + sandbox.stub(reporterStub, 'draw'); + runner = createMockRunner('pending', 'pending'); - runReporter( - { - draw: function() { - calledDraw = true; - }, - generateColors: function() {} - }, - runner, - options - ); + runReporter(reporterStub, runner, options); - expect(calledDraw, 'to be', true); + expect(reporterStub.draw, 'was called'); }); }); describe('on pass', function() { it('should call draw', function() { - calledDraw = false; + var reporterStub = { + draw: function() {}, + generateColors: function() {} + }; + sandbox.stub(reporterStub, 'draw'); + var test = { duration: '', slow: function() {} }; runner = createMockRunner('pass', 'pass', null, null, test); - runReporter( - { - draw: function() { - calledDraw = true; - }, - generateColors: function() {} - }, - runner, - options - ); + runReporter(reporterStub, runner, options); - expect(calledDraw, 'to be', true); + expect(reporterStub.draw, 'was called'); }); }); describe('on fail', function() { it('should call draw', function() { - calledDraw = false; + var reporterStub = { + draw: function() {}, + generateColors: function() {} + }; + sandbox.stub(reporterStub, 'draw'); + var test = { err: '' }; runner = createMockRunner('fail', 'fail', null, null, test); - runReporter( - { - draw: function() { - calledDraw = true; - }, - generateColors: function() {} - }, - runner, - options - ); + runReporter(reporterStub, runner, options); - expect(calledDraw, 'to be', true); + expect(reporterStub.draw, 'was called'); }); }); describe('on end', function() { it('should call epilogue', function() { - var calledEpilogue = false; + var reporterStub = { + draw: function() {}, + generateColors: function() {}, + epilogue: function() {} + }; + sandbox.stub(reporterStub, 'epilogue'); + runner = createMockRunner('end', 'end'); - runReporter( - { - draw: function() {}, - generateColors: function() {}, - epilogue: function() { - calledEpilogue = true; - } - }, - runner, - options - ); + runReporter(reporterStub, runner, options); - expect(calledEpilogue, 'to be', true); + expect(reporterStub.epilogue, 'was called'); }); it('should write numberOfLines amount of new lines', function() { var expectedNumberOfLines = 4; @@ -135,11 +116,8 @@ describe('Nyan reporter', function() { expect(arrayOfNewlines, 'to have length', expectedNumberOfLines); }); it('should call Base show', function() { - var showCalled = false; - var cachedShow = Base.cursor.show; - Base.cursor.show = function() { - showCalled = true; - }; + sandbox.stub(Base.cursor, 'show'); + runner = createMockRunner('end', 'end'); runReporter( { @@ -151,8 +129,7 @@ describe('Nyan reporter', function() { options ); - expect(showCalled, 'to be', true); - Base.cursor.show = cachedShow; + expect(Base.cursor.show, 'was called'); }); }); }); @@ -299,15 +276,8 @@ describe('Nyan reporter', function() { describe('rainbowify', function() { describe('useColors is false', function() { - var useColors; - beforeEach(function() { - useColors = Base.useColors; - Base.useColors = false; - }); - - afterEach(function() { - Base.useColors = useColors; + sandbox.stub(Base, 'useColors').value(false); }); it('should return argument string', function() { @@ -319,16 +289,10 @@ describe('Nyan reporter', function() { }); }); describe('useColors is true', function() { - var useColors; - beforeEach(function() { - useColors = Base.useColors; - Base.useColors = true; + sandbox.stub(Base, 'useColors').value(true); }); - afterEach(function() { - Base.useColors = useColors; - }); it('should return rainbowified string from the given string and predefined codes', function() { var startCode = '\u001b[38;5;'; var endCode = '\u001b[0m'; diff --git a/test/reporters/progress.spec.js b/test/reporters/progress.spec.js index f19bb3988d..cdea9c643e 100644 --- a/test/reporters/progress.spec.js +++ b/test/reporters/progress.spec.js @@ -1,5 +1,6 @@ 'use strict'; +var sandbox = require('sinon').createSandbox(); var reporters = require('../../').reporters; var Progress = reporters.Progress; var Base = reporters.Base; @@ -23,34 +24,27 @@ describe('Progress reporter', function() { }); afterEach(function() { + sandbox.restore(); process.stdout.write = stdoutWrite; }); describe('on start', function() { it('should call cursor hide', function() { - var cachedCursor = Base.cursor; - var calledCursorHide = false; - Base.cursor.hide = function() { - calledCursorHide = true; - }; + sandbox.stub(Base.cursor, 'hide'); + runner = createMockRunner('start', 'start'); runReporter({}, runner, {}); - expect(calledCursorHide, 'to be', true); - - Base.cursor = cachedCursor; + expect(Base.cursor.hide, 'was called'); }); }); describe('on test end', function() { describe('if line has not changed', function() { it('should return and not write anything', function() { - var cachedCursor = Base.cursor; - var useColors = Base.useColors; - Base.useColors = false; - Base.cursor.CR = function() {}; - var windowWidth = Base.window.width; - Base.window.width = -3; + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.cursor, 'CR'); + sandbox.stub(Base.window, 'width').value(-3); var expectedTotal = 1; var expectedOptions = {}; @@ -59,23 +53,13 @@ describe('Progress reporter', function() { var stdout = runReporter({}, runner, expectedOptions); expect(stdout, 'to equal', []); - - Base.cursor = cachedCursor; - Base.useColors = useColors; - Base.window.width = windowWidth; }); }); describe('if line has changed', function() { it('should write expected progress of open and close options', function() { - var calledCursorCR = false; - var cachedCursor = Base.cursor; - var useColors = Base.useColors; - Base.useColors = false; - Base.cursor.CR = function() { - calledCursorCR = true; - }; - var windowWidth = Base.window.width; - Base.window.width = 5; + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.cursor, 'CR'); + sandbox.stub(Base.window, 'width').value(5); var expectedTotal = 12; var expectedOpen = 'OpEn'; @@ -101,39 +85,23 @@ describe('Progress reporter', function() { expectedIncomplete, expectedClose ]; - expect(calledCursorCR, 'to be', true); + expect(Base.cursor.CR, 'was called'); expect(stdout, 'to equal', expectedArray); - - Base.cursor = cachedCursor; - Base.useColors = useColors; - Base.window.width = windowWidth; }); }); }); describe('on end', function() { it('should call cursor show and epilogue', function() { - var cachedCursor = Base.cursor; - var calledCursorShow = false; - Base.cursor.show = function() { - calledCursorShow = true; - }; + var reporterStub = {epilogue: function() {}}; + sandbox.stub(Base.cursor, 'show'); + sandbox.stub(reporterStub, 'epilogue'); + runner = createMockRunner('end', 'end'); - var calledEpilogue = false; - runReporter( - { - epilogue: function() { - calledEpilogue = true; - } - }, - runner, - {} - ); - - expect(calledEpilogue, 'to be', true); - expect(calledCursorShow, 'to be', true); - - Base.cursor = cachedCursor; + runReporter(reporterStub, runner, {}); + + expect(reporterStub.epilogue, 'was called'); + expect(Base.cursor.show, 'was called'); }); }); }); From f6b8e898526c908294010ccc31a3ce800c426498 Mon Sep 17 00:00:00 2001 From: Paul Roebuck Date: Thu, 25 Apr 2019 08:54:13 -0500 Subject: [PATCH 005/441] test(test/reporters): Rework reporter tests Reworked stubs to use sinon. Added logic to (hopefully) rethrow errors when stdout stubbed. Now uses event constants. Various mods for consistency. Now green across the board. --- test/reporters/base.spec.js | 258 +++++---- test/reporters/doc.spec.js | 358 +++++++----- test/reporters/dot.spec.js | 319 +++++++---- test/reporters/helpers.js | 69 ++- test/reporters/json-stream.spec.js | 204 +++---- test/reporters/json.spec.js | 26 +- test/reporters/landing.spec.js | 142 +++-- test/reporters/list.spec.js | 318 +++++++---- test/reporters/markdown.spec.js | 177 +++--- test/reporters/min.spec.js | 66 +-- test/reporters/nyan.spec.js | 597 ++++++++++++-------- test/reporters/progress.spec.js | 168 +++--- test/reporters/spec.spec.js | 215 +++++--- test/reporters/tap.spec.js | 858 ++++++++++++++++------------- test/reporters/xunit.spec.js | 546 ++++++++++-------- 15 files changed, 2528 insertions(+), 1793 deletions(-) diff --git a/test/reporters/base.spec.js b/test/reporters/base.spec.js index 40d1374537..739063f32a 100644 --- a/test/reporters/base.spec.js +++ b/test/reporters/base.spec.js @@ -1,124 +1,138 @@ 'use strict'; var assert = require('assert'); -var chaiExpect = require('chai').expect; -var Base = require('../../lib/reporters/base'); +var chai = require('chai'); +var sinon = require('sinon'); +var helpers = require('./helpers'); +var reporters = require('../../').reporters; + var AssertionError = assert.AssertionError; -var makeTest = require('./helpers').makeTest; -var createElements = require('./helpers').createElements; +var Base = reporters.Base; +var chaiExpect = chai.expect; +var createElements = helpers.createElements; +var makeTest = helpers.makeTest; describe('Base reporter', function() { + var sandbox; var stdout; - var stdoutWrite; - var useColors; - var err; - var errOut; - var test; function list(tests) { - Base.useColors = false; - var retval = Base.list(tests); - Base.useColors = useColors; - return retval; + try { + try { + Base.list(tests); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } } function generateDiff(actual, expected) { - Base.useColors = false; - var retval = Base.generateDiff(actual, expected); - Base.useColors = useColors; - return retval; + var diffStr; + + try { + try { + diffStr = Base.generateDiff(actual, expected); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + + return diffStr; } + var gather = function(chunk, encoding, cb) { + stdout.push(chunk); + }; + beforeEach(function() { - useColors = Base.useColors; + sandbox = sinon.createSandbox(); + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(process.stdout, 'write').callsFake(gather); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - stdoutWrite.call(process.stdout, string, enc, callback); - }; }); afterEach(function() { - process.stdout.write = stdoutWrite; + sandbox.restore(); }); describe('showDiff', function() { + var err; + beforeEach(function() { err = new AssertionError({actual: 'foo', expected: 'bar'}); }); it('should show diffs by default', function() { - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /- actual/); expect(errOut, 'to match', /\+ expected/); }); - it('should show diffs if property set to `true`', function() { + it("should show diffs if 'err.showDiff' is true", function() { err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /- actual/); expect(errOut, 'to match', /\+ expected/); }); - it('should not show diffs when showDiff property set to `false`', function() { + it("should not show diffs if 'err.showDiff' is false", function() { err.showDiff = false; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); - it('should not show diffs when expected is not defined', function() { - err = new Error('ouch'); - - test = makeTest(err); + it("should not show diffs if 'expected' is not defined", function() { + var _err = new Error('ouch'); + var test = makeTest(_err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); - it('should not show diffs when hideDiff is set', function() { - test = makeTest(err); + it("should not show diffs if 'hideDiff' is true", function() { + var test = makeTest(err); - Base.hideDiff = true; + sandbox.stub(Base, 'hideDiff').value(true); list([test]); - Base.hideDiff = false; // Revert to original value - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); }); - describe('Getting two strings', function() { + describe('getting two strings', function() { // Fix regression V1.2.1(see: issue #1241) it('should show strings diff as is', function() { - err = new Error('test'); - + var err = new Error('test'); err.actual = 'foo\nbar'; err.expected = 'foo\nbaz'; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); - + var errOut = stdout.join('\n'); expect(errOut, 'not to match', /"foo\\nbar"/); expect(errOut, 'to match', /foo/).and('to match', /bar/); expect(errOut, 'to match', /test/); @@ -127,26 +141,19 @@ describe('Base reporter', function() { }); }); - describe('Diff generation', function() { - var oldInlineDiffs; - var actual; - var expected; - var output; + describe('diff generation', function() { + var inlineDiffsStub; beforeEach(function() { - oldInlineDiffs = Base.inlineDiffs; - }); - - afterEach(function() { - Base.inlineDiffs = oldInlineDiffs; + inlineDiffsStub = sandbox.stub(Base, 'inlineDiffs'); }); - it('should generate unified diffs if `inlineDiff === false`', function() { - actual = 'a foo unified diff'; - expected = 'a bar unified diff'; + it("should generate unified diffs if 'inlineDiffs' is false", function() { + var actual = 'a foo unified diff'; + var expected = 'a bar unified diff'; - Base.inlineDiffs = false; - output = generateDiff(actual, expected); + inlineDiffsStub.value(false); + var output = generateDiff(actual, expected); expect( output, @@ -155,12 +162,12 @@ describe('Base reporter', function() { ); }); - it('should generate inline diffs if `inlineDiffs === true`', function() { - actual = 'a foo inline diff'; - expected = 'a bar inline diff'; + it("should generate inline diffs if 'inlineDiffs' is true", function() { + var actual = 'a foo inline diff'; + var expected = 'a bar inline diff'; - Base.inlineDiffs = true; - output = generateDiff(actual, expected); + inlineDiffsStub.value(true); + var output = generateDiff(actual, expected); expect( output, @@ -170,39 +177,37 @@ describe('Base reporter', function() { }); }); - describe('Inline strings diff', function() { - it('should show single line diff if property set to `true`', function() { - err = new Error('test'); + describe('inline strings diff', function() { + beforeEach(function() { + sandbox.stub(Base, 'inlineDiffs').value(true); + }); + it("should show single line diff if 'inlineDiffs' is true", function() { + var err = new Error('test'); err.actual = 'a foo inline diff'; err.expected = 'a bar inline diff'; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); - Base.inlineDiffs = true; list([test]); - errOut = stdout.join('\n'); - + var errOut = stdout.join('\n'); expect(errOut, 'to match', /a foobar inline diff/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /actual/); expect(errOut, 'to match', /expected/); }); - it('should split lines when string has more than 4 line breaks', function() { - err = new Error('test'); - + it('should split lines if string has more than 4 line breaks', function() { + var err = new Error('test'); err.actual = 'a\nfoo\ninline\ndiff\nwith\nmultiple lines'; err.expected = 'a\nbar\ninline\ndiff\nwith\nmultiple lines'; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); - Base.inlineDiffs = true; list([test]); - errOut = stdout.join('\n'); - + var errOut = stdout.join('\n'); expect(errOut, 'to match', /1 \| a/); expect(errOut, 'to match', /2 \| foobar/); expect(errOut, 'to match', /3 \| inline/); @@ -215,21 +220,21 @@ describe('Base reporter', function() { }); }); - describe('unified diff reporter', function() { + describe('unified diff', function() { beforeEach(function() { - err = new Error('test'); + sandbox.stub(Base, 'inlineDiffs').value(false); }); it('should separate diff hunks by two dashes', function() { + var err = new Error('test'); err.actual = createElements({from: 2, to: 11}); err.expected = createElements({from: 1, to: 10}); err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); - Base.inlineDiffs = false; list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); var regexesToMatch = [ /\[/, @@ -257,16 +262,15 @@ describe('Base reporter', function() { }); it('should stringify objects', function() { - err = new Error('test'); - + var err = new Error('test'); err.actual = {key: 'a1'}; err.expected = {key: 'e1'}; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /"key"/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /- actual/); @@ -274,18 +278,18 @@ describe('Base reporter', function() { }); it('should stringify Object.create(null)', function() { - err = new Error('test'); + var err = new Error('test'); err.actual = Object.create(null); err.actual.hasOwnProperty = 1; err.expected = Object.create(null); err.expected.hasOwnProperty = 2; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /"hasOwnProperty"/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /- actual/); @@ -299,11 +303,11 @@ describe('Base reporter', function() { err.actual = false; err.expected = true; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /\+true/); expect(errOut, 'to match', /-false/); expect(errOut, 'to match', /- actual/); @@ -311,18 +315,21 @@ describe('Base reporter', function() { } }); - it('should interpret Chai custom error messages', function() { + it("should interpret 'chai' module custom error messages", function() { + var actual = 43; + var expected = 42; + try { - chaiExpect(43, 'custom error message').to.equal(42); + chaiExpect(actual, 'custom error message').to.equal(expected); } catch (err) { - err.actual = 43; - err.expected = 42; + err.actual = actual; + err.expected = expected; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /custom error message\n/) .and('to match', /\+42/) .and('to match', /-43/) @@ -331,20 +338,23 @@ describe('Base reporter', function() { } }); - it('should interpret assert module custom error messages', function() { + it("should interpret 'assert' module custom error messages", function() { + var actual = 43; + var expected = 42; + try { - assert.strictEqual(43, 42, 'custom error message'); + assert.strictEqual(actual, expected, 'custom error message'); // AssertionError: custom error message: expected 43 to equal 42. // assert.equal(43, 42, 'custom error message: expected 43 to equal 42.'); } catch (err) { - err.actual = 43; - err.expected = 42; + err.actual = actual; + err.expected = expected; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /custom error message\n/); expect(errOut, 'to match', /\+42/); expect(errOut, 'to match', /-43/); @@ -354,53 +364,57 @@ describe('Base reporter', function() { }); it('should remove message from stack', function() { - err = { + var err = { message: 'Error', stack: 'Error\nfoo\nbar', showDiff: false }; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n').trim(); + var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); - it('should use the inspect() property if `message` is not set', function() { - err = { + it("should use 'inspect' if 'message' is not set", function() { + var err = { showDiff: false, inspect: function() { return 'an error happened'; } }; - test = makeTest(err); + var test = makeTest(err); + list([test]); - errOut = stdout.join('\n').trim(); + + var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n an error happened'); }); - it('should set an empty message if `message` and `inspect()` are not set', function() { - err = { + it("should set an empty message if neither 'message' nor 'inspect' is set", function() { + var err = { showDiff: false }; - test = makeTest(err); + var test = makeTest(err); + list([test]); - errOut = stdout.join('\n').trim(); + + var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:'); }); it('should not modify stack if it does not contain message', function() { - err = { + var err = { message: 'Error', stack: 'foo\nbar', showDiff: false }; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n').trim(); + var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); }); diff --git a/test/reporters/doc.spec.js b/test/reporters/doc.spec.js index 857922b83e..fb2703f83c 100644 --- a/test/reporters/doc.spec.js +++ b/test/reporters/doc.spec.js @@ -1,10 +1,17 @@ 'use strict'; +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; + var Doc = reporters.Doc; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers.js').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; +var EVENT_SUITE_END = events.EVENT_SUITE_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; describe('Doc reporter', function() { var runner; @@ -12,178 +19,223 @@ describe('Doc reporter', function() { var runReporter = makeRunReporter(Doc); afterEach(function() { - runner = undefined; + runner = null; }); - describe('on suite', function() { - describe('if suite root does not exist', function() { - var expectedTitle = 'expectedTitle'; - var unescapedTitle = '
' + expectedTitle + '
'; - var suite = { - root: false, - title: expectedTitle + describe('event handlers', function() { + describe("on 'suite' event", function() { + describe('when suite root does not exist', function() { + var expectedTitle = 'expectedTitle'; + var unescapedTitle = '
' + expectedTitle + '
'; + var suite = { + root: false, + title: expectedTitle + }; + + it('should log html with indents and expected title', function() { + runner = createMockRunner( + 'suite', + EVENT_SUITE_BEGIN, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
\n', + '

' + expectedTitle + '

\n', + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + + it('should escape title where necessary', function() { + var suite = { + root: false, + title: unescapedTitle + }; + expectedTitle = + '<div>' + expectedTitle + '</div>'; + + runner = createMockRunner( + 'suite', + EVENT_SUITE_BEGIN, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
\n', + '

' + expectedTitle + '

\n', + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('when suite root exists', function() { + var suite = { + root: true + }; + + it('should not log any html', function() { + runner = createMockRunner( + 'suite', + EVENT_SUITE_BEGIN, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + expect(stdout, 'to be empty'); + }); + }); + }); + + describe("on 'suite end' event", function() { + describe('when suite root does not exist', function() { + var suite = { + root: false + }; + + it('should log expected html with indents', function() { + runner = createMockRunner( + 'suite end', + EVENT_SUITE_END, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + var expectedArray = ['
\n', '
\n']; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('when suite root exists', function() { + var suite = { + root: true + }; + + it('should not log any html', function() { + runner = createMockRunner( + 'suite end', + EVENT_SUITE_END, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + expect(stdout, 'to be empty'); + }); + }); + }); + + describe("on 'pass' event", function() { + var expectedTitle = 'some tite'; + var expectedBody = 'some body'; + var test = { + title: expectedTitle, + body: expectedBody, + slow: function() { + return ''; + } }; - it('should log html with indents and expected title', function() { - runner = createMockRunner('suite', 'suite', null, null, suite); + + it('should log html with indents, expected title, and body', function() { + runner = createMockRunner('pass', EVENT_TEST_PASS, null, null, test); var stdout = runReporter(this, runner, options); var expectedArray = [ - '
\n', - '

' + expectedTitle + '

\n', - '
\n' + '
' + expectedTitle + '
\n', + '
' + expectedBody + '
\n' ]; expect(stdout, 'to equal', expectedArray); }); - it('should escape title where necessary', function() { - var suite = { - root: false, - title: unescapedTitle - }; - expectedTitle = '<div>' + expectedTitle + '</div>'; - runner = createMockRunner('suite', 'suite', null, null, suite); + + it('should escape title and body where necessary', function() { + var unescapedTitle = '
' + expectedTitle + '
'; + var unescapedBody = '
' + expectedBody + '
'; + test.title = unescapedTitle; + test.body = unescapedBody; + + var expectedEscapedTitle = + '<div>' + expectedTitle + '</div>'; + var expectedEscapedBody = + '<div>' + expectedBody + '</div>'; + runner = createMockRunner('pass', EVENT_TEST_PASS, null, null, test); var stdout = runReporter(this, runner, options); var expectedArray = [ - '
\n', - '

' + expectedTitle + '

\n', - '
\n' + '
' + expectedEscapedTitle + '
\n', + '
' + expectedEscapedBody + '
\n' ]; expect(stdout, 'to equal', expectedArray); }); }); - describe('if suite root does exist', function() { - var suite = { - root: true - }; - it('should not log any html', function() { - runner = createMockRunner('suite', 'suite', null, null, suite); - var stdout = runReporter(this, runner, options); - expect(stdout, 'to be empty'); - }); - }); - }); - describe('on suite end', function() { - describe('if suite root does not exist', function() { - var suite = { - root: false + describe("on 'fail' event", function() { + var expectedTitle = 'some tite'; + var expectedBody = 'some body'; + var expectedError = 'some error'; + var test = { + title: expectedTitle, + body: expectedBody, + slow: function() { + return ''; + } }; - it('should log expected html with indents', function() { - runner = createMockRunner('suite end', 'suite end', null, null, suite); + + it('should log html with indents, expected title, body, and error', function() { + runner = createMockRunner( + 'fail two args', + EVENT_TEST_FAIL, + null, + null, + test, + expectedError + ); var stdout = runReporter(this, runner, options); - var expectedArray = ['
\n', '
\n']; + var expectedArray = [ + '
' + expectedTitle + '
\n', + '
' +
+            expectedBody +
+            '
\n', + '
' + expectedError + '
\n' + ]; expect(stdout, 'to equal', expectedArray); }); - }); - describe('if suite root does exist', function() { - var suite = { - root: true - }; - it('should not log any html', function() { - runner = createMockRunner('suite end', 'suite end', null, null, suite); - var stdout = runReporter(this, runner, options); - expect(stdout, 'to be empty'); - }); - }); - }); - describe('on pass', function() { - var expectedTitle = 'some tite'; - var expectedBody = 'some body'; - var test = { - title: expectedTitle, - body: expectedBody, - slow: function() { - return ''; - } - }; - it('should log html with indents and expected title and body', function() { - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedTitle + '
\n', - '
' + expectedBody + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - it('should escape title and body where necessary', function() { - var unescapedTitle = '
' + expectedTitle + '
'; - var unescapedBody = '
' + expectedBody + '
'; - test.title = unescapedTitle; - test.body = unescapedBody; - - var expectedEscapedTitle = - '<div>' + expectedTitle + '</div>'; - var expectedEscapedBody = - '<div>' + expectedBody + '</div>'; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedEscapedTitle + '
\n', - '
' + expectedEscapedBody + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); + it('should escape title, body, and error where necessary', function() { + var unescapedTitle = '
' + expectedTitle + '
'; + var unescapedBody = '
' + expectedBody + '
'; + var unescapedError = '
' + expectedError + '
'; + test.title = unescapedTitle; + test.body = unescapedBody; - describe('on fail', function() { - var expectedTitle = 'some tite'; - var expectedBody = 'some body'; - var expectedError = 'some error'; - var test = { - title: expectedTitle, - body: expectedBody, - slow: function() { - return ''; - } - }; - it('should log html with indents and expected title, body and error', function() { - runner = createMockRunner( - 'fail two args', - 'fail', - null, - null, - test, - expectedError - ); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedTitle + '
\n', - '
' +
-          expectedBody +
-          '
\n', - '
' + expectedError + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - it('should escape title, body and error where necessary', function() { - var unescapedTitle = '
' + expectedTitle + '
'; - var unescapedBody = '
' + expectedBody + '
'; - var unescapedError = '
' + expectedError + '
'; - test.title = unescapedTitle; - test.body = unescapedBody; - - var expectedEscapedTitle = - '<div>' + expectedTitle + '</div>'; - var expectedEscapedBody = - '<div>' + expectedBody + '</div>'; - var expectedEscapedError = - '<div>' + expectedError + '</div>'; - runner = createMockRunner( - 'fail two args', - 'fail', - null, - null, - test, - unescapedError - ); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedEscapedTitle + '
\n', - '
' +
-          expectedEscapedBody +
-          '
\n', - '
' + expectedEscapedError + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); + var expectedEscapedTitle = + '<div>' + expectedTitle + '</div>'; + var expectedEscapedBody = + '<div>' + expectedBody + '</div>'; + var expectedEscapedError = + '<div>' + expectedError + '</div>'; + runner = createMockRunner( + 'fail two args', + EVENT_TEST_FAIL, + null, + null, + test, + unescapedError + ); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
' + expectedEscapedTitle + '
\n', + '
' +
+            expectedEscapedBody +
+            '
\n', + '
' + expectedEscapedError + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); }); }); }); diff --git a/test/reporters/dot.spec.js b/test/reporters/dot.spec.js index 472ec63d01..4a23c7951e 100644 --- a/test/reporters/dot.spec.js +++ b/test/reporters/dot.spec.js @@ -1,155 +1,238 @@ 'use strict'; +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var Dot = reporters.Dot; + var Base = reporters.Base; +var Dot = reporters.Dot; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers.js').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('Dot reporter', function() { - var runner; - var useColors; - var windowWidth; - var color; - var options = {}; + var sandbox; + var windowWidthStub; var runReporter = makeRunReporter(Dot); + var noop = function() {}; beforeEach(function() { - useColors = Base.useColors; - windowWidth = Base.window.width; - color = Base.color; - Base.useColors = false; - Base.window.width = 0; - Base.color = function(type, str) { + sandbox = sinon.createSandbox(); + windowWidthStub = sandbox.stub(Base.window, 'width').value(0); + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base, 'color').callsFake(function(type, str) { return type.replace(/ /g, '-') + '_' + str; - }; + }); }); afterEach(function() { - Base.useColors = useColors; - Base.window.width = windowWidth; - Base.color = color; - runner = undefined; + sandbox.restore(); }); - describe('on start', function() { - it('should write a newline', function() { - runner = createMockRunner('start', 'start'); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['\n']; - expect(stdout, 'to equal', expectedArray); - }); - }); - describe('on pending', function() { - describe('if window width is greater than 1', function() { - beforeEach(function() { - Base.window.width = 2; - }); - it('should write a newline followed by a comma', function() { - runner = createMockRunner('pending', 'pending'); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['\n ', 'pending_' + Base.symbols.comma]; - expect(stdout, 'to equal', expectedArray); - }); - }); - describe('if window width is equal to or less than 1', function() { - it('should write a comma', function() { - runner = createMockRunner('pending', 'pending'); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['pending_' + Base.symbols.comma]; + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should write a newline', function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['\n']; expect(stdout, 'to equal', expectedArray); }); }); - }); - describe('on pass', function() { - var test = { - duration: 1, - slow: function() { - return 2; - } - }; - describe('if window width is greater than 1', function() { - beforeEach(function() { - Base.window.width = 2; - }); - describe('if test speed is fast', function() { - it('should write a newline followed by a dot', function() { - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(test.speed, 'to equal', 'fast'); - var expectedArray = ['\n ', 'fast_' + Base.symbols.dot]; + + describe("on 'pending' event", function() { + describe('when window width is greater than 1', function() { + beforeEach(function() { + windowWidthStub.value(2); + }); + + it('should write a newline followed by a comma', function() { + var runner = createMockRunner('pending', EVENT_TEST_PENDING); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['\n ', 'pending_' + Base.symbols.comma]; expect(stdout, 'to equal', expectedArray); }); }); - }); - describe('if window width is equal to or less than 1', function() { - describe('if test speed is fast', function() { - it('should write a grey dot', function() { - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(test.speed, 'to equal', 'fast'); - var expectedArray = ['fast_' + Base.symbols.dot]; + + describe('when window width is less than or equal to 1', function() { + it('should write a comma', function() { + var runner = createMockRunner('pending', EVENT_TEST_PENDING); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['pending_' + Base.symbols.comma]; expect(stdout, 'to equal', expectedArray); }); }); - describe('if test speed is medium', function() { - it('should write a yellow dot', function() { - test.duration = 2; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(test.speed, 'to equal', 'medium'); - var expectedArray = ['medium_' + Base.symbols.dot]; - expect(stdout, 'to equal', expectedArray); + }); + + describe("on 'pass' event", function() { + var test = { + duration: 1, + slow: function() { + return 2; + } + }; + + describe('when window width is greater than 1', function() { + beforeEach(function() { + windowWidthStub.value(2); + }); + + describe('when test speed is fast', function() { + it('should write a newline followed by a dot', function() { + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + expect(test.speed, 'to equal', 'fast'); + var expectedArray = ['\n ', 'fast_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); }); }); - describe('if test speed is slow', function() { - it('should write a bright yellow dot', function() { - test.duration = 3; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(test.speed, 'to equal', 'slow'); - var expectedArray = ['bright-yellow_' + Base.symbols.dot]; - expect(stdout, 'to equal', expectedArray); + + describe('when window width is less than or equal to 1', function() { + describe('when test speed is fast', function() { + it('should write a grey dot', function() { + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + expect(test.speed, 'to equal', 'fast'); + var expectedArray = ['fast_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('when test speed is medium', function() { + it('should write a yellow dot', function() { + test.duration = 2; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + expect(test.speed, 'to equal', 'medium'); + var expectedArray = ['medium_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('when test speed is slow', function() { + it('should write a bright yellow dot', function() { + test.duration = 3; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + expect(test.speed, 'to equal', 'slow'); + var expectedArray = ['bright-yellow_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); }); }); }); - }); - describe('on fail', function() { - var test = { - test: { - err: 'some error' - } - }; - describe('if window width is greater than 1', function() { - beforeEach(function() { - Base.window.width = 2; + + describe("on 'fail' event", function() { + var test = { + test: { + err: 'some error' + } + }; + + describe('when window width is greater than 1', function() { + beforeEach(function() { + windowWidthStub.value(2); + }); + + it('should write a newline followed by an exclamation mark', function() { + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['\n ', 'fail_' + Base.symbols.bang]; + expect(stdout, 'to equal', expectedArray); + }); }); - it('should write a newline followed by an exclamation mark', function() { - runner = createMockRunner('fail', 'fail', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['\n ', 'fail_' + Base.symbols.bang]; - expect(stdout, 'to equal', expectedArray); + + describe('when window width is less than or equal to 1', function() { + it('should write an exclamation mark', function() { + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['fail_' + Base.symbols.bang]; + expect(stdout, 'to equal', expectedArray); + }); }); }); - describe('if window width is equal to or less than 1', function() { - it('should write an exclamation mark', function() { - runner = createMockRunner('fail', 'fail', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['fail_' + Base.symbols.bang]; - expect(stdout, 'to equal', expectedArray); + + describe("on 'end' event", function() { + it('should call epilogue', function() { + var runner = createMockRunner('end', EVENT_RUN_END); + var fakeThis = { + epilogue: sinon.stub() + }; + var options = {}; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(fakeThis.epilogue.called, 'to be true'); }); }); }); - describe('on end', function() { - it('should call the epilogue', function() { - runner = createMockRunner('end', 'end'); - var epilogueCalled = false; - var epilogue = function() { - epilogueCalled = true; - }; - runReporter({epilogue: epilogue}, runner, options); - expect(epilogueCalled, 'to be', true); - }); - }); }); diff --git a/test/reporters/helpers.js b/test/reporters/helpers.js index 5cb21a53f2..76b3d79307 100644 --- a/test/reporters/helpers.js +++ b/test/reporters/helpers.js @@ -1,17 +1,22 @@ 'use strict'; +var sinon = require('sinon'); var errors = require('../../lib/errors'); -var createUnsupportedError = errors.createUnsupportedError; -/* - This function prevents the constant use of creating a runnerEvent. - runStr is the argument that defines the runnerEvent. - ifStr1 is one possible reporter argument, as is ifStr2, and ifStr3 - arg1 and arg2 are the possible variables that need to be put into the - scope of this function for the tests to run properly. -*/ - var createStatsCollector = require('../../lib/stats-collector'); +var createUnsupportedError = errors.createUnsupportedError; + +/** + * Creates a mock runner object. + * + * @param {string} runStr - argument that defines the runnerEvent + * @param {string} ifStr1 - runner event + * @param {(string|null)} [ifStr2] - runner event + * @param {(string|null)} [ifStr3] - runner event + * @param {(*|null)} [arg1] - variable to be added to event handler's scope + * @param {(*|null)} [arg2] - variable to be added to event handler's scope + * @return {Object} mock runner instance + */ function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { var runnerFunction = createRunnerFunction( runStr, @@ -29,6 +34,20 @@ function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { return mockRunner; } +/** + * Creates an event handler function to be used by the runner. + * + * @description + * Arguments 'ifStr1', 'ifStr2', and 'ifStr3' should be `Runner.constants`. + * + * @param {string} runStr - argument that defines the runnerEvent + * @param {string} ifStr1 - runner event + * @param {(string|null)} [ifStr2] - runner event + * @param {(string|null)} [ifStr3] - runner event + * @param {(*|null)} [arg1] - variable to be added to event handler's scope + * @param {(*|null)} [arg2] - variable to be added to event handler's scope + * @return {Function} event handler for the requested runner events + */ function createRunnerFunction(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { var test = null; switch (runStr) { @@ -178,23 +197,35 @@ function createRunReporterFunction(ctor) { * @return {string[]} Lines of output written to `stdout` */ var runReporter = function(stubSelf, runner, options, tee) { + var origStdoutWrite = process.stdout.write; + var stdoutWriteStub = sinon.stub(process.stdout, 'write'); var stdout = []; - // Reassign stream in order to make a copy of all reporter output - var stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); + var gather = function(chunk, enc, callback) { + stdout.push(chunk); if (tee) { - stdoutWrite.call(process.stdout, string, enc, callback); + origStdoutWrite.call(process.stdout, chunk); } }; - // Invoke reporter - ctor.call(stubSelf, runner, options); + // Reassign stream in order to make a copy of all reporter output + stdoutWriteStub.callsFake(gather); + + // Give `stubSelf` access to `ctor` prototype chain + Object.setPrototypeOf(stubSelf, ctor.prototype); - // Revert stream reassignment here so reporter output - // can't be corrupted if any test assertions throw - process.stdout.write = stdoutWrite; + try { + try { + // Invoke reporter + ctor.call(stubSelf, runner, options); + } finally { + // Revert stream reassignment here so reporter output + // can't be corrupted if any test assertions throw + stdoutWriteStub.restore(); + } + } catch (err) { + throw err; // Rethrow + } return stdout; }; diff --git a/test/reporters/json-stream.spec.js b/test/reporters/json-stream.spec.js index 8c9fcfff35..de83f861b2 100644 --- a/test/reporters/json-stream.spec.js +++ b/test/reporters/json-stream.spec.js @@ -1,15 +1,22 @@ 'use strict'; +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; +var utils = require('../../lib/utils'); + var JSONStream = reporters.JSONStream; +var createMockRunner = helpers.createMockRunner; +var dQuote = utils.dQuote; +var makeExpectedTest = helpers.makeExpectedTest; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeExpectedTest = require('./helpers').makeExpectedTest; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; describe('JSON Stream reporter', function() { - var runner; - var options = {}; var runReporter = makeRunReporter(JSONStream); var expectedTitle = 'some title'; var expectedFullTitle = 'full title'; @@ -27,119 +34,126 @@ describe('JSON Stream reporter', function() { message: expectedErrorMessage }; - afterEach(function() { - runner = undefined; - }); - - describe('on start', function() { - it('should write stringified start with expected total', function() { - runner = createMockRunner('start', 'start'); - var expectedTotal = 12; - runner.total = expectedTotal; - var stdout = runReporter({}, runner, options); - - expect( - stdout[0], - 'to equal', - '["start",{"total":' + expectedTotal + '}]\n' - ); - }); - }); - - describe('on pass', function() { - it('should write stringified test data', function() { - runner = createMockRunner('pass', 'pass', null, null, expectedTest); - var stdout = runReporter({}, runner, options); - - expect( - stdout[0], - 'to equal', - '["pass",{"title":"' + - expectedTitle + - '","fullTitle":"' + - expectedFullTitle + - '","duration":' + - expectedDuration + - ',"currentRetry":' + - currentRetry + - '}]\n' - ); - }); - }); - - describe('on fail', function() { - describe('if error stack exists', function() { - it('should write stringified test data with error data', function() { - expectedError.stack = expectedErrorStack; - runner = createMockRunner( - 'fail two args', - 'fail', - null, - null, - expectedTest, - expectedError - ); - + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should write stringified start with expected total', function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var expectedTotal = 12; + runner.total = expectedTotal; + var options = {}; var stdout = runReporter({}, runner, options); expect( stdout[0], 'to equal', - '["fail",{"title":"' + - expectedTitle + - '","fullTitle":"' + - expectedFullTitle + - '","duration":' + - expectedDuration + - ',"currentRetry":' + - currentRetry + - ',"err":"' + - expectedErrorMessage + - '","stack":"' + - expectedErrorStack + - '"}]\n' + '["start",{"total":' + expectedTotal + '}]\n' ); }); }); - describe('if error stack does not exist', function() { - it('should write stringified test data with error data', function() { - expectedError.stack = null; - runner = createMockRunner( - 'fail two args', - 'fail', + describe("on 'pass' event", function() { + it('should write stringified test data', function() { + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, null, null, - expectedTest, - expectedError + expectedTest ); - - var stdout = runReporter(this, runner, options); + var options = {}; + var stdout = runReporter({}, runner, options); expect( stdout[0], 'to equal', - '["fail",{"title":"' + - expectedTitle + - '","fullTitle":"' + - expectedFullTitle + - '","duration":' + + '["pass",{"title":' + + dQuote(expectedTitle) + + ',"fullTitle":' + + dQuote(expectedFullTitle) + + ',"duration":' + expectedDuration + ',"currentRetry":' + currentRetry + - ',"err":"' + - expectedErrorMessage + - '","stack":null}]\n' + '}]\n' ); }); }); - }); - describe('on end', function() { - it('should write end details', function() { - runner = createMockRunner('end', 'end'); - var stdout = runReporter(this, runner, options); - expect(stdout[0], 'to match', /end/); + describe("on 'fail' event", function() { + describe('when error stack exists', function() { + it('should write stringified test data with error data', function() { + expectedError.stack = expectedErrorStack; + var runner = createMockRunner( + 'fail two args', + EVENT_TEST_FAIL, + null, + null, + expectedTest, + expectedError + ); + var options = {}; + var stdout = runReporter({}, runner, options); + + expect( + stdout[0], + 'to equal', + '["fail",{"title":' + + dQuote(expectedTitle) + + ',"fullTitle":' + + dQuote(expectedFullTitle) + + ',"duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + ',"err":' + + dQuote(expectedErrorMessage) + + ',"stack":' + + dQuote(expectedErrorStack) + + '}]\n' + ); + }); + }); + + describe('when error stack does not exist', function() { + it('should write stringified test data with error data', function() { + expectedError.stack = null; + var runner = createMockRunner( + 'fail two args', + EVENT_TEST_FAIL, + null, + null, + expectedTest, + expectedError + ); + var options = {}; + var stdout = runReporter(this, runner, options); + + expect( + stdout[0], + 'to equal', + '["fail",{"title":' + + dQuote(expectedTitle) + + ',"fullTitle":' + + dQuote(expectedFullTitle) + + ',"duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + ',"err":' + + dQuote(expectedErrorMessage) + + ',"stack":null}]\n' + ); + }); + }); + }); + + describe("on 'end' event", function() { + it('should write summary statistics', function() { + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + var stdout = runReporter(this, runner, options); + expect(stdout[0], 'to match', /end/); + }); }); }); }); diff --git a/test/reporters/json.spec.js b/test/reporters/json.spec.js index 5d7a37c564..f6299dd134 100644 --- a/test/reporters/json.spec.js +++ b/test/reporters/json.spec.js @@ -7,8 +7,11 @@ var Runner = Mocha.Runner; var Test = Mocha.Test; describe('JSON reporter', function() { - var suite, runner; + var sandbox; + var suite; + var runner; var testTitle = 'json test 1'; + var noop = function() {}; beforeEach(function() { var mocha = new Mocha({ @@ -16,8 +19,18 @@ describe('JSON reporter', function() { }); suite = new Suite('JSON suite', 'root'); runner = new Runner(suite); + var options = {}; /* eslint no-unused-vars: off */ - var mochaReporter = new mocha._reporter(runner); + var mochaReporter = new mocha._reporter(runner, options); + }); + + beforeEach(function() { + sandbox = sinon.createSandbox(); + sandbox.stub(process.stdout, 'write').callsFake(noop); + }); + + afterEach(function() { + sandbox.restore(); }); it('should have 1 test failure', function(done) { @@ -29,9 +42,8 @@ describe('JSON reporter', function() { }) ); - var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - stdoutWrite.restore(); + sandbox.restore(); expect(runner, 'to satisfy', { testResults: { failures: [ @@ -52,9 +64,8 @@ describe('JSON reporter', function() { it('should have 1 test pending', function(done) { suite.addTest(new Test(testTitle)); - var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - stdoutWrite.restore(); + sandbox.restore(); expect(runner, 'to satisfy', { testResults: { pending: [ @@ -83,9 +94,8 @@ describe('JSON reporter', function() { }) ); - var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - stdoutWrite.restore(); + sandbox.restore(); expect(runner, 'to satisfy', { testResults: { failures: [ diff --git a/test/reporters/landing.spec.js b/test/reporters/landing.spec.js index dd73d9e5b3..acb2ee3ef6 100644 --- a/test/reporters/landing.spec.js +++ b/test/reporters/landing.spec.js @@ -1,20 +1,25 @@ 'use strict'; -var sandbox = require('sinon').createSandbox(); -var Mocha = require('../..'); -var reporters = Mocha.reporters; -var Landing = reporters.Landing; -var constants = Mocha.Runnable.constants; -var STATE_FAILED = constants.STATE_FAILED; -var STATE_PASSED = constants.STATE_PASSED; +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); +var reporters = require('../../').reporters; +var states = require('../../').Runnable.constants; + var Base = reporters.Base; +var Landing = reporters.Landing; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_END = events.EVENT_TEST_END; + +var STATE_FAILED = states.STATE_FAILED; +var STATE_PASSED = states.STATE_PASSED; describe('Landing reporter', function() { - var runner; - var options = {}; + var sandbox; var runReporter = makeRunReporter(Landing); var resetCode = '\u001b[0m'; var expectedArray = [ @@ -29,73 +34,98 @@ describe('Landing reporter', function() { ]; beforeEach(function() { + sandbox = sinon.createSandbox(); sandbox.stub(Base, 'useColors').value(false); sandbox.stub(Base.window, 'width').value(1); }); afterEach(function() { sandbox.restore(); - runner = undefined; }); - describe('on start', function() { - it('should write new lines', function() { - sandbox.stub(Base.cursor, 'hide'); - - runner = createMockRunner('start', 'start'); - var stdout = runReporter({}, runner, options); + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should write newlines', function() { + sandbox.stub(Base.cursor, 'hide'); - expect(stdout[0], 'to equal', '\n\n\n '); - }); + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + var stdout = runReporter({}, runner, options); + sandbox.restore(); - it('should call cursor hide', function() { - sandbox.stub(Base.cursor, 'hide'); + expect(stdout[0], 'to equal', '\n\n\n '); + }); - runner = createMockRunner('start', 'start'); - runReporter({}, runner, options); + it('should call cursor hide', function() { + var hideCursorStub = sandbox.stub(Base.cursor, 'hide'); - expect(Base.cursor.hide, 'was called'); - }); - }); + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + runReporter({}, runner, options); + sandbox.restore(); - describe('on test end', function() { - describe('if test has failed', function() { - it('should write expected landing strip', function() { - var test = { - state: STATE_FAILED - }; - runner = createMockRunner('test end', 'test end', null, null, test); - runner.total = 12; - var stdout = runReporter({}, runner, options); - - expect(stdout, 'to equal', expectedArray); + expect(hideCursorStub.called, 'to be true'); }); }); - describe('if test has not failed', function() { - it('should write expected landing strip', function() { - var test = { - state: STATE_PASSED - }; - runner = createMockRunner('test end', 'test end', null, null, test); - var stdout = runReporter({}, runner, options); + describe("on 'test end' event", function() { + describe('when test passes', function() { + it('should write expected landing strip', function() { + var test = { + state: STATE_PASSED + }; + var runner = createMockRunner( + 'test end', + EVENT_TEST_END, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({}, runner, options); + sandbox.restore(); + + expect(stdout, 'to equal', expectedArray); + }); + }); - expect(stdout, 'to equal', expectedArray); + describe('when test fails', function() { + it('should write expected landing strip', function() { + var test = { + state: STATE_FAILED + }; + var runner = createMockRunner( + 'test end', + EVENT_TEST_END, + null, + null, + test + ); + runner.total = 12; + var options = {}; + var stdout = runReporter({}, runner, options); + sandbox.restore(); + + expect(stdout, 'to equal', expectedArray); + }); }); }); - }); - describe('on end', function() { - it('should call cursor show and epilogue', function() { - var reporterStub = {epilogue: function() {}}; - sandbox.stub(Base.cursor, 'show'); - sandbox.stub(reporterStub, 'epilogue'); - runner = createMockRunner('end', 'end'); + describe("on 'end' event", function() { + it('should call cursor show and epilogue', function() { + var showCursorStub = sandbox.stub(Base.cursor, 'show'); - runReporter(reporterStub, runner, options); + var fakeThis = { + epilogue: sinon.spy() + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); + sandbox.restore(); - expect(reporterStub.epilogue, 'was called'); - expect(Base.cursor.show, 'was called'); + expect(fakeThis.epilogue.calledOnce, 'to be true'); + expect(showCursorStub.called, 'to be true'); + }); }); }); }); diff --git a/test/reporters/list.spec.js b/test/reporters/list.spec.js index c9eceb87fe..c10272e953 100644 --- a/test/reporters/list.spec.js +++ b/test/reporters/list.spec.js @@ -1,144 +1,246 @@ 'use strict'; -var sandbox = require('sinon').createSandbox(); +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var List = reporters.List; + var Base = reporters.Base; +var List = reporters.List; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_BEGIN = events.EVENT_TEST_BEGIN; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('List reporter', function() { - var runner; - var options = {}; + var sandbox; var runReporter = makeRunReporter(List); var expectedTitle = 'some title'; var expectedDuration = 100; + var noop = function() {}; var test = { fullTitle: function() { return expectedTitle; }, duration: expectedDuration, - slow: function() {} + slow: noop }; beforeEach(function() { + sandbox = sinon.createSandbox(); sandbox.stub(Base, 'useColors').value(false); }); afterEach(function() { sandbox.restore(); - runner = undefined; }); - describe('on start and test', function() { - it('should write expected new line and title to the console', function() { - runner = createMockRunner('start test', 'start', 'test', null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - - var startString = '\n'; - var testString = ' ' + expectedTitle + ': '; - var expectedArray = [startString, testString]; - expect(stdout, 'to equal', expectedArray); + describe('event handlers', function() { + describe("on 'start' and 'test' events", function() { + it('should write expected newline and title', function() { + var runner = createMockRunner( + 'start test', + EVENT_RUN_BEGIN, + EVENT_TEST_BEGIN, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + sandbox.restore(); + + var startString = '\n'; + var testString = ' ' + expectedTitle + ': '; + var expectedArray = [startString, testString]; + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe('on pending', function() { - it('should write expected title to the console', function() { - runner = createMockRunner('pending test', 'pending', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n'); + describe("on 'pending' event", function() { + it('should write expected title', function() { + var runner = createMockRunner( + 'pending test', + EVENT_TEST_PENDING, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n'); + }); }); - }); - describe('on pass', function() { - it('should call cursor CR', function() { - sandbox.stub(Base.cursor, 'CR'); - runner = createMockRunner('pass', 'pass', null, null, test); - runReporter({epilogue: function() {}}, runner, options); - - expect(Base.cursor.CR, 'was called'); - }); - it('should write expected symbol, title and duration to the console', function() { - var expectedOkSymbol = 'OK'; - sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol); - sandbox.stub(Base.cursor, 'CR'); - - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - - expect( - stdout[0], - 'to be', - ' ' + - expectedOkSymbol + - ' ' + - expectedTitle + - ': ' + - expectedDuration + - 'ms\n' - ); + describe("on 'pass' event", function() { + var crStub; + + beforeEach(function() { + crStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); + }); + + it('should call cursor CR', function() { + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(crStub.called, 'to be true'); + }); + + it('should write expected symbol, title, and duration', function() { + var expectedOkSymbol = 'OK'; + sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol); + + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect( + stdout[0], + 'to be', + ' ' + + expectedOkSymbol + + ' ' + + expectedTitle + + ': ' + + expectedDuration + + 'ms\n' + ); + }); }); - }); - describe('on fail', function() { - it('should call cursor CR', function() { - sandbox.stub(Base.cursor, 'CR'); - - runner = createMockRunner('fail', 'fail', null, null, test); - runReporter({epilogue: function() {}}, runner, options); - expect(Base.cursor.CR, 'was called'); - }); - it('should write expected error number and title', function() { - sandbox.stub(Base.cursor, 'CR'); - - var expectedErrorCount = 1; - runner = createMockRunner('fail', 'fail', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - - expect( - stdout[0], - 'to be', - ' ' + expectedErrorCount + ') ' + expectedTitle + '\n' - ); - }); - it('should immediately construct fail strings', function() { - var actual = {a: 'actual'}; - var expected = {a: 'expected'}; - var checked = false; - var err; - test = {}; - runner = createMockRunner('fail', 'fail', null, null, test); - runner.on = runner.once = function(event, callback) { - if ( - !checked && - event === 'fail' && - callback.toString().includes('stringifyDiffObjs') // target correct fail event callback - ) { - err = new Error('fake failure object with actual/expected'); - err.actual = actual; - err.expected = expected; - err.showDiff = true; - callback(test, err); - checked = true; - } - }; - runReporter({epilogue: function() {}}, runner, options); - - expect(typeof err.actual, 'to be', 'string'); - expect(typeof err.expected, 'to be', 'string'); + describe("on 'fail' event", function() { + var crStub; + + beforeEach(function() { + crStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); + }); + + it('should call cursor CR', function() { + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(crStub.called, 'to be true'); + }); + + it('should write expected error number and title', function() { + var expectedErrorCount = 1; + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect( + stdout[0], + 'to be', + ' ' + expectedErrorCount + ') ' + expectedTitle + '\n' + ); + }); + + it('should immediately construct fail strings', function() { + var actual = {a: 'actual'}; + var expected = {a: 'expected'}; + var checked = false; + var err; + test = {}; + + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + runner.on = runner.once = function(event, callback) { + if ( + !checked && + event === 'fail' && + callback.toString().includes('stringifyDiffObjs') // target correct fail event callback + ) { + err = new Error('fake failure object with actual/expected'); + err.actual = actual; + err.expected = expected; + err.showDiff = true; + callback(test, err); + checked = true; + } + }; + var options = {}; + var fakeThis = { + epilogue: noop + }; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(typeof err.actual, 'to be', 'string'); + expect(typeof err.expected, 'to be', 'string'); + }); }); - }); - - describe('on end', function() { - it('should call epilogue', function() { - var reporterStub = {epilogue: function() {}}; - sandbox.stub(reporterStub, 'epilogue'); - - runner = createMockRunner('end', 'end'); - runReporter(reporterStub, runner, options); - expect(reporterStub.epilogue, 'was called'); + describe("on 'end' event", function() { + it('should call epilogue', function() { + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + var fakeThis = { + epilogue: sinon.spy() + }; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(fakeThis.epilogue.calledOnce, 'to be true'); + }); }); }); }); diff --git a/test/reporters/markdown.spec.js b/test/reporters/markdown.spec.js index 842d7c7643..e068c58cea 100644 --- a/test/reporters/markdown.spec.js +++ b/test/reporters/markdown.spec.js @@ -1,102 +1,115 @@ 'use strict'; +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; + var Markdown = reporters.Markdown; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; +var EVENT_SUITE_END = events.EVENT_SUITE_END; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; describe('Markdown reporter', function() { - var runner; - var options = {}; var runReporter = makeRunReporter(Markdown); var expectedTitle = 'expected title'; var expectedFullTitle = 'full title'; var sluggedFullTitle = 'full-title'; + var noop = function() {}; - afterEach(function() { - runner = undefined; - }); - - describe("on 'suite'", function() { - it("should write expected slugged titles on 'end' event", function() { - var expectedSuite = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [ - { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [] - } - ] - }; - runner = createMockRunner( - 'suite suite end', - 'suite', - 'suite end', - 'end', - expectedSuite - ); - runner.suite = expectedSuite; - var stdout = runReporter({}, runner, options); + describe('event handlers', function() { + describe("on 'suite' event", function() { + it("should write expected slugged titles on 'end' event", function() { + var expectedSuite = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [ + { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [] + } + ] + }; + var runner = createMockRunner( + 'suite suite end', + EVENT_SUITE_BEGIN, + EVENT_SUITE_END, + EVENT_RUN_END, + expectedSuite + ); + runner.suite = expectedSuite; + var options = {}; + var stdout = runReporter({}, runner, options); - var expectedArray = [ - '# TOC\n', - ' - [' + - expectedTitle + - '](#' + - sluggedFullTitle + - ')\n - [' + - expectedTitle + - '](#' + - sluggedFullTitle + - ')\n', - '\n ' + expectedTitle + '\n' - ]; + var expectedArray = [ + '# TOC\n', + ' - [' + + expectedTitle + + '](#' + + sluggedFullTitle + + ')\n - [' + + expectedTitle + + '](#' + + sluggedFullTitle + + ')\n', + '\n ' + expectedTitle + '\n' + ]; - expect(stdout, 'to equal', expectedArray); + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe("on 'pass'", function() { - it("should write test code inside js code block, on 'end' event", function() { - var expectedSuite = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [] - }; - var expectedDuration = 1000; - var currentRetry = 1; - var expectedBody = 'some body'; - var expectedTest = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - duration: expectedDuration, - currentRetry: function() { - return currentRetry; - }, - slow: function() {}, - body: expectedBody - }; - runner = createMockRunner('pass end', 'pass', 'end', null, expectedTest); - runner.suite = expectedSuite; - var stdout = runReporter({}, runner, options); - var expectedArray = [ - '# TOC\n', - ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n', - expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n' - ]; + describe("on 'pass' event", function() { + it("should write test code inside js code block, on 'end' event", function() { + var expectedSuite = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [] + }; + var expectedDuration = 1000; + var currentRetry = 1; + var expectedBody = 'some body'; + var expectedTest = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + duration: expectedDuration, + currentRetry: function() { + return currentRetry; + }, + slow: noop, + body: expectedBody + }; + var runner = createMockRunner( + 'pass end', + EVENT_TEST_PASS, + EVENT_RUN_END, + null, + expectedTest + ); + runner.suite = expectedSuite; + var options = {}; + var stdout = runReporter({}, runner, options); + + var expectedArray = [ + '# TOC\n', + ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n', + expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n' + ]; - expect(stdout, 'to equal', expectedArray); + expect(stdout, 'to equal', expectedArray); + }); }); }); }); diff --git a/test/reporters/min.spec.js b/test/reporters/min.spec.js index f88adf31d7..1fe46333cf 100644 --- a/test/reporters/min.spec.js +++ b/test/reporters/min.spec.js @@ -1,45 +1,47 @@ 'use strict'; +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; + var Min = reporters.Min; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; describe('Min reporter', function() { - var runner; - var options = {}; var runReporter = makeRunReporter(Min); - - afterEach(function() { - runner = undefined; - }); - - describe('on start', function() { - it('should clear screen then set cursor position', function() { - runner = createMockRunner('start', 'start'); - var stdout = runReporter({epilogue: function() {}}, runner, options); - - var expectedArray = ['\u001b[2J', '\u001b[1;3H']; - expect(stdout, 'to equal', expectedArray); + var noop = function() {}; + + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should clear screen then set cursor position', function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + + var expectedArray = ['\u001b[2J', '\u001b[1;3H']; + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe('on end', function() { - it('should call epilogue', function() { - var calledEpilogue = false; - runner = createMockRunner('end', 'end'); - runReporter( - { - epilogue: function() { - calledEpilogue = true; - } - }, - runner, - options - ); - - expect(calledEpilogue, 'to be', true); + describe("on 'end' event", function() { + it('should call epilogue', function() { + var fakeThis = { + epilogue: sinon.stub().callsFake(noop) + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); + + expect(fakeThis.epilogue.called, 'to be true'); + }); }); }); }); diff --git a/test/reporters/nyan.spec.js b/test/reporters/nyan.spec.js index b1ad3a22a3..05d2e1bf77 100644 --- a/test/reporters/nyan.spec.js +++ b/test/reporters/nyan.spec.js @@ -1,172 +1,205 @@ 'use strict'; -var sandbox = require('sinon').createSandbox(); +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var NyanCat = reporters.Nyan; + var Base = reporters.Base; +var NyanCat = reporters.Nyan; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('Nyan reporter', function() { - describe('events', function() { - var runner; - var options = {}; - var runReporter = makeRunReporter(NyanCat); + var sandbox; + var noop = function() {}; - afterEach(function() { - sandbox.restore(); - runner = undefined; - }); + beforeEach(function() { + sandbox = sinon.createSandbox(); + }); - describe('on start', function() { + afterEach(function() { + sandbox.restore(); + }); + + describe('event handlers', function() { + var runReporter = makeRunReporter(NyanCat); + + describe("on 'start' event", function() { it('should call draw', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {} + var fakeThis = { + draw: sinon.stub().callsFake(noop), + generateColors: noop }; - sandbox.stub(reporterStub, 'draw'); - runner = createMockRunner('start', 'start'); - runReporter(reporterStub, runner, options); + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + runReporter(fakeThis, runner, options); - expect(reporterStub.draw, 'was called'); + expect(fakeThis.draw.called, 'to be true'); }); }); - describe('on pending', function() { + + describe("on 'pending' event", function() { it('should call draw', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {} + var fakeThis = { + draw: sinon.stub().callsFake(noop), + generateColors: noop }; - sandbox.stub(reporterStub, 'draw'); + var runner = createMockRunner('pending', EVENT_TEST_PENDING); + var options = {}; + runReporter(fakeThis, runner, options); - runner = createMockRunner('pending', 'pending'); - runReporter(reporterStub, runner, options); - - expect(reporterStub.draw, 'was called'); + expect(fakeThis.draw.called, 'to be true'); }); }); - describe('on pass', function() { - it('should call draw', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {} - }; - sandbox.stub(reporterStub, 'draw'); + describe("on 'pass' event", function() { + it('should call draw', function() { var test = { duration: '', - slow: function() {} + slow: noop }; - runner = createMockRunner('pass', 'pass', null, null, test); - runReporter(reporterStub, runner, options); + var fakeThis = { + draw: sinon.stub().callsFake(noop), + generateColors: noop + }; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + runReporter(fakeThis, runner, options); - expect(reporterStub.draw, 'was called'); + expect(fakeThis.draw.called, 'to be true'); }); }); - describe('on fail', function() { - it('should call draw', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {} - }; - sandbox.stub(reporterStub, 'draw'); + describe("on 'fail' event", function() { + it('should call draw', function() { var test = { err: '' }; - runner = createMockRunner('fail', 'fail', null, null, test); - runReporter(reporterStub, runner, options); + var fakeThis = { + draw: sinon.stub().callsFake(noop), + generateColors: noop + }; + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + runReporter(fakeThis, runner, options); - expect(reporterStub.draw, 'was called'); + expect(fakeThis.draw.called, 'to be true'); }); }); - describe('on end', function() { + + describe("on 'end' event", function() { it('should call epilogue', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {}, - epilogue: function() {} + var fakeThis = { + draw: noop, + epilogue: sinon.stub().callsFake(noop), + generateColors: noop }; - sandbox.stub(reporterStub, 'epilogue'); - - runner = createMockRunner('end', 'end'); - runReporter(reporterStub, runner, options); + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); - expect(reporterStub.epilogue, 'was called'); + expect(fakeThis.epilogue.called, 'to be true'); }); - it('should write numberOfLines amount of new lines', function() { + + it('should write numberOfLines amount of newlines', function() { var expectedNumberOfLines = 4; - runner = createMockRunner('end', 'end'); - var stdout = runReporter( - { - draw: function() {}, - generateColors: function() {}, - epilogue: function() {} - }, - runner, - options - ); + var fakeThis = { + draw: noop, + epilogue: noop, + generateColors: noop + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + var stdout = runReporter(fakeThis, runner, options); - var arrayOfNewlines = stdout.filter(function(value) { + var isBlankLine = function(value) { return value === '\n'; - }); + }; - expect(arrayOfNewlines, 'to have length', expectedNumberOfLines); + expect( + stdout.filter(isBlankLine), + 'to have length', + expectedNumberOfLines + ); }); + it('should call Base show', function() { - sandbox.stub(Base.cursor, 'show'); - - runner = createMockRunner('end', 'end'); - runReporter( - { - draw: function() {}, - generateColors: function() {}, - epilogue: function() {} - }, - runner, - options - ); + var showCursorStub = sandbox.stub(Base.cursor, 'show'); + var fakeThis = { + draw: noop, + epilogue: noop, + generateColors: noop + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); + sandbox.restore(); - expect(Base.cursor.show, 'was called'); + expect(showCursorStub.called, 'to be true'); }); }); }); - describe('draw', function() { + describe('#draw', function() { + var stdoutWriteStub; var stdout; - var stdoutWrite; beforeEach(function() { + stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - }; }); - afterEach(function() { - process.stdout.write = stdoutWrite; - }); - - describe('if tick is false', function() { + describe("when 'tick' is false", function() { it('should draw face with expected spaces, _ and ^', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; - - nyanCat.draw.call({ + var fakeThis = { tick: false, - appendRainbow: function() {}, - rainbowify: function() {}, - drawScoreboard: function() {}, - drawRainbow: function() {}, + appendRainbow: noop, + rainbowify: noop, + drawScoreboard: noop, + drawRainbow: noop, drawNyanCat: NyanCat.prototype.drawNyanCat, scoreboardWidth: 0, trajectories: [[]], - face: function() {}, - cursorUp: function() {} - }); + face: noop, + cursorUp: noop + }; + + try { + try { + nyanCat.draw.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } var expectedArray = [ '\u001b[0C', @@ -185,23 +218,35 @@ describe('Nyan reporter', function() { expect(stdout, 'to equal', expectedArray); }); }); - describe('if tick is true', function() { + + describe("when 'tick' is true", function() { it('should draw face with expected spaces, _ and ~', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; - - nyanCat.draw.call({ + var fakeThis = { tick: true, - appendRainbow: function() {}, - rainbowify: function() {}, - drawScoreboard: function() {}, - drawRainbow: function() {}, + appendRainbow: noop, + rainbowify: noop, + drawScoreboard: noop, + drawRainbow: noop, drawNyanCat: NyanCat.prototype.drawNyanCat, scoreboardWidth: 0, trajectories: [[]], - face: function() {}, - cursorUp: function() {} - }); + face: noop, + cursorUp: noop + }; + + try { + try { + nyanCat.draw.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } var expectedArray = [ '\u001b[0C', @@ -222,102 +267,136 @@ describe('Nyan reporter', function() { }); }); - describe('cursorDown', function() { + describe('#cursorDown', function() { + var stdoutWriteStub; var stdout; - var stdoutWrite; beforeEach(function() { + stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string) { - stdout.push(string); - }; - }); - - afterEach(function() { - process.stdout.write = stdoutWrite; }); it('should write cursor down interaction with expected number', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var expectedNumber = 25; - nyanCat.cursorDown(expectedNumber); + try { + try { + nyanCat.cursorDown(expectedNumber); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + var expectedArray = ['\u001b[' + expectedNumber + 'B']; expect(stdout, 'to equal', expectedArray); }); }); - describe('cursorUp', function() { + describe('#cursorUp', function() { + var stdoutWriteStub; var stdout; - var stdoutWrite; beforeEach(function() { + stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - }; - }); - - afterEach(function() { - process.stdout.write = stdoutWrite; }); it('should write cursor up interaction with expected number', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var expectedNumber = 25; - nyanCat.cursorUp(expectedNumber); + try { + try { + nyanCat.cursorUp(expectedNumber); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + var expectedArray = ['\u001b[' + expectedNumber + 'A']; expect(stdout, 'to equal', expectedArray); }); }); - describe('rainbowify', function() { - describe('useColors is false', function() { + describe('#rainbowify', function() { + var useColorsStub; + + beforeEach(function() { + useColorsStub = sandbox.stub(Base, 'useColors'); + }); + + afterEach(function() { + sandbox.restore(); + }); + + describe("when 'useColors' is false", function() { beforeEach(function() { - sandbox.stub(Base, 'useColors').value(false); + useColorsStub.value(false); }); it('should return argument string', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - var expectedString = 'hello'; - var outputString = nyanCat.rainbowify(expectedString); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + + var inputString = 'hello'; + var outputString = nyanCat.rainbowify(inputString); + sandbox.restore(); + var expectedString = inputString; expect(outputString, 'to be', expectedString); }); }); - describe('useColors is true', function() { + + describe("when 'useColors' is true", function() { beforeEach(function() { - sandbox.stub(Base, 'useColors').value(true); + useColorsStub.value(true); }); it('should return rainbowified string from the given string and predefined codes', function() { - var startCode = '\u001b[38;5;'; - var endCode = '\u001b[0m'; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - var expectedString = 'hello'; + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + + var inputString = 'hello'; var colorCode = 'somecode'; - var expectedRainbowifyString = - startCode + colorCode + 'm' + expectedString + endCode; - var outputString = nyanCat.rainbowify.call( - { - rainbowColors: [colorCode], - colorIndex: 0 - }, - expectedString - ); + var fakeThis = { + rainbowColors: [colorCode], + colorIndex: 0 + }; + var outputString = nyanCat.rainbowify.call(fakeThis, inputString); + sandbox.restore(); - expect(outputString, 'to be', expectedRainbowifyString); + var startCode = '\u001b[38;5;'; + var endCode = '\u001b[0m'; + var expectedString = + startCode + colorCode + 'm' + inputString + endCode; + expect(outputString, 'to be', expectedString); }); }); }); - describe('appendRainbow', function() { - describe('if tick is true', function() { - it('should set an _ segment', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + describe('#appendRainbow', function() { + describe("when 'tick' is true", function() { + it('should set an underscore segment', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var expectedSegment; var inputArray = []; var trajectories = [inputArray, inputArray, inputArray, inputArray]; @@ -333,8 +412,11 @@ describe('Nyan reporter', function() { expect(expectedSegment, 'to be', '_'); }); - it('should shift each trajectory item, if its length is greater of equal to its max width', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + + it('should shift each trajectory item if its length is greater than or equal to its max width', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var rainbowifyResult = 'rainbowify'; var inputArray = ['itemToShify']; @@ -359,9 +441,12 @@ describe('Nyan reporter', function() { expect(trajectories, 'to equal', expectedTrajectories); }); }); - describe('if tick is false', function() { - it('should set an - segment', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + + describe("when 'tick' is false", function() { + it('should set a dash segment', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var expectedSegment; var inputArray = []; var trajectories = [inputArray, inputArray, inputArray, inputArray]; @@ -380,42 +465,45 @@ describe('Nyan reporter', function() { }); }); - describe('drawScoreboard', function() { - var stdoutWrite; + describe('#drawScoreboard', function() { var stdout; - var cachedColor; - var showOutput = false; beforeEach(function() { - stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - if (showOutput) { - stdoutWrite.call(process.stdout, string, enc, callback); - } - }; - cachedColor = Base.color; - Base.color = function(type, n) { + sandbox.stub(Base, 'color').callsFake(function(type, n) { return type + n; - }; - }); - - afterEach(function() { - process.stdout.write = stdoutWrite; - Base.color = cachedColor; + }); + var stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); + stdout = []; }); it('should write scoreboard with color set with each stat', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + var passes = 2; var pending = 1; var failures = 1; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - nyanCat.drawScoreboard.call({ - cursorUp: function() {}, + + var fakeThis = { + cursorUp: noop, stats: {passes: passes, pending: pending, failures: failures}, numberOfLines: 4 - }); + }; + + try { + try { + nyanCat.drawScoreboard.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + var expectedArray = [ ' ', 'green' + passes, @@ -432,40 +520,40 @@ describe('Nyan reporter', function() { }); it('should call cursorUp with given numberOfLines', function() { - var expectedCursorArgument = null; var expectedNumberOfLines = 1000; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - nyanCat.drawScoreboard.call({ - cursorUp: function(lines) { - expectedCursorArgument = lines; - }, + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + var fakeThis = { + cursorUp: sinon.spy(), stats: {passes: 0, pending: 0, failures: 0}, numberOfLines: expectedNumberOfLines - }); + }; - expect(expectedCursorArgument, 'to be', expectedNumberOfLines); + try { + try { + nyanCat.drawScoreboard.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + + expect(fakeThis.cursorUp.calledWith(expectedNumberOfLines), 'to be true'); }); }); - describe('drawRainbow', function() { - var stdoutWrite; + describe('#drawRainbow', function() { var stdout; - var showOutput = false; beforeEach(function() { + var stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - if (showOutput) { - stdoutWrite.call(process.stdout, string, enc, callback); - } - }; - }); - - afterEach(function() { - process.stdout.write = stdoutWrite; }); it('should write width, contents and newline for each trajectory', function() { @@ -474,13 +562,25 @@ describe('Nyan reporter', function() { var expectedContents = 'input'; var inputArray = [expectedContents]; var trajectories = [inputArray]; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - nyanCat.drawRainbow.call({ - cursorUp: function() {}, + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + var fakeThis = { + cursorUp: noop, trajectories: trajectories, scoreboardWidth: expectedWidth, numberOfLines: 1 - }); + }; + + try { + try { + nyanCat.drawRainbow.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } var expectedArray = [ '\u001b[' + expectedWidth + 'C', @@ -494,41 +594,66 @@ describe('Nyan reporter', function() { var expectedCursorArgument = null; var expectedNumberOfLines = 1000; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - nyanCat.drawRainbow.call({ + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + var fakeThis = { cursorUp: function(lines) { expectedCursorArgument = lines; }, trajectories: [['input']], scoreboardWidth: 1, numberOfLines: expectedNumberOfLines - }); + }; + + try { + try { + nyanCat.drawRainbow.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } expect(expectedCursorArgument, 'to be', expectedNumberOfLines); }); }); - describe('face', function() { - it('expected face:(x .x) when "failures" at least one', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + + describe('#face', function() { + it('should expect "( x .x)" if any failures', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 2, pending: 1, failures: 1}; + expect(nyanCat.face(), 'to be', '( x .x)'); }); - it('expected face:(x .x) when "pending" at least one and no failing', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + it('should expect "( o .o)" if any pending but none failing', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; + expect(nyanCat.face(), 'to be', '( o .o)'); }); - it('expected face:(^ .^) when "passing" only', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + it('should expect "( ^ .^)" if all passing', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 1, pending: 0, failures: 0}; + expect(nyanCat.face(), 'to be', '( ^ .^)'); }); - it('expected face:(- .-) when otherwise', function(done) { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + it('should expect "( - .-)" otherwise', function(done) { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 0, pending: 0, failures: 0}; + expect(nyanCat.face(), 'to be', '( - .-)'); done(); }); diff --git a/test/reporters/progress.spec.js b/test/reporters/progress.spec.js index cdea9c643e..0d45abeaf7 100644 --- a/test/reporters/progress.spec.js +++ b/test/reporters/progress.spec.js @@ -1,107 +1,117 @@ 'use strict'; -var sandbox = require('sinon').createSandbox(); +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var Progress = reporters.Progress; + var Base = reporters.Base; +var Progress = reporters.Progress; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_END = events.EVENT_TEST_END; describe('Progress reporter', function() { - var stdout; - var stdoutWrite; - var runner; + var sandbox; var runReporter = makeRunReporter(Progress); + var noop = function() {}; beforeEach(function() { - stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - stdoutWrite.call(process.stdout, string, enc, callback); - }; + sandbox = sinon.createSandbox(); }); afterEach(function() { sandbox.restore(); - process.stdout.write = stdoutWrite; }); - describe('on start', function() { - it('should call cursor hide', function() { - sandbox.stub(Base.cursor, 'hide'); + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should call cursor hide', function() { + var hideCursorStub = sandbox.stub(Base.cursor, 'hide'); - runner = createMockRunner('start', 'start'); - runReporter({}, runner, {}); + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + runReporter({}, runner, options); + sandbox.restore(); - expect(Base.cursor.hide, 'was called'); + expect(hideCursorStub.called, 'to be true'); + }); }); - }); - - describe('on test end', function() { - describe('if line has not changed', function() { - it('should return and not write anything', function() { - sandbox.stub(Base, 'useColors').value(false); - sandbox.stub(Base.cursor, 'CR'); - sandbox.stub(Base.window, 'width').value(-3); - var expectedTotal = 1; - var expectedOptions = {}; - runner = createMockRunner('test end', 'test end'); - runner.total = expectedTotal; - var stdout = runReporter({}, runner, expectedOptions); - - expect(stdout, 'to equal', []); + describe("on 'test end' event", function() { + describe('when line has changed', function() { + it('should write expected progress of open and close options', function() { + var crCursorStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.window, 'width').value(5); + + var expectedTotal = 12; + var expectedOpen = 'OpEn'; + var expectedClose = 'cLoSe'; + var expectedIncomplete = 'iNcOmPlEtE'; + var expectedOptions = { + open: expectedOpen, + complete: 'cOmPlEtE', + incomplete: expectedIncomplete, + close: expectedClose + }; + + var runner = createMockRunner('test end', EVENT_TEST_END); + runner.total = expectedTotal; + var options = { + reporterOptions: expectedOptions + }; + var stdout = runReporter({}, runner, options); + sandbox.restore(); + + var expectedArray = [ + '\u001b[J', + ' ' + expectedOpen, + '', + expectedIncomplete, + expectedClose + ]; + + expect(crCursorStub.called, 'to be true'); + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe('if line has changed', function() { - it('should write expected progress of open and close options', function() { - sandbox.stub(Base, 'useColors').value(false); - sandbox.stub(Base.cursor, 'CR'); - sandbox.stub(Base.window, 'width').value(5); - - var expectedTotal = 12; - var expectedOpen = 'OpEn'; - var expectedClose = 'cLoSe'; - var expectedIncomplete = 'iNcOmPlEtE'; - var expectedOptions = { - open: expectedOpen, - complete: 'cOmPlEtE', - incomplete: expectedIncomplete, - close: expectedClose - }; - var options = { - reporterOptions: expectedOptions - }; - runner = createMockRunner('test end', 'test end'); - runner.total = expectedTotal; - var stdout = runReporter({}, runner, options); - - var expectedArray = [ - '\u001b[J', - ' ' + expectedOpen, - '', - expectedIncomplete, - expectedClose - ]; - expect(Base.cursor.CR, 'was called'); - expect(stdout, 'to equal', expectedArray); + + describe('when line has not changed', function() { + it('should not write anything', function() { + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.cursor, 'CR').callsFake(noop); + sandbox.stub(Base.window, 'width').value(-3); + + var expectedTotal = 1; + var runner = createMockRunner('test end', EVENT_TEST_END); + runner.total = expectedTotal; + var options = {}; + var stdout = runReporter({}, runner, options); + sandbox.restore(); + + expect(stdout, 'to equal', []); + }); }); }); - }); - describe('on end', function() { - it('should call cursor show and epilogue', function() { - var reporterStub = {epilogue: function() {}}; - sandbox.stub(Base.cursor, 'show'); - sandbox.stub(reporterStub, 'epilogue'); - - runner = createMockRunner('end', 'end'); - runReporter(reporterStub, runner, {}); + describe("on 'end' event", function() { + it('should call cursor show and epilogue', function() { + var showCursorStub = sandbox.stub(Base.cursor, 'show'); + var fakeThis = { + epilogue: sinon.spy() + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); + sandbox.restore(); - expect(reporterStub.epilogue, 'was called'); - expect(Base.cursor.show, 'was called'); + expect(fakeThis.epilogue.calledOnce, 'to be true'); + expect(showCursorStub.called, 'to be true'); + }); }); }); }); diff --git a/test/reporters/spec.spec.js b/test/reporters/spec.spec.js index 5f7584e33e..608bc7f512 100644 --- a/test/reporters/spec.spec.js +++ b/test/reporters/spec.spec.js @@ -1,104 +1,163 @@ 'use strict'; +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var Spec = reporters.Spec; + var Base = reporters.Base; +var Spec = reporters.Spec; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('Spec reporter', function() { - var runner; - var options = {}; var runReporter = makeRunReporter(Spec); - var useColors; var expectedTitle = 'expectedTitle'; + var noop = function() {}; + var sandbox; beforeEach(function() { - useColors = Base.useColors; - Base.useColors = false; + sandbox = sinon.createSandbox(); + sandbox.stub(Base, 'useColors').value(false); }); afterEach(function() { - Base.useColors = useColors; - runner = undefined; + sandbox.restore(); }); - describe('on suite', function() { - it('should return title', function() { - var suite = { - title: expectedTitle - }; - runner = createMockRunner('suite', 'suite', null, null, suite); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = [expectedTitle + '\n']; - expect(stdout, 'to equal', expectedArray); - }); - }); - describe('on pending', function() { - it('should return title', function() { - var suite = { - title: expectedTitle - }; - runner = createMockRunner('pending test', 'pending', null, null, suite); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = [' - ' + expectedTitle + '\n']; - expect(stdout, 'to equal', expectedArray); + describe('event handlers', function() { + describe("on 'suite' event", function() { + it('should return title', function() { + var suite = { + title: expectedTitle + }; + var runner = createMockRunner( + 'suite', + EVENT_SUITE_BEGIN, + null, + null, + suite + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = [expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe('on pass', function() { - describe('if test speed is slow', function() { - it('should return expected tick, title and duration', function() { - var expectedDuration = 2; - var test = { - title: expectedTitle, - duration: expectedDuration, - slow: function() { - return 1; - } + + describe("on 'pending' event", function() { + it('should return title', function() { + var suite = { + title: expectedTitle }; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedString = - ' ' + - Base.symbols.ok + - ' ' + - expectedTitle + - ' (' + - expectedDuration + - 'ms)' + - '\n'; - expect(stdout[0], 'to be', expectedString); + var runner = createMockRunner( + 'pending test', + EVENT_TEST_PENDING, + null, + null, + suite + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = [' - ' + expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('if test speed is fast', function() { - it('should return expected tick, title and without a duration', function() { - var expectedDuration = 1; + + describe("on 'pass' event", function() { + describe('when test speed is slow', function() { + it('should return expected tick, title, and duration', function() { + var expectedDuration = 2; + var test = { + title: expectedTitle, + duration: expectedDuration, + slow: function() { + return 1; + } + }; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedString = + ' ' + + Base.symbols.ok + + ' ' + + expectedTitle + + ' (' + + expectedDuration + + 'ms)' + + '\n'; + expect(stdout[0], 'to be', expectedString); + }); + }); + + describe('when test speed is fast', function() { + it('should return expected tick, title without a duration', function() { + var expectedDuration = 1; + var test = { + title: expectedTitle, + duration: expectedDuration, + slow: function() { + return 2; + } + }; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedString = + ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to be', expectedString); + }); + }); + }); + + describe("on 'fail' event", function() { + it('should return title and function count', function() { + var functionCount = 1; var test = { - title: expectedTitle, - duration: expectedDuration, - slow: function() { - return 2; - } + title: expectedTitle }; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedString = - ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to be', expectedString); + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = [ + ' ' + functionCount + ') ' + expectedTitle + '\n' + ]; + expect(stdout, 'to equal', expectedArray); }); }); }); - describe('on fail', function() { - it('should return title and function count', function() { - var functionCount = 1; - var test = { - title: expectedTitle - }; - runner = createMockRunner('fail', 'fail', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = [' ' + functionCount + ') ' + expectedTitle + '\n']; - expect(stdout, 'to equal', expectedArray); - }); - }); }); diff --git a/test/reporters/tap.spec.js b/test/reporters/tap.spec.js index c0a5419d37..f3bfe8d473 100644 --- a/test/reporters/tap.spec.js +++ b/test/reporters/tap.spec.js @@ -1,246 +1,295 @@ 'use strict'; +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; + var TAP = reporters.TAP; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_END = events.EVENT_TEST_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('TAP reporter', function() { - var runner; var runReporter = makeRunReporter(TAP); var expectedTitle = 'some title'; var countAfterTestEnd = 2; - var test; + var noop = function() {}; - beforeEach(function() { - test = { + function createTest() { + return { fullTitle: function() { return expectedTitle; }, - slow: function() {} + slow: noop }; - }); - - afterEach(function() { - runner = undefined; - test = undefined; - }); + } describe('TAP12 spec', function() { - var options = {}; - - describe('on start', function() { - var expectedSuite = 'some suite'; - var expectedTotal = 10; - var expectedString; - var stdout; - - before(function() { - runner = createMockRunner('start', 'start'); - runner.suite = expectedSuite; - runner.grepTotal = function(string) { - expectedString = string; - return expectedTotal; - }; - stdout = runReporter({}, runner, options); - }); - - it('should not write the TAP specification version', function() { - expect(stdout, 'not to contain', 'TAP version'); - }); - it('should write the number of tests that it plans to run', function() { - var expectedArray = ['1..' + expectedTotal + '\n']; - expect(stdout, 'to equal', expectedArray); - expect(expectedString, 'to be', expectedSuite); - }); - }); - - describe('on pending', function() { - it('should write expected message including count and title', function() { - runner = createMockRunner( - 'start test', - 'test end', - 'pending', - null, - test - ); - runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); - - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; - expect(stdout[0], 'to equal', expectedMessage); - }); - }); + var options = { + reporterOptions: { + tapVersion: '12' + } + }; - describe('on pass', function() { - it('should write expected message including count and title', function() { - runner = createMockRunner('start test', 'test end', 'pass', null, test); - runner.suite = ''; - runner.grepTotal = function() {}; + describe('event handlers', function() { + describe("on 'start' event", function() { + var expectedSuite = 'some suite'; + var expectedTotal = 10; + var expectedString; + var stdout = []; + + before(function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + runner.suite = expectedSuite; + runner.grepTotal = function(string) { + expectedString = string; + return expectedTotal; + }; + stdout = runReporter({}, runner, options); + }); - var stdout = runReporter({}, runner, options); + it('should not write a TAP specification version', function() { + expect(stdout, 'not to contain', 'TAP version'); + }); - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to equal', expectedMessage); + it('should write the number of tests that it plans to run', function() { + var expectedArray = ['1..' + expectedTotal + '\n']; + expect(stdout, 'to equal', expectedArray); + expect(expectedString, 'to be', expectedSuite); + }); }); - }); - describe('on fail', function() { - describe('if there is an error message', function() { - it('should write expected message and error message', function() { - var expectedErrorMessage = 'some error'; - var error = { - message: expectedErrorMessage - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', + describe("on 'pending' event", function() { + var stdout = []; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'start test', + EVENT_TEST_END, + EVENT_TEST_PENDING, null, - test, - error + test ); - runner.on = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedErrorMessage + '\n' - ]; - expect(stdout, 'to equal', expectedArray); + it('should write expected message including count and title', function() { + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('if there is an error stack', function() { - it('should write expected message and stack', function() { - var expectedStack = 'some stack'; - var error = { - stack: expectedStack - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', + describe("on 'pass' event", function() { + var stdout; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'start test', + EVENT_TEST_END, + EVENT_TEST_PASS, null, - test, - error + test ); runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedStack + '\n' - ]; - expect(stdout, 'to equal', expectedArray); + it('should write expected message including count and title', function() { + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('if there is an error stack and error message', function() { - it('should write expected message and stack', function() { - var expectedStack = 'some stack'; - var expectedErrorMessage = 'some error'; - var error = { - stack: expectedStack, - message: expectedErrorMessage - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', - null, - test, - error - ); - runner.on = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = function() {}; + describe("on 'fail' event", function() { + var expectedErrorMessage = 'some error'; + var expectedStack = 'some stack'; + + describe("when 'error' has only message", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + message: expectedErrorMessage + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message and error message', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedErrorMessage + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); - var stdout = runReporter({}, runner, options); + describe("when 'error' has only stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + stack: expectedStack + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message and stack', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedStack + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedErrorMessage + '\n', - ' ' + expectedStack + '\n' - ]; - expect(stdout, 'to equal', expectedArray); + describe("when 'error' has both message and stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + stack: expectedStack, + message: expectedErrorMessage + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message, error message, and stack', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedErrorMessage + '\n', + ' ' + expectedStack + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe("when 'error' has neither message nor stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = {}; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = runner.once = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message only', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); }); }); - describe('if there is no error stack or error message', function() { - it('should write expected message only', function() { - var error = {}; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', - null, - test, - error + describe("on 'end' event", function() { + var stdout; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'fail end pass', + EVENT_TEST_FAIL, + EVENT_RUN_END, + EVENT_TEST_PASS, + test ); - runner.on = runner.once = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + it('should write total tests, passes, and failures', function() { + var numberOfPasses = 1; + var numberOfFails = 1; + var totalTests = numberOfPasses + numberOfFails; var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' + 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', + 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', + '# tests ' + totalTests + '\n', + '# pass ' + numberOfPasses + '\n', + '# fail ' + numberOfFails + '\n' ]; expect(stdout, 'to equal', expectedArray); }); }); }); - - describe('on end', function() { - it('should write total tests, passes and failures', function() { - var numberOfPasses = 1; - var numberOfFails = 1; - runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); - runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); - - var totalTests = numberOfPasses + numberOfFails; - var expectedArray = [ - 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', - 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', - '# tests ' + totalTests + '\n', - '# pass ' + numberOfPasses + '\n', - '# fail ' + numberOfFails + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); }); describe('TAP13 spec', function() { @@ -250,229 +299,270 @@ describe('TAP reporter', function() { } }; - describe('on start', function() { - var expectedSuite = 'some suite'; - var expectedTotal = 10; - var expectedString; - var stdout; - - before(function() { - runner = createMockRunner('start', 'start'); - runner.suite = expectedSuite; - runner.grepTotal = function(string) { - expectedString = string; - return expectedTotal; - }; - - stdout = runReporter({}, runner, options); - }); + describe('event handlers', function() { + describe("on 'start' event", function() { + var expectedSuite = 'some suite'; + var expectedTotal = 10; + var expectedString; + var stdout; + + before(function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + runner.suite = expectedSuite; + runner.grepTotal = function(string) { + expectedString = string; + return expectedTotal; + }; + stdout = runReporter({}, runner, options); + }); - it('should write the TAP specification version', function() { - var tapVersion = options.reporterOptions.tapVersion; - var expectedFirstLine = 'TAP version ' + tapVersion + '\n'; - expect(stdout[0], 'to equal', expectedFirstLine); - }); - it('should write the number of tests that it plans to run', function() { - var expectedSecondLine = '1..' + expectedTotal + '\n'; - expect(stdout[1], 'to equal', expectedSecondLine); - expect(expectedString, 'to be', expectedSuite); - }); - }); + it('should write the TAP specification version', function() { + var tapVersion = options.reporterOptions.tapVersion; + var expectedFirstLine = 'TAP version ' + tapVersion + '\n'; + expect(stdout[0], 'to equal', expectedFirstLine); + }); - describe('on pending', function() { - it('should write expected message including count and title', function() { - runner = createMockRunner( - 'start test', - 'test end', - 'pending', - null, - test - ); - runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); - - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; - expect(stdout[0], 'to equal', expectedMessage); + it('should write the number of tests that it plans to run', function() { + var expectedSecondLine = '1..' + expectedTotal + '\n'; + expect(stdout[1], 'to equal', expectedSecondLine); + expect(expectedString, 'to be', expectedSuite); + }); }); - }); - - describe('on pass', function() { - it('should write expected message including count and title', function() { - runner = createMockRunner('start test', 'test end', 'pass', null, test); - runner.suite = ''; - runner.grepTotal = function() {}; - var stdout = runReporter({}, runner, options); + describe("on 'pending' event", function() { + var stdout; - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to equal', expectedMessage); - }); - }); - - describe('on fail', function() { - describe('if there is an error message', function() { - it('should write expected message and error message', function() { - var expectedErrorMessage = 'some error'; - var error = { - message: expectedErrorMessage - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'start test', + EVENT_TEST_END, + EVENT_TEST_PENDING, null, - test, - error + test ); - runner.on = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' message: |-\n', - ' ' + expectedErrorMessage + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); + it('should write expected message including count and title', function() { + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('if there is an error stack', function() { - it('should write expected message and stack', function() { - var expectedStack = 'some stack'; - var error = { - stack: expectedStack - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', + describe("on 'pass' event", function() { + var stdout; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'start test', + EVENT_TEST_END, + EVENT_TEST_PASS, null, - test, - error + test ); runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' stack: |-\n', - ' ' + expectedStack + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); + it('should write expected message including count and title', function() { + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('if there is an error stack and error message', function() { - it('should write expected message and stack', function() { - var expectedStack = 'some stack'; - var expectedErrorMessage = 'some error'; - var error = { - stack: expectedStack, - message: expectedErrorMessage - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', - null, - test, - error - ); - runner.on = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = function() {}; + describe("on 'fail' event", function() { + var expectedErrorMessage = 'some error'; + var expectedStack = 'some stack'; + + describe("when 'error' has only message", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + message: expectedErrorMessage + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message and error message', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' message: |-\n', + ' ' + expectedErrorMessage + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); - var stdout = runReporter({}, runner, options); + describe("when 'error' has only stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + stack: expectedStack + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message and stack', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' stack: |-\n', + ' ' + expectedStack + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' message: |-\n', - ' ' + expectedErrorMessage + '\n', - ' stack: |-\n', - ' ' + expectedStack + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); + describe("when 'error' has both message and stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + stack: expectedStack, + message: expectedErrorMessage + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message, error message, and stack', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' message: |-\n', + ' ' + expectedErrorMessage + '\n', + ' stack: |-\n', + ' ' + expectedStack + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe("when 'error' has neither message nor stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = {}; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = runner.once = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message only', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); }); }); - describe('if there is no error stack or error message', function() { - it('should write expected message only', function() { - var error = {}; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', - null, - test, - error + describe("on 'end' event", function() { + var stdout; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'fail end pass', + EVENT_TEST_FAIL, + EVENT_RUN_END, + EVENT_TEST_PASS, + test ); - runner.on = runner.once = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + it('should write total tests, passes, and failures', function() { + var numberOfPasses = 1; + var numberOfFails = 1; + var totalTests = numberOfPasses + numberOfFails; var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' + 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', + 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', + '# tests ' + totalTests + '\n', + '# pass ' + numberOfPasses + '\n', + '# fail ' + numberOfFails + '\n' ]; expect(stdout, 'to equal', expectedArray); }); }); }); - - describe('on end', function() { - it('should write total tests, passes and failures', function() { - var numberOfPasses = 1; - var numberOfFails = 1; - runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); - runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); - - var totalTests = numberOfPasses + numberOfFails; - var expectedArray = [ - 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', - 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', - '# tests ' + totalTests + '\n', - '# pass ' + numberOfPasses + '\n', - '# fail ' + numberOfFails + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); }); }); diff --git a/test/reporters/xunit.spec.js b/test/reporters/xunit.spec.js index 35555968a1..26fce4a1c4 100644 --- a/test/reporters/xunit.spec.js +++ b/test/reporters/xunit.spec.js @@ -1,25 +1,34 @@ 'use strict'; +var EventEmitter = require('events').EventEmitter; var fs = require('fs'); -var mkdirp = require('mkdirp'); +var os = require('os'); var path = require('path'); -var assert = require('assert'); +var mkdirp = require('mkdirp'); +var rimraf = require('rimraf'); +var sinon = require('sinon'); var createStatsCollector = require('../../lib/stats-collector'); -var EventEmitter = require('events').EventEmitter; +var events = require('../../').Runner.constants; var reporters = require('../../').reporters; -var constants = require('../../lib/runnable').constants; -var STATE_FAILED = constants.STATE_FAILED; -var STATE_PASSED = constants.STATE_PASSED; +var states = require('../../').Runnable.constants; + +var Base = reporters.Base; var XUnit = reporters.XUnit; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_END = events.EVENT_TEST_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; + +var STATE_FAILED = states.STATE_FAILED; +var STATE_PASSED = states.STATE_PASSED; + describe('XUnit reporter', function() { - var stdout; - var stdoutWrite; - // the runner parameter of the reporter + var sandbox; var runner; + var noop = function() {}; - var callbackArgument = null; - var expectedFailure = 'some-failures'; var expectedLine = 'some-line'; var expectedClassName = 'fullTitle'; var expectedTitle = 'some title'; @@ -27,192 +36,286 @@ describe('XUnit reporter', function() { var expectedDiff = '\n + expected - actual\n\n -foo\n +bar\n '; var expectedStack = 'some-stack'; - var expectedWrite = null; beforeEach(function() { - stdout = []; - runner = {on: function() {}, once: function() {}}; + runner = {on: noop, once: noop}; createStatsCollector(runner); }); - describe('if reporter options output is given', function() { - var expectedOutput = 'some-output'; + describe("when 'reporterOptions.output' is provided", function() { + var expectedOutput = path.join(path.sep, 'path', 'to', 'some-output'); var options = { reporterOptions: { output: expectedOutput } }; - describe('but it cant create a write stream', function() { - it('should throw expected error', function() { - var fsCreateWriteStream = fs.createWriteStream; - fs.createWriteStream = false; - - var boundXUnit = XUnit.bind({}, runner, options); - expect(boundXUnit, 'to throw', 'file output not supported in browser'); - fs.createWriteStream = fsCreateWriteStream; + + describe('when fileStream can be created', function() { + var mkdirpSync; + var fsCreateWriteStream; + + beforeEach(function() { + sandbox = sinon.createSandbox(); + mkdirpSync = sandbox.stub(mkdirp, 'sync'); + fsCreateWriteStream = sandbox.stub(fs, 'createWriteStream'); }); - }); - describe('and it can create a write stream', function() { - it('should locate the output dir, create it, then assign as fileStream', function() { - var expectedDirectory; - var mkdirpSync = mkdirp.sync; - var pathDirname = path.dirname; - var fsCreateWriteStream = fs.createWriteStream; - mkdirp.sync = function(directory) { - expectedDirectory = directory; - }; - path.dirname = function(location) { - return location; - }; - fs.createWriteStream = function(streamDetails) { - return streamDetails; - }; - var contextVariables = { + it('should open given file for writing, recursively creating directories in pathname', function() { + var fakeThis = { fileStream: null }; - XUnit.call(contextVariables, runner, options); + XUnit.call(fakeThis, runner, options); - expect(expectedDirectory, 'to be', expectedOutput); - expect(contextVariables.fileStream, 'to be', expectedOutput); + var expectedDirectory = path.dirname(expectedOutput); + expect(mkdirpSync.calledWith(expectedDirectory), 'to be true'); + expect(fsCreateWriteStream.calledWith(expectedOutput), 'to be true'); + }); - fs.createWriteStream = fsCreateWriteStream; - mkdirp.sync = mkdirpSync; - path.dirname = pathDirname; + afterEach(function() { + sandbox.restore(); }); }); - }); - describe("on 'pending', 'pass' and 'fail' events", function() { - it("should add test to tests called on 'end' event", function() { - var pendingTest = { - name: 'pending', - slow: function() {} - }; - var failTest = { - name: 'fail', - slow: function() {} - }; - var passTest = { - name: 'pass', - slow: function() {} - }; - runner.on = runner.once = function(event, callback) { - if (event === 'pending') { - callback(pendingTest); - } - if (event === 'pass') { - callback(passTest); - } - if (event === 'fail') { - callback(failTest); - } - if (event === 'end') { - callback(); - } - }; + describe('when fileStream cannot be created', function() { + describe('when given an invalid pathname', function() { + var tmpdir; + var invalidPath; - var calledTests = []; - XUnit.call( - { - write: function() {}, - test: function(test) { - calledTests.push(test); + beforeEach(function createInvalidPath() { + tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'mocha-test-')); + + function touch(filename) { + fs.closeSync(fs.openSync(filename, 'w')); } - }, - runner - ); - var expectedCalledTests = [pendingTest, passTest, failTest]; - expect(calledTests, 'to equal', expectedCalledTests); + // Create path where file 'some-file' used as directory + invalidPath = path.join( + tmpdir, + 'some-file', + path.basename(expectedOutput) + ); + touch(path.dirname(invalidPath)); + }); + + it('should throw system error', function() { + var options = { + reporterOptions: { + output: invalidPath + } + }; + var boundXUnit = XUnit.bind({}, runner, options); + expect( + boundXUnit, + 'to throw', + expect.it('to be an', Error).and('to satisfy', { + syscall: 'mkdir', + code: 'EEXIST', + path: path.dirname(invalidPath) + }) + ); + }); + + afterEach(function() { + rimraf.sync(tmpdir); + }); + }); + + describe('when run in browser', function() { + beforeEach(function() { + sandbox = sinon.createSandbox(); + sandbox.stub(fs, 'createWriteStream').value(false); + }); + + it('should throw unsupported error', function() { + var boundXUnit = XUnit.bind({}, runner, options); + expect( + boundXUnit, + 'to throw', + 'file output not supported in browser' + ); + }); + + afterEach(function() { + sandbox.restore(); + }); + }); }); }); - describe('done', function() { - describe('if fileStream is truthy', function() { - it('should run callback with failure inside streams end', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); - var callback = function(failures) { - callbackArgument = failures; + describe('event handlers', function() { + describe("on 'pending', 'pass' and 'fail' events", function() { + it("should add test to tests called on 'end' event", function() { + var pendingTest = { + name: 'pending', + slow: noop + }; + var failTest = { + name: 'fail', + slow: noop + }; + var passTest = { + name: 'pass', + slow: noop }; - var calledEnd = false; - var fileStream = { - end: function(callback) { - calledEnd = true; + runner.on = runner.once = function(event, callback) { + if (event === EVENT_TEST_PENDING) { + callback(pendingTest); + } else if (event === EVENT_TEST_PASS) { + callback(passTest); + } else if (event === EVENT_TEST_FAIL) { + callback(failTest); + } else if (event === EVENT_RUN_END) { callback(); } }; - xunit.done.call({fileStream: fileStream}, expectedFailure, callback); - expect(calledEnd, 'to be', true); - expect(callbackArgument, 'to be', expectedFailure); - }); - }); - describe('if fileStream is falsy', function() { - it('should run callback with failure', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); - var callback = function(failures) { - callbackArgument = failures; + var calledTests = []; + var fakeThis = { + write: noop, + test: function(test) { + calledTests.push(test); + } }; - xunit.done.call({fileStream: false}, expectedFailure, callback); + XUnit.call(fakeThis, runner); - expect(callbackArgument, 'to be', expectedFailure); + var expectedCalledTests = [pendingTest, passTest, failTest]; + expect(calledTests, 'to equal', expectedCalledTests); }); }); }); - describe('write', function() { - describe('if fileStream is truthy', function() { - it('should call fileStream write with line and new line', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); - var fileStream = { - write: function(write) { - expectedWrite = write; + describe('#done', function() { + var xunit; + var options = { + reporterOptions: {} + }; + var expectedNFailures = 13; + var callback; + + beforeEach(function() { + sandbox = sinon.createSandbox(); + callback = sandbox.spy(); + }); + + afterEach(function() { + callback = null; + xunit = null; + sandbox.restore(); + }); + + describe('when output directed to file', function() { + var fakeThis; + + beforeEach(function() { + xunit = new XUnit(runner, options); + + fakeThis = { + fileStream: { + end: sinon.stub().callsFake(function(chunk, encoding, cb) { + if (typeof arguments[0] === 'function') { + cb = arguments[0]; + } + cb(); + }), + write: function(chunk, encoding, cb) {} } }; - xunit.write.call({fileStream: fileStream}, expectedLine); + }); - expect(expectedWrite, 'to be', expectedLine + '\n'); + it("should run completion callback via 'fileStream.end'", function() { + xunit.done.call(fakeThis, expectedNFailures, callback); + + expect(fakeThis.fileStream.end.calledOnce, 'to be true'); + expect(callback.calledOnce, 'to be true'); + expect(callback.calledWith(expectedNFailures), 'to be true'); }); }); - describe('if fileStream is falsy and stdout exists', function() { - it('should call write with line and new line', function() { - stdoutWrite = process.stdout.write; - process.stdout.write = function(string) { - stdout.push(string); - }; - var xunit = new XUnit({on: function() {}, once: function() {}}); - xunit.write.call({fileStream: false}, expectedLine); + describe('when output directed to stdout (or console)', function() { + var fakeThis; + + beforeEach(function() { + xunit = new XUnit(runner, options); + fakeThis = {}; + }); - process.stdout.write = stdoutWrite; + it('should run completion callback', function() { + xunit.done.call(fakeThis, expectedNFailures, callback); - expect(stdout[0], 'to be', expectedLine + '\n'); + expect(callback.calledOnce, 'to be true'); + expect(callback.calledWith(expectedNFailures), 'to be true'); }); }); - describe('if fileStream is falsy and stdout does not exist', function() { - it('should call write with line', function() { - stdoutWrite = process; + }); + + describe('#write', function() { + // :TODO: Method should be named 'writeln', not 'write' + describe('when output directed to file', function() { + var fileStream = { + write: sinon.spy() + }; + + it("should call 'fileStream.write' with line and newline", function() { + var xunit = new XUnit(runner); + var fakeThis = {fileStream: fileStream}; + xunit.write.call(fakeThis, expectedLine); + + expect(fileStream.write.calledWith(expectedLine + '\n'), 'to be true'); + }); + }); + + describe('when output directed to stdout', function() { + it("should call 'process.stdout.write' with line and newline", function() { + var xunit = new XUnit(runner); + var fakeThis = {fileStream: false}; + var stdoutWriteStub = sinon.stub(process.stdout, 'write'); + xunit.write.call(fakeThis, expectedLine); + stdoutWriteStub.restore(); + + expect(stdoutWriteStub.calledWith(expectedLine + '\n'), 'to be true'); + }); + }); + + describe('when output directed to console', function() { + it("should call 'console.log' with line", function() { + // :TODO: XUnit needs a trivially testable means to force console.log() + var realProcess = process; process = false; // eslint-disable-line no-native-reassign, no-global-assign - var cachedConsoleLog = console.log; - console.log = function(string) { - stdout.push(string); - }; - var xunit = new XUnit({on: function() {}, once: function() {}}); - xunit.write.call({fileStream: false}, expectedLine); + var xunit = new XUnit(runner); + var fakeThis = {fileStream: false}; + var consoleLogStub = sinon.stub(console, 'log'); + xunit.write.call(fakeThis, expectedLine); + consoleLogStub.restore(); - console.log = cachedConsoleLog; - process = stdoutWrite; // eslint-disable-line no-native-reassign, no-global-assign - expect(stdout[0], 'to be', expectedLine); + process = realProcess; // eslint-disable-line no-native-reassign, no-global-assign + + expect(consoleLogStub.calledWith(expectedLine), 'to be true'); }); }); }); - describe('test', function() { + describe('#test', function() { + var expectedWrite; + var fakeThis = { + write: function(str) { + expectedWrite = str; + } + }; + + beforeEach(function() { + sandbox = sinon.createSandbox(); + sandbox.stub(Base, 'useColors').value(false); + }); + + afterEach(function() { + sandbox.restore(); + expectedWrite = null; + }); + describe('on test failure', function() { it('should write expected tag with error details', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); + var xunit = new XUnit(runner); var expectedTest = { state: STATE_FAILED, title: expectedTitle, @@ -229,14 +332,9 @@ describe('XUnit reporter', function() { stack: expectedStack } }; - xunit.test.call( - { - write: function(string) { - expectedWrite = string; - } - }, - expectedTest - ); + + xunit.test.call(fakeThis, expectedTest); + sandbox.restore(); var expectedTag = ''; - expect(expectedWrite, 'to be', expectedTag); }); }); + describe('on test in any other state', function() { it('should write expected tag', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); - + var xunit = new XUnit(runner); var expectedTest = { isPending: function() { return false; @@ -305,14 +396,9 @@ describe('XUnit reporter', function() { }, duration: false }; - xunit.test.call( - { - write: function(string) { - expectedWrite = string; - } - }, - expectedTest - ); + + xunit.test.call(fakeThis, expectedTest); + sandbox.restore(); var expectedTag = ''; - expect(expectedWrite, 'to be', expectedTag); }); }); + it('should write expected summary statistics', function() { - var count = 0; + var numTests = 0; + var numPass = 0; + var numFail = 0; var simpleError = { actual: 'foo', expected: 'bar', @@ -333,8 +421,14 @@ describe('XUnit reporter', function() { stack: expectedStack }; var generateTest = function(passed) { - var t = { - title: expectedTitle + count, + numTests++; + if (passed) { + numPass++; + } else { + numFail++; + } + return { + title: [expectedTitle, numTests].join(': '), state: passed ? STATE_PASSED : STATE_FAILED, isPending: function() { return false; @@ -349,26 +443,36 @@ describe('XUnit reporter', function() { }, duration: 1000 }; - return t; }; var runner = new EventEmitter(); createStatsCollector(runner); var xunit = new XUnit(runner); expectedWrite = ''; - xunit.write = function(string) { - expectedWrite += string; - }; + sandbox.stub(xunit, 'write').callsFake(function(str) { + expectedWrite += str; + }); // 3 tests, no failures (i.e. tests that could not run), and 2 errors - runner.emit('test end'); - runner.emit('pass', generateTest(true)); - runner.emit('test end'); - runner.emit('fail', generateTest(false), simpleError); - runner.emit('test end'); - runner.emit('fail', generateTest(false), simpleError); - runner.emit('end'); + runner.emit(EVENT_TEST_PASS, generateTest(true)); + runner.emit(EVENT_TEST_END); + runner.emit(EVENT_TEST_FAIL, generateTest(false), simpleError); + runner.emit(EVENT_TEST_END); + runner.emit(EVENT_TEST_FAIL, generateTest(false), simpleError); + runner.emit(EVENT_TEST_END); + runner.emit(EVENT_RUN_END); + + sandbox.restore(); + + var expectedNumPass = 1; + var expectedNumFail = 2; + var expectedNumTests = 3; + + expect(expectedNumPass, 'to be', numPass); + expect(expectedNumFail, 'to be', numFail); + expect(expectedNumTests, 'to be', numTests); + // :NOTE: Mocha test "fail" is an XUnit "error" var expectedTag = '= 0, - 'it should contain the text "Mocha Tests"' - ); + expect(lines[0], 'to contain', customSuiteName); }); - it('should use the custom suite name as the suite name when provided in the reporter options', function() { - // arrange + it('should use default name otherwise', function() { + var defaultSuiteName = 'Mocha Tests'; var options = { - reporterOptions: { - // this time, with a custom suite name - suiteName: 'Mocha Is Great!' - } + reporterOptions: {} }; var xunit = new XUnit(runner, options); xunit.fileStream = fileStream; - // act (trigger the end event to force xunit reporter to write the output) - events['end'](); + // Trigger end event to force XUnit reporter to write its output + events[EVENT_RUN_END](); - // assert - assert( - lines[0].indexOf(' Date: Thu, 25 Apr 2019 09:43:44 -0500 Subject: [PATCH 006/441] Revert "test(test/reporters): Rework reporter tests" This reverts commit f6b8e898526c908294010ccc31a3ce800c426498. --- test/reporters/base.spec.js | 258 ++++----- test/reporters/doc.spec.js | 358 +++++------- test/reporters/dot.spec.js | 319 ++++------- test/reporters/helpers.js | 69 +-- test/reporters/json-stream.spec.js | 204 ++++--- test/reporters/json.spec.js | 26 +- test/reporters/landing.spec.js | 142 ++--- test/reporters/list.spec.js | 318 ++++------- test/reporters/markdown.spec.js | 177 +++--- test/reporters/min.spec.js | 66 ++- test/reporters/nyan.spec.js | 597 ++++++++------------ test/reporters/progress.spec.js | 168 +++--- test/reporters/spec.spec.js | 215 +++----- test/reporters/tap.spec.js | 858 +++++++++++++---------------- test/reporters/xunit.spec.js | 546 ++++++++---------- 15 files changed, 1793 insertions(+), 2528 deletions(-) diff --git a/test/reporters/base.spec.js b/test/reporters/base.spec.js index 739063f32a..40d1374537 100644 --- a/test/reporters/base.spec.js +++ b/test/reporters/base.spec.js @@ -1,138 +1,124 @@ 'use strict'; var assert = require('assert'); -var chai = require('chai'); -var sinon = require('sinon'); -var helpers = require('./helpers'); -var reporters = require('../../').reporters; - +var chaiExpect = require('chai').expect; +var Base = require('../../lib/reporters/base'); var AssertionError = assert.AssertionError; -var Base = reporters.Base; -var chaiExpect = chai.expect; -var createElements = helpers.createElements; -var makeTest = helpers.makeTest; +var makeTest = require('./helpers').makeTest; +var createElements = require('./helpers').createElements; describe('Base reporter', function() { - var sandbox; var stdout; + var stdoutWrite; + var useColors; + var err; + var errOut; + var test; function list(tests) { - try { - try { - Base.list(tests); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } + Base.useColors = false; + var retval = Base.list(tests); + Base.useColors = useColors; + return retval; } function generateDiff(actual, expected) { - var diffStr; - - try { - try { - diffStr = Base.generateDiff(actual, expected); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } - - return diffStr; + Base.useColors = false; + var retval = Base.generateDiff(actual, expected); + Base.useColors = useColors; + return retval; } - var gather = function(chunk, encoding, cb) { - stdout.push(chunk); - }; - beforeEach(function() { - sandbox = sinon.createSandbox(); - sandbox.stub(Base, 'useColors').value(false); - sandbox.stub(process.stdout, 'write').callsFake(gather); + useColors = Base.useColors; stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { + stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); + }; }); afterEach(function() { - sandbox.restore(); + process.stdout.write = stdoutWrite; }); describe('showDiff', function() { - var err; - beforeEach(function() { err = new AssertionError({actual: 'foo', expected: 'bar'}); }); it('should show diffs by default', function() { - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'to match', /- actual/); expect(errOut, 'to match', /\+ expected/); }); - it("should show diffs if 'err.showDiff' is true", function() { + it('should show diffs if property set to `true`', function() { err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'to match', /- actual/); expect(errOut, 'to match', /\+ expected/); }); - it("should not show diffs if 'err.showDiff' is false", function() { + it('should not show diffs when showDiff property set to `false`', function() { err.showDiff = false; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); - it("should not show diffs if 'expected' is not defined", function() { - var _err = new Error('ouch'); - var test = makeTest(_err); + it('should not show diffs when expected is not defined', function() { + err = new Error('ouch'); + + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); - it("should not show diffs if 'hideDiff' is true", function() { - var test = makeTest(err); + it('should not show diffs when hideDiff is set', function() { + test = makeTest(err); - sandbox.stub(Base, 'hideDiff').value(true); + Base.hideDiff = true; list([test]); + Base.hideDiff = false; // Revert to original value - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); }); - describe('getting two strings', function() { + describe('Getting two strings', function() { // Fix regression V1.2.1(see: issue #1241) it('should show strings diff as is', function() { - var err = new Error('test'); + err = new Error('test'); + err.actual = 'foo\nbar'; err.expected = 'foo\nbaz'; err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); + expect(errOut, 'not to match', /"foo\\nbar"/); expect(errOut, 'to match', /foo/).and('to match', /bar/); expect(errOut, 'to match', /test/); @@ -141,19 +127,26 @@ describe('Base reporter', function() { }); }); - describe('diff generation', function() { - var inlineDiffsStub; + describe('Diff generation', function() { + var oldInlineDiffs; + var actual; + var expected; + var output; beforeEach(function() { - inlineDiffsStub = sandbox.stub(Base, 'inlineDiffs'); + oldInlineDiffs = Base.inlineDiffs; + }); + + afterEach(function() { + Base.inlineDiffs = oldInlineDiffs; }); - it("should generate unified diffs if 'inlineDiffs' is false", function() { - var actual = 'a foo unified diff'; - var expected = 'a bar unified diff'; + it('should generate unified diffs if `inlineDiff === false`', function() { + actual = 'a foo unified diff'; + expected = 'a bar unified diff'; - inlineDiffsStub.value(false); - var output = generateDiff(actual, expected); + Base.inlineDiffs = false; + output = generateDiff(actual, expected); expect( output, @@ -162,12 +155,12 @@ describe('Base reporter', function() { ); }); - it("should generate inline diffs if 'inlineDiffs' is true", function() { - var actual = 'a foo inline diff'; - var expected = 'a bar inline diff'; + it('should generate inline diffs if `inlineDiffs === true`', function() { + actual = 'a foo inline diff'; + expected = 'a bar inline diff'; - inlineDiffsStub.value(true); - var output = generateDiff(actual, expected); + Base.inlineDiffs = true; + output = generateDiff(actual, expected); expect( output, @@ -177,37 +170,39 @@ describe('Base reporter', function() { }); }); - describe('inline strings diff', function() { - beforeEach(function() { - sandbox.stub(Base, 'inlineDiffs').value(true); - }); + describe('Inline strings diff', function() { + it('should show single line diff if property set to `true`', function() { + err = new Error('test'); - it("should show single line diff if 'inlineDiffs' is true", function() { - var err = new Error('test'); err.actual = 'a foo inline diff'; err.expected = 'a bar inline diff'; err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); + Base.inlineDiffs = true; list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); + expect(errOut, 'to match', /a foobar inline diff/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /actual/); expect(errOut, 'to match', /expected/); }); - it('should split lines if string has more than 4 line breaks', function() { - var err = new Error('test'); + it('should split lines when string has more than 4 line breaks', function() { + err = new Error('test'); + err.actual = 'a\nfoo\ninline\ndiff\nwith\nmultiple lines'; err.expected = 'a\nbar\ninline\ndiff\nwith\nmultiple lines'; err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); + Base.inlineDiffs = true; list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); + expect(errOut, 'to match', /1 \| a/); expect(errOut, 'to match', /2 \| foobar/); expect(errOut, 'to match', /3 \| inline/); @@ -220,21 +215,21 @@ describe('Base reporter', function() { }); }); - describe('unified diff', function() { + describe('unified diff reporter', function() { beforeEach(function() { - sandbox.stub(Base, 'inlineDiffs').value(false); + err = new Error('test'); }); it('should separate diff hunks by two dashes', function() { - var err = new Error('test'); err.actual = createElements({from: 2, to: 11}); err.expected = createElements({from: 1, to: 10}); err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); + Base.inlineDiffs = false; list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); var regexesToMatch = [ /\[/, @@ -262,15 +257,16 @@ describe('Base reporter', function() { }); it('should stringify objects', function() { - var err = new Error('test'); + err = new Error('test'); + err.actual = {key: 'a1'}; err.expected = {key: 'e1'}; err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'to match', /"key"/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /- actual/); @@ -278,18 +274,18 @@ describe('Base reporter', function() { }); it('should stringify Object.create(null)', function() { - var err = new Error('test'); + err = new Error('test'); err.actual = Object.create(null); err.actual.hasOwnProperty = 1; err.expected = Object.create(null); err.expected.hasOwnProperty = 2; err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'to match', /"hasOwnProperty"/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /- actual/); @@ -303,11 +299,11 @@ describe('Base reporter', function() { err.actual = false; err.expected = true; err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'to match', /\+true/); expect(errOut, 'to match', /-false/); expect(errOut, 'to match', /- actual/); @@ -315,21 +311,18 @@ describe('Base reporter', function() { } }); - it("should interpret 'chai' module custom error messages", function() { - var actual = 43; - var expected = 42; - + it('should interpret Chai custom error messages', function() { try { - chaiExpect(actual, 'custom error message').to.equal(expected); + chaiExpect(43, 'custom error message').to.equal(42); } catch (err) { - err.actual = actual; - err.expected = expected; + err.actual = 43; + err.expected = 42; err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'to match', /custom error message\n/) .and('to match', /\+42/) .and('to match', /-43/) @@ -338,23 +331,20 @@ describe('Base reporter', function() { } }); - it("should interpret 'assert' module custom error messages", function() { - var actual = 43; - var expected = 42; - + it('should interpret assert module custom error messages', function() { try { - assert.strictEqual(actual, expected, 'custom error message'); + assert.strictEqual(43, 42, 'custom error message'); // AssertionError: custom error message: expected 43 to equal 42. // assert.equal(43, 42, 'custom error message: expected 43 to equal 42.'); } catch (err) { - err.actual = actual; - err.expected = expected; + err.actual = 43; + err.expected = 42; err.showDiff = true; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n'); + errOut = stdout.join('\n'); expect(errOut, 'to match', /custom error message\n/); expect(errOut, 'to match', /\+42/); expect(errOut, 'to match', /-43/); @@ -364,57 +354,53 @@ describe('Base reporter', function() { }); it('should remove message from stack', function() { - var err = { + err = { message: 'Error', stack: 'Error\nfoo\nbar', showDiff: false }; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n').trim(); + errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); - it("should use 'inspect' if 'message' is not set", function() { - var err = { + it('should use the inspect() property if `message` is not set', function() { + err = { showDiff: false, inspect: function() { return 'an error happened'; } }; - var test = makeTest(err); - + test = makeTest(err); list([test]); - - var errOut = stdout.join('\n').trim(); + errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n an error happened'); }); - it("should set an empty message if neither 'message' nor 'inspect' is set", function() { - var err = { + it('should set an empty message if `message` and `inspect()` are not set', function() { + err = { showDiff: false }; - var test = makeTest(err); - + test = makeTest(err); list([test]); - - var errOut = stdout.join('\n').trim(); + errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:'); }); it('should not modify stack if it does not contain message', function() { - var err = { + err = { message: 'Error', stack: 'foo\nbar', showDiff: false }; - var test = makeTest(err); + test = makeTest(err); list([test]); - var errOut = stdout.join('\n').trim(); + errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); }); diff --git a/test/reporters/doc.spec.js b/test/reporters/doc.spec.js index fb2703f83c..857922b83e 100644 --- a/test/reporters/doc.spec.js +++ b/test/reporters/doc.spec.js @@ -1,17 +1,10 @@ 'use strict'; -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); var reporters = require('../../').reporters; - var Doc = reporters.Doc; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; -var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; -var EVENT_SUITE_END = events.EVENT_SUITE_END; -var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var createMockRunner = require('./helpers.js').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Doc reporter', function() { var runner; @@ -19,223 +12,178 @@ describe('Doc reporter', function() { var runReporter = makeRunReporter(Doc); afterEach(function() { - runner = null; + runner = undefined; }); - describe('event handlers', function() { - describe("on 'suite' event", function() { - describe('when suite root does not exist', function() { - var expectedTitle = 'expectedTitle'; - var unescapedTitle = '
' + expectedTitle + '
'; - var suite = { - root: false, - title: expectedTitle - }; - - it('should log html with indents and expected title', function() { - runner = createMockRunner( - 'suite', - EVENT_SUITE_BEGIN, - null, - null, - suite - ); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
\n', - '

' + expectedTitle + '

\n', - '
\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - - it('should escape title where necessary', function() { - var suite = { - root: false, - title: unescapedTitle - }; - expectedTitle = - '<div>' + expectedTitle + '</div>'; - - runner = createMockRunner( - 'suite', - EVENT_SUITE_BEGIN, - null, - null, - suite - ); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
\n', - '

' + expectedTitle + '

\n', - '
\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); - - describe('when suite root exists', function() { - var suite = { - root: true - }; - - it('should not log any html', function() { - runner = createMockRunner( - 'suite', - EVENT_SUITE_BEGIN, - null, - null, - suite - ); - var stdout = runReporter(this, runner, options); - expect(stdout, 'to be empty'); - }); - }); - }); - - describe("on 'suite end' event", function() { - describe('when suite root does not exist', function() { - var suite = { - root: false - }; - - it('should log expected html with indents', function() { - runner = createMockRunner( - 'suite end', - EVENT_SUITE_END, - null, - null, - suite - ); - var stdout = runReporter(this, runner, options); - var expectedArray = ['
\n', '
\n']; - expect(stdout, 'to equal', expectedArray); - }); - }); - - describe('when suite root exists', function() { - var suite = { - root: true - }; - - it('should not log any html', function() { - runner = createMockRunner( - 'suite end', - EVENT_SUITE_END, - null, - null, - suite - ); - var stdout = runReporter(this, runner, options); - expect(stdout, 'to be empty'); - }); - }); - }); - - describe("on 'pass' event", function() { - var expectedTitle = 'some tite'; - var expectedBody = 'some body'; - var test = { - title: expectedTitle, - body: expectedBody, - slow: function() { - return ''; - } + describe('on suite', function() { + describe('if suite root does not exist', function() { + var expectedTitle = 'expectedTitle'; + var unescapedTitle = '
' + expectedTitle + '
'; + var suite = { + root: false, + title: expectedTitle }; - - it('should log html with indents, expected title, and body', function() { - runner = createMockRunner('pass', EVENT_TEST_PASS, null, null, test); + it('should log html with indents and expected title', function() { + runner = createMockRunner('suite', 'suite', null, null, suite); var stdout = runReporter(this, runner, options); var expectedArray = [ - '
' + expectedTitle + '
\n', - '
' + expectedBody + '
\n' + '
\n', + '

' + expectedTitle + '

\n', + '
\n' ]; expect(stdout, 'to equal', expectedArray); }); - - it('should escape title and body where necessary', function() { - var unescapedTitle = '
' + expectedTitle + '
'; - var unescapedBody = '
' + expectedBody + '
'; - test.title = unescapedTitle; - test.body = unescapedBody; - - var expectedEscapedTitle = - '<div>' + expectedTitle + '</div>'; - var expectedEscapedBody = - '<div>' + expectedBody + '</div>'; - runner = createMockRunner('pass', EVENT_TEST_PASS, null, null, test); + it('should escape title where necessary', function() { + var suite = { + root: false, + title: unescapedTitle + }; + expectedTitle = '<div>' + expectedTitle + '</div>'; + runner = createMockRunner('suite', 'suite', null, null, suite); var stdout = runReporter(this, runner, options); var expectedArray = [ - '
' + expectedEscapedTitle + '
\n', - '
' + expectedEscapedBody + '
\n' + '
\n', + '

' + expectedTitle + '

\n', + '
\n' ]; expect(stdout, 'to equal', expectedArray); }); }); - - describe("on 'fail' event", function() { - var expectedTitle = 'some tite'; - var expectedBody = 'some body'; - var expectedError = 'some error'; - var test = { - title: expectedTitle, - body: expectedBody, - slow: function() { - return ''; - } + describe('if suite root does exist', function() { + var suite = { + root: true }; - - it('should log html with indents, expected title, body, and error', function() { - runner = createMockRunner( - 'fail two args', - EVENT_TEST_FAIL, - null, - null, - test, - expectedError - ); + it('should not log any html', function() { + runner = createMockRunner('suite', 'suite', null, null, suite); var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedTitle + '
\n', - '
' +
-            expectedBody +
-            '
\n', - '
' + expectedError + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); + expect(stdout, 'to be empty'); }); + }); + }); - it('should escape title, body, and error where necessary', function() { - var unescapedTitle = '
' + expectedTitle + '
'; - var unescapedBody = '
' + expectedBody + '
'; - var unescapedError = '
' + expectedError + '
'; - test.title = unescapedTitle; - test.body = unescapedBody; - - var expectedEscapedTitle = - '<div>' + expectedTitle + '</div>'; - var expectedEscapedBody = - '<div>' + expectedBody + '</div>'; - var expectedEscapedError = - '<div>' + expectedError + '</div>'; - runner = createMockRunner( - 'fail two args', - EVENT_TEST_FAIL, - null, - null, - test, - unescapedError - ); + describe('on suite end', function() { + describe('if suite root does not exist', function() { + var suite = { + root: false + }; + it('should log expected html with indents', function() { + runner = createMockRunner('suite end', 'suite end', null, null, suite); var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedEscapedTitle + '
\n', - '
' +
-            expectedEscapedBody +
-            '
\n', - '
' + expectedEscapedError + '
\n' - ]; + var expectedArray = ['
\n', '
\n']; expect(stdout, 'to equal', expectedArray); }); }); + describe('if suite root does exist', function() { + var suite = { + root: true + }; + it('should not log any html', function() { + runner = createMockRunner('suite end', 'suite end', null, null, suite); + var stdout = runReporter(this, runner, options); + expect(stdout, 'to be empty'); + }); + }); + }); + + describe('on pass', function() { + var expectedTitle = 'some tite'; + var expectedBody = 'some body'; + var test = { + title: expectedTitle, + body: expectedBody, + slow: function() { + return ''; + } + }; + it('should log html with indents and expected title and body', function() { + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
' + expectedTitle + '
\n', + '
' + expectedBody + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + it('should escape title and body where necessary', function() { + var unescapedTitle = '
' + expectedTitle + '
'; + var unescapedBody = '
' + expectedBody + '
'; + test.title = unescapedTitle; + test.body = unescapedBody; + + var expectedEscapedTitle = + '<div>' + expectedTitle + '</div>'; + var expectedEscapedBody = + '<div>' + expectedBody + '</div>'; + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
' + expectedEscapedTitle + '
\n', + '
' + expectedEscapedBody + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('on fail', function() { + var expectedTitle = 'some tite'; + var expectedBody = 'some body'; + var expectedError = 'some error'; + var test = { + title: expectedTitle, + body: expectedBody, + slow: function() { + return ''; + } + }; + it('should log html with indents and expected title, body and error', function() { + runner = createMockRunner( + 'fail two args', + 'fail', + null, + null, + test, + expectedError + ); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
' + expectedTitle + '
\n', + '
' +
+          expectedBody +
+          '
\n', + '
' + expectedError + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + it('should escape title, body and error where necessary', function() { + var unescapedTitle = '
' + expectedTitle + '
'; + var unescapedBody = '
' + expectedBody + '
'; + var unescapedError = '
' + expectedError + '
'; + test.title = unescapedTitle; + test.body = unescapedBody; + + var expectedEscapedTitle = + '<div>' + expectedTitle + '</div>'; + var expectedEscapedBody = + '<div>' + expectedBody + '</div>'; + var expectedEscapedError = + '<div>' + expectedError + '</div>'; + runner = createMockRunner( + 'fail two args', + 'fail', + null, + null, + test, + unescapedError + ); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
' + expectedEscapedTitle + '
\n', + '
' +
+          expectedEscapedBody +
+          '
\n', + '
' + expectedEscapedError + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); }); }); diff --git a/test/reporters/dot.spec.js b/test/reporters/dot.spec.js index 4a23c7951e..472ec63d01 100644 --- a/test/reporters/dot.spec.js +++ b/test/reporters/dot.spec.js @@ -1,238 +1,155 @@ 'use strict'; -var sinon = require('sinon'); -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); var reporters = require('../../').reporters; - -var Base = reporters.Base; var Dot = reporters.Dot; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; +var Base = reporters.Base; -var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; -var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; +var createMockRunner = require('./helpers.js').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Dot reporter', function() { - var sandbox; - var windowWidthStub; + var runner; + var useColors; + var windowWidth; + var color; + var options = {}; var runReporter = makeRunReporter(Dot); - var noop = function() {}; beforeEach(function() { - sandbox = sinon.createSandbox(); - windowWidthStub = sandbox.stub(Base.window, 'width').value(0); - sandbox.stub(Base, 'useColors').value(false); - sandbox.stub(Base, 'color').callsFake(function(type, str) { + useColors = Base.useColors; + windowWidth = Base.window.width; + color = Base.color; + Base.useColors = false; + Base.window.width = 0; + Base.color = function(type, str) { return type.replace(/ /g, '-') + '_' + str; - }); + }; }); afterEach(function() { - sandbox.restore(); + Base.useColors = useColors; + Base.window.width = windowWidth; + Base.color = color; + runner = undefined; }); - describe('event handlers', function() { - describe("on 'start' event", function() { - it('should write a newline', function() { - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedArray = ['\n']; + describe('on start', function() { + it('should write a newline', function() { + runner = createMockRunner('start', 'start'); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedArray = ['\n']; + expect(stdout, 'to equal', expectedArray); + }); + }); + describe('on pending', function() { + describe('if window width is greater than 1', function() { + beforeEach(function() { + Base.window.width = 2; + }); + it('should write a newline followed by a comma', function() { + runner = createMockRunner('pending', 'pending'); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedArray = ['\n ', 'pending_' + Base.symbols.comma]; expect(stdout, 'to equal', expectedArray); }); }); - - describe("on 'pending' event", function() { - describe('when window width is greater than 1', function() { - beforeEach(function() { - windowWidthStub.value(2); - }); - - it('should write a newline followed by a comma', function() { - var runner = createMockRunner('pending', EVENT_TEST_PENDING); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedArray = ['\n ', 'pending_' + Base.symbols.comma]; - expect(stdout, 'to equal', expectedArray); - }); - }); - - describe('when window width is less than or equal to 1', function() { - it('should write a comma', function() { - var runner = createMockRunner('pending', EVENT_TEST_PENDING); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedArray = ['pending_' + Base.symbols.comma]; - expect(stdout, 'to equal', expectedArray); - }); + describe('if window width is equal to or less than 1', function() { + it('should write a comma', function() { + runner = createMockRunner('pending', 'pending'); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedArray = ['pending_' + Base.symbols.comma]; + expect(stdout, 'to equal', expectedArray); }); }); - - describe("on 'pass' event", function() { - var test = { - duration: 1, - slow: function() { - return 2; - } - }; - - describe('when window width is greater than 1', function() { - beforeEach(function() { - windowWidthStub.value(2); - }); - - describe('when test speed is fast', function() { - it('should write a newline followed by a dot', function() { - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - expect(test.speed, 'to equal', 'fast'); - var expectedArray = ['\n ', 'fast_' + Base.symbols.dot]; - expect(stdout, 'to equal', expectedArray); - }); - }); + }); + describe('on pass', function() { + var test = { + duration: 1, + slow: function() { + return 2; + } + }; + describe('if window width is greater than 1', function() { + beforeEach(function() { + Base.window.width = 2; }); - - describe('when window width is less than or equal to 1', function() { - describe('when test speed is fast', function() { - it('should write a grey dot', function() { - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - expect(test.speed, 'to equal', 'fast'); - var expectedArray = ['fast_' + Base.symbols.dot]; - expect(stdout, 'to equal', expectedArray); - }); - }); - - describe('when test speed is medium', function() { - it('should write a yellow dot', function() { - test.duration = 2; - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - expect(test.speed, 'to equal', 'medium'); - var expectedArray = ['medium_' + Base.symbols.dot]; - expect(stdout, 'to equal', expectedArray); - }); - }); - - describe('when test speed is slow', function() { - it('should write a bright yellow dot', function() { - test.duration = 3; - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - expect(test.speed, 'to equal', 'slow'); - var expectedArray = ['bright-yellow_' + Base.symbols.dot]; - expect(stdout, 'to equal', expectedArray); - }); + describe('if test speed is fast', function() { + it('should write a newline followed by a dot', function() { + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + expect(test.speed, 'to equal', 'fast'); + var expectedArray = ['\n ', 'fast_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); }); }); }); - - describe("on 'fail' event", function() { - var test = { - test: { - err: 'some error' - } - }; - - describe('when window width is greater than 1', function() { - beforeEach(function() { - windowWidthStub.value(2); + describe('if window width is equal to or less than 1', function() { + describe('if test speed is fast', function() { + it('should write a grey dot', function() { + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + expect(test.speed, 'to equal', 'fast'); + var expectedArray = ['fast_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); }); - - it('should write a newline followed by an exclamation mark', function() { - var runner = createMockRunner( - 'fail', - EVENT_TEST_FAIL, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedArray = ['\n ', 'fail_' + Base.symbols.bang]; + }); + describe('if test speed is medium', function() { + it('should write a yellow dot', function() { + test.duration = 2; + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + expect(test.speed, 'to equal', 'medium'); + var expectedArray = ['medium_' + Base.symbols.dot]; expect(stdout, 'to equal', expectedArray); }); }); - - describe('when window width is less than or equal to 1', function() { - it('should write an exclamation mark', function() { - var runner = createMockRunner( - 'fail', - EVENT_TEST_FAIL, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedArray = ['fail_' + Base.symbols.bang]; + describe('if test speed is slow', function() { + it('should write a bright yellow dot', function() { + test.duration = 3; + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + expect(test.speed, 'to equal', 'slow'); + var expectedArray = ['bright-yellow_' + Base.symbols.dot]; expect(stdout, 'to equal', expectedArray); }); }); }); - - describe("on 'end' event", function() { - it('should call epilogue', function() { - var runner = createMockRunner('end', EVENT_RUN_END); - var fakeThis = { - epilogue: sinon.stub() - }; - var options = {}; - runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect(fakeThis.epilogue.called, 'to be true'); + }); + describe('on fail', function() { + var test = { + test: { + err: 'some error' + } + }; + describe('if window width is greater than 1', function() { + beforeEach(function() { + Base.window.width = 2; + }); + it('should write a newline followed by an exclamation mark', function() { + runner = createMockRunner('fail', 'fail', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedArray = ['\n ', 'fail_' + Base.symbols.bang]; + expect(stdout, 'to equal', expectedArray); + }); + }); + describe('if window width is equal to or less than 1', function() { + it('should write an exclamation mark', function() { + runner = createMockRunner('fail', 'fail', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedArray = ['fail_' + Base.symbols.bang]; + expect(stdout, 'to equal', expectedArray); }); }); }); + describe('on end', function() { + it('should call the epilogue', function() { + runner = createMockRunner('end', 'end'); + var epilogueCalled = false; + var epilogue = function() { + epilogueCalled = true; + }; + runReporter({epilogue: epilogue}, runner, options); + expect(epilogueCalled, 'to be', true); + }); + }); }); diff --git a/test/reporters/helpers.js b/test/reporters/helpers.js index 76b3d79307..5cb21a53f2 100644 --- a/test/reporters/helpers.js +++ b/test/reporters/helpers.js @@ -1,22 +1,17 @@ 'use strict'; -var sinon = require('sinon'); var errors = require('../../lib/errors'); -var createStatsCollector = require('../../lib/stats-collector'); - var createUnsupportedError = errors.createUnsupportedError; +/* + This function prevents the constant use of creating a runnerEvent. + runStr is the argument that defines the runnerEvent. + ifStr1 is one possible reporter argument, as is ifStr2, and ifStr3 + arg1 and arg2 are the possible variables that need to be put into the + scope of this function for the tests to run properly. +*/ + +var createStatsCollector = require('../../lib/stats-collector'); -/** - * Creates a mock runner object. - * - * @param {string} runStr - argument that defines the runnerEvent - * @param {string} ifStr1 - runner event - * @param {(string|null)} [ifStr2] - runner event - * @param {(string|null)} [ifStr3] - runner event - * @param {(*|null)} [arg1] - variable to be added to event handler's scope - * @param {(*|null)} [arg2] - variable to be added to event handler's scope - * @return {Object} mock runner instance - */ function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { var runnerFunction = createRunnerFunction( runStr, @@ -34,20 +29,6 @@ function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { return mockRunner; } -/** - * Creates an event handler function to be used by the runner. - * - * @description - * Arguments 'ifStr1', 'ifStr2', and 'ifStr3' should be `Runner.constants`. - * - * @param {string} runStr - argument that defines the runnerEvent - * @param {string} ifStr1 - runner event - * @param {(string|null)} [ifStr2] - runner event - * @param {(string|null)} [ifStr3] - runner event - * @param {(*|null)} [arg1] - variable to be added to event handler's scope - * @param {(*|null)} [arg2] - variable to be added to event handler's scope - * @return {Function} event handler for the requested runner events - */ function createRunnerFunction(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { var test = null; switch (runStr) { @@ -197,35 +178,23 @@ function createRunReporterFunction(ctor) { * @return {string[]} Lines of output written to `stdout` */ var runReporter = function(stubSelf, runner, options, tee) { - var origStdoutWrite = process.stdout.write; - var stdoutWriteStub = sinon.stub(process.stdout, 'write'); var stdout = []; - var gather = function(chunk, enc, callback) { - stdout.push(chunk); + // Reassign stream in order to make a copy of all reporter output + var stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { + stdout.push(string); if (tee) { - origStdoutWrite.call(process.stdout, chunk); + stdoutWrite.call(process.stdout, string, enc, callback); } }; - // Reassign stream in order to make a copy of all reporter output - stdoutWriteStub.callsFake(gather); - - // Give `stubSelf` access to `ctor` prototype chain - Object.setPrototypeOf(stubSelf, ctor.prototype); + // Invoke reporter + ctor.call(stubSelf, runner, options); - try { - try { - // Invoke reporter - ctor.call(stubSelf, runner, options); - } finally { - // Revert stream reassignment here so reporter output - // can't be corrupted if any test assertions throw - stdoutWriteStub.restore(); - } - } catch (err) { - throw err; // Rethrow - } + // Revert stream reassignment here so reporter output + // can't be corrupted if any test assertions throw + process.stdout.write = stdoutWrite; return stdout; }; diff --git a/test/reporters/json-stream.spec.js b/test/reporters/json-stream.spec.js index de83f861b2..8c9fcfff35 100644 --- a/test/reporters/json-stream.spec.js +++ b/test/reporters/json-stream.spec.js @@ -1,22 +1,15 @@ 'use strict'; -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); var reporters = require('../../').reporters; -var utils = require('../../lib/utils'); - var JSONStream = reporters.JSONStream; -var createMockRunner = helpers.createMockRunner; -var dQuote = utils.dQuote; -var makeExpectedTest = helpers.makeExpectedTest; -var makeRunReporter = helpers.createRunReporterFunction; -var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var createMockRunner = require('./helpers').createMockRunner; +var makeExpectedTest = require('./helpers').makeExpectedTest; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('JSON Stream reporter', function() { + var runner; + var options = {}; var runReporter = makeRunReporter(JSONStream); var expectedTitle = 'some title'; var expectedFullTitle = 'full title'; @@ -34,126 +27,119 @@ describe('JSON Stream reporter', function() { message: expectedErrorMessage }; - describe('event handlers', function() { - describe("on 'start' event", function() { - it('should write stringified start with expected total', function() { - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - var expectedTotal = 12; - runner.total = expectedTotal; - var options = {}; - var stdout = runReporter({}, runner, options); + afterEach(function() { + runner = undefined; + }); - expect( - stdout[0], - 'to equal', - '["start",{"total":' + expectedTotal + '}]\n' - ); - }); + describe('on start', function() { + it('should write stringified start with expected total', function() { + runner = createMockRunner('start', 'start'); + var expectedTotal = 12; + runner.total = expectedTotal; + var stdout = runReporter({}, runner, options); + + expect( + stdout[0], + 'to equal', + '["start",{"total":' + expectedTotal + '}]\n' + ); + }); + }); + + describe('on pass', function() { + it('should write stringified test data', function() { + runner = createMockRunner('pass', 'pass', null, null, expectedTest); + var stdout = runReporter({}, runner, options); + + expect( + stdout[0], + 'to equal', + '["pass",{"title":"' + + expectedTitle + + '","fullTitle":"' + + expectedFullTitle + + '","duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + '}]\n' + ); }); + }); - describe("on 'pass' event", function() { - it('should write stringified test data', function() { - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, + describe('on fail', function() { + describe('if error stack exists', function() { + it('should write stringified test data with error data', function() { + expectedError.stack = expectedErrorStack; + runner = createMockRunner( + 'fail two args', + 'fail', null, null, - expectedTest + expectedTest, + expectedError ); - var options = {}; + var stdout = runReporter({}, runner, options); expect( stdout[0], 'to equal', - '["pass",{"title":' + - dQuote(expectedTitle) + - ',"fullTitle":' + - dQuote(expectedFullTitle) + - ',"duration":' + + '["fail",{"title":"' + + expectedTitle + + '","fullTitle":"' + + expectedFullTitle + + '","duration":' + expectedDuration + ',"currentRetry":' + currentRetry + - '}]\n' + ',"err":"' + + expectedErrorMessage + + '","stack":"' + + expectedErrorStack + + '"}]\n' ); }); }); - describe("on 'fail' event", function() { - describe('when error stack exists', function() { - it('should write stringified test data with error data', function() { - expectedError.stack = expectedErrorStack; - var runner = createMockRunner( - 'fail two args', - EVENT_TEST_FAIL, - null, - null, - expectedTest, - expectedError - ); - var options = {}; - var stdout = runReporter({}, runner, options); - - expect( - stdout[0], - 'to equal', - '["fail",{"title":' + - dQuote(expectedTitle) + - ',"fullTitle":' + - dQuote(expectedFullTitle) + - ',"duration":' + - expectedDuration + - ',"currentRetry":' + - currentRetry + - ',"err":' + - dQuote(expectedErrorMessage) + - ',"stack":' + - dQuote(expectedErrorStack) + - '}]\n' - ); - }); - }); + describe('if error stack does not exist', function() { + it('should write stringified test data with error data', function() { + expectedError.stack = null; + runner = createMockRunner( + 'fail two args', + 'fail', + null, + null, + expectedTest, + expectedError + ); - describe('when error stack does not exist', function() { - it('should write stringified test data with error data', function() { - expectedError.stack = null; - var runner = createMockRunner( - 'fail two args', - EVENT_TEST_FAIL, - null, - null, - expectedTest, - expectedError - ); - var options = {}; - var stdout = runReporter(this, runner, options); + var stdout = runReporter(this, runner, options); - expect( - stdout[0], - 'to equal', - '["fail",{"title":' + - dQuote(expectedTitle) + - ',"fullTitle":' + - dQuote(expectedFullTitle) + - ',"duration":' + - expectedDuration + - ',"currentRetry":' + - currentRetry + - ',"err":' + - dQuote(expectedErrorMessage) + - ',"stack":null}]\n' - ); - }); + expect( + stdout[0], + 'to equal', + '["fail",{"title":"' + + expectedTitle + + '","fullTitle":"' + + expectedFullTitle + + '","duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + ',"err":"' + + expectedErrorMessage + + '","stack":null}]\n' + ); }); }); + }); - describe("on 'end' event", function() { - it('should write summary statistics', function() { - var runner = createMockRunner('end', EVENT_RUN_END); - var options = {}; - var stdout = runReporter(this, runner, options); - expect(stdout[0], 'to match', /end/); - }); + describe('on end', function() { + it('should write end details', function() { + runner = createMockRunner('end', 'end'); + var stdout = runReporter(this, runner, options); + expect(stdout[0], 'to match', /end/); }); }); }); diff --git a/test/reporters/json.spec.js b/test/reporters/json.spec.js index f6299dd134..5d7a37c564 100644 --- a/test/reporters/json.spec.js +++ b/test/reporters/json.spec.js @@ -7,11 +7,8 @@ var Runner = Mocha.Runner; var Test = Mocha.Test; describe('JSON reporter', function() { - var sandbox; - var suite; - var runner; + var suite, runner; var testTitle = 'json test 1'; - var noop = function() {}; beforeEach(function() { var mocha = new Mocha({ @@ -19,18 +16,8 @@ describe('JSON reporter', function() { }); suite = new Suite('JSON suite', 'root'); runner = new Runner(suite); - var options = {}; /* eslint no-unused-vars: off */ - var mochaReporter = new mocha._reporter(runner, options); - }); - - beforeEach(function() { - sandbox = sinon.createSandbox(); - sandbox.stub(process.stdout, 'write').callsFake(noop); - }); - - afterEach(function() { - sandbox.restore(); + var mochaReporter = new mocha._reporter(runner); }); it('should have 1 test failure', function(done) { @@ -42,8 +29,9 @@ describe('JSON reporter', function() { }) ); + var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - sandbox.restore(); + stdoutWrite.restore(); expect(runner, 'to satisfy', { testResults: { failures: [ @@ -64,8 +52,9 @@ describe('JSON reporter', function() { it('should have 1 test pending', function(done) { suite.addTest(new Test(testTitle)); + var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - sandbox.restore(); + stdoutWrite.restore(); expect(runner, 'to satisfy', { testResults: { pending: [ @@ -94,8 +83,9 @@ describe('JSON reporter', function() { }) ); + var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - sandbox.restore(); + stdoutWrite.restore(); expect(runner, 'to satisfy', { testResults: { failures: [ diff --git a/test/reporters/landing.spec.js b/test/reporters/landing.spec.js index acb2ee3ef6..dd73d9e5b3 100644 --- a/test/reporters/landing.spec.js +++ b/test/reporters/landing.spec.js @@ -1,25 +1,20 @@ 'use strict'; -var sinon = require('sinon'); -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); -var reporters = require('../../').reporters; -var states = require('../../').Runnable.constants; - -var Base = reporters.Base; +var sandbox = require('sinon').createSandbox(); +var Mocha = require('../..'); +var reporters = Mocha.reporters; var Landing = reporters.Landing; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; - -var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_TEST_END = events.EVENT_TEST_END; +var constants = Mocha.Runnable.constants; +var STATE_FAILED = constants.STATE_FAILED; +var STATE_PASSED = constants.STATE_PASSED; +var Base = reporters.Base; -var STATE_FAILED = states.STATE_FAILED; -var STATE_PASSED = states.STATE_PASSED; +var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Landing reporter', function() { - var sandbox; + var runner; + var options = {}; var runReporter = makeRunReporter(Landing); var resetCode = '\u001b[0m'; var expectedArray = [ @@ -34,98 +29,73 @@ describe('Landing reporter', function() { ]; beforeEach(function() { - sandbox = sinon.createSandbox(); sandbox.stub(Base, 'useColors').value(false); sandbox.stub(Base.window, 'width').value(1); }); afterEach(function() { sandbox.restore(); + runner = undefined; }); - describe('event handlers', function() { - describe("on 'start' event", function() { - it('should write newlines', function() { - sandbox.stub(Base.cursor, 'hide'); + describe('on start', function() { + it('should write new lines', function() { + sandbox.stub(Base.cursor, 'hide'); - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - var options = {}; - var stdout = runReporter({}, runner, options); - sandbox.restore(); + runner = createMockRunner('start', 'start'); + var stdout = runReporter({}, runner, options); - expect(stdout[0], 'to equal', '\n\n\n '); - }); + expect(stdout[0], 'to equal', '\n\n\n '); + }); - it('should call cursor hide', function() { - var hideCursorStub = sandbox.stub(Base.cursor, 'hide'); + it('should call cursor hide', function() { + sandbox.stub(Base.cursor, 'hide'); - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - var options = {}; - runReporter({}, runner, options); - sandbox.restore(); + runner = createMockRunner('start', 'start'); + runReporter({}, runner, options); - expect(hideCursorStub.called, 'to be true'); - }); + expect(Base.cursor.hide, 'was called'); }); + }); - describe("on 'test end' event", function() { - describe('when test passes', function() { - it('should write expected landing strip', function() { - var test = { - state: STATE_PASSED - }; - var runner = createMockRunner( - 'test end', - EVENT_TEST_END, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({}, runner, options); - sandbox.restore(); - - expect(stdout, 'to equal', expectedArray); - }); + describe('on test end', function() { + describe('if test has failed', function() { + it('should write expected landing strip', function() { + var test = { + state: STATE_FAILED + }; + runner = createMockRunner('test end', 'test end', null, null, test); + runner.total = 12; + var stdout = runReporter({}, runner, options); + + expect(stdout, 'to equal', expectedArray); }); + }); + describe('if test has not failed', function() { + it('should write expected landing strip', function() { + var test = { + state: STATE_PASSED + }; + runner = createMockRunner('test end', 'test end', null, null, test); - describe('when test fails', function() { - it('should write expected landing strip', function() { - var test = { - state: STATE_FAILED - }; - var runner = createMockRunner( - 'test end', - EVENT_TEST_END, - null, - null, - test - ); - runner.total = 12; - var options = {}; - var stdout = runReporter({}, runner, options); - sandbox.restore(); - - expect(stdout, 'to equal', expectedArray); - }); + var stdout = runReporter({}, runner, options); + + expect(stdout, 'to equal', expectedArray); }); }); + }); + describe('on end', function() { + it('should call cursor show and epilogue', function() { + var reporterStub = {epilogue: function() {}}; + sandbox.stub(Base.cursor, 'show'); + sandbox.stub(reporterStub, 'epilogue'); - describe("on 'end' event", function() { - it('should call cursor show and epilogue', function() { - var showCursorStub = sandbox.stub(Base.cursor, 'show'); + runner = createMockRunner('end', 'end'); - var fakeThis = { - epilogue: sinon.spy() - }; - var runner = createMockRunner('end', EVENT_RUN_END); - var options = {}; - runReporter(fakeThis, runner, options); - sandbox.restore(); + runReporter(reporterStub, runner, options); - expect(fakeThis.epilogue.calledOnce, 'to be true'); - expect(showCursorStub.called, 'to be true'); - }); + expect(reporterStub.epilogue, 'was called'); + expect(Base.cursor.show, 'was called'); }); }); }); diff --git a/test/reporters/list.spec.js b/test/reporters/list.spec.js index c10272e953..c9eceb87fe 100644 --- a/test/reporters/list.spec.js +++ b/test/reporters/list.spec.js @@ -1,246 +1,144 @@ 'use strict'; -var sinon = require('sinon'); -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); +var sandbox = require('sinon').createSandbox(); var reporters = require('../../').reporters; - -var Base = reporters.Base; var List = reporters.List; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; +var Base = reporters.Base; -var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_TEST_BEGIN = events.EVENT_TEST_BEGIN; -var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; -var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; +var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('List reporter', function() { - var sandbox; + var runner; + var options = {}; var runReporter = makeRunReporter(List); var expectedTitle = 'some title'; var expectedDuration = 100; - var noop = function() {}; var test = { fullTitle: function() { return expectedTitle; }, duration: expectedDuration, - slow: noop + slow: function() {} }; beforeEach(function() { - sandbox = sinon.createSandbox(); sandbox.stub(Base, 'useColors').value(false); }); afterEach(function() { sandbox.restore(); + runner = undefined; }); - describe('event handlers', function() { - describe("on 'start' and 'test' events", function() { - it('should write expected newline and title', function() { - var runner = createMockRunner( - 'start test', - EVENT_RUN_BEGIN, - EVENT_TEST_BEGIN, - null, - test - ); - var options = {}; - var fakeThis = { - epilogue: noop - }; - var stdout = runReporter(fakeThis, runner, options); - sandbox.restore(); - - var startString = '\n'; - var testString = ' ' + expectedTitle + ': '; - var expectedArray = [startString, testString]; - expect(stdout, 'to equal', expectedArray); - }); + describe('on start and test', function() { + it('should write expected new line and title to the console', function() { + runner = createMockRunner('start test', 'start', 'test', null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + + var startString = '\n'; + var testString = ' ' + expectedTitle + ': '; + var expectedArray = [startString, testString]; + expect(stdout, 'to equal', expectedArray); }); + }); + describe('on pending', function() { + it('should write expected title to the console', function() { + runner = createMockRunner('pending test', 'pending', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); - describe("on 'pending' event", function() { - it('should write expected title', function() { - var runner = createMockRunner( - 'pending test', - EVENT_TEST_PENDING, - null, - null, - test - ); - var options = {}; - var fakeThis = { - epilogue: noop - }; - var stdout = runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n'); - }); + expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n'); }); + }); + describe('on pass', function() { + it('should call cursor CR', function() { + sandbox.stub(Base.cursor, 'CR'); - describe("on 'pass' event", function() { - var crStub; - - beforeEach(function() { - crStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); - }); - - it('should call cursor CR', function() { - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - var fakeThis = { - epilogue: noop - }; - runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect(crStub.called, 'to be true'); - }); - - it('should write expected symbol, title, and duration', function() { - var expectedOkSymbol = 'OK'; - sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol); - - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - var fakeThis = { - epilogue: noop - }; - var stdout = runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect( - stdout[0], - 'to be', - ' ' + - expectedOkSymbol + - ' ' + - expectedTitle + - ': ' + - expectedDuration + - 'ms\n' - ); - }); + runner = createMockRunner('pass', 'pass', null, null, test); + runReporter({epilogue: function() {}}, runner, options); + + expect(Base.cursor.CR, 'was called'); + }); + it('should write expected symbol, title and duration to the console', function() { + var expectedOkSymbol = 'OK'; + sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol); + sandbox.stub(Base.cursor, 'CR'); + + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + + expect( + stdout[0], + 'to be', + ' ' + + expectedOkSymbol + + ' ' + + expectedTitle + + ': ' + + expectedDuration + + 'ms\n' + ); }); + }); + describe('on fail', function() { + it('should call cursor CR', function() { + sandbox.stub(Base.cursor, 'CR'); + + runner = createMockRunner('fail', 'fail', null, null, test); + runReporter({epilogue: function() {}}, runner, options); - describe("on 'fail' event", function() { - var crStub; - - beforeEach(function() { - crStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); - }); - - it('should call cursor CR', function() { - var runner = createMockRunner( - 'fail', - EVENT_TEST_FAIL, - null, - null, - test - ); - var options = {}; - var fakeThis = { - epilogue: noop - }; - runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect(crStub.called, 'to be true'); - }); - - it('should write expected error number and title', function() { - var expectedErrorCount = 1; - var runner = createMockRunner( - 'fail', - EVENT_TEST_FAIL, - null, - null, - test - ); - var options = {}; - var fakeThis = { - epilogue: noop - }; - var stdout = runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect( - stdout[0], - 'to be', - ' ' + expectedErrorCount + ') ' + expectedTitle + '\n' - ); - }); - - it('should immediately construct fail strings', function() { - var actual = {a: 'actual'}; - var expected = {a: 'expected'}; - var checked = false; - var err; - test = {}; - - var runner = createMockRunner( - 'fail', - EVENT_TEST_FAIL, - null, - null, - test - ); - runner.on = runner.once = function(event, callback) { - if ( - !checked && - event === 'fail' && - callback.toString().includes('stringifyDiffObjs') // target correct fail event callback - ) { - err = new Error('fake failure object with actual/expected'); - err.actual = actual; - err.expected = expected; - err.showDiff = true; - callback(test, err); - checked = true; - } - }; - var options = {}; - var fakeThis = { - epilogue: noop - }; - runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect(typeof err.actual, 'to be', 'string'); - expect(typeof err.expected, 'to be', 'string'); - }); + expect(Base.cursor.CR, 'was called'); + }); + it('should write expected error number and title', function() { + sandbox.stub(Base.cursor, 'CR'); + + var expectedErrorCount = 1; + runner = createMockRunner('fail', 'fail', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + + expect( + stdout[0], + 'to be', + ' ' + expectedErrorCount + ') ' + expectedTitle + '\n' + ); + }); + it('should immediately construct fail strings', function() { + var actual = {a: 'actual'}; + var expected = {a: 'expected'}; + var checked = false; + var err; + test = {}; + runner = createMockRunner('fail', 'fail', null, null, test); + runner.on = runner.once = function(event, callback) { + if ( + !checked && + event === 'fail' && + callback.toString().includes('stringifyDiffObjs') // target correct fail event callback + ) { + err = new Error('fake failure object with actual/expected'); + err.actual = actual; + err.expected = expected; + err.showDiff = true; + callback(test, err); + checked = true; + } + }; + runReporter({epilogue: function() {}}, runner, options); + + expect(typeof err.actual, 'to be', 'string'); + expect(typeof err.expected, 'to be', 'string'); }); + }); + + describe('on end', function() { + it('should call epilogue', function() { + var reporterStub = {epilogue: function() {}}; + sandbox.stub(reporterStub, 'epilogue'); + + runner = createMockRunner('end', 'end'); + runReporter(reporterStub, runner, options); - describe("on 'end' event", function() { - it('should call epilogue', function() { - var runner = createMockRunner('end', EVENT_RUN_END); - var options = {}; - var fakeThis = { - epilogue: sinon.spy() - }; - runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect(fakeThis.epilogue.calledOnce, 'to be true'); - }); + expect(reporterStub.epilogue, 'was called'); }); }); }); diff --git a/test/reporters/markdown.spec.js b/test/reporters/markdown.spec.js index e068c58cea..842d7c7643 100644 --- a/test/reporters/markdown.spec.js +++ b/test/reporters/markdown.spec.js @@ -1,115 +1,102 @@ 'use strict'; -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); var reporters = require('../../').reporters; - var Markdown = reporters.Markdown; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; -var EVENT_SUITE_END = events.EVENT_SUITE_END; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Markdown reporter', function() { + var runner; + var options = {}; var runReporter = makeRunReporter(Markdown); var expectedTitle = 'expected title'; var expectedFullTitle = 'full title'; var sluggedFullTitle = 'full-title'; - var noop = function() {}; - describe('event handlers', function() { - describe("on 'suite' event", function() { - it("should write expected slugged titles on 'end' event", function() { - var expectedSuite = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [ - { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [] - } - ] - }; - var runner = createMockRunner( - 'suite suite end', - EVENT_SUITE_BEGIN, - EVENT_SUITE_END, - EVENT_RUN_END, - expectedSuite - ); - runner.suite = expectedSuite; - var options = {}; - var stdout = runReporter({}, runner, options); + afterEach(function() { + runner = undefined; + }); - var expectedArray = [ - '# TOC\n', - ' - [' + - expectedTitle + - '](#' + - sluggedFullTitle + - ')\n - [' + - expectedTitle + - '](#' + - sluggedFullTitle + - ')\n', - '\n ' + expectedTitle + '\n' - ]; + describe("on 'suite'", function() { + it("should write expected slugged titles on 'end' event", function() { + var expectedSuite = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [ + { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [] + } + ] + }; + runner = createMockRunner( + 'suite suite end', + 'suite', + 'suite end', + 'end', + expectedSuite + ); + runner.suite = expectedSuite; + var stdout = runReporter({}, runner, options); - expect(stdout, 'to equal', expectedArray); - }); - }); + var expectedArray = [ + '# TOC\n', + ' - [' + + expectedTitle + + '](#' + + sluggedFullTitle + + ')\n - [' + + expectedTitle + + '](#' + + sluggedFullTitle + + ')\n', + '\n ' + expectedTitle + '\n' + ]; - describe("on 'pass' event", function() { - it("should write test code inside js code block, on 'end' event", function() { - var expectedSuite = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [] - }; - var expectedDuration = 1000; - var currentRetry = 1; - var expectedBody = 'some body'; - var expectedTest = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - duration: expectedDuration, - currentRetry: function() { - return currentRetry; - }, - slow: noop, - body: expectedBody - }; - var runner = createMockRunner( - 'pass end', - EVENT_TEST_PASS, - EVENT_RUN_END, - null, - expectedTest - ); - runner.suite = expectedSuite; - var options = {}; - var stdout = runReporter({}, runner, options); + expect(stdout, 'to equal', expectedArray); + }); + }); + describe("on 'pass'", function() { + it("should write test code inside js code block, on 'end' event", function() { + var expectedSuite = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [] + }; + var expectedDuration = 1000; + var currentRetry = 1; + var expectedBody = 'some body'; + var expectedTest = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + duration: expectedDuration, + currentRetry: function() { + return currentRetry; + }, + slow: function() {}, + body: expectedBody + }; + runner = createMockRunner('pass end', 'pass', 'end', null, expectedTest); + runner.suite = expectedSuite; + var stdout = runReporter({}, runner, options); - var expectedArray = [ - '# TOC\n', - ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n', - expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n' - ]; + var expectedArray = [ + '# TOC\n', + ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n', + expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n' + ]; - expect(stdout, 'to equal', expectedArray); - }); + expect(stdout, 'to equal', expectedArray); }); }); }); diff --git a/test/reporters/min.spec.js b/test/reporters/min.spec.js index 1fe46333cf..f88adf31d7 100644 --- a/test/reporters/min.spec.js +++ b/test/reporters/min.spec.js @@ -1,47 +1,45 @@ 'use strict'; -var sinon = require('sinon'); -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); var reporters = require('../../').reporters; - var Min = reporters.Min; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; -var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; -var EVENT_RUN_END = events.EVENT_RUN_END; +var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Min reporter', function() { + var runner; + var options = {}; var runReporter = makeRunReporter(Min); - var noop = function() {}; - - describe('event handlers', function() { - describe("on 'start' event", function() { - it('should clear screen then set cursor position', function() { - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - var options = {}; - var fakeThis = { - epilogue: noop - }; - var stdout = runReporter(fakeThis, runner, options); - - var expectedArray = ['\u001b[2J', '\u001b[1;3H']; - expect(stdout, 'to equal', expectedArray); - }); + + afterEach(function() { + runner = undefined; + }); + + describe('on start', function() { + it('should clear screen then set cursor position', function() { + runner = createMockRunner('start', 'start'); + var stdout = runReporter({epilogue: function() {}}, runner, options); + + var expectedArray = ['\u001b[2J', '\u001b[1;3H']; + expect(stdout, 'to equal', expectedArray); }); + }); - describe("on 'end' event", function() { - it('should call epilogue', function() { - var fakeThis = { - epilogue: sinon.stub().callsFake(noop) - }; - var runner = createMockRunner('end', EVENT_RUN_END); - var options = {}; - runReporter(fakeThis, runner, options); - - expect(fakeThis.epilogue.called, 'to be true'); - }); + describe('on end', function() { + it('should call epilogue', function() { + var calledEpilogue = false; + runner = createMockRunner('end', 'end'); + runReporter( + { + epilogue: function() { + calledEpilogue = true; + } + }, + runner, + options + ); + + expect(calledEpilogue, 'to be', true); }); }); }); diff --git a/test/reporters/nyan.spec.js b/test/reporters/nyan.spec.js index 05d2e1bf77..b1ad3a22a3 100644 --- a/test/reporters/nyan.spec.js +++ b/test/reporters/nyan.spec.js @@ -1,205 +1,172 @@ 'use strict'; -var sinon = require('sinon'); -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); +var sandbox = require('sinon').createSandbox(); var reporters = require('../../').reporters; - -var Base = reporters.Base; var NyanCat = reporters.Nyan; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; +var Base = reporters.Base; -var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; -var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; +var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Nyan reporter', function() { - var sandbox; - var noop = function() {}; - - beforeEach(function() { - sandbox = sinon.createSandbox(); - }); - - afterEach(function() { - sandbox.restore(); - }); - - describe('event handlers', function() { + describe('events', function() { + var runner; + var options = {}; var runReporter = makeRunReporter(NyanCat); - describe("on 'start' event", function() { + afterEach(function() { + sandbox.restore(); + runner = undefined; + }); + + describe('on start', function() { it('should call draw', function() { - var fakeThis = { - draw: sinon.stub().callsFake(noop), - generateColors: noop + var reporterStub = { + draw: function() {}, + generateColors: function() {} }; + sandbox.stub(reporterStub, 'draw'); - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - var options = {}; - runReporter(fakeThis, runner, options); + runner = createMockRunner('start', 'start'); + runReporter(reporterStub, runner, options); - expect(fakeThis.draw.called, 'to be true'); + expect(reporterStub.draw, 'was called'); }); }); - - describe("on 'pending' event", function() { + describe('on pending', function() { it('should call draw', function() { - var fakeThis = { - draw: sinon.stub().callsFake(noop), - generateColors: noop + var reporterStub = { + draw: function() {}, + generateColors: function() {} }; - var runner = createMockRunner('pending', EVENT_TEST_PENDING); - var options = {}; - runReporter(fakeThis, runner, options); + sandbox.stub(reporterStub, 'draw'); - expect(fakeThis.draw.called, 'to be true'); + runner = createMockRunner('pending', 'pending'); + runReporter(reporterStub, runner, options); + + expect(reporterStub.draw, 'was called'); }); }); - - describe("on 'pass' event", function() { + describe('on pass', function() { it('should call draw', function() { + var reporterStub = { + draw: function() {}, + generateColors: function() {} + }; + sandbox.stub(reporterStub, 'draw'); + var test = { duration: '', - slow: noop + slow: function() {} }; - var fakeThis = { - draw: sinon.stub().callsFake(noop), - generateColors: noop - }; - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - runReporter(fakeThis, runner, options); + runner = createMockRunner('pass', 'pass', null, null, test); + runReporter(reporterStub, runner, options); - expect(fakeThis.draw.called, 'to be true'); + expect(reporterStub.draw, 'was called'); }); }); - - describe("on 'fail' event", function() { + describe('on fail', function() { it('should call draw', function() { + var reporterStub = { + draw: function() {}, + generateColors: function() {} + }; + sandbox.stub(reporterStub, 'draw'); + var test = { err: '' }; - var fakeThis = { - draw: sinon.stub().callsFake(noop), - generateColors: noop - }; - var runner = createMockRunner( - 'fail', - EVENT_TEST_FAIL, - null, - null, - test - ); - var options = {}; - runReporter(fakeThis, runner, options); + runner = createMockRunner('fail', 'fail', null, null, test); + runReporter(reporterStub, runner, options); - expect(fakeThis.draw.called, 'to be true'); + expect(reporterStub.draw, 'was called'); }); }); - - describe("on 'end' event", function() { + describe('on end', function() { it('should call epilogue', function() { - var fakeThis = { - draw: noop, - epilogue: sinon.stub().callsFake(noop), - generateColors: noop + var reporterStub = { + draw: function() {}, + generateColors: function() {}, + epilogue: function() {} }; - var runner = createMockRunner('end', EVENT_RUN_END); - var options = {}; - runReporter(fakeThis, runner, options); + sandbox.stub(reporterStub, 'epilogue'); - expect(fakeThis.epilogue.called, 'to be true'); - }); + runner = createMockRunner('end', 'end'); + runReporter(reporterStub, runner, options); - it('should write numberOfLines amount of newlines', function() { + expect(reporterStub.epilogue, 'was called'); + }); + it('should write numberOfLines amount of new lines', function() { var expectedNumberOfLines = 4; - var fakeThis = { - draw: noop, - epilogue: noop, - generateColors: noop - }; - var runner = createMockRunner('end', EVENT_RUN_END); - var options = {}; - var stdout = runReporter(fakeThis, runner, options); + runner = createMockRunner('end', 'end'); + var stdout = runReporter( + { + draw: function() {}, + generateColors: function() {}, + epilogue: function() {} + }, + runner, + options + ); - var isBlankLine = function(value) { + var arrayOfNewlines = stdout.filter(function(value) { return value === '\n'; - }; + }); - expect( - stdout.filter(isBlankLine), - 'to have length', - expectedNumberOfLines - ); + expect(arrayOfNewlines, 'to have length', expectedNumberOfLines); }); - it('should call Base show', function() { - var showCursorStub = sandbox.stub(Base.cursor, 'show'); - var fakeThis = { - draw: noop, - epilogue: noop, - generateColors: noop - }; - var runner = createMockRunner('end', EVENT_RUN_END); - var options = {}; - runReporter(fakeThis, runner, options); - sandbox.restore(); + sandbox.stub(Base.cursor, 'show'); + + runner = createMockRunner('end', 'end'); + runReporter( + { + draw: function() {}, + generateColors: function() {}, + epilogue: function() {} + }, + runner, + options + ); - expect(showCursorStub.called, 'to be true'); + expect(Base.cursor.show, 'was called'); }); }); }); - describe('#draw', function() { - var stdoutWriteStub; + describe('draw', function() { var stdout; + var stdoutWrite; beforeEach(function() { - stdoutWriteStub = sandbox.stub(process.stdout, 'write'); - stdoutWriteStub.callsFake(function(chunk, encoding, cb) { - stdout.push(chunk); - }); stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { + stdout.push(string); + }; }); - describe("when 'tick' is false", function() { + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe('if tick is false', function() { it('should draw face with expected spaces, _ and ^', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; - var fakeThis = { + + nyanCat.draw.call({ tick: false, - appendRainbow: noop, - rainbowify: noop, - drawScoreboard: noop, - drawRainbow: noop, + appendRainbow: function() {}, + rainbowify: function() {}, + drawScoreboard: function() {}, + drawRainbow: function() {}, drawNyanCat: NyanCat.prototype.drawNyanCat, scoreboardWidth: 0, trajectories: [[]], - face: noop, - cursorUp: noop - }; - - try { - try { - nyanCat.draw.call(fakeThis); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } + face: function() {}, + cursorUp: function() {} + }); var expectedArray = [ '\u001b[0C', @@ -218,35 +185,23 @@ describe('Nyan reporter', function() { expect(stdout, 'to equal', expectedArray); }); }); - - describe("when 'tick' is true", function() { + describe('if tick is true', function() { it('should draw face with expected spaces, _ and ~', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; - var fakeThis = { + + nyanCat.draw.call({ tick: true, - appendRainbow: noop, - rainbowify: noop, - drawScoreboard: noop, - drawRainbow: noop, + appendRainbow: function() {}, + rainbowify: function() {}, + drawScoreboard: function() {}, + drawRainbow: function() {}, drawNyanCat: NyanCat.prototype.drawNyanCat, scoreboardWidth: 0, trajectories: [[]], - face: noop, - cursorUp: noop - }; - - try { - try { - nyanCat.draw.call(fakeThis); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } + face: function() {}, + cursorUp: function() {} + }); var expectedArray = [ '\u001b[0C', @@ -267,136 +222,102 @@ describe('Nyan reporter', function() { }); }); - describe('#cursorDown', function() { - var stdoutWriteStub; + describe('cursorDown', function() { var stdout; + var stdoutWrite; beforeEach(function() { - stdoutWriteStub = sandbox.stub(process.stdout, 'write'); - stdoutWriteStub.callsFake(function(chunk, encoding, cb) { - stdout.push(chunk); - }); stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string) { + stdout.push(string); + }; + }); + + afterEach(function() { + process.stdout.write = stdoutWrite; }); it('should write cursor down interaction with expected number', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedNumber = 25; - try { - try { - nyanCat.cursorDown(expectedNumber); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } - + nyanCat.cursorDown(expectedNumber); var expectedArray = ['\u001b[' + expectedNumber + 'B']; expect(stdout, 'to equal', expectedArray); }); }); - describe('#cursorUp', function() { - var stdoutWriteStub; + describe('cursorUp', function() { var stdout; + var stdoutWrite; beforeEach(function() { - stdoutWriteStub = sandbox.stub(process.stdout, 'write'); - stdoutWriteStub.callsFake(function(chunk, encoding, cb) { - stdout.push(chunk); - }); stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { + stdout.push(string); + }; + }); + + afterEach(function() { + process.stdout.write = stdoutWrite; }); it('should write cursor up interaction with expected number', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedNumber = 25; - try { - try { - nyanCat.cursorUp(expectedNumber); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } - + nyanCat.cursorUp(expectedNumber); var expectedArray = ['\u001b[' + expectedNumber + 'A']; expect(stdout, 'to equal', expectedArray); }); }); - describe('#rainbowify', function() { - var useColorsStub; - - beforeEach(function() { - useColorsStub = sandbox.stub(Base, 'useColors'); - }); - - afterEach(function() { - sandbox.restore(); - }); - - describe("when 'useColors' is false", function() { + describe('rainbowify', function() { + describe('useColors is false', function() { beforeEach(function() { - useColorsStub.value(false); + sandbox.stub(Base, 'useColors').value(false); }); it('should return argument string', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); - - var inputString = 'hello'; - var outputString = nyanCat.rainbowify(inputString); - sandbox.restore(); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var expectedString = 'hello'; + var outputString = nyanCat.rainbowify(expectedString); - var expectedString = inputString; expect(outputString, 'to be', expectedString); }); }); - - describe("when 'useColors' is true", function() { + describe('useColors is true', function() { beforeEach(function() { - useColorsStub.value(true); + sandbox.stub(Base, 'useColors').value(true); }); it('should return rainbowified string from the given string and predefined codes', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); - - var inputString = 'hello'; - var colorCode = 'somecode'; - var fakeThis = { - rainbowColors: [colorCode], - colorIndex: 0 - }; - var outputString = nyanCat.rainbowify.call(fakeThis, inputString); - sandbox.restore(); - var startCode = '\u001b[38;5;'; var endCode = '\u001b[0m'; - var expectedString = - startCode + colorCode + 'm' + inputString + endCode; - expect(outputString, 'to be', expectedString); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var expectedString = 'hello'; + var colorCode = 'somecode'; + var expectedRainbowifyString = + startCode + colorCode + 'm' + expectedString + endCode; + var outputString = nyanCat.rainbowify.call( + { + rainbowColors: [colorCode], + colorIndex: 0 + }, + expectedString + ); + + expect(outputString, 'to be', expectedRainbowifyString); }); }); }); - describe('#appendRainbow', function() { - describe("when 'tick' is true", function() { - it('should set an underscore segment', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + describe('appendRainbow', function() { + describe('if tick is true', function() { + it('should set an _ segment', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedSegment; var inputArray = []; var trajectories = [inputArray, inputArray, inputArray, inputArray]; @@ -412,11 +333,8 @@ describe('Nyan reporter', function() { expect(expectedSegment, 'to be', '_'); }); - - it('should shift each trajectory item if its length is greater than or equal to its max width', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + it('should shift each trajectory item, if its length is greater of equal to its max width', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var rainbowifyResult = 'rainbowify'; var inputArray = ['itemToShify']; @@ -441,12 +359,9 @@ describe('Nyan reporter', function() { expect(trajectories, 'to equal', expectedTrajectories); }); }); - - describe("when 'tick' is false", function() { - it('should set a dash segment', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + describe('if tick is false', function() { + it('should set an - segment', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedSegment; var inputArray = []; var trajectories = [inputArray, inputArray, inputArray, inputArray]; @@ -465,45 +380,42 @@ describe('Nyan reporter', function() { }); }); - describe('#drawScoreboard', function() { + describe('drawScoreboard', function() { + var stdoutWrite; var stdout; + var cachedColor; + var showOutput = false; beforeEach(function() { - sandbox.stub(Base, 'color').callsFake(function(type, n) { - return type + n; - }); - var stdoutWriteStub = sandbox.stub(process.stdout, 'write'); - stdoutWriteStub.callsFake(function(chunk, encoding, cb) { - stdout.push(chunk); - }); stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { + stdout.push(string); + if (showOutput) { + stdoutWrite.call(process.stdout, string, enc, callback); + } + }; + cachedColor = Base.color; + Base.color = function(type, n) { + return type + n; + }; }); - it('should write scoreboard with color set with each stat', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + afterEach(function() { + process.stdout.write = stdoutWrite; + Base.color = cachedColor; + }); + it('should write scoreboard with color set with each stat', function() { var passes = 2; var pending = 1; var failures = 1; - - var fakeThis = { - cursorUp: noop, + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.drawScoreboard.call({ + cursorUp: function() {}, stats: {passes: passes, pending: pending, failures: failures}, numberOfLines: 4 - }; - - try { - try { - nyanCat.drawScoreboard.call(fakeThis); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } - + }); var expectedArray = [ ' ', 'green' + passes, @@ -520,40 +432,40 @@ describe('Nyan reporter', function() { }); it('should call cursorUp with given numberOfLines', function() { + var expectedCursorArgument = null; var expectedNumberOfLines = 1000; - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); - var fakeThis = { - cursorUp: sinon.spy(), + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.drawScoreboard.call({ + cursorUp: function(lines) { + expectedCursorArgument = lines; + }, stats: {passes: 0, pending: 0, failures: 0}, numberOfLines: expectedNumberOfLines - }; - - try { - try { - nyanCat.drawScoreboard.call(fakeThis); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } + }); - expect(fakeThis.cursorUp.calledWith(expectedNumberOfLines), 'to be true'); + expect(expectedCursorArgument, 'to be', expectedNumberOfLines); }); }); - describe('#drawRainbow', function() { + describe('drawRainbow', function() { + var stdoutWrite; var stdout; + var showOutput = false; beforeEach(function() { - var stdoutWriteStub = sandbox.stub(process.stdout, 'write'); - stdoutWriteStub.callsFake(function(chunk, encoding, cb) { - stdout.push(chunk); - }); stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { + stdout.push(string); + if (showOutput) { + stdoutWrite.call(process.stdout, string, enc, callback); + } + }; + }); + + afterEach(function() { + process.stdout.write = stdoutWrite; }); it('should write width, contents and newline for each trajectory', function() { @@ -562,25 +474,13 @@ describe('Nyan reporter', function() { var expectedContents = 'input'; var inputArray = [expectedContents]; var trajectories = [inputArray]; - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); - var fakeThis = { - cursorUp: noop, + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.drawRainbow.call({ + cursorUp: function() {}, trajectories: trajectories, scoreboardWidth: expectedWidth, numberOfLines: 1 - }; - - try { - try { - nyanCat.drawRainbow.call(fakeThis); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } + }); var expectedArray = [ '\u001b[' + expectedWidth + 'C', @@ -594,66 +494,41 @@ describe('Nyan reporter', function() { var expectedCursorArgument = null; var expectedNumberOfLines = 1000; - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); - var fakeThis = { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.drawRainbow.call({ cursorUp: function(lines) { expectedCursorArgument = lines; }, trajectories: [['input']], scoreboardWidth: 1, numberOfLines: expectedNumberOfLines - }; - - try { - try { - nyanCat.drawRainbow.call(fakeThis); - } finally { - sandbox.restore(); - } - } catch (err) { - throw err; // Rethrow - } + }); expect(expectedCursorArgument, 'to be', expectedNumberOfLines); }); }); - - describe('#face', function() { - it('should expect "( x .x)" if any failures', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + describe('face', function() { + it('expected face:(x .x) when "failures" at least one', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.stats = {passes: 2, pending: 1, failures: 1}; - expect(nyanCat.face(), 'to be', '( x .x)'); }); - it('should expect "( o .o)" if any pending but none failing', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + it('expected face:(x .x) when "pending" at least one and no failing', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; - expect(nyanCat.face(), 'to be', '( o .o)'); }); - it('should expect "( ^ .^)" if all passing', function() { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + it('expected face:(^ .^) when "passing" only', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.stats = {passes: 1, pending: 0, failures: 0}; - expect(nyanCat.face(), 'to be', '( ^ .^)'); }); - it('should expect "( - .-)" otherwise', function(done) { - var runner = {on: noop, once: noop}; - var options = {}; - var nyanCat = new NyanCat(runner, options); + it('expected face:(- .-) when otherwise', function(done) { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.stats = {passes: 0, pending: 0, failures: 0}; - expect(nyanCat.face(), 'to be', '( - .-)'); done(); }); diff --git a/test/reporters/progress.spec.js b/test/reporters/progress.spec.js index 0d45abeaf7..cdea9c643e 100644 --- a/test/reporters/progress.spec.js +++ b/test/reporters/progress.spec.js @@ -1,117 +1,107 @@ 'use strict'; -var sinon = require('sinon'); -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); +var sandbox = require('sinon').createSandbox(); var reporters = require('../../').reporters; - -var Base = reporters.Base; var Progress = reporters.Progress; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; +var Base = reporters.Base; -var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_TEST_END = events.EVENT_TEST_END; +var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Progress reporter', function() { - var sandbox; + var stdout; + var stdoutWrite; + var runner; var runReporter = makeRunReporter(Progress); - var noop = function() {}; beforeEach(function() { - sandbox = sinon.createSandbox(); + stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { + stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); + }; }); afterEach(function() { sandbox.restore(); + process.stdout.write = stdoutWrite; }); - describe('event handlers', function() { - describe("on 'start' event", function() { - it('should call cursor hide', function() { - var hideCursorStub = sandbox.stub(Base.cursor, 'hide'); + describe('on start', function() { + it('should call cursor hide', function() { + sandbox.stub(Base.cursor, 'hide'); - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - var options = {}; - runReporter({}, runner, options); - sandbox.restore(); + runner = createMockRunner('start', 'start'); + runReporter({}, runner, {}); - expect(hideCursorStub.called, 'to be true'); - }); + expect(Base.cursor.hide, 'was called'); }); + }); - describe("on 'test end' event", function() { - describe('when line has changed', function() { - it('should write expected progress of open and close options', function() { - var crCursorStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); - sandbox.stub(Base, 'useColors').value(false); - sandbox.stub(Base.window, 'width').value(5); - - var expectedTotal = 12; - var expectedOpen = 'OpEn'; - var expectedClose = 'cLoSe'; - var expectedIncomplete = 'iNcOmPlEtE'; - var expectedOptions = { - open: expectedOpen, - complete: 'cOmPlEtE', - incomplete: expectedIncomplete, - close: expectedClose - }; - - var runner = createMockRunner('test end', EVENT_TEST_END); - runner.total = expectedTotal; - var options = { - reporterOptions: expectedOptions - }; - var stdout = runReporter({}, runner, options); - sandbox.restore(); - - var expectedArray = [ - '\u001b[J', - ' ' + expectedOpen, - '', - expectedIncomplete, - expectedClose - ]; - - expect(crCursorStub.called, 'to be true'); - expect(stdout, 'to equal', expectedArray); - }); - }); + describe('on test end', function() { + describe('if line has not changed', function() { + it('should return and not write anything', function() { + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.cursor, 'CR'); + sandbox.stub(Base.window, 'width').value(-3); - describe('when line has not changed', function() { - it('should not write anything', function() { - sandbox.stub(Base, 'useColors').value(false); - sandbox.stub(Base.cursor, 'CR').callsFake(noop); - sandbox.stub(Base.window, 'width').value(-3); - - var expectedTotal = 1; - var runner = createMockRunner('test end', EVENT_TEST_END); - runner.total = expectedTotal; - var options = {}; - var stdout = runReporter({}, runner, options); - sandbox.restore(); - - expect(stdout, 'to equal', []); - }); + var expectedTotal = 1; + var expectedOptions = {}; + runner = createMockRunner('test end', 'test end'); + runner.total = expectedTotal; + var stdout = runReporter({}, runner, expectedOptions); + + expect(stdout, 'to equal', []); }); }); - - describe("on 'end' event", function() { - it('should call cursor show and epilogue', function() { - var showCursorStub = sandbox.stub(Base.cursor, 'show'); - var fakeThis = { - epilogue: sinon.spy() + describe('if line has changed', function() { + it('should write expected progress of open and close options', function() { + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.cursor, 'CR'); + sandbox.stub(Base.window, 'width').value(5); + + var expectedTotal = 12; + var expectedOpen = 'OpEn'; + var expectedClose = 'cLoSe'; + var expectedIncomplete = 'iNcOmPlEtE'; + var expectedOptions = { + open: expectedOpen, + complete: 'cOmPlEtE', + incomplete: expectedIncomplete, + close: expectedClose }; - var runner = createMockRunner('end', EVENT_RUN_END); - var options = {}; - runReporter(fakeThis, runner, options); - sandbox.restore(); - - expect(fakeThis.epilogue.calledOnce, 'to be true'); - expect(showCursorStub.called, 'to be true'); + var options = { + reporterOptions: expectedOptions + }; + runner = createMockRunner('test end', 'test end'); + runner.total = expectedTotal; + var stdout = runReporter({}, runner, options); + + var expectedArray = [ + '\u001b[J', + ' ' + expectedOpen, + '', + expectedIncomplete, + expectedClose + ]; + expect(Base.cursor.CR, 'was called'); + expect(stdout, 'to equal', expectedArray); }); }); }); + + describe('on end', function() { + it('should call cursor show and epilogue', function() { + var reporterStub = {epilogue: function() {}}; + sandbox.stub(Base.cursor, 'show'); + sandbox.stub(reporterStub, 'epilogue'); + + runner = createMockRunner('end', 'end'); + runReporter(reporterStub, runner, {}); + + expect(reporterStub.epilogue, 'was called'); + expect(Base.cursor.show, 'was called'); + }); + }); }); diff --git a/test/reporters/spec.spec.js b/test/reporters/spec.spec.js index 608bc7f512..5f7584e33e 100644 --- a/test/reporters/spec.spec.js +++ b/test/reporters/spec.spec.js @@ -1,163 +1,104 @@ 'use strict'; -var sinon = require('sinon'); -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); var reporters = require('../../').reporters; - -var Base = reporters.Base; var Spec = reporters.Spec; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; +var Base = reporters.Base; -var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; -var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; -var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; +var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('Spec reporter', function() { + var runner; + var options = {}; var runReporter = makeRunReporter(Spec); + var useColors; var expectedTitle = 'expectedTitle'; - var noop = function() {}; - var sandbox; beforeEach(function() { - sandbox = sinon.createSandbox(); - sandbox.stub(Base, 'useColors').value(false); + useColors = Base.useColors; + Base.useColors = false; }); afterEach(function() { - sandbox.restore(); + Base.useColors = useColors; + runner = undefined; }); - describe('event handlers', function() { - describe("on 'suite' event", function() { - it('should return title', function() { - var suite = { - title: expectedTitle - }; - var runner = createMockRunner( - 'suite', - EVENT_SUITE_BEGIN, - null, - null, - suite - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedArray = [expectedTitle + '\n']; - expect(stdout, 'to equal', expectedArray); - }); + describe('on suite', function() { + it('should return title', function() { + var suite = { + title: expectedTitle + }; + runner = createMockRunner('suite', 'suite', null, null, suite); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedArray = [expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); }); - - describe("on 'pending' event", function() { - it('should return title', function() { - var suite = { - title: expectedTitle - }; - var runner = createMockRunner( - 'pending test', - EVENT_TEST_PENDING, - null, - null, - suite - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedArray = [' - ' + expectedTitle + '\n']; - expect(stdout, 'to equal', expectedArray); - }); + }); + describe('on pending', function() { + it('should return title', function() { + var suite = { + title: expectedTitle + }; + runner = createMockRunner('pending test', 'pending', null, null, suite); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedArray = [' - ' + expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); }); - - describe("on 'pass' event", function() { - describe('when test speed is slow', function() { - it('should return expected tick, title, and duration', function() { - var expectedDuration = 2; - var test = { - title: expectedTitle, - duration: expectedDuration, - slow: function() { - return 1; - } - }; - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedString = - ' ' + - Base.symbols.ok + - ' ' + - expectedTitle + - ' (' + - expectedDuration + - 'ms)' + - '\n'; - expect(stdout[0], 'to be', expectedString); - }); - }); - - describe('when test speed is fast', function() { - it('should return expected tick, title without a duration', function() { - var expectedDuration = 1; - var test = { - title: expectedTitle, - duration: expectedDuration, - slow: function() { - return 2; - } - }; - var runner = createMockRunner( - 'pass', - EVENT_TEST_PASS, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedString = - ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to be', expectedString); - }); + }); + describe('on pass', function() { + describe('if test speed is slow', function() { + it('should return expected tick, title and duration', function() { + var expectedDuration = 2; + var test = { + title: expectedTitle, + duration: expectedDuration, + slow: function() { + return 1; + } + }; + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedString = + ' ' + + Base.symbols.ok + + ' ' + + expectedTitle + + ' (' + + expectedDuration + + 'ms)' + + '\n'; + expect(stdout[0], 'to be', expectedString); }); }); - - describe("on 'fail' event", function() { - it('should return title and function count', function() { - var functionCount = 1; + describe('if test speed is fast', function() { + it('should return expected tick, title and without a duration', function() { + var expectedDuration = 1; var test = { - title: expectedTitle + title: expectedTitle, + duration: expectedDuration, + slow: function() { + return 2; + } }; - var runner = createMockRunner( - 'fail', - EVENT_TEST_FAIL, - null, - null, - test - ); - var options = {}; - var stdout = runReporter({epilogue: noop}, runner, options); - sandbox.restore(); - - var expectedArray = [ - ' ' + functionCount + ') ' + expectedTitle + '\n' - ]; - expect(stdout, 'to equal', expectedArray); + runner = createMockRunner('pass', 'pass', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedString = + ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to be', expectedString); }); }); }); + describe('on fail', function() { + it('should return title and function count', function() { + var functionCount = 1; + var test = { + title: expectedTitle + }; + runner = createMockRunner('fail', 'fail', null, null, test); + var stdout = runReporter({epilogue: function() {}}, runner, options); + var expectedArray = [' ' + functionCount + ') ' + expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); + }); + }); }); diff --git a/test/reporters/tap.spec.js b/test/reporters/tap.spec.js index f3bfe8d473..c0a5419d37 100644 --- a/test/reporters/tap.spec.js +++ b/test/reporters/tap.spec.js @@ -1,295 +1,246 @@ 'use strict'; -var events = require('../../').Runner.constants; -var helpers = require('./helpers'); var reporters = require('../../').reporters; - var TAP = reporters.TAP; -var createMockRunner = helpers.createMockRunner; -var makeRunReporter = helpers.createRunReporterFunction; -var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_TEST_END = events.EVENT_TEST_END; -var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; -var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; +var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('TAP reporter', function() { + var runner; var runReporter = makeRunReporter(TAP); var expectedTitle = 'some title'; var countAfterTestEnd = 2; - var noop = function() {}; + var test; - function createTest() { - return { + beforeEach(function() { + test = { fullTitle: function() { return expectedTitle; }, - slow: noop + slow: function() {} }; - } + }); - describe('TAP12 spec', function() { - var options = { - reporterOptions: { - tapVersion: '12' - } - }; + afterEach(function() { + runner = undefined; + test = undefined; + }); - describe('event handlers', function() { - describe("on 'start' event", function() { - var expectedSuite = 'some suite'; - var expectedTotal = 10; - var expectedString; - var stdout = []; - - before(function() { - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - runner.suite = expectedSuite; - runner.grepTotal = function(string) { - expectedString = string; - return expectedTotal; - }; - stdout = runReporter({}, runner, options); - }); + describe('TAP12 spec', function() { + var options = {}; + + describe('on start', function() { + var expectedSuite = 'some suite'; + var expectedTotal = 10; + var expectedString; + var stdout; + + before(function() { + runner = createMockRunner('start', 'start'); + runner.suite = expectedSuite; + runner.grepTotal = function(string) { + expectedString = string; + return expectedTotal; + }; + stdout = runReporter({}, runner, options); + }); - it('should not write a TAP specification version', function() { - expect(stdout, 'not to contain', 'TAP version'); - }); + it('should not write the TAP specification version', function() { + expect(stdout, 'not to contain', 'TAP version'); + }); + it('should write the number of tests that it plans to run', function() { + var expectedArray = ['1..' + expectedTotal + '\n']; + expect(stdout, 'to equal', expectedArray); + expect(expectedString, 'to be', expectedSuite); + }); + }); - it('should write the number of tests that it plans to run', function() { - var expectedArray = ['1..' + expectedTotal + '\n']; - expect(stdout, 'to equal', expectedArray); - expect(expectedString, 'to be', expectedSuite); - }); + describe('on pending', function() { + it('should write expected message including count and title', function() { + runner = createMockRunner( + 'start test', + 'test end', + 'pending', + null, + test + ); + runner.suite = ''; + runner.grepTotal = function() {}; + + var stdout = runReporter({}, runner, options); + + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; + expect(stdout[0], 'to equal', expectedMessage); }); + }); + + describe('on pass', function() { + it('should write expected message including count and title', function() { + runner = createMockRunner('start test', 'test end', 'pass', null, test); + runner.suite = ''; + runner.grepTotal = function() {}; - describe("on 'pending' event", function() { - var stdout = []; + var stdout = runReporter({}, runner, options); - before(function() { - var test = createTest(); - var runner = createMockRunner( - 'start test', - EVENT_TEST_END, - EVENT_TEST_PENDING, + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to equal', expectedMessage); + }); + }); + + describe('on fail', function() { + describe('if there is an error message', function() { + it('should write expected message and error message', function() { + var expectedErrorMessage = 'some error'; + var error = { + message: expectedErrorMessage + }; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', null, - test + test, + error ); + runner.on = function(event, callback) { + if (event === 'test end') { + callback(); + } else if (event === 'fail') { + callback(test, error); + } + }; runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); + runner.grepTotal = function() {}; - it('should write expected message including count and title', function() { - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; - expect(stdout[0], 'to equal', expectedMessage); + var stdout = runReporter({}, runner, options); + + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedErrorMessage + '\n' + ]; + expect(stdout, 'to equal', expectedArray); }); }); - describe("on 'pass' event", function() { - var stdout; - - before(function() { - var test = createTest(); - var runner = createMockRunner( - 'start test', - EVENT_TEST_END, - EVENT_TEST_PASS, + describe('if there is an error stack', function() { + it('should write expected message and stack', function() { + var expectedStack = 'some stack'; + var error = { + stack: expectedStack + }; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', null, - test + test, + error ); runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); + runner.grepTotal = function() {}; - it('should write expected message including count and title', function() { - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to equal', expectedMessage); - }); - }); + var stdout = runReporter({}, runner, options); - describe("on 'fail' event", function() { - var expectedErrorMessage = 'some error'; - var expectedStack = 'some stack'; - - describe("when 'error' has only message", function() { - var stdout; - - before(function() { - var test = createTest(); - var error = { - message: expectedErrorMessage - }; - var runner = createMockRunner( - 'test end fail', - EVENT_TEST_END, - EVENT_TEST_FAIL, - null, - test, - error - ); - runner.on = function(event, callback) { - if (event === EVENT_TEST_END) { - callback(); - } else if (event === EVENT_TEST_FAIL) { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); - - it('should write expected message and error message', function() { - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedErrorMessage + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedStack + '\n' + ]; + expect(stdout, 'to equal', expectedArray); }); + }); - describe("when 'error' has only stack", function() { - var stdout; - - before(function() { - var test = createTest(); - var error = { - stack: expectedStack - }; - var runner = createMockRunner( - 'test end fail', - EVENT_TEST_END, - EVENT_TEST_FAIL, - null, - test, - error - ); - runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); - - it('should write expected message and stack', function() { - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedStack + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); + describe('if there is an error stack and error message', function() { + it('should write expected message and stack', function() { + var expectedStack = 'some stack'; + var expectedErrorMessage = 'some error'; + var error = { + stack: expectedStack, + message: expectedErrorMessage + }; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === 'test end') { + callback(); + } else if (event === 'fail') { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = function() {}; - describe("when 'error' has both message and stack", function() { - var stdout; - - before(function() { - var test = createTest(); - var error = { - stack: expectedStack, - message: expectedErrorMessage - }; - var runner = createMockRunner( - 'test end fail', - EVENT_TEST_END, - EVENT_TEST_FAIL, - null, - test, - error - ); - runner.on = function(event, callback) { - if (event === EVENT_TEST_END) { - callback(); - } else if (event === EVENT_TEST_FAIL) { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); - - it('should write expected message, error message, and stack', function() { - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedErrorMessage + '\n', - ' ' + expectedStack + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); + var stdout = runReporter({}, runner, options); - describe("when 'error' has neither message nor stack", function() { - var stdout; - - before(function() { - var test = createTest(); - var error = {}; - var runner = createMockRunner( - 'test end fail', - EVENT_TEST_END, - EVENT_TEST_FAIL, - null, - test, - error - ); - runner.on = runner.once = function(event, callback) { - if (event === EVENT_TEST_END) { - callback(); - } else if (event === EVENT_TEST_FAIL) { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); - - it('should write expected message only', function() { - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedErrorMessage + '\n', + ' ' + expectedStack + '\n' + ]; + expect(stdout, 'to equal', expectedArray); }); }); - describe("on 'end' event", function() { - var stdout; - - before(function() { - var test = createTest(); - var runner = createMockRunner( - 'fail end pass', - EVENT_TEST_FAIL, - EVENT_RUN_END, - EVENT_TEST_PASS, - test + describe('if there is no error stack or error message', function() { + it('should write expected message only', function() { + var error = {}; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', + null, + test, + error ); + runner.on = runner.once = function(event, callback) { + if (event === 'test end') { + callback(); + } else if (event === 'fail') { + callback(test, error); + } + }; runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); + runner.grepTotal = function() {}; + + var stdout = runReporter({}, runner, options); - it('should write total tests, passes, and failures', function() { - var numberOfPasses = 1; - var numberOfFails = 1; - var totalTests = numberOfPasses + numberOfFails; var expectedArray = [ - 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', - 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', - '# tests ' + totalTests + '\n', - '# pass ' + numberOfPasses + '\n', - '# fail ' + numberOfFails + '\n' + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' ]; expect(stdout, 'to equal', expectedArray); }); }); }); + + describe('on end', function() { + it('should write total tests, passes and failures', function() { + var numberOfPasses = 1; + var numberOfFails = 1; + runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); + runner.suite = ''; + runner.grepTotal = function() {}; + + var stdout = runReporter({}, runner, options); + + var totalTests = numberOfPasses + numberOfFails; + var expectedArray = [ + 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', + 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', + '# tests ' + totalTests + '\n', + '# pass ' + numberOfPasses + '\n', + '# fail ' + numberOfFails + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); }); describe('TAP13 spec', function() { @@ -299,270 +250,229 @@ describe('TAP reporter', function() { } }; - describe('event handlers', function() { - describe("on 'start' event", function() { - var expectedSuite = 'some suite'; - var expectedTotal = 10; - var expectedString; - var stdout; - - before(function() { - var runner = createMockRunner('start', EVENT_RUN_BEGIN); - runner.suite = expectedSuite; - runner.grepTotal = function(string) { - expectedString = string; - return expectedTotal; - }; - stdout = runReporter({}, runner, options); - }); + describe('on start', function() { + var expectedSuite = 'some suite'; + var expectedTotal = 10; + var expectedString; + var stdout; + + before(function() { + runner = createMockRunner('start', 'start'); + runner.suite = expectedSuite; + runner.grepTotal = function(string) { + expectedString = string; + return expectedTotal; + }; + + stdout = runReporter({}, runner, options); + }); - it('should write the TAP specification version', function() { - var tapVersion = options.reporterOptions.tapVersion; - var expectedFirstLine = 'TAP version ' + tapVersion + '\n'; - expect(stdout[0], 'to equal', expectedFirstLine); - }); + it('should write the TAP specification version', function() { + var tapVersion = options.reporterOptions.tapVersion; + var expectedFirstLine = 'TAP version ' + tapVersion + '\n'; + expect(stdout[0], 'to equal', expectedFirstLine); + }); + it('should write the number of tests that it plans to run', function() { + var expectedSecondLine = '1..' + expectedTotal + '\n'; + expect(stdout[1], 'to equal', expectedSecondLine); + expect(expectedString, 'to be', expectedSuite); + }); + }); - it('should write the number of tests that it plans to run', function() { - var expectedSecondLine = '1..' + expectedTotal + '\n'; - expect(stdout[1], 'to equal', expectedSecondLine); - expect(expectedString, 'to be', expectedSuite); - }); + describe('on pending', function() { + it('should write expected message including count and title', function() { + runner = createMockRunner( + 'start test', + 'test end', + 'pending', + null, + test + ); + runner.suite = ''; + runner.grepTotal = function() {}; + + var stdout = runReporter({}, runner, options); + + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; + expect(stdout[0], 'to equal', expectedMessage); }); + }); + + describe('on pass', function() { + it('should write expected message including count and title', function() { + runner = createMockRunner('start test', 'test end', 'pass', null, test); + runner.suite = ''; + runner.grepTotal = function() {}; - describe("on 'pending' event", function() { - var stdout; + var stdout = runReporter({}, runner, options); - before(function() { - var test = createTest(); - var runner = createMockRunner( - 'start test', - EVENT_TEST_END, - EVENT_TEST_PENDING, + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to equal', expectedMessage); + }); + }); + + describe('on fail', function() { + describe('if there is an error message', function() { + it('should write expected message and error message', function() { + var expectedErrorMessage = 'some error'; + var error = { + message: expectedErrorMessage + }; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', null, - test + test, + error ); + runner.on = function(event, callback) { + if (event === 'test end') { + callback(); + } else if (event === 'fail') { + callback(test, error); + } + }; runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); + runner.grepTotal = function() {}; + + var stdout = runReporter({}, runner, options); - it('should write expected message including count and title', function() { - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; - expect(stdout[0], 'to equal', expectedMessage); + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' message: |-\n', + ' ' + expectedErrorMessage + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); }); }); - describe("on 'pass' event", function() { - var stdout; - - before(function() { - var test = createTest(); - var runner = createMockRunner( - 'start test', - EVENT_TEST_END, - EVENT_TEST_PASS, + describe('if there is an error stack', function() { + it('should write expected message and stack', function() { + var expectedStack = 'some stack'; + var error = { + stack: expectedStack + }; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', null, - test + test, + error ); runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); + runner.grepTotal = function() {}; - it('should write expected message including count and title', function() { - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to equal', expectedMessage); - }); - }); + var stdout = runReporter({}, runner, options); - describe("on 'fail' event", function() { - var expectedErrorMessage = 'some error'; - var expectedStack = 'some stack'; - - describe("when 'error' has only message", function() { - var stdout; - - before(function() { - var test = createTest(); - var error = { - message: expectedErrorMessage - }; - var runner = createMockRunner( - 'test end fail', - EVENT_TEST_END, - EVENT_TEST_FAIL, - null, - test, - error - ); - runner.on = function(event, callback) { - if (event === EVENT_TEST_END) { - callback(); - } else if (event === EVENT_TEST_FAIL) { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); - - it('should write expected message and error message', function() { - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' message: |-\n', - ' ' + expectedErrorMessage + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' stack: |-\n', + ' ' + expectedStack + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); }); + }); - describe("when 'error' has only stack", function() { - var stdout; - - before(function() { - var test = createTest(); - var error = { - stack: expectedStack - }; - var runner = createMockRunner( - 'test end fail', - EVENT_TEST_END, - EVENT_TEST_FAIL, - null, - test, - error - ); - runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); - - it('should write expected message and stack', function() { - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' stack: |-\n', - ' ' + expectedStack + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); + describe('if there is an error stack and error message', function() { + it('should write expected message and stack', function() { + var expectedStack = 'some stack'; + var expectedErrorMessage = 'some error'; + var error = { + stack: expectedStack, + message: expectedErrorMessage + }; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === 'test end') { + callback(); + } else if (event === 'fail') { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = function() {}; - describe("when 'error' has both message and stack", function() { - var stdout; - - before(function() { - var test = createTest(); - var error = { - stack: expectedStack, - message: expectedErrorMessage - }; - var runner = createMockRunner( - 'test end fail', - EVENT_TEST_END, - EVENT_TEST_FAIL, - null, - test, - error - ); - runner.on = function(event, callback) { - if (event === EVENT_TEST_END) { - callback(); - } else if (event === EVENT_TEST_FAIL) { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); - - it('should write expected message, error message, and stack', function() { - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' message: |-\n', - ' ' + expectedErrorMessage + '\n', - ' stack: |-\n', - ' ' + expectedStack + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); + var stdout = runReporter({}, runner, options); - describe("when 'error' has neither message nor stack", function() { - var stdout; - - before(function() { - var test = createTest(); - var error = {}; - var runner = createMockRunner( - 'test end fail', - EVENT_TEST_END, - EVENT_TEST_FAIL, - null, - test, - error - ); - runner.on = runner.once = function(event, callback) { - if (event === EVENT_TEST_END) { - callback(); - } else if (event === EVENT_TEST_FAIL) { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); - - it('should write expected message only', function() { - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' message: |-\n', + ' ' + expectedErrorMessage + '\n', + ' stack: |-\n', + ' ' + expectedStack + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); }); }); - describe("on 'end' event", function() { - var stdout; - - before(function() { - var test = createTest(); - var runner = createMockRunner( - 'fail end pass', - EVENT_TEST_FAIL, - EVENT_RUN_END, - EVENT_TEST_PASS, - test + describe('if there is no error stack or error message', function() { + it('should write expected message only', function() { + var error = {}; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', + null, + test, + error ); + runner.on = runner.once = function(event, callback) { + if (event === 'test end') { + callback(); + } else if (event === 'fail') { + callback(test, error); + } + }; runner.suite = ''; - runner.grepTotal = noop; - stdout = runReporter({}, runner, options); - }); + runner.grepTotal = function() {}; + + var stdout = runReporter({}, runner, options); - it('should write total tests, passes, and failures', function() { - var numberOfPasses = 1; - var numberOfFails = 1; - var totalTests = numberOfPasses + numberOfFails; var expectedArray = [ - 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', - 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', - '# tests ' + totalTests + '\n', - '# pass ' + numberOfPasses + '\n', - '# fail ' + numberOfFails + '\n' + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' ]; expect(stdout, 'to equal', expectedArray); }); }); }); + + describe('on end', function() { + it('should write total tests, passes and failures', function() { + var numberOfPasses = 1; + var numberOfFails = 1; + runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); + runner.suite = ''; + runner.grepTotal = function() {}; + + var stdout = runReporter({}, runner, options); + + var totalTests = numberOfPasses + numberOfFails; + var expectedArray = [ + 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', + 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', + '# tests ' + totalTests + '\n', + '# pass ' + numberOfPasses + '\n', + '# fail ' + numberOfFails + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); }); }); diff --git a/test/reporters/xunit.spec.js b/test/reporters/xunit.spec.js index 26fce4a1c4..35555968a1 100644 --- a/test/reporters/xunit.spec.js +++ b/test/reporters/xunit.spec.js @@ -1,34 +1,25 @@ 'use strict'; -var EventEmitter = require('events').EventEmitter; var fs = require('fs'); -var os = require('os'); -var path = require('path'); var mkdirp = require('mkdirp'); -var rimraf = require('rimraf'); -var sinon = require('sinon'); +var path = require('path'); +var assert = require('assert'); var createStatsCollector = require('../../lib/stats-collector'); -var events = require('../../').Runner.constants; +var EventEmitter = require('events').EventEmitter; var reporters = require('../../').reporters; -var states = require('../../').Runnable.constants; - -var Base = reporters.Base; +var constants = require('../../lib/runnable').constants; +var STATE_FAILED = constants.STATE_FAILED; +var STATE_PASSED = constants.STATE_PASSED; var XUnit = reporters.XUnit; -var EVENT_RUN_END = events.EVENT_RUN_END; -var EVENT_TEST_END = events.EVENT_TEST_END; -var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; -var EVENT_TEST_PASS = events.EVENT_TEST_PASS; -var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; - -var STATE_FAILED = states.STATE_FAILED; -var STATE_PASSED = states.STATE_PASSED; - describe('XUnit reporter', function() { - var sandbox; + var stdout; + var stdoutWrite; + // the runner parameter of the reporter var runner; - var noop = function() {}; + var callbackArgument = null; + var expectedFailure = 'some-failures'; var expectedLine = 'some-line'; var expectedClassName = 'fullTitle'; var expectedTitle = 'some title'; @@ -36,286 +27,192 @@ describe('XUnit reporter', function() { var expectedDiff = '\n + expected - actual\n\n -foo\n +bar\n '; var expectedStack = 'some-stack'; + var expectedWrite = null; beforeEach(function() { - runner = {on: noop, once: noop}; + stdout = []; + runner = {on: function() {}, once: function() {}}; createStatsCollector(runner); }); - describe("when 'reporterOptions.output' is provided", function() { - var expectedOutput = path.join(path.sep, 'path', 'to', 'some-output'); + describe('if reporter options output is given', function() { + var expectedOutput = 'some-output'; var options = { reporterOptions: { output: expectedOutput } }; - - describe('when fileStream can be created', function() { - var mkdirpSync; - var fsCreateWriteStream; - - beforeEach(function() { - sandbox = sinon.createSandbox(); - mkdirpSync = sandbox.stub(mkdirp, 'sync'); - fsCreateWriteStream = sandbox.stub(fs, 'createWriteStream'); + describe('but it cant create a write stream', function() { + it('should throw expected error', function() { + var fsCreateWriteStream = fs.createWriteStream; + fs.createWriteStream = false; + + var boundXUnit = XUnit.bind({}, runner, options); + expect(boundXUnit, 'to throw', 'file output not supported in browser'); + fs.createWriteStream = fsCreateWriteStream; }); + }); + describe('and it can create a write stream', function() { + it('should locate the output dir, create it, then assign as fileStream', function() { + var expectedDirectory; + var mkdirpSync = mkdirp.sync; + var pathDirname = path.dirname; + var fsCreateWriteStream = fs.createWriteStream; + mkdirp.sync = function(directory) { + expectedDirectory = directory; + }; + path.dirname = function(location) { + return location; + }; + fs.createWriteStream = function(streamDetails) { + return streamDetails; + }; - it('should open given file for writing, recursively creating directories in pathname', function() { - var fakeThis = { + var contextVariables = { fileStream: null }; - XUnit.call(fakeThis, runner, options); + XUnit.call(contextVariables, runner, options); - var expectedDirectory = path.dirname(expectedOutput); - expect(mkdirpSync.calledWith(expectedDirectory), 'to be true'); - expect(fsCreateWriteStream.calledWith(expectedOutput), 'to be true'); - }); + expect(expectedDirectory, 'to be', expectedOutput); + expect(contextVariables.fileStream, 'to be', expectedOutput); - afterEach(function() { - sandbox.restore(); + fs.createWriteStream = fsCreateWriteStream; + mkdirp.sync = mkdirpSync; + path.dirname = pathDirname; }); }); + }); - describe('when fileStream cannot be created', function() { - describe('when given an invalid pathname', function() { - var tmpdir; - var invalidPath; - - beforeEach(function createInvalidPath() { - tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'mocha-test-')); + describe("on 'pending', 'pass' and 'fail' events", function() { + it("should add test to tests called on 'end' event", function() { + var pendingTest = { + name: 'pending', + slow: function() {} + }; + var failTest = { + name: 'fail', + slow: function() {} + }; + var passTest = { + name: 'pass', + slow: function() {} + }; + runner.on = runner.once = function(event, callback) { + if (event === 'pending') { + callback(pendingTest); + } + if (event === 'pass') { + callback(passTest); + } + if (event === 'fail') { + callback(failTest); + } + if (event === 'end') { + callback(); + } + }; - function touch(filename) { - fs.closeSync(fs.openSync(filename, 'w')); + var calledTests = []; + XUnit.call( + { + write: function() {}, + test: function(test) { + calledTests.push(test); } + }, + runner + ); - // Create path where file 'some-file' used as directory - invalidPath = path.join( - tmpdir, - 'some-file', - path.basename(expectedOutput) - ); - touch(path.dirname(invalidPath)); - }); - - it('should throw system error', function() { - var options = { - reporterOptions: { - output: invalidPath - } - }; - var boundXUnit = XUnit.bind({}, runner, options); - expect( - boundXUnit, - 'to throw', - expect.it('to be an', Error).and('to satisfy', { - syscall: 'mkdir', - code: 'EEXIST', - path: path.dirname(invalidPath) - }) - ); - }); - - afterEach(function() { - rimraf.sync(tmpdir); - }); - }); - - describe('when run in browser', function() { - beforeEach(function() { - sandbox = sinon.createSandbox(); - sandbox.stub(fs, 'createWriteStream').value(false); - }); - - it('should throw unsupported error', function() { - var boundXUnit = XUnit.bind({}, runner, options); - expect( - boundXUnit, - 'to throw', - 'file output not supported in browser' - ); - }); - - afterEach(function() { - sandbox.restore(); - }); - }); + var expectedCalledTests = [pendingTest, passTest, failTest]; + expect(calledTests, 'to equal', expectedCalledTests); }); }); - describe('event handlers', function() { - describe("on 'pending', 'pass' and 'fail' events", function() { - it("should add test to tests called on 'end' event", function() { - var pendingTest = { - name: 'pending', - slow: noop - }; - var failTest = { - name: 'fail', - slow: noop - }; - var passTest = { - name: 'pass', - slow: noop + describe('done', function() { + describe('if fileStream is truthy', function() { + it('should run callback with failure inside streams end', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); + var callback = function(failures) { + callbackArgument = failures; }; - runner.on = runner.once = function(event, callback) { - if (event === EVENT_TEST_PENDING) { - callback(pendingTest); - } else if (event === EVENT_TEST_PASS) { - callback(passTest); - } else if (event === EVENT_TEST_FAIL) { - callback(failTest); - } else if (event === EVENT_RUN_END) { + var calledEnd = false; + var fileStream = { + end: function(callback) { + calledEnd = true; callback(); } }; + xunit.done.call({fileStream: fileStream}, expectedFailure, callback); - var calledTests = []; - var fakeThis = { - write: noop, - test: function(test) { - calledTests.push(test); - } + expect(calledEnd, 'to be', true); + expect(callbackArgument, 'to be', expectedFailure); + }); + }); + describe('if fileStream is falsy', function() { + it('should run callback with failure', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); + var callback = function(failures) { + callbackArgument = failures; }; - XUnit.call(fakeThis, runner); + xunit.done.call({fileStream: false}, expectedFailure, callback); - var expectedCalledTests = [pendingTest, passTest, failTest]; - expect(calledTests, 'to equal', expectedCalledTests); + expect(callbackArgument, 'to be', expectedFailure); }); }); }); - describe('#done', function() { - var xunit; - var options = { - reporterOptions: {} - }; - var expectedNFailures = 13; - var callback; - - beforeEach(function() { - sandbox = sinon.createSandbox(); - callback = sandbox.spy(); - }); - - afterEach(function() { - callback = null; - xunit = null; - sandbox.restore(); - }); - - describe('when output directed to file', function() { - var fakeThis; - - beforeEach(function() { - xunit = new XUnit(runner, options); - - fakeThis = { - fileStream: { - end: sinon.stub().callsFake(function(chunk, encoding, cb) { - if (typeof arguments[0] === 'function') { - cb = arguments[0]; - } - cb(); - }), - write: function(chunk, encoding, cb) {} + describe('write', function() { + describe('if fileStream is truthy', function() { + it('should call fileStream write with line and new line', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); + var fileStream = { + write: function(write) { + expectedWrite = write; } }; - }); - - it("should run completion callback via 'fileStream.end'", function() { - xunit.done.call(fakeThis, expectedNFailures, callback); - - expect(fakeThis.fileStream.end.calledOnce, 'to be true'); - expect(callback.calledOnce, 'to be true'); - expect(callback.calledWith(expectedNFailures), 'to be true'); - }); - }); - - describe('when output directed to stdout (or console)', function() { - var fakeThis; + xunit.write.call({fileStream: fileStream}, expectedLine); - beforeEach(function() { - xunit = new XUnit(runner, options); - fakeThis = {}; - }); - - it('should run completion callback', function() { - xunit.done.call(fakeThis, expectedNFailures, callback); - - expect(callback.calledOnce, 'to be true'); - expect(callback.calledWith(expectedNFailures), 'to be true'); + expect(expectedWrite, 'to be', expectedLine + '\n'); }); }); - }); - - describe('#write', function() { - // :TODO: Method should be named 'writeln', not 'write' - describe('when output directed to file', function() { - var fileStream = { - write: sinon.spy() - }; + describe('if fileStream is falsy and stdout exists', function() { + it('should call write with line and new line', function() { + stdoutWrite = process.stdout.write; + process.stdout.write = function(string) { + stdout.push(string); + }; - it("should call 'fileStream.write' with line and newline", function() { - var xunit = new XUnit(runner); - var fakeThis = {fileStream: fileStream}; - xunit.write.call(fakeThis, expectedLine); + var xunit = new XUnit({on: function() {}, once: function() {}}); + xunit.write.call({fileStream: false}, expectedLine); - expect(fileStream.write.calledWith(expectedLine + '\n'), 'to be true'); - }); - }); + process.stdout.write = stdoutWrite; - describe('when output directed to stdout', function() { - it("should call 'process.stdout.write' with line and newline", function() { - var xunit = new XUnit(runner); - var fakeThis = {fileStream: false}; - var stdoutWriteStub = sinon.stub(process.stdout, 'write'); - xunit.write.call(fakeThis, expectedLine); - stdoutWriteStub.restore(); - - expect(stdoutWriteStub.calledWith(expectedLine + '\n'), 'to be true'); + expect(stdout[0], 'to be', expectedLine + '\n'); }); }); - - describe('when output directed to console', function() { - it("should call 'console.log' with line", function() { - // :TODO: XUnit needs a trivially testable means to force console.log() - var realProcess = process; + describe('if fileStream is falsy and stdout does not exist', function() { + it('should call write with line', function() { + stdoutWrite = process; process = false; // eslint-disable-line no-native-reassign, no-global-assign + var cachedConsoleLog = console.log; + console.log = function(string) { + stdout.push(string); + }; - var xunit = new XUnit(runner); - var fakeThis = {fileStream: false}; - var consoleLogStub = sinon.stub(console, 'log'); - xunit.write.call(fakeThis, expectedLine); - consoleLogStub.restore(); - - process = realProcess; // eslint-disable-line no-native-reassign, no-global-assign + var xunit = new XUnit({on: function() {}, once: function() {}}); + xunit.write.call({fileStream: false}, expectedLine); - expect(consoleLogStub.calledWith(expectedLine), 'to be true'); + console.log = cachedConsoleLog; + process = stdoutWrite; // eslint-disable-line no-native-reassign, no-global-assign + expect(stdout[0], 'to be', expectedLine); }); }); }); - describe('#test', function() { - var expectedWrite; - var fakeThis = { - write: function(str) { - expectedWrite = str; - } - }; - - beforeEach(function() { - sandbox = sinon.createSandbox(); - sandbox.stub(Base, 'useColors').value(false); - }); - - afterEach(function() { - sandbox.restore(); - expectedWrite = null; - }); - + describe('test', function() { describe('on test failure', function() { it('should write expected tag with error details', function() { - var xunit = new XUnit(runner); + var xunit = new XUnit({on: function() {}, once: function() {}}); var expectedTest = { state: STATE_FAILED, title: expectedTitle, @@ -332,9 +229,14 @@ describe('XUnit reporter', function() { stack: expectedStack } }; - - xunit.test.call(fakeThis, expectedTest); - sandbox.restore(); + xunit.test.call( + { + write: function(string) { + expectedWrite = string; + } + }, + expectedTest + ); var expectedTag = ''; + expect(expectedWrite, 'to be', expectedTag); }); }); - describe('on test in any other state', function() { it('should write expected tag', function() { - var xunit = new XUnit(runner); + var xunit = new XUnit({on: function() {}, once: function() {}}); + var expectedTest = { isPending: function() { return false; @@ -396,9 +305,14 @@ describe('XUnit reporter', function() { }, duration: false }; - - xunit.test.call(fakeThis, expectedTest); - sandbox.restore(); + xunit.test.call( + { + write: function(string) { + expectedWrite = string; + } + }, + expectedTest + ); var expectedTag = ''; + expect(expectedWrite, 'to be', expectedTag); }); }); - it('should write expected summary statistics', function() { - var numTests = 0; - var numPass = 0; - var numFail = 0; + var count = 0; var simpleError = { actual: 'foo', expected: 'bar', @@ -421,14 +333,8 @@ describe('XUnit reporter', function() { stack: expectedStack }; var generateTest = function(passed) { - numTests++; - if (passed) { - numPass++; - } else { - numFail++; - } - return { - title: [expectedTitle, numTests].join(': '), + var t = { + title: expectedTitle + count, state: passed ? STATE_PASSED : STATE_FAILED, isPending: function() { return false; @@ -443,36 +349,26 @@ describe('XUnit reporter', function() { }, duration: 1000 }; + return t; }; var runner = new EventEmitter(); createStatsCollector(runner); var xunit = new XUnit(runner); expectedWrite = ''; - sandbox.stub(xunit, 'write').callsFake(function(str) { - expectedWrite += str; - }); + xunit.write = function(string) { + expectedWrite += string; + }; // 3 tests, no failures (i.e. tests that could not run), and 2 errors - runner.emit(EVENT_TEST_PASS, generateTest(true)); - runner.emit(EVENT_TEST_END); - runner.emit(EVENT_TEST_FAIL, generateTest(false), simpleError); - runner.emit(EVENT_TEST_END); - runner.emit(EVENT_TEST_FAIL, generateTest(false), simpleError); - runner.emit(EVENT_TEST_END); - runner.emit(EVENT_RUN_END); - - sandbox.restore(); - - var expectedNumPass = 1; - var expectedNumFail = 2; - var expectedNumTests = 3; - - expect(expectedNumPass, 'to be', numPass); - expect(expectedNumFail, 'to be', numFail); - expect(expectedNumTests, 'to be', numTests); + runner.emit('test end'); + runner.emit('pass', generateTest(true)); + runner.emit('test end'); + runner.emit('fail', generateTest(false), simpleError); + runner.emit('test end'); + runner.emit('fail', generateTest(false), simpleError); + runner.emit('end'); - // :NOTE: Mocha test "fail" is an XUnit "error" var expectedTag = '= 0, + 'it should contain the text "Mocha Tests"' + ); }); - it('should use default name otherwise', function() { - var defaultSuiteName = 'Mocha Tests'; + it('should use the custom suite name as the suite name when provided in the reporter options', function() { + // arrange var options = { - reporterOptions: {} + reporterOptions: { + // this time, with a custom suite name + suiteName: 'Mocha Is Great!' + } }; var xunit = new XUnit(runner, options); xunit.fileStream = fileStream; - // Trigger end event to force XUnit reporter to write its output - events[EVENT_RUN_END](); + // act (trigger the end event to force xunit reporter to write the output) + events['end'](); - expect(lines[0], 'to contain', defaultSuiteName); + // assert + assert( + lines[0].indexOf(' Date: Thu, 25 Apr 2019 20:03:38 +0100 Subject: [PATCH 007/441] Adds doc links for mocha-examples (#3889) * add links * link tidy --- docs/index.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/index.md b/docs/index.md index 0117320279..4c41381b05 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1116,7 +1116,7 @@ Require a module before loading the user interface or test files. This is useful - Test harnesses - Assertion libraries that augment built-ins or global scope (such as [should.js][npm-should.js]) - Instant ECMAScript modules via [esm][npm-esm] -- Compilers such as Babel via [@babel/register][npm-babel-register] or TypeScript via [ts-node][npm-ts-node] (using `--require ts-node/register`) +- Compilers such as Babel via [@babel/register][npm-babel-register] or TypeScript via [ts-node][npm-ts-node] (using `--require ts-node/register`). See [Babel][example-babel] or [TypeScript][example-typescript] working examples. Modules required in this manner are expected to do work synchronously; Mocha won't wait for async tasks in a required module to finish. @@ -1469,7 +1469,12 @@ By default, it will output to the console. To write directly to a file, use `--r ### Third-Party Reporters -Mocha allows you to define custom reporters. For more information see the [wiki][mocha-wiki-more-reporters]. An example is the [TeamCity reporter][mocha-teamcity-reporter]. +Mocha allows you to define custom reporters. For more information see the [wiki][mocha-wiki-more-reporters]. + +Examples: + +- the [TeamCity reporter][mocha-teamcity-reporter] +- our [working example][example-third-party-reporter] ### HTML Reporter @@ -1803,11 +1808,12 @@ The plugin is titled **NodeJS**, and can be installed via **Preferences** > **Pl Real live example code: +- [Mocha examples][mocha-examples] - [Express][example-express-test] - [Connect][example-connect-test] - [SuperAgent][example-superagent-test] - [WebSocket.io][example-websocket.io-test] -- [Mocha][example-mocha-test] +- [Mocha tests][example-mocha-test] ## Testing Mocha @@ -1837,12 +1843,15 @@ or the [source](https://github.com/mochajs/mocha/blob/master/lib/mocha.js). [connect-test-output]: https://github.com/senchalabs/connect/blob/90a725343c2945aaee637e799b1cd11e065b2bff/tests.md [emacs]: https://www.gnu.org/software/emacs/ [emacs-mocha.el]: https://github.com/scottaj/mocha.el -[example-express-test]: https://github.com/visionmedia/express/tree/master/test +[example-babel]: https://github.com/mochajs/mocha-examples/tree/master/babel [example-connect-test]: https://github.com/senchalabs/connect/tree/master/test -[example-superagent-test]: https://github.com/visionmedia/superagent/tree/master/test/node -[example-websocket.io-test]: https://github.com/LearnBoost/websocket.io/tree/master/test +[example-express-test]: https://github.com/visionmedia/express/tree/master/test [example-mocha-test]: https://github.com/mochajs/mocha/tree/master/test [example-mocha-config]: https://github.com/mochajs/mocha/tree/master/example/config +[example-superagent-test]: https://github.com/visionmedia/superagent/tree/master/test/node +[example-third-party-reporter]: https://github.com/mochajs/mocha-examples/tree/master/third-party-reporter +[example-typescript]: https://github.com/mochajs/mocha-examples/tree/master/typescript +[example-websocket.io-test]: https://github.com/LearnBoost/websocket.io/tree/master/test [expect.js]: https://github.com/LearnBoost/expect.js [expresso]: https://github.com/tj/expresso [fish-globbing]: https://fishshell.com/docs/current/#expand-wildcard @@ -1860,6 +1869,7 @@ or the [source](https://github.com/mochajs/mocha/blob/master/lib/mocha.js). [mdn-promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise [mdn-regexp]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Regexp [mdn-settimeout-maxdelay]: https://developer.mozilla.org/docs/Web/API/WindowTimers/setTimeout#Maximum_delay_value +[mocha-examples]: https://github.com/mochajs/mocha-examples [mocha-teamcity-reporter]: https://github.com/travisjeffery/mocha-teamcity-reporter [mocha-website]: https://mochajs.org/ [mocha-wiki]: https://github.com/mochajs/mocha/wiki From 109f05e48abbfe8c6bb3f975b653631b80fca599 Mon Sep 17 00:00:00 2001 From: Juerg B <44573692+juergba@users.noreply.github.com> Date: Mon, 29 Apr 2019 17:47:27 +0200 Subject: [PATCH 008/441] Fix parsing of config files with "_mocha" (#3894) --- lib/cli/cli.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/cli/cli.js b/lib/cli/cli.js index b51c2a1973..8e82983af4 100755 --- a/lib/cli/cli.js +++ b/lib/cli/cli.js @@ -32,6 +32,8 @@ exports.main = (argv = process.argv.slice(2)) => { Error.stackTraceLimit = Infinity; // configurable via --stack-trace-limit? + var args = loadOptions(argv); + yargs() .scriptName('mocha') .command(commands.run) @@ -60,7 +62,8 @@ exports.main = (argv = process.argv.slice(2)) => { ` ) .parserConfiguration(YARGS_PARSER_CONFIG) - .parse(argv, loadOptions(argv)); + .config(args) + .parse(args._); }; // allow direct execution From ef69b73941a54456e0551893ac2e686cd5ee47b6 Mon Sep 17 00:00:00 2001 From: "P. Roebuck" Date: Tue, 30 Apr 2019 14:22:22 -0500 Subject: [PATCH 009/441] Rework reporter tests (#3892) Reworked stubs to use "sinon" package. Added logic to (hopefully) rethrow errors when stdout stubbed. Tests now use event constants. Noise reduction. Various mods for consistency. Now green across the board. --- test/reporters/base.spec.js | 258 +++++---- test/reporters/doc.spec.js | 358 +++++++----- test/reporters/dot.spec.js | 319 +++++++---- test/reporters/helpers.js | 69 ++- test/reporters/json-stream.spec.js | 204 +++---- test/reporters/json.spec.js | 26 +- test/reporters/landing.spec.js | 142 +++-- test/reporters/list.spec.js | 318 +++++++---- test/reporters/markdown.spec.js | 177 +++--- test/reporters/min.spec.js | 66 +-- test/reporters/nyan.spec.js | 597 ++++++++++++-------- test/reporters/progress.spec.js | 168 +++--- test/reporters/spec.spec.js | 215 +++++--- test/reporters/tap.spec.js | 858 ++++++++++++++++------------- test/reporters/xunit.spec.js | 546 ++++++++++-------- 15 files changed, 2528 insertions(+), 1793 deletions(-) diff --git a/test/reporters/base.spec.js b/test/reporters/base.spec.js index 40d1374537..739063f32a 100644 --- a/test/reporters/base.spec.js +++ b/test/reporters/base.spec.js @@ -1,124 +1,138 @@ 'use strict'; var assert = require('assert'); -var chaiExpect = require('chai').expect; -var Base = require('../../lib/reporters/base'); +var chai = require('chai'); +var sinon = require('sinon'); +var helpers = require('./helpers'); +var reporters = require('../../').reporters; + var AssertionError = assert.AssertionError; -var makeTest = require('./helpers').makeTest; -var createElements = require('./helpers').createElements; +var Base = reporters.Base; +var chaiExpect = chai.expect; +var createElements = helpers.createElements; +var makeTest = helpers.makeTest; describe('Base reporter', function() { + var sandbox; var stdout; - var stdoutWrite; - var useColors; - var err; - var errOut; - var test; function list(tests) { - Base.useColors = false; - var retval = Base.list(tests); - Base.useColors = useColors; - return retval; + try { + try { + Base.list(tests); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } } function generateDiff(actual, expected) { - Base.useColors = false; - var retval = Base.generateDiff(actual, expected); - Base.useColors = useColors; - return retval; + var diffStr; + + try { + try { + diffStr = Base.generateDiff(actual, expected); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + + return diffStr; } + var gather = function(chunk, encoding, cb) { + stdout.push(chunk); + }; + beforeEach(function() { - useColors = Base.useColors; + sandbox = sinon.createSandbox(); + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(process.stdout, 'write').callsFake(gather); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - stdoutWrite.call(process.stdout, string, enc, callback); - }; }); afterEach(function() { - process.stdout.write = stdoutWrite; + sandbox.restore(); }); describe('showDiff', function() { + var err; + beforeEach(function() { err = new AssertionError({actual: 'foo', expected: 'bar'}); }); it('should show diffs by default', function() { - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /- actual/); expect(errOut, 'to match', /\+ expected/); }); - it('should show diffs if property set to `true`', function() { + it("should show diffs if 'err.showDiff' is true", function() { err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /- actual/); expect(errOut, 'to match', /\+ expected/); }); - it('should not show diffs when showDiff property set to `false`', function() { + it("should not show diffs if 'err.showDiff' is false", function() { err.showDiff = false; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); - it('should not show diffs when expected is not defined', function() { - err = new Error('ouch'); - - test = makeTest(err); + it("should not show diffs if 'expected' is not defined", function() { + var _err = new Error('ouch'); + var test = makeTest(_err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); - it('should not show diffs when hideDiff is set', function() { - test = makeTest(err); + it("should not show diffs if 'hideDiff' is true", function() { + var test = makeTest(err); - Base.hideDiff = true; + sandbox.stub(Base, 'hideDiff').value(true); list([test]); - Base.hideDiff = false; // Revert to original value - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'not to match', /- actual/); expect(errOut, 'not to match', /\+ expected/); }); }); - describe('Getting two strings', function() { + describe('getting two strings', function() { // Fix regression V1.2.1(see: issue #1241) it('should show strings diff as is', function() { - err = new Error('test'); - + var err = new Error('test'); err.actual = 'foo\nbar'; err.expected = 'foo\nbaz'; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); - + var errOut = stdout.join('\n'); expect(errOut, 'not to match', /"foo\\nbar"/); expect(errOut, 'to match', /foo/).and('to match', /bar/); expect(errOut, 'to match', /test/); @@ -127,26 +141,19 @@ describe('Base reporter', function() { }); }); - describe('Diff generation', function() { - var oldInlineDiffs; - var actual; - var expected; - var output; + describe('diff generation', function() { + var inlineDiffsStub; beforeEach(function() { - oldInlineDiffs = Base.inlineDiffs; - }); - - afterEach(function() { - Base.inlineDiffs = oldInlineDiffs; + inlineDiffsStub = sandbox.stub(Base, 'inlineDiffs'); }); - it('should generate unified diffs if `inlineDiff === false`', function() { - actual = 'a foo unified diff'; - expected = 'a bar unified diff'; + it("should generate unified diffs if 'inlineDiffs' is false", function() { + var actual = 'a foo unified diff'; + var expected = 'a bar unified diff'; - Base.inlineDiffs = false; - output = generateDiff(actual, expected); + inlineDiffsStub.value(false); + var output = generateDiff(actual, expected); expect( output, @@ -155,12 +162,12 @@ describe('Base reporter', function() { ); }); - it('should generate inline diffs if `inlineDiffs === true`', function() { - actual = 'a foo inline diff'; - expected = 'a bar inline diff'; + it("should generate inline diffs if 'inlineDiffs' is true", function() { + var actual = 'a foo inline diff'; + var expected = 'a bar inline diff'; - Base.inlineDiffs = true; - output = generateDiff(actual, expected); + inlineDiffsStub.value(true); + var output = generateDiff(actual, expected); expect( output, @@ -170,39 +177,37 @@ describe('Base reporter', function() { }); }); - describe('Inline strings diff', function() { - it('should show single line diff if property set to `true`', function() { - err = new Error('test'); + describe('inline strings diff', function() { + beforeEach(function() { + sandbox.stub(Base, 'inlineDiffs').value(true); + }); + it("should show single line diff if 'inlineDiffs' is true", function() { + var err = new Error('test'); err.actual = 'a foo inline diff'; err.expected = 'a bar inline diff'; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); - Base.inlineDiffs = true; list([test]); - errOut = stdout.join('\n'); - + var errOut = stdout.join('\n'); expect(errOut, 'to match', /a foobar inline diff/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /actual/); expect(errOut, 'to match', /expected/); }); - it('should split lines when string has more than 4 line breaks', function() { - err = new Error('test'); - + it('should split lines if string has more than 4 line breaks', function() { + var err = new Error('test'); err.actual = 'a\nfoo\ninline\ndiff\nwith\nmultiple lines'; err.expected = 'a\nbar\ninline\ndiff\nwith\nmultiple lines'; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); - Base.inlineDiffs = true; list([test]); - errOut = stdout.join('\n'); - + var errOut = stdout.join('\n'); expect(errOut, 'to match', /1 \| a/); expect(errOut, 'to match', /2 \| foobar/); expect(errOut, 'to match', /3 \| inline/); @@ -215,21 +220,21 @@ describe('Base reporter', function() { }); }); - describe('unified diff reporter', function() { + describe('unified diff', function() { beforeEach(function() { - err = new Error('test'); + sandbox.stub(Base, 'inlineDiffs').value(false); }); it('should separate diff hunks by two dashes', function() { + var err = new Error('test'); err.actual = createElements({from: 2, to: 11}); err.expected = createElements({from: 1, to: 10}); err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); - Base.inlineDiffs = false; list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); var regexesToMatch = [ /\[/, @@ -257,16 +262,15 @@ describe('Base reporter', function() { }); it('should stringify objects', function() { - err = new Error('test'); - + var err = new Error('test'); err.actual = {key: 'a1'}; err.expected = {key: 'e1'}; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /"key"/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /- actual/); @@ -274,18 +278,18 @@ describe('Base reporter', function() { }); it('should stringify Object.create(null)', function() { - err = new Error('test'); + var err = new Error('test'); err.actual = Object.create(null); err.actual.hasOwnProperty = 1; err.expected = Object.create(null); err.expected.hasOwnProperty = 2; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /"hasOwnProperty"/); expect(errOut, 'to match', /test/); expect(errOut, 'to match', /- actual/); @@ -299,11 +303,11 @@ describe('Base reporter', function() { err.actual = false; err.expected = true; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /\+true/); expect(errOut, 'to match', /-false/); expect(errOut, 'to match', /- actual/); @@ -311,18 +315,21 @@ describe('Base reporter', function() { } }); - it('should interpret Chai custom error messages', function() { + it("should interpret 'chai' module custom error messages", function() { + var actual = 43; + var expected = 42; + try { - chaiExpect(43, 'custom error message').to.equal(42); + chaiExpect(actual, 'custom error message').to.equal(expected); } catch (err) { - err.actual = 43; - err.expected = 42; + err.actual = actual; + err.expected = expected; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /custom error message\n/) .and('to match', /\+42/) .and('to match', /-43/) @@ -331,20 +338,23 @@ describe('Base reporter', function() { } }); - it('should interpret assert module custom error messages', function() { + it("should interpret 'assert' module custom error messages", function() { + var actual = 43; + var expected = 42; + try { - assert.strictEqual(43, 42, 'custom error message'); + assert.strictEqual(actual, expected, 'custom error message'); // AssertionError: custom error message: expected 43 to equal 42. // assert.equal(43, 42, 'custom error message: expected 43 to equal 42.'); } catch (err) { - err.actual = 43; - err.expected = 42; + err.actual = actual; + err.expected = expected; err.showDiff = true; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n'); + var errOut = stdout.join('\n'); expect(errOut, 'to match', /custom error message\n/); expect(errOut, 'to match', /\+42/); expect(errOut, 'to match', /-43/); @@ -354,53 +364,57 @@ describe('Base reporter', function() { }); it('should remove message from stack', function() { - err = { + var err = { message: 'Error', stack: 'Error\nfoo\nbar', showDiff: false }; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n').trim(); + var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); - it('should use the inspect() property if `message` is not set', function() { - err = { + it("should use 'inspect' if 'message' is not set", function() { + var err = { showDiff: false, inspect: function() { return 'an error happened'; } }; - test = makeTest(err); + var test = makeTest(err); + list([test]); - errOut = stdout.join('\n').trim(); + + var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n an error happened'); }); - it('should set an empty message if `message` and `inspect()` are not set', function() { - err = { + it("should set an empty message if neither 'message' nor 'inspect' is set", function() { + var err = { showDiff: false }; - test = makeTest(err); + var test = makeTest(err); + list([test]); - errOut = stdout.join('\n').trim(); + + var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:'); }); it('should not modify stack if it does not contain message', function() { - err = { + var err = { message: 'Error', stack: 'foo\nbar', showDiff: false }; - test = makeTest(err); + var test = makeTest(err); list([test]); - errOut = stdout.join('\n').trim(); + var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); }); diff --git a/test/reporters/doc.spec.js b/test/reporters/doc.spec.js index 857922b83e..fb2703f83c 100644 --- a/test/reporters/doc.spec.js +++ b/test/reporters/doc.spec.js @@ -1,10 +1,17 @@ 'use strict'; +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; + var Doc = reporters.Doc; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers.js').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; +var EVENT_SUITE_END = events.EVENT_SUITE_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; describe('Doc reporter', function() { var runner; @@ -12,178 +19,223 @@ describe('Doc reporter', function() { var runReporter = makeRunReporter(Doc); afterEach(function() { - runner = undefined; + runner = null; }); - describe('on suite', function() { - describe('if suite root does not exist', function() { - var expectedTitle = 'expectedTitle'; - var unescapedTitle = '
' + expectedTitle + '
'; - var suite = { - root: false, - title: expectedTitle + describe('event handlers', function() { + describe("on 'suite' event", function() { + describe('when suite root does not exist', function() { + var expectedTitle = 'expectedTitle'; + var unescapedTitle = '
' + expectedTitle + '
'; + var suite = { + root: false, + title: expectedTitle + }; + + it('should log html with indents and expected title', function() { + runner = createMockRunner( + 'suite', + EVENT_SUITE_BEGIN, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
\n', + '

' + expectedTitle + '

\n', + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + + it('should escape title where necessary', function() { + var suite = { + root: false, + title: unescapedTitle + }; + expectedTitle = + '<div>' + expectedTitle + '</div>'; + + runner = createMockRunner( + 'suite', + EVENT_SUITE_BEGIN, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
\n', + '

' + expectedTitle + '

\n', + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('when suite root exists', function() { + var suite = { + root: true + }; + + it('should not log any html', function() { + runner = createMockRunner( + 'suite', + EVENT_SUITE_BEGIN, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + expect(stdout, 'to be empty'); + }); + }); + }); + + describe("on 'suite end' event", function() { + describe('when suite root does not exist', function() { + var suite = { + root: false + }; + + it('should log expected html with indents', function() { + runner = createMockRunner( + 'suite end', + EVENT_SUITE_END, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + var expectedArray = ['
\n', '
\n']; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('when suite root exists', function() { + var suite = { + root: true + }; + + it('should not log any html', function() { + runner = createMockRunner( + 'suite end', + EVENT_SUITE_END, + null, + null, + suite + ); + var stdout = runReporter(this, runner, options); + expect(stdout, 'to be empty'); + }); + }); + }); + + describe("on 'pass' event", function() { + var expectedTitle = 'some tite'; + var expectedBody = 'some body'; + var test = { + title: expectedTitle, + body: expectedBody, + slow: function() { + return ''; + } }; - it('should log html with indents and expected title', function() { - runner = createMockRunner('suite', 'suite', null, null, suite); + + it('should log html with indents, expected title, and body', function() { + runner = createMockRunner('pass', EVENT_TEST_PASS, null, null, test); var stdout = runReporter(this, runner, options); var expectedArray = [ - '
\n', - '

' + expectedTitle + '

\n', - '
\n' + '
' + expectedTitle + '
\n', + '
' + expectedBody + '
\n' ]; expect(stdout, 'to equal', expectedArray); }); - it('should escape title where necessary', function() { - var suite = { - root: false, - title: unescapedTitle - }; - expectedTitle = '<div>' + expectedTitle + '</div>'; - runner = createMockRunner('suite', 'suite', null, null, suite); + + it('should escape title and body where necessary', function() { + var unescapedTitle = '
' + expectedTitle + '
'; + var unescapedBody = '
' + expectedBody + '
'; + test.title = unescapedTitle; + test.body = unescapedBody; + + var expectedEscapedTitle = + '<div>' + expectedTitle + '</div>'; + var expectedEscapedBody = + '<div>' + expectedBody + '</div>'; + runner = createMockRunner('pass', EVENT_TEST_PASS, null, null, test); var stdout = runReporter(this, runner, options); var expectedArray = [ - '
\n', - '

' + expectedTitle + '

\n', - '
\n' + '
' + expectedEscapedTitle + '
\n', + '
' + expectedEscapedBody + '
\n' ]; expect(stdout, 'to equal', expectedArray); }); }); - describe('if suite root does exist', function() { - var suite = { - root: true - }; - it('should not log any html', function() { - runner = createMockRunner('suite', 'suite', null, null, suite); - var stdout = runReporter(this, runner, options); - expect(stdout, 'to be empty'); - }); - }); - }); - describe('on suite end', function() { - describe('if suite root does not exist', function() { - var suite = { - root: false + describe("on 'fail' event", function() { + var expectedTitle = 'some tite'; + var expectedBody = 'some body'; + var expectedError = 'some error'; + var test = { + title: expectedTitle, + body: expectedBody, + slow: function() { + return ''; + } }; - it('should log expected html with indents', function() { - runner = createMockRunner('suite end', 'suite end', null, null, suite); + + it('should log html with indents, expected title, body, and error', function() { + runner = createMockRunner( + 'fail two args', + EVENT_TEST_FAIL, + null, + null, + test, + expectedError + ); var stdout = runReporter(this, runner, options); - var expectedArray = ['
\n', '
\n']; + var expectedArray = [ + '
' + expectedTitle + '
\n', + '
' +
+            expectedBody +
+            '
\n', + '
' + expectedError + '
\n' + ]; expect(stdout, 'to equal', expectedArray); }); - }); - describe('if suite root does exist', function() { - var suite = { - root: true - }; - it('should not log any html', function() { - runner = createMockRunner('suite end', 'suite end', null, null, suite); - var stdout = runReporter(this, runner, options); - expect(stdout, 'to be empty'); - }); - }); - }); - describe('on pass', function() { - var expectedTitle = 'some tite'; - var expectedBody = 'some body'; - var test = { - title: expectedTitle, - body: expectedBody, - slow: function() { - return ''; - } - }; - it('should log html with indents and expected title and body', function() { - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedTitle + '
\n', - '
' + expectedBody + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - it('should escape title and body where necessary', function() { - var unescapedTitle = '
' + expectedTitle + '
'; - var unescapedBody = '
' + expectedBody + '
'; - test.title = unescapedTitle; - test.body = unescapedBody; - - var expectedEscapedTitle = - '<div>' + expectedTitle + '</div>'; - var expectedEscapedBody = - '<div>' + expectedBody + '</div>'; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedEscapedTitle + '
\n', - '
' + expectedEscapedBody + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); + it('should escape title, body, and error where necessary', function() { + var unescapedTitle = '
' + expectedTitle + '
'; + var unescapedBody = '
' + expectedBody + '
'; + var unescapedError = '
' + expectedError + '
'; + test.title = unescapedTitle; + test.body = unescapedBody; - describe('on fail', function() { - var expectedTitle = 'some tite'; - var expectedBody = 'some body'; - var expectedError = 'some error'; - var test = { - title: expectedTitle, - body: expectedBody, - slow: function() { - return ''; - } - }; - it('should log html with indents and expected title, body and error', function() { - runner = createMockRunner( - 'fail two args', - 'fail', - null, - null, - test, - expectedError - ); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedTitle + '
\n', - '
' +
-          expectedBody +
-          '
\n', - '
' + expectedError + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - it('should escape title, body and error where necessary', function() { - var unescapedTitle = '
' + expectedTitle + '
'; - var unescapedBody = '
' + expectedBody + '
'; - var unescapedError = '
' + expectedError + '
'; - test.title = unescapedTitle; - test.body = unescapedBody; - - var expectedEscapedTitle = - '<div>' + expectedTitle + '</div>'; - var expectedEscapedBody = - '<div>' + expectedBody + '</div>'; - var expectedEscapedError = - '<div>' + expectedError + '</div>'; - runner = createMockRunner( - 'fail two args', - 'fail', - null, - null, - test, - unescapedError - ); - var stdout = runReporter(this, runner, options); - var expectedArray = [ - '
' + expectedEscapedTitle + '
\n', - '
' +
-          expectedEscapedBody +
-          '
\n', - '
' + expectedEscapedError + '
\n' - ]; - expect(stdout, 'to equal', expectedArray); + var expectedEscapedTitle = + '<div>' + expectedTitle + '</div>'; + var expectedEscapedBody = + '<div>' + expectedBody + '</div>'; + var expectedEscapedError = + '<div>' + expectedError + '</div>'; + runner = createMockRunner( + 'fail two args', + EVENT_TEST_FAIL, + null, + null, + test, + unescapedError + ); + var stdout = runReporter(this, runner, options); + var expectedArray = [ + '
' + expectedEscapedTitle + '
\n', + '
' +
+            expectedEscapedBody +
+            '
\n', + '
' + expectedEscapedError + '
\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); }); }); }); diff --git a/test/reporters/dot.spec.js b/test/reporters/dot.spec.js index 472ec63d01..4a23c7951e 100644 --- a/test/reporters/dot.spec.js +++ b/test/reporters/dot.spec.js @@ -1,155 +1,238 @@ 'use strict'; +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var Dot = reporters.Dot; + var Base = reporters.Base; +var Dot = reporters.Dot; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers.js').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('Dot reporter', function() { - var runner; - var useColors; - var windowWidth; - var color; - var options = {}; + var sandbox; + var windowWidthStub; var runReporter = makeRunReporter(Dot); + var noop = function() {}; beforeEach(function() { - useColors = Base.useColors; - windowWidth = Base.window.width; - color = Base.color; - Base.useColors = false; - Base.window.width = 0; - Base.color = function(type, str) { + sandbox = sinon.createSandbox(); + windowWidthStub = sandbox.stub(Base.window, 'width').value(0); + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base, 'color').callsFake(function(type, str) { return type.replace(/ /g, '-') + '_' + str; - }; + }); }); afterEach(function() { - Base.useColors = useColors; - Base.window.width = windowWidth; - Base.color = color; - runner = undefined; + sandbox.restore(); }); - describe('on start', function() { - it('should write a newline', function() { - runner = createMockRunner('start', 'start'); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['\n']; - expect(stdout, 'to equal', expectedArray); - }); - }); - describe('on pending', function() { - describe('if window width is greater than 1', function() { - beforeEach(function() { - Base.window.width = 2; - }); - it('should write a newline followed by a comma', function() { - runner = createMockRunner('pending', 'pending'); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['\n ', 'pending_' + Base.symbols.comma]; - expect(stdout, 'to equal', expectedArray); - }); - }); - describe('if window width is equal to or less than 1', function() { - it('should write a comma', function() { - runner = createMockRunner('pending', 'pending'); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['pending_' + Base.symbols.comma]; + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should write a newline', function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['\n']; expect(stdout, 'to equal', expectedArray); }); }); - }); - describe('on pass', function() { - var test = { - duration: 1, - slow: function() { - return 2; - } - }; - describe('if window width is greater than 1', function() { - beforeEach(function() { - Base.window.width = 2; - }); - describe('if test speed is fast', function() { - it('should write a newline followed by a dot', function() { - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(test.speed, 'to equal', 'fast'); - var expectedArray = ['\n ', 'fast_' + Base.symbols.dot]; + + describe("on 'pending' event", function() { + describe('when window width is greater than 1', function() { + beforeEach(function() { + windowWidthStub.value(2); + }); + + it('should write a newline followed by a comma', function() { + var runner = createMockRunner('pending', EVENT_TEST_PENDING); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['\n ', 'pending_' + Base.symbols.comma]; expect(stdout, 'to equal', expectedArray); }); }); - }); - describe('if window width is equal to or less than 1', function() { - describe('if test speed is fast', function() { - it('should write a grey dot', function() { - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(test.speed, 'to equal', 'fast'); - var expectedArray = ['fast_' + Base.symbols.dot]; + + describe('when window width is less than or equal to 1', function() { + it('should write a comma', function() { + var runner = createMockRunner('pending', EVENT_TEST_PENDING); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['pending_' + Base.symbols.comma]; expect(stdout, 'to equal', expectedArray); }); }); - describe('if test speed is medium', function() { - it('should write a yellow dot', function() { - test.duration = 2; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(test.speed, 'to equal', 'medium'); - var expectedArray = ['medium_' + Base.symbols.dot]; - expect(stdout, 'to equal', expectedArray); + }); + + describe("on 'pass' event", function() { + var test = { + duration: 1, + slow: function() { + return 2; + } + }; + + describe('when window width is greater than 1', function() { + beforeEach(function() { + windowWidthStub.value(2); + }); + + describe('when test speed is fast', function() { + it('should write a newline followed by a dot', function() { + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + expect(test.speed, 'to equal', 'fast'); + var expectedArray = ['\n ', 'fast_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); }); }); - describe('if test speed is slow', function() { - it('should write a bright yellow dot', function() { - test.duration = 3; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(test.speed, 'to equal', 'slow'); - var expectedArray = ['bright-yellow_' + Base.symbols.dot]; - expect(stdout, 'to equal', expectedArray); + + describe('when window width is less than or equal to 1', function() { + describe('when test speed is fast', function() { + it('should write a grey dot', function() { + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + expect(test.speed, 'to equal', 'fast'); + var expectedArray = ['fast_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('when test speed is medium', function() { + it('should write a yellow dot', function() { + test.duration = 2; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + expect(test.speed, 'to equal', 'medium'); + var expectedArray = ['medium_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe('when test speed is slow', function() { + it('should write a bright yellow dot', function() { + test.duration = 3; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + expect(test.speed, 'to equal', 'slow'); + var expectedArray = ['bright-yellow_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); }); }); }); - }); - describe('on fail', function() { - var test = { - test: { - err: 'some error' - } - }; - describe('if window width is greater than 1', function() { - beforeEach(function() { - Base.window.width = 2; + + describe("on 'fail' event", function() { + var test = { + test: { + err: 'some error' + } + }; + + describe('when window width is greater than 1', function() { + beforeEach(function() { + windowWidthStub.value(2); + }); + + it('should write a newline followed by an exclamation mark', function() { + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['\n ', 'fail_' + Base.symbols.bang]; + expect(stdout, 'to equal', expectedArray); + }); }); - it('should write a newline followed by an exclamation mark', function() { - runner = createMockRunner('fail', 'fail', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['\n ', 'fail_' + Base.symbols.bang]; - expect(stdout, 'to equal', expectedArray); + + describe('when window width is less than or equal to 1', function() { + it('should write an exclamation mark', function() { + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = ['fail_' + Base.symbols.bang]; + expect(stdout, 'to equal', expectedArray); + }); }); }); - describe('if window width is equal to or less than 1', function() { - it('should write an exclamation mark', function() { - runner = createMockRunner('fail', 'fail', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = ['fail_' + Base.symbols.bang]; - expect(stdout, 'to equal', expectedArray); + + describe("on 'end' event", function() { + it('should call epilogue', function() { + var runner = createMockRunner('end', EVENT_RUN_END); + var fakeThis = { + epilogue: sinon.stub() + }; + var options = {}; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(fakeThis.epilogue.called, 'to be true'); }); }); }); - describe('on end', function() { - it('should call the epilogue', function() { - runner = createMockRunner('end', 'end'); - var epilogueCalled = false; - var epilogue = function() { - epilogueCalled = true; - }; - runReporter({epilogue: epilogue}, runner, options); - expect(epilogueCalled, 'to be', true); - }); - }); }); diff --git a/test/reporters/helpers.js b/test/reporters/helpers.js index 5cb21a53f2..76b3d79307 100644 --- a/test/reporters/helpers.js +++ b/test/reporters/helpers.js @@ -1,17 +1,22 @@ 'use strict'; +var sinon = require('sinon'); var errors = require('../../lib/errors'); -var createUnsupportedError = errors.createUnsupportedError; -/* - This function prevents the constant use of creating a runnerEvent. - runStr is the argument that defines the runnerEvent. - ifStr1 is one possible reporter argument, as is ifStr2, and ifStr3 - arg1 and arg2 are the possible variables that need to be put into the - scope of this function for the tests to run properly. -*/ - var createStatsCollector = require('../../lib/stats-collector'); +var createUnsupportedError = errors.createUnsupportedError; + +/** + * Creates a mock runner object. + * + * @param {string} runStr - argument that defines the runnerEvent + * @param {string} ifStr1 - runner event + * @param {(string|null)} [ifStr2] - runner event + * @param {(string|null)} [ifStr3] - runner event + * @param {(*|null)} [arg1] - variable to be added to event handler's scope + * @param {(*|null)} [arg2] - variable to be added to event handler's scope + * @return {Object} mock runner instance + */ function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { var runnerFunction = createRunnerFunction( runStr, @@ -29,6 +34,20 @@ function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { return mockRunner; } +/** + * Creates an event handler function to be used by the runner. + * + * @description + * Arguments 'ifStr1', 'ifStr2', and 'ifStr3' should be `Runner.constants`. + * + * @param {string} runStr - argument that defines the runnerEvent + * @param {string} ifStr1 - runner event + * @param {(string|null)} [ifStr2] - runner event + * @param {(string|null)} [ifStr3] - runner event + * @param {(*|null)} [arg1] - variable to be added to event handler's scope + * @param {(*|null)} [arg2] - variable to be added to event handler's scope + * @return {Function} event handler for the requested runner events + */ function createRunnerFunction(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { var test = null; switch (runStr) { @@ -178,23 +197,35 @@ function createRunReporterFunction(ctor) { * @return {string[]} Lines of output written to `stdout` */ var runReporter = function(stubSelf, runner, options, tee) { + var origStdoutWrite = process.stdout.write; + var stdoutWriteStub = sinon.stub(process.stdout, 'write'); var stdout = []; - // Reassign stream in order to make a copy of all reporter output - var stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); + var gather = function(chunk, enc, callback) { + stdout.push(chunk); if (tee) { - stdoutWrite.call(process.stdout, string, enc, callback); + origStdoutWrite.call(process.stdout, chunk); } }; - // Invoke reporter - ctor.call(stubSelf, runner, options); + // Reassign stream in order to make a copy of all reporter output + stdoutWriteStub.callsFake(gather); + + // Give `stubSelf` access to `ctor` prototype chain + Object.setPrototypeOf(stubSelf, ctor.prototype); - // Revert stream reassignment here so reporter output - // can't be corrupted if any test assertions throw - process.stdout.write = stdoutWrite; + try { + try { + // Invoke reporter + ctor.call(stubSelf, runner, options); + } finally { + // Revert stream reassignment here so reporter output + // can't be corrupted if any test assertions throw + stdoutWriteStub.restore(); + } + } catch (err) { + throw err; // Rethrow + } return stdout; }; diff --git a/test/reporters/json-stream.spec.js b/test/reporters/json-stream.spec.js index 8c9fcfff35..de83f861b2 100644 --- a/test/reporters/json-stream.spec.js +++ b/test/reporters/json-stream.spec.js @@ -1,15 +1,22 @@ 'use strict'; +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; +var utils = require('../../lib/utils'); + var JSONStream = reporters.JSONStream; +var createMockRunner = helpers.createMockRunner; +var dQuote = utils.dQuote; +var makeExpectedTest = helpers.makeExpectedTest; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeExpectedTest = require('./helpers').makeExpectedTest; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; describe('JSON Stream reporter', function() { - var runner; - var options = {}; var runReporter = makeRunReporter(JSONStream); var expectedTitle = 'some title'; var expectedFullTitle = 'full title'; @@ -27,119 +34,126 @@ describe('JSON Stream reporter', function() { message: expectedErrorMessage }; - afterEach(function() { - runner = undefined; - }); - - describe('on start', function() { - it('should write stringified start with expected total', function() { - runner = createMockRunner('start', 'start'); - var expectedTotal = 12; - runner.total = expectedTotal; - var stdout = runReporter({}, runner, options); - - expect( - stdout[0], - 'to equal', - '["start",{"total":' + expectedTotal + '}]\n' - ); - }); - }); - - describe('on pass', function() { - it('should write stringified test data', function() { - runner = createMockRunner('pass', 'pass', null, null, expectedTest); - var stdout = runReporter({}, runner, options); - - expect( - stdout[0], - 'to equal', - '["pass",{"title":"' + - expectedTitle + - '","fullTitle":"' + - expectedFullTitle + - '","duration":' + - expectedDuration + - ',"currentRetry":' + - currentRetry + - '}]\n' - ); - }); - }); - - describe('on fail', function() { - describe('if error stack exists', function() { - it('should write stringified test data with error data', function() { - expectedError.stack = expectedErrorStack; - runner = createMockRunner( - 'fail two args', - 'fail', - null, - null, - expectedTest, - expectedError - ); - + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should write stringified start with expected total', function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var expectedTotal = 12; + runner.total = expectedTotal; + var options = {}; var stdout = runReporter({}, runner, options); expect( stdout[0], 'to equal', - '["fail",{"title":"' + - expectedTitle + - '","fullTitle":"' + - expectedFullTitle + - '","duration":' + - expectedDuration + - ',"currentRetry":' + - currentRetry + - ',"err":"' + - expectedErrorMessage + - '","stack":"' + - expectedErrorStack + - '"}]\n' + '["start",{"total":' + expectedTotal + '}]\n' ); }); }); - describe('if error stack does not exist', function() { - it('should write stringified test data with error data', function() { - expectedError.stack = null; - runner = createMockRunner( - 'fail two args', - 'fail', + describe("on 'pass' event", function() { + it('should write stringified test data', function() { + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, null, null, - expectedTest, - expectedError + expectedTest ); - - var stdout = runReporter(this, runner, options); + var options = {}; + var stdout = runReporter({}, runner, options); expect( stdout[0], 'to equal', - '["fail",{"title":"' + - expectedTitle + - '","fullTitle":"' + - expectedFullTitle + - '","duration":' + + '["pass",{"title":' + + dQuote(expectedTitle) + + ',"fullTitle":' + + dQuote(expectedFullTitle) + + ',"duration":' + expectedDuration + ',"currentRetry":' + currentRetry + - ',"err":"' + - expectedErrorMessage + - '","stack":null}]\n' + '}]\n' ); }); }); - }); - describe('on end', function() { - it('should write end details', function() { - runner = createMockRunner('end', 'end'); - var stdout = runReporter(this, runner, options); - expect(stdout[0], 'to match', /end/); + describe("on 'fail' event", function() { + describe('when error stack exists', function() { + it('should write stringified test data with error data', function() { + expectedError.stack = expectedErrorStack; + var runner = createMockRunner( + 'fail two args', + EVENT_TEST_FAIL, + null, + null, + expectedTest, + expectedError + ); + var options = {}; + var stdout = runReporter({}, runner, options); + + expect( + stdout[0], + 'to equal', + '["fail",{"title":' + + dQuote(expectedTitle) + + ',"fullTitle":' + + dQuote(expectedFullTitle) + + ',"duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + ',"err":' + + dQuote(expectedErrorMessage) + + ',"stack":' + + dQuote(expectedErrorStack) + + '}]\n' + ); + }); + }); + + describe('when error stack does not exist', function() { + it('should write stringified test data with error data', function() { + expectedError.stack = null; + var runner = createMockRunner( + 'fail two args', + EVENT_TEST_FAIL, + null, + null, + expectedTest, + expectedError + ); + var options = {}; + var stdout = runReporter(this, runner, options); + + expect( + stdout[0], + 'to equal', + '["fail",{"title":' + + dQuote(expectedTitle) + + ',"fullTitle":' + + dQuote(expectedFullTitle) + + ',"duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + ',"err":' + + dQuote(expectedErrorMessage) + + ',"stack":null}]\n' + ); + }); + }); + }); + + describe("on 'end' event", function() { + it('should write summary statistics', function() { + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + var stdout = runReporter(this, runner, options); + expect(stdout[0], 'to match', /end/); + }); }); }); }); diff --git a/test/reporters/json.spec.js b/test/reporters/json.spec.js index 5d7a37c564..f6299dd134 100644 --- a/test/reporters/json.spec.js +++ b/test/reporters/json.spec.js @@ -7,8 +7,11 @@ var Runner = Mocha.Runner; var Test = Mocha.Test; describe('JSON reporter', function() { - var suite, runner; + var sandbox; + var suite; + var runner; var testTitle = 'json test 1'; + var noop = function() {}; beforeEach(function() { var mocha = new Mocha({ @@ -16,8 +19,18 @@ describe('JSON reporter', function() { }); suite = new Suite('JSON suite', 'root'); runner = new Runner(suite); + var options = {}; /* eslint no-unused-vars: off */ - var mochaReporter = new mocha._reporter(runner); + var mochaReporter = new mocha._reporter(runner, options); + }); + + beforeEach(function() { + sandbox = sinon.createSandbox(); + sandbox.stub(process.stdout, 'write').callsFake(noop); + }); + + afterEach(function() { + sandbox.restore(); }); it('should have 1 test failure', function(done) { @@ -29,9 +42,8 @@ describe('JSON reporter', function() { }) ); - var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - stdoutWrite.restore(); + sandbox.restore(); expect(runner, 'to satisfy', { testResults: { failures: [ @@ -52,9 +64,8 @@ describe('JSON reporter', function() { it('should have 1 test pending', function(done) { suite.addTest(new Test(testTitle)); - var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - stdoutWrite.restore(); + sandbox.restore(); expect(runner, 'to satisfy', { testResults: { pending: [ @@ -83,9 +94,8 @@ describe('JSON reporter', function() { }) ); - var stdoutWrite = sinon.stub(process.stdout, 'write'); runner.run(function(failureCount) { - stdoutWrite.restore(); + sandbox.restore(); expect(runner, 'to satisfy', { testResults: { failures: [ diff --git a/test/reporters/landing.spec.js b/test/reporters/landing.spec.js index dd73d9e5b3..acb2ee3ef6 100644 --- a/test/reporters/landing.spec.js +++ b/test/reporters/landing.spec.js @@ -1,20 +1,25 @@ 'use strict'; -var sandbox = require('sinon').createSandbox(); -var Mocha = require('../..'); -var reporters = Mocha.reporters; -var Landing = reporters.Landing; -var constants = Mocha.Runnable.constants; -var STATE_FAILED = constants.STATE_FAILED; -var STATE_PASSED = constants.STATE_PASSED; +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); +var reporters = require('../../').reporters; +var states = require('../../').Runnable.constants; + var Base = reporters.Base; +var Landing = reporters.Landing; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_END = events.EVENT_TEST_END; + +var STATE_FAILED = states.STATE_FAILED; +var STATE_PASSED = states.STATE_PASSED; describe('Landing reporter', function() { - var runner; - var options = {}; + var sandbox; var runReporter = makeRunReporter(Landing); var resetCode = '\u001b[0m'; var expectedArray = [ @@ -29,73 +34,98 @@ describe('Landing reporter', function() { ]; beforeEach(function() { + sandbox = sinon.createSandbox(); sandbox.stub(Base, 'useColors').value(false); sandbox.stub(Base.window, 'width').value(1); }); afterEach(function() { sandbox.restore(); - runner = undefined; }); - describe('on start', function() { - it('should write new lines', function() { - sandbox.stub(Base.cursor, 'hide'); - - runner = createMockRunner('start', 'start'); - var stdout = runReporter({}, runner, options); + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should write newlines', function() { + sandbox.stub(Base.cursor, 'hide'); - expect(stdout[0], 'to equal', '\n\n\n '); - }); + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + var stdout = runReporter({}, runner, options); + sandbox.restore(); - it('should call cursor hide', function() { - sandbox.stub(Base.cursor, 'hide'); + expect(stdout[0], 'to equal', '\n\n\n '); + }); - runner = createMockRunner('start', 'start'); - runReporter({}, runner, options); + it('should call cursor hide', function() { + var hideCursorStub = sandbox.stub(Base.cursor, 'hide'); - expect(Base.cursor.hide, 'was called'); - }); - }); + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + runReporter({}, runner, options); + sandbox.restore(); - describe('on test end', function() { - describe('if test has failed', function() { - it('should write expected landing strip', function() { - var test = { - state: STATE_FAILED - }; - runner = createMockRunner('test end', 'test end', null, null, test); - runner.total = 12; - var stdout = runReporter({}, runner, options); - - expect(stdout, 'to equal', expectedArray); + expect(hideCursorStub.called, 'to be true'); }); }); - describe('if test has not failed', function() { - it('should write expected landing strip', function() { - var test = { - state: STATE_PASSED - }; - runner = createMockRunner('test end', 'test end', null, null, test); - var stdout = runReporter({}, runner, options); + describe("on 'test end' event", function() { + describe('when test passes', function() { + it('should write expected landing strip', function() { + var test = { + state: STATE_PASSED + }; + var runner = createMockRunner( + 'test end', + EVENT_TEST_END, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({}, runner, options); + sandbox.restore(); + + expect(stdout, 'to equal', expectedArray); + }); + }); - expect(stdout, 'to equal', expectedArray); + describe('when test fails', function() { + it('should write expected landing strip', function() { + var test = { + state: STATE_FAILED + }; + var runner = createMockRunner( + 'test end', + EVENT_TEST_END, + null, + null, + test + ); + runner.total = 12; + var options = {}; + var stdout = runReporter({}, runner, options); + sandbox.restore(); + + expect(stdout, 'to equal', expectedArray); + }); }); }); - }); - describe('on end', function() { - it('should call cursor show and epilogue', function() { - var reporterStub = {epilogue: function() {}}; - sandbox.stub(Base.cursor, 'show'); - sandbox.stub(reporterStub, 'epilogue'); - runner = createMockRunner('end', 'end'); + describe("on 'end' event", function() { + it('should call cursor show and epilogue', function() { + var showCursorStub = sandbox.stub(Base.cursor, 'show'); - runReporter(reporterStub, runner, options); + var fakeThis = { + epilogue: sinon.spy() + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); + sandbox.restore(); - expect(reporterStub.epilogue, 'was called'); - expect(Base.cursor.show, 'was called'); + expect(fakeThis.epilogue.calledOnce, 'to be true'); + expect(showCursorStub.called, 'to be true'); + }); }); }); }); diff --git a/test/reporters/list.spec.js b/test/reporters/list.spec.js index c9eceb87fe..c10272e953 100644 --- a/test/reporters/list.spec.js +++ b/test/reporters/list.spec.js @@ -1,144 +1,246 @@ 'use strict'; -var sandbox = require('sinon').createSandbox(); +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var List = reporters.List; + var Base = reporters.Base; +var List = reporters.List; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_BEGIN = events.EVENT_TEST_BEGIN; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('List reporter', function() { - var runner; - var options = {}; + var sandbox; var runReporter = makeRunReporter(List); var expectedTitle = 'some title'; var expectedDuration = 100; + var noop = function() {}; var test = { fullTitle: function() { return expectedTitle; }, duration: expectedDuration, - slow: function() {} + slow: noop }; beforeEach(function() { + sandbox = sinon.createSandbox(); sandbox.stub(Base, 'useColors').value(false); }); afterEach(function() { sandbox.restore(); - runner = undefined; }); - describe('on start and test', function() { - it('should write expected new line and title to the console', function() { - runner = createMockRunner('start test', 'start', 'test', null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - - var startString = '\n'; - var testString = ' ' + expectedTitle + ': '; - var expectedArray = [startString, testString]; - expect(stdout, 'to equal', expectedArray); + describe('event handlers', function() { + describe("on 'start' and 'test' events", function() { + it('should write expected newline and title', function() { + var runner = createMockRunner( + 'start test', + EVENT_RUN_BEGIN, + EVENT_TEST_BEGIN, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + sandbox.restore(); + + var startString = '\n'; + var testString = ' ' + expectedTitle + ': '; + var expectedArray = [startString, testString]; + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe('on pending', function() { - it('should write expected title to the console', function() { - runner = createMockRunner('pending test', 'pending', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n'); + describe("on 'pending' event", function() { + it('should write expected title', function() { + var runner = createMockRunner( + 'pending test', + EVENT_TEST_PENDING, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n'); + }); }); - }); - describe('on pass', function() { - it('should call cursor CR', function() { - sandbox.stub(Base.cursor, 'CR'); - runner = createMockRunner('pass', 'pass', null, null, test); - runReporter({epilogue: function() {}}, runner, options); - - expect(Base.cursor.CR, 'was called'); - }); - it('should write expected symbol, title and duration to the console', function() { - var expectedOkSymbol = 'OK'; - sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol); - sandbox.stub(Base.cursor, 'CR'); - - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - - expect( - stdout[0], - 'to be', - ' ' + - expectedOkSymbol + - ' ' + - expectedTitle + - ': ' + - expectedDuration + - 'ms\n' - ); + describe("on 'pass' event", function() { + var crStub; + + beforeEach(function() { + crStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); + }); + + it('should call cursor CR', function() { + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(crStub.called, 'to be true'); + }); + + it('should write expected symbol, title, and duration', function() { + var expectedOkSymbol = 'OK'; + sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol); + + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect( + stdout[0], + 'to be', + ' ' + + expectedOkSymbol + + ' ' + + expectedTitle + + ': ' + + expectedDuration + + 'ms\n' + ); + }); }); - }); - describe('on fail', function() { - it('should call cursor CR', function() { - sandbox.stub(Base.cursor, 'CR'); - - runner = createMockRunner('fail', 'fail', null, null, test); - runReporter({epilogue: function() {}}, runner, options); - expect(Base.cursor.CR, 'was called'); - }); - it('should write expected error number and title', function() { - sandbox.stub(Base.cursor, 'CR'); - - var expectedErrorCount = 1; - runner = createMockRunner('fail', 'fail', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - - expect( - stdout[0], - 'to be', - ' ' + expectedErrorCount + ') ' + expectedTitle + '\n' - ); - }); - it('should immediately construct fail strings', function() { - var actual = {a: 'actual'}; - var expected = {a: 'expected'}; - var checked = false; - var err; - test = {}; - runner = createMockRunner('fail', 'fail', null, null, test); - runner.on = runner.once = function(event, callback) { - if ( - !checked && - event === 'fail' && - callback.toString().includes('stringifyDiffObjs') // target correct fail event callback - ) { - err = new Error('fake failure object with actual/expected'); - err.actual = actual; - err.expected = expected; - err.showDiff = true; - callback(test, err); - checked = true; - } - }; - runReporter({epilogue: function() {}}, runner, options); - - expect(typeof err.actual, 'to be', 'string'); - expect(typeof err.expected, 'to be', 'string'); + describe("on 'fail' event", function() { + var crStub; + + beforeEach(function() { + crStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); + }); + + it('should call cursor CR', function() { + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(crStub.called, 'to be true'); + }); + + it('should write expected error number and title', function() { + var expectedErrorCount = 1; + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect( + stdout[0], + 'to be', + ' ' + expectedErrorCount + ') ' + expectedTitle + '\n' + ); + }); + + it('should immediately construct fail strings', function() { + var actual = {a: 'actual'}; + var expected = {a: 'expected'}; + var checked = false; + var err; + test = {}; + + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + runner.on = runner.once = function(event, callback) { + if ( + !checked && + event === 'fail' && + callback.toString().includes('stringifyDiffObjs') // target correct fail event callback + ) { + err = new Error('fake failure object with actual/expected'); + err.actual = actual; + err.expected = expected; + err.showDiff = true; + callback(test, err); + checked = true; + } + }; + var options = {}; + var fakeThis = { + epilogue: noop + }; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(typeof err.actual, 'to be', 'string'); + expect(typeof err.expected, 'to be', 'string'); + }); }); - }); - - describe('on end', function() { - it('should call epilogue', function() { - var reporterStub = {epilogue: function() {}}; - sandbox.stub(reporterStub, 'epilogue'); - - runner = createMockRunner('end', 'end'); - runReporter(reporterStub, runner, options); - expect(reporterStub.epilogue, 'was called'); + describe("on 'end' event", function() { + it('should call epilogue', function() { + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + var fakeThis = { + epilogue: sinon.spy() + }; + runReporter(fakeThis, runner, options); + sandbox.restore(); + + expect(fakeThis.epilogue.calledOnce, 'to be true'); + }); }); }); }); diff --git a/test/reporters/markdown.spec.js b/test/reporters/markdown.spec.js index 842d7c7643..e068c58cea 100644 --- a/test/reporters/markdown.spec.js +++ b/test/reporters/markdown.spec.js @@ -1,102 +1,115 @@ 'use strict'; +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; + var Markdown = reporters.Markdown; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; +var EVENT_SUITE_END = events.EVENT_SUITE_END; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; describe('Markdown reporter', function() { - var runner; - var options = {}; var runReporter = makeRunReporter(Markdown); var expectedTitle = 'expected title'; var expectedFullTitle = 'full title'; var sluggedFullTitle = 'full-title'; + var noop = function() {}; - afterEach(function() { - runner = undefined; - }); - - describe("on 'suite'", function() { - it("should write expected slugged titles on 'end' event", function() { - var expectedSuite = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [ - { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [] - } - ] - }; - runner = createMockRunner( - 'suite suite end', - 'suite', - 'suite end', - 'end', - expectedSuite - ); - runner.suite = expectedSuite; - var stdout = runReporter({}, runner, options); + describe('event handlers', function() { + describe("on 'suite' event", function() { + it("should write expected slugged titles on 'end' event", function() { + var expectedSuite = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [ + { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [] + } + ] + }; + var runner = createMockRunner( + 'suite suite end', + EVENT_SUITE_BEGIN, + EVENT_SUITE_END, + EVENT_RUN_END, + expectedSuite + ); + runner.suite = expectedSuite; + var options = {}; + var stdout = runReporter({}, runner, options); - var expectedArray = [ - '# TOC\n', - ' - [' + - expectedTitle + - '](#' + - sluggedFullTitle + - ')\n - [' + - expectedTitle + - '](#' + - sluggedFullTitle + - ')\n', - '\n ' + expectedTitle + '\n' - ]; + var expectedArray = [ + '# TOC\n', + ' - [' + + expectedTitle + + '](#' + + sluggedFullTitle + + ')\n - [' + + expectedTitle + + '](#' + + sluggedFullTitle + + ')\n', + '\n ' + expectedTitle + '\n' + ]; - expect(stdout, 'to equal', expectedArray); + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe("on 'pass'", function() { - it("should write test code inside js code block, on 'end' event", function() { - var expectedSuite = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - suites: [] - }; - var expectedDuration = 1000; - var currentRetry = 1; - var expectedBody = 'some body'; - var expectedTest = { - title: expectedTitle, - fullTitle: function() { - return expectedFullTitle; - }, - duration: expectedDuration, - currentRetry: function() { - return currentRetry; - }, - slow: function() {}, - body: expectedBody - }; - runner = createMockRunner('pass end', 'pass', 'end', null, expectedTest); - runner.suite = expectedSuite; - var stdout = runReporter({}, runner, options); - var expectedArray = [ - '# TOC\n', - ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n', - expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n' - ]; + describe("on 'pass' event", function() { + it("should write test code inside js code block, on 'end' event", function() { + var expectedSuite = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [] + }; + var expectedDuration = 1000; + var currentRetry = 1; + var expectedBody = 'some body'; + var expectedTest = { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + duration: expectedDuration, + currentRetry: function() { + return currentRetry; + }, + slow: noop, + body: expectedBody + }; + var runner = createMockRunner( + 'pass end', + EVENT_TEST_PASS, + EVENT_RUN_END, + null, + expectedTest + ); + runner.suite = expectedSuite; + var options = {}; + var stdout = runReporter({}, runner, options); + + var expectedArray = [ + '# TOC\n', + ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n', + expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n' + ]; - expect(stdout, 'to equal', expectedArray); + expect(stdout, 'to equal', expectedArray); + }); }); }); }); diff --git a/test/reporters/min.spec.js b/test/reporters/min.spec.js index f88adf31d7..1fe46333cf 100644 --- a/test/reporters/min.spec.js +++ b/test/reporters/min.spec.js @@ -1,45 +1,47 @@ 'use strict'; +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; + var Min = reporters.Min; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; describe('Min reporter', function() { - var runner; - var options = {}; var runReporter = makeRunReporter(Min); - - afterEach(function() { - runner = undefined; - }); - - describe('on start', function() { - it('should clear screen then set cursor position', function() { - runner = createMockRunner('start', 'start'); - var stdout = runReporter({epilogue: function() {}}, runner, options); - - var expectedArray = ['\u001b[2J', '\u001b[1;3H']; - expect(stdout, 'to equal', expectedArray); + var noop = function() {}; + + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should clear screen then set cursor position', function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + var fakeThis = { + epilogue: noop + }; + var stdout = runReporter(fakeThis, runner, options); + + var expectedArray = ['\u001b[2J', '\u001b[1;3H']; + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe('on end', function() { - it('should call epilogue', function() { - var calledEpilogue = false; - runner = createMockRunner('end', 'end'); - runReporter( - { - epilogue: function() { - calledEpilogue = true; - } - }, - runner, - options - ); - - expect(calledEpilogue, 'to be', true); + describe("on 'end' event", function() { + it('should call epilogue', function() { + var fakeThis = { + epilogue: sinon.stub().callsFake(noop) + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); + + expect(fakeThis.epilogue.called, 'to be true'); + }); }); }); }); diff --git a/test/reporters/nyan.spec.js b/test/reporters/nyan.spec.js index b1ad3a22a3..05d2e1bf77 100644 --- a/test/reporters/nyan.spec.js +++ b/test/reporters/nyan.spec.js @@ -1,172 +1,205 @@ 'use strict'; -var sandbox = require('sinon').createSandbox(); +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var NyanCat = reporters.Nyan; + var Base = reporters.Base; +var NyanCat = reporters.Nyan; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('Nyan reporter', function() { - describe('events', function() { - var runner; - var options = {}; - var runReporter = makeRunReporter(NyanCat); + var sandbox; + var noop = function() {}; - afterEach(function() { - sandbox.restore(); - runner = undefined; - }); + beforeEach(function() { + sandbox = sinon.createSandbox(); + }); - describe('on start', function() { + afterEach(function() { + sandbox.restore(); + }); + + describe('event handlers', function() { + var runReporter = makeRunReporter(NyanCat); + + describe("on 'start' event", function() { it('should call draw', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {} + var fakeThis = { + draw: sinon.stub().callsFake(noop), + generateColors: noop }; - sandbox.stub(reporterStub, 'draw'); - runner = createMockRunner('start', 'start'); - runReporter(reporterStub, runner, options); + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + runReporter(fakeThis, runner, options); - expect(reporterStub.draw, 'was called'); + expect(fakeThis.draw.called, 'to be true'); }); }); - describe('on pending', function() { + + describe("on 'pending' event", function() { it('should call draw', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {} + var fakeThis = { + draw: sinon.stub().callsFake(noop), + generateColors: noop }; - sandbox.stub(reporterStub, 'draw'); + var runner = createMockRunner('pending', EVENT_TEST_PENDING); + var options = {}; + runReporter(fakeThis, runner, options); - runner = createMockRunner('pending', 'pending'); - runReporter(reporterStub, runner, options); - - expect(reporterStub.draw, 'was called'); + expect(fakeThis.draw.called, 'to be true'); }); }); - describe('on pass', function() { - it('should call draw', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {} - }; - sandbox.stub(reporterStub, 'draw'); + describe("on 'pass' event", function() { + it('should call draw', function() { var test = { duration: '', - slow: function() {} + slow: noop }; - runner = createMockRunner('pass', 'pass', null, null, test); - runReporter(reporterStub, runner, options); + var fakeThis = { + draw: sinon.stub().callsFake(noop), + generateColors: noop + }; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + runReporter(fakeThis, runner, options); - expect(reporterStub.draw, 'was called'); + expect(fakeThis.draw.called, 'to be true'); }); }); - describe('on fail', function() { - it('should call draw', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {} - }; - sandbox.stub(reporterStub, 'draw'); + describe("on 'fail' event", function() { + it('should call draw', function() { var test = { err: '' }; - runner = createMockRunner('fail', 'fail', null, null, test); - runReporter(reporterStub, runner, options); + var fakeThis = { + draw: sinon.stub().callsFake(noop), + generateColors: noop + }; + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + runReporter(fakeThis, runner, options); - expect(reporterStub.draw, 'was called'); + expect(fakeThis.draw.called, 'to be true'); }); }); - describe('on end', function() { + + describe("on 'end' event", function() { it('should call epilogue', function() { - var reporterStub = { - draw: function() {}, - generateColors: function() {}, - epilogue: function() {} + var fakeThis = { + draw: noop, + epilogue: sinon.stub().callsFake(noop), + generateColors: noop }; - sandbox.stub(reporterStub, 'epilogue'); - - runner = createMockRunner('end', 'end'); - runReporter(reporterStub, runner, options); + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); - expect(reporterStub.epilogue, 'was called'); + expect(fakeThis.epilogue.called, 'to be true'); }); - it('should write numberOfLines amount of new lines', function() { + + it('should write numberOfLines amount of newlines', function() { var expectedNumberOfLines = 4; - runner = createMockRunner('end', 'end'); - var stdout = runReporter( - { - draw: function() {}, - generateColors: function() {}, - epilogue: function() {} - }, - runner, - options - ); + var fakeThis = { + draw: noop, + epilogue: noop, + generateColors: noop + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + var stdout = runReporter(fakeThis, runner, options); - var arrayOfNewlines = stdout.filter(function(value) { + var isBlankLine = function(value) { return value === '\n'; - }); + }; - expect(arrayOfNewlines, 'to have length', expectedNumberOfLines); + expect( + stdout.filter(isBlankLine), + 'to have length', + expectedNumberOfLines + ); }); + it('should call Base show', function() { - sandbox.stub(Base.cursor, 'show'); - - runner = createMockRunner('end', 'end'); - runReporter( - { - draw: function() {}, - generateColors: function() {}, - epilogue: function() {} - }, - runner, - options - ); + var showCursorStub = sandbox.stub(Base.cursor, 'show'); + var fakeThis = { + draw: noop, + epilogue: noop, + generateColors: noop + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); + sandbox.restore(); - expect(Base.cursor.show, 'was called'); + expect(showCursorStub.called, 'to be true'); }); }); }); - describe('draw', function() { + describe('#draw', function() { + var stdoutWriteStub; var stdout; - var stdoutWrite; beforeEach(function() { + stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - }; }); - afterEach(function() { - process.stdout.write = stdoutWrite; - }); - - describe('if tick is false', function() { + describe("when 'tick' is false", function() { it('should draw face with expected spaces, _ and ^', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; - - nyanCat.draw.call({ + var fakeThis = { tick: false, - appendRainbow: function() {}, - rainbowify: function() {}, - drawScoreboard: function() {}, - drawRainbow: function() {}, + appendRainbow: noop, + rainbowify: noop, + drawScoreboard: noop, + drawRainbow: noop, drawNyanCat: NyanCat.prototype.drawNyanCat, scoreboardWidth: 0, trajectories: [[]], - face: function() {}, - cursorUp: function() {} - }); + face: noop, + cursorUp: noop + }; + + try { + try { + nyanCat.draw.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } var expectedArray = [ '\u001b[0C', @@ -185,23 +218,35 @@ describe('Nyan reporter', function() { expect(stdout, 'to equal', expectedArray); }); }); - describe('if tick is true', function() { + + describe("when 'tick' is true", function() { it('should draw face with expected spaces, _ and ~', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; - - nyanCat.draw.call({ + var fakeThis = { tick: true, - appendRainbow: function() {}, - rainbowify: function() {}, - drawScoreboard: function() {}, - drawRainbow: function() {}, + appendRainbow: noop, + rainbowify: noop, + drawScoreboard: noop, + drawRainbow: noop, drawNyanCat: NyanCat.prototype.drawNyanCat, scoreboardWidth: 0, trajectories: [[]], - face: function() {}, - cursorUp: function() {} - }); + face: noop, + cursorUp: noop + }; + + try { + try { + nyanCat.draw.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } var expectedArray = [ '\u001b[0C', @@ -222,102 +267,136 @@ describe('Nyan reporter', function() { }); }); - describe('cursorDown', function() { + describe('#cursorDown', function() { + var stdoutWriteStub; var stdout; - var stdoutWrite; beforeEach(function() { + stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string) { - stdout.push(string); - }; - }); - - afterEach(function() { - process.stdout.write = stdoutWrite; }); it('should write cursor down interaction with expected number', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var expectedNumber = 25; - nyanCat.cursorDown(expectedNumber); + try { + try { + nyanCat.cursorDown(expectedNumber); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + var expectedArray = ['\u001b[' + expectedNumber + 'B']; expect(stdout, 'to equal', expectedArray); }); }); - describe('cursorUp', function() { + describe('#cursorUp', function() { + var stdoutWriteStub; var stdout; - var stdoutWrite; beforeEach(function() { + stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - }; - }); - - afterEach(function() { - process.stdout.write = stdoutWrite; }); it('should write cursor up interaction with expected number', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var expectedNumber = 25; - nyanCat.cursorUp(expectedNumber); + try { + try { + nyanCat.cursorUp(expectedNumber); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + var expectedArray = ['\u001b[' + expectedNumber + 'A']; expect(stdout, 'to equal', expectedArray); }); }); - describe('rainbowify', function() { - describe('useColors is false', function() { + describe('#rainbowify', function() { + var useColorsStub; + + beforeEach(function() { + useColorsStub = sandbox.stub(Base, 'useColors'); + }); + + afterEach(function() { + sandbox.restore(); + }); + + describe("when 'useColors' is false", function() { beforeEach(function() { - sandbox.stub(Base, 'useColors').value(false); + useColorsStub.value(false); }); it('should return argument string', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - var expectedString = 'hello'; - var outputString = nyanCat.rainbowify(expectedString); + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + + var inputString = 'hello'; + var outputString = nyanCat.rainbowify(inputString); + sandbox.restore(); + var expectedString = inputString; expect(outputString, 'to be', expectedString); }); }); - describe('useColors is true', function() { + + describe("when 'useColors' is true", function() { beforeEach(function() { - sandbox.stub(Base, 'useColors').value(true); + useColorsStub.value(true); }); it('should return rainbowified string from the given string and predefined codes', function() { - var startCode = '\u001b[38;5;'; - var endCode = '\u001b[0m'; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - var expectedString = 'hello'; + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + + var inputString = 'hello'; var colorCode = 'somecode'; - var expectedRainbowifyString = - startCode + colorCode + 'm' + expectedString + endCode; - var outputString = nyanCat.rainbowify.call( - { - rainbowColors: [colorCode], - colorIndex: 0 - }, - expectedString - ); + var fakeThis = { + rainbowColors: [colorCode], + colorIndex: 0 + }; + var outputString = nyanCat.rainbowify.call(fakeThis, inputString); + sandbox.restore(); - expect(outputString, 'to be', expectedRainbowifyString); + var startCode = '\u001b[38;5;'; + var endCode = '\u001b[0m'; + var expectedString = + startCode + colorCode + 'm' + inputString + endCode; + expect(outputString, 'to be', expectedString); }); }); }); - describe('appendRainbow', function() { - describe('if tick is true', function() { - it('should set an _ segment', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + describe('#appendRainbow', function() { + describe("when 'tick' is true", function() { + it('should set an underscore segment', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var expectedSegment; var inputArray = []; var trajectories = [inputArray, inputArray, inputArray, inputArray]; @@ -333,8 +412,11 @@ describe('Nyan reporter', function() { expect(expectedSegment, 'to be', '_'); }); - it('should shift each trajectory item, if its length is greater of equal to its max width', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + + it('should shift each trajectory item if its length is greater than or equal to its max width', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var rainbowifyResult = 'rainbowify'; var inputArray = ['itemToShify']; @@ -359,9 +441,12 @@ describe('Nyan reporter', function() { expect(trajectories, 'to equal', expectedTrajectories); }); }); - describe('if tick is false', function() { - it('should set an - segment', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + + describe("when 'tick' is false", function() { + it('should set a dash segment', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); var expectedSegment; var inputArray = []; var trajectories = [inputArray, inputArray, inputArray, inputArray]; @@ -380,42 +465,45 @@ describe('Nyan reporter', function() { }); }); - describe('drawScoreboard', function() { - var stdoutWrite; + describe('#drawScoreboard', function() { var stdout; - var cachedColor; - var showOutput = false; beforeEach(function() { - stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - if (showOutput) { - stdoutWrite.call(process.stdout, string, enc, callback); - } - }; - cachedColor = Base.color; - Base.color = function(type, n) { + sandbox.stub(Base, 'color').callsFake(function(type, n) { return type + n; - }; - }); - - afterEach(function() { - process.stdout.write = stdoutWrite; - Base.color = cachedColor; + }); + var stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); + stdout = []; }); it('should write scoreboard with color set with each stat', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + var passes = 2; var pending = 1; var failures = 1; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - nyanCat.drawScoreboard.call({ - cursorUp: function() {}, + + var fakeThis = { + cursorUp: noop, stats: {passes: passes, pending: pending, failures: failures}, numberOfLines: 4 - }); + }; + + try { + try { + nyanCat.drawScoreboard.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + var expectedArray = [ ' ', 'green' + passes, @@ -432,40 +520,40 @@ describe('Nyan reporter', function() { }); it('should call cursorUp with given numberOfLines', function() { - var expectedCursorArgument = null; var expectedNumberOfLines = 1000; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - nyanCat.drawScoreboard.call({ - cursorUp: function(lines) { - expectedCursorArgument = lines; - }, + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + var fakeThis = { + cursorUp: sinon.spy(), stats: {passes: 0, pending: 0, failures: 0}, numberOfLines: expectedNumberOfLines - }); + }; - expect(expectedCursorArgument, 'to be', expectedNumberOfLines); + try { + try { + nyanCat.drawScoreboard.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } + + expect(fakeThis.cursorUp.calledWith(expectedNumberOfLines), 'to be true'); }); }); - describe('drawRainbow', function() { - var stdoutWrite; + describe('#drawRainbow', function() { var stdout; - var showOutput = false; beforeEach(function() { + var stdoutWriteStub = sandbox.stub(process.stdout, 'write'); + stdoutWriteStub.callsFake(function(chunk, encoding, cb) { + stdout.push(chunk); + }); stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - if (showOutput) { - stdoutWrite.call(process.stdout, string, enc, callback); - } - }; - }); - - afterEach(function() { - process.stdout.write = stdoutWrite; }); it('should write width, contents and newline for each trajectory', function() { @@ -474,13 +562,25 @@ describe('Nyan reporter', function() { var expectedContents = 'input'; var inputArray = [expectedContents]; var trajectories = [inputArray]; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - nyanCat.drawRainbow.call({ - cursorUp: function() {}, + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + var fakeThis = { + cursorUp: noop, trajectories: trajectories, scoreboardWidth: expectedWidth, numberOfLines: 1 - }); + }; + + try { + try { + nyanCat.drawRainbow.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } var expectedArray = [ '\u001b[' + expectedWidth + 'C', @@ -494,41 +594,66 @@ describe('Nyan reporter', function() { var expectedCursorArgument = null; var expectedNumberOfLines = 1000; - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); - nyanCat.drawRainbow.call({ + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); + var fakeThis = { cursorUp: function(lines) { expectedCursorArgument = lines; }, trajectories: [['input']], scoreboardWidth: 1, numberOfLines: expectedNumberOfLines - }); + }; + + try { + try { + nyanCat.drawRainbow.call(fakeThis); + } finally { + sandbox.restore(); + } + } catch (err) { + throw err; // Rethrow + } expect(expectedCursorArgument, 'to be', expectedNumberOfLines); }); }); - describe('face', function() { - it('expected face:(x .x) when "failures" at least one', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + + describe('#face', function() { + it('should expect "( x .x)" if any failures', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 2, pending: 1, failures: 1}; + expect(nyanCat.face(), 'to be', '( x .x)'); }); - it('expected face:(x .x) when "pending" at least one and no failing', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + it('should expect "( o .o)" if any pending but none failing', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 2, pending: 1, failures: 0}; + expect(nyanCat.face(), 'to be', '( o .o)'); }); - it('expected face:(^ .^) when "passing" only', function() { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + it('should expect "( ^ .^)" if all passing', function() { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 1, pending: 0, failures: 0}; + expect(nyanCat.face(), 'to be', '( ^ .^)'); }); - it('expected face:(- .-) when otherwise', function(done) { - var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + it('should expect "( - .-)" otherwise', function(done) { + var runner = {on: noop, once: noop}; + var options = {}; + var nyanCat = new NyanCat(runner, options); nyanCat.stats = {passes: 0, pending: 0, failures: 0}; + expect(nyanCat.face(), 'to be', '( - .-)'); done(); }); diff --git a/test/reporters/progress.spec.js b/test/reporters/progress.spec.js index cdea9c643e..0d45abeaf7 100644 --- a/test/reporters/progress.spec.js +++ b/test/reporters/progress.spec.js @@ -1,107 +1,117 @@ 'use strict'; -var sandbox = require('sinon').createSandbox(); +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var Progress = reporters.Progress; + var Base = reporters.Base; +var Progress = reporters.Progress; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_END = events.EVENT_TEST_END; describe('Progress reporter', function() { - var stdout; - var stdoutWrite; - var runner; + var sandbox; var runReporter = makeRunReporter(Progress); + var noop = function() {}; beforeEach(function() { - stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - stdoutWrite.call(process.stdout, string, enc, callback); - }; + sandbox = sinon.createSandbox(); }); afterEach(function() { sandbox.restore(); - process.stdout.write = stdoutWrite; }); - describe('on start', function() { - it('should call cursor hide', function() { - sandbox.stub(Base.cursor, 'hide'); + describe('event handlers', function() { + describe("on 'start' event", function() { + it('should call cursor hide', function() { + var hideCursorStub = sandbox.stub(Base.cursor, 'hide'); - runner = createMockRunner('start', 'start'); - runReporter({}, runner, {}); + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + var options = {}; + runReporter({}, runner, options); + sandbox.restore(); - expect(Base.cursor.hide, 'was called'); + expect(hideCursorStub.called, 'to be true'); + }); }); - }); - - describe('on test end', function() { - describe('if line has not changed', function() { - it('should return and not write anything', function() { - sandbox.stub(Base, 'useColors').value(false); - sandbox.stub(Base.cursor, 'CR'); - sandbox.stub(Base.window, 'width').value(-3); - var expectedTotal = 1; - var expectedOptions = {}; - runner = createMockRunner('test end', 'test end'); - runner.total = expectedTotal; - var stdout = runReporter({}, runner, expectedOptions); - - expect(stdout, 'to equal', []); + describe("on 'test end' event", function() { + describe('when line has changed', function() { + it('should write expected progress of open and close options', function() { + var crCursorStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop); + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.window, 'width').value(5); + + var expectedTotal = 12; + var expectedOpen = 'OpEn'; + var expectedClose = 'cLoSe'; + var expectedIncomplete = 'iNcOmPlEtE'; + var expectedOptions = { + open: expectedOpen, + complete: 'cOmPlEtE', + incomplete: expectedIncomplete, + close: expectedClose + }; + + var runner = createMockRunner('test end', EVENT_TEST_END); + runner.total = expectedTotal; + var options = { + reporterOptions: expectedOptions + }; + var stdout = runReporter({}, runner, options); + sandbox.restore(); + + var expectedArray = [ + '\u001b[J', + ' ' + expectedOpen, + '', + expectedIncomplete, + expectedClose + ]; + + expect(crCursorStub.called, 'to be true'); + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe('if line has changed', function() { - it('should write expected progress of open and close options', function() { - sandbox.stub(Base, 'useColors').value(false); - sandbox.stub(Base.cursor, 'CR'); - sandbox.stub(Base.window, 'width').value(5); - - var expectedTotal = 12; - var expectedOpen = 'OpEn'; - var expectedClose = 'cLoSe'; - var expectedIncomplete = 'iNcOmPlEtE'; - var expectedOptions = { - open: expectedOpen, - complete: 'cOmPlEtE', - incomplete: expectedIncomplete, - close: expectedClose - }; - var options = { - reporterOptions: expectedOptions - }; - runner = createMockRunner('test end', 'test end'); - runner.total = expectedTotal; - var stdout = runReporter({}, runner, options); - - var expectedArray = [ - '\u001b[J', - ' ' + expectedOpen, - '', - expectedIncomplete, - expectedClose - ]; - expect(Base.cursor.CR, 'was called'); - expect(stdout, 'to equal', expectedArray); + + describe('when line has not changed', function() { + it('should not write anything', function() { + sandbox.stub(Base, 'useColors').value(false); + sandbox.stub(Base.cursor, 'CR').callsFake(noop); + sandbox.stub(Base.window, 'width').value(-3); + + var expectedTotal = 1; + var runner = createMockRunner('test end', EVENT_TEST_END); + runner.total = expectedTotal; + var options = {}; + var stdout = runReporter({}, runner, options); + sandbox.restore(); + + expect(stdout, 'to equal', []); + }); }); }); - }); - describe('on end', function() { - it('should call cursor show and epilogue', function() { - var reporterStub = {epilogue: function() {}}; - sandbox.stub(Base.cursor, 'show'); - sandbox.stub(reporterStub, 'epilogue'); - - runner = createMockRunner('end', 'end'); - runReporter(reporterStub, runner, {}); + describe("on 'end' event", function() { + it('should call cursor show and epilogue', function() { + var showCursorStub = sandbox.stub(Base.cursor, 'show'); + var fakeThis = { + epilogue: sinon.spy() + }; + var runner = createMockRunner('end', EVENT_RUN_END); + var options = {}; + runReporter(fakeThis, runner, options); + sandbox.restore(); - expect(reporterStub.epilogue, 'was called'); - expect(Base.cursor.show, 'was called'); + expect(fakeThis.epilogue.calledOnce, 'to be true'); + expect(showCursorStub.called, 'to be true'); + }); }); }); }); diff --git a/test/reporters/spec.spec.js b/test/reporters/spec.spec.js index 5f7584e33e..608bc7f512 100644 --- a/test/reporters/spec.spec.js +++ b/test/reporters/spec.spec.js @@ -1,104 +1,163 @@ 'use strict'; +var sinon = require('sinon'); +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; -var Spec = reporters.Spec; + var Base = reporters.Base; +var Spec = reporters.Spec; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('Spec reporter', function() { - var runner; - var options = {}; var runReporter = makeRunReporter(Spec); - var useColors; var expectedTitle = 'expectedTitle'; + var noop = function() {}; + var sandbox; beforeEach(function() { - useColors = Base.useColors; - Base.useColors = false; + sandbox = sinon.createSandbox(); + sandbox.stub(Base, 'useColors').value(false); }); afterEach(function() { - Base.useColors = useColors; - runner = undefined; + sandbox.restore(); }); - describe('on suite', function() { - it('should return title', function() { - var suite = { - title: expectedTitle - }; - runner = createMockRunner('suite', 'suite', null, null, suite); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = [expectedTitle + '\n']; - expect(stdout, 'to equal', expectedArray); - }); - }); - describe('on pending', function() { - it('should return title', function() { - var suite = { - title: expectedTitle - }; - runner = createMockRunner('pending test', 'pending', null, null, suite); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = [' - ' + expectedTitle + '\n']; - expect(stdout, 'to equal', expectedArray); + describe('event handlers', function() { + describe("on 'suite' event", function() { + it('should return title', function() { + var suite = { + title: expectedTitle + }; + var runner = createMockRunner( + 'suite', + EVENT_SUITE_BEGIN, + null, + null, + suite + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = [expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); + }); }); - }); - describe('on pass', function() { - describe('if test speed is slow', function() { - it('should return expected tick, title and duration', function() { - var expectedDuration = 2; - var test = { - title: expectedTitle, - duration: expectedDuration, - slow: function() { - return 1; - } + + describe("on 'pending' event", function() { + it('should return title', function() { + var suite = { + title: expectedTitle }; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedString = - ' ' + - Base.symbols.ok + - ' ' + - expectedTitle + - ' (' + - expectedDuration + - 'ms)' + - '\n'; - expect(stdout[0], 'to be', expectedString); + var runner = createMockRunner( + 'pending test', + EVENT_TEST_PENDING, + null, + null, + suite + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = [' - ' + expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('if test speed is fast', function() { - it('should return expected tick, title and without a duration', function() { - var expectedDuration = 1; + + describe("on 'pass' event", function() { + describe('when test speed is slow', function() { + it('should return expected tick, title, and duration', function() { + var expectedDuration = 2; + var test = { + title: expectedTitle, + duration: expectedDuration, + slow: function() { + return 1; + } + }; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedString = + ' ' + + Base.symbols.ok + + ' ' + + expectedTitle + + ' (' + + expectedDuration + + 'ms)' + + '\n'; + expect(stdout[0], 'to be', expectedString); + }); + }); + + describe('when test speed is fast', function() { + it('should return expected tick, title without a duration', function() { + var expectedDuration = 1; + var test = { + title: expectedTitle, + duration: expectedDuration, + slow: function() { + return 2; + } + }; + var runner = createMockRunner( + 'pass', + EVENT_TEST_PASS, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedString = + ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to be', expectedString); + }); + }); + }); + + describe("on 'fail' event", function() { + it('should return title and function count', function() { + var functionCount = 1; var test = { - title: expectedTitle, - duration: expectedDuration, - slow: function() { - return 2; - } + title: expectedTitle }; - runner = createMockRunner('pass', 'pass', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedString = - ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to be', expectedString); + var runner = createMockRunner( + 'fail', + EVENT_TEST_FAIL, + null, + null, + test + ); + var options = {}; + var stdout = runReporter({epilogue: noop}, runner, options); + sandbox.restore(); + + var expectedArray = [ + ' ' + functionCount + ') ' + expectedTitle + '\n' + ]; + expect(stdout, 'to equal', expectedArray); }); }); }); - describe('on fail', function() { - it('should return title and function count', function() { - var functionCount = 1; - var test = { - title: expectedTitle - }; - runner = createMockRunner('fail', 'fail', null, null, test); - var stdout = runReporter({epilogue: function() {}}, runner, options); - var expectedArray = [' ' + functionCount + ') ' + expectedTitle + '\n']; - expect(stdout, 'to equal', expectedArray); - }); - }); }); diff --git a/test/reporters/tap.spec.js b/test/reporters/tap.spec.js index c0a5419d37..f3bfe8d473 100644 --- a/test/reporters/tap.spec.js +++ b/test/reporters/tap.spec.js @@ -1,246 +1,295 @@ 'use strict'; +var events = require('../../').Runner.constants; +var helpers = require('./helpers'); var reporters = require('../../').reporters; + var TAP = reporters.TAP; +var createMockRunner = helpers.createMockRunner; +var makeRunReporter = helpers.createRunReporterFunction; -var createMockRunner = require('./helpers').createMockRunner; -var makeRunReporter = require('./helpers.js').createRunReporterFunction; +var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_END = events.EVENT_TEST_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; describe('TAP reporter', function() { - var runner; var runReporter = makeRunReporter(TAP); var expectedTitle = 'some title'; var countAfterTestEnd = 2; - var test; + var noop = function() {}; - beforeEach(function() { - test = { + function createTest() { + return { fullTitle: function() { return expectedTitle; }, - slow: function() {} + slow: noop }; - }); - - afterEach(function() { - runner = undefined; - test = undefined; - }); + } describe('TAP12 spec', function() { - var options = {}; - - describe('on start', function() { - var expectedSuite = 'some suite'; - var expectedTotal = 10; - var expectedString; - var stdout; - - before(function() { - runner = createMockRunner('start', 'start'); - runner.suite = expectedSuite; - runner.grepTotal = function(string) { - expectedString = string; - return expectedTotal; - }; - stdout = runReporter({}, runner, options); - }); - - it('should not write the TAP specification version', function() { - expect(stdout, 'not to contain', 'TAP version'); - }); - it('should write the number of tests that it plans to run', function() { - var expectedArray = ['1..' + expectedTotal + '\n']; - expect(stdout, 'to equal', expectedArray); - expect(expectedString, 'to be', expectedSuite); - }); - }); - - describe('on pending', function() { - it('should write expected message including count and title', function() { - runner = createMockRunner( - 'start test', - 'test end', - 'pending', - null, - test - ); - runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); - - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; - expect(stdout[0], 'to equal', expectedMessage); - }); - }); + var options = { + reporterOptions: { + tapVersion: '12' + } + }; - describe('on pass', function() { - it('should write expected message including count and title', function() { - runner = createMockRunner('start test', 'test end', 'pass', null, test); - runner.suite = ''; - runner.grepTotal = function() {}; + describe('event handlers', function() { + describe("on 'start' event", function() { + var expectedSuite = 'some suite'; + var expectedTotal = 10; + var expectedString; + var stdout = []; + + before(function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + runner.suite = expectedSuite; + runner.grepTotal = function(string) { + expectedString = string; + return expectedTotal; + }; + stdout = runReporter({}, runner, options); + }); - var stdout = runReporter({}, runner, options); + it('should not write a TAP specification version', function() { + expect(stdout, 'not to contain', 'TAP version'); + }); - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to equal', expectedMessage); + it('should write the number of tests that it plans to run', function() { + var expectedArray = ['1..' + expectedTotal + '\n']; + expect(stdout, 'to equal', expectedArray); + expect(expectedString, 'to be', expectedSuite); + }); }); - }); - describe('on fail', function() { - describe('if there is an error message', function() { - it('should write expected message and error message', function() { - var expectedErrorMessage = 'some error'; - var error = { - message: expectedErrorMessage - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', + describe("on 'pending' event", function() { + var stdout = []; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'start test', + EVENT_TEST_END, + EVENT_TEST_PENDING, null, - test, - error + test ); - runner.on = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedErrorMessage + '\n' - ]; - expect(stdout, 'to equal', expectedArray); + it('should write expected message including count and title', function() { + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('if there is an error stack', function() { - it('should write expected message and stack', function() { - var expectedStack = 'some stack'; - var error = { - stack: expectedStack - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', + describe("on 'pass' event", function() { + var stdout; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'start test', + EVENT_TEST_END, + EVENT_TEST_PASS, null, - test, - error + test ); runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedStack + '\n' - ]; - expect(stdout, 'to equal', expectedArray); + it('should write expected message including count and title', function() { + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('if there is an error stack and error message', function() { - it('should write expected message and stack', function() { - var expectedStack = 'some stack'; - var expectedErrorMessage = 'some error'; - var error = { - stack: expectedStack, - message: expectedErrorMessage - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', - null, - test, - error - ); - runner.on = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = function() {}; + describe("on 'fail' event", function() { + var expectedErrorMessage = 'some error'; + var expectedStack = 'some stack'; + + describe("when 'error' has only message", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + message: expectedErrorMessage + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message and error message', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedErrorMessage + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); - var stdout = runReporter({}, runner, options); + describe("when 'error' has only stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + stack: expectedStack + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message and stack', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedStack + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ' + expectedErrorMessage + '\n', - ' ' + expectedStack + '\n' - ]; - expect(stdout, 'to equal', expectedArray); + describe("when 'error' has both message and stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + stack: expectedStack, + message: expectedErrorMessage + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message, error message, and stack', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ' + expectedErrorMessage + '\n', + ' ' + expectedStack + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe("when 'error' has neither message nor stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = {}; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = runner.once = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message only', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); }); }); - describe('if there is no error stack or error message', function() { - it('should write expected message only', function() { - var error = {}; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', - null, - test, - error + describe("on 'end' event", function() { + var stdout; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'fail end pass', + EVENT_TEST_FAIL, + EVENT_RUN_END, + EVENT_TEST_PASS, + test ); - runner.on = runner.once = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + it('should write total tests, passes, and failures', function() { + var numberOfPasses = 1; + var numberOfFails = 1; + var totalTests = numberOfPasses + numberOfFails; var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' + 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', + 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', + '# tests ' + totalTests + '\n', + '# pass ' + numberOfPasses + '\n', + '# fail ' + numberOfFails + '\n' ]; expect(stdout, 'to equal', expectedArray); }); }); }); - - describe('on end', function() { - it('should write total tests, passes and failures', function() { - var numberOfPasses = 1; - var numberOfFails = 1; - runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); - runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); - - var totalTests = numberOfPasses + numberOfFails; - var expectedArray = [ - 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', - 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', - '# tests ' + totalTests + '\n', - '# pass ' + numberOfPasses + '\n', - '# fail ' + numberOfFails + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); }); describe('TAP13 spec', function() { @@ -250,229 +299,270 @@ describe('TAP reporter', function() { } }; - describe('on start', function() { - var expectedSuite = 'some suite'; - var expectedTotal = 10; - var expectedString; - var stdout; - - before(function() { - runner = createMockRunner('start', 'start'); - runner.suite = expectedSuite; - runner.grepTotal = function(string) { - expectedString = string; - return expectedTotal; - }; - - stdout = runReporter({}, runner, options); - }); + describe('event handlers', function() { + describe("on 'start' event", function() { + var expectedSuite = 'some suite'; + var expectedTotal = 10; + var expectedString; + var stdout; + + before(function() { + var runner = createMockRunner('start', EVENT_RUN_BEGIN); + runner.suite = expectedSuite; + runner.grepTotal = function(string) { + expectedString = string; + return expectedTotal; + }; + stdout = runReporter({}, runner, options); + }); - it('should write the TAP specification version', function() { - var tapVersion = options.reporterOptions.tapVersion; - var expectedFirstLine = 'TAP version ' + tapVersion + '\n'; - expect(stdout[0], 'to equal', expectedFirstLine); - }); - it('should write the number of tests that it plans to run', function() { - var expectedSecondLine = '1..' + expectedTotal + '\n'; - expect(stdout[1], 'to equal', expectedSecondLine); - expect(expectedString, 'to be', expectedSuite); - }); - }); + it('should write the TAP specification version', function() { + var tapVersion = options.reporterOptions.tapVersion; + var expectedFirstLine = 'TAP version ' + tapVersion + '\n'; + expect(stdout[0], 'to equal', expectedFirstLine); + }); - describe('on pending', function() { - it('should write expected message including count and title', function() { - runner = createMockRunner( - 'start test', - 'test end', - 'pending', - null, - test - ); - runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); - - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; - expect(stdout[0], 'to equal', expectedMessage); + it('should write the number of tests that it plans to run', function() { + var expectedSecondLine = '1..' + expectedTotal + '\n'; + expect(stdout[1], 'to equal', expectedSecondLine); + expect(expectedString, 'to be', expectedSuite); + }); }); - }); - - describe('on pass', function() { - it('should write expected message including count and title', function() { - runner = createMockRunner('start test', 'test end', 'pass', null, test); - runner.suite = ''; - runner.grepTotal = function() {}; - var stdout = runReporter({}, runner, options); + describe("on 'pending' event", function() { + var stdout; - var expectedMessage = - 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; - expect(stdout[0], 'to equal', expectedMessage); - }); - }); - - describe('on fail', function() { - describe('if there is an error message', function() { - it('should write expected message and error message', function() { - var expectedErrorMessage = 'some error'; - var error = { - message: expectedErrorMessage - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'start test', + EVENT_TEST_END, + EVENT_TEST_PENDING, null, - test, - error + test ); - runner.on = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' message: |-\n', - ' ' + expectedErrorMessage + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); + it('should write expected message including count and title', function() { + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('if there is an error stack', function() { - it('should write expected message and stack', function() { - var expectedStack = 'some stack'; - var error = { - stack: expectedStack - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', + describe("on 'pass' event", function() { + var stdout; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'start test', + EVENT_TEST_END, + EVENT_TEST_PASS, null, - test, - error + test ); runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' stack: |-\n', - ' ' + expectedStack + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); + it('should write expected message including count and title', function() { + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('if there is an error stack and error message', function() { - it('should write expected message and stack', function() { - var expectedStack = 'some stack'; - var expectedErrorMessage = 'some error'; - var error = { - stack: expectedStack, - message: expectedErrorMessage - }; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', - null, - test, - error - ); - runner.on = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; - runner.suite = ''; - runner.grepTotal = function() {}; + describe("on 'fail' event", function() { + var expectedErrorMessage = 'some error'; + var expectedStack = 'some stack'; + + describe("when 'error' has only message", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + message: expectedErrorMessage + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message and error message', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' message: |-\n', + ' ' + expectedErrorMessage + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); - var stdout = runReporter({}, runner, options); + describe("when 'error' has only stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + stack: expectedStack + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message and stack', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' stack: |-\n', + ' ' + expectedStack + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); - var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', - ' ---\n', - ' message: |-\n', - ' ' + expectedErrorMessage + '\n', - ' stack: |-\n', - ' ' + expectedStack + '\n', - ' ...\n' - ]; - expect(stdout, 'to equal', expectedArray); + describe("when 'error' has both message and stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = { + stack: expectedStack, + message: expectedErrorMessage + }; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message, error message, and stack', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', + ' ---\n', + ' message: |-\n', + ' ' + expectedErrorMessage + '\n', + ' stack: |-\n', + ' ' + expectedStack + '\n', + ' ...\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); + }); + + describe("when 'error' has neither message nor stack", function() { + var stdout; + + before(function() { + var test = createTest(); + var error = {}; + var runner = createMockRunner( + 'test end fail', + EVENT_TEST_END, + EVENT_TEST_FAIL, + null, + test, + error + ); + runner.on = runner.once = function(event, callback) { + if (event === EVENT_TEST_END) { + callback(); + } else if (event === EVENT_TEST_FAIL) { + callback(test, error); + } + }; + runner.suite = ''; + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + + it('should write expected message only', function() { + var expectedArray = [ + 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' + ]; + expect(stdout, 'to equal', expectedArray); + }); }); }); - describe('if there is no error stack or error message', function() { - it('should write expected message only', function() { - var error = {}; - runner = createMockRunner( - 'test end fail', - 'test end', - 'fail', - null, - test, - error + describe("on 'end' event", function() { + var stdout; + + before(function() { + var test = createTest(); + var runner = createMockRunner( + 'fail end pass', + EVENT_TEST_FAIL, + EVENT_RUN_END, + EVENT_TEST_PASS, + test ); - runner.on = runner.once = function(event, callback) { - if (event === 'test end') { - callback(); - } else if (event === 'fail') { - callback(test, error); - } - }; runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); + runner.grepTotal = noop; + stdout = runReporter({}, runner, options); + }); + it('should write total tests, passes, and failures', function() { + var numberOfPasses = 1; + var numberOfFails = 1; + var totalTests = numberOfPasses + numberOfFails; var expectedArray = [ - 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' + 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', + 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', + '# tests ' + totalTests + '\n', + '# pass ' + numberOfPasses + '\n', + '# fail ' + numberOfFails + '\n' ]; expect(stdout, 'to equal', expectedArray); }); }); }); - - describe('on end', function() { - it('should write total tests, passes and failures', function() { - var numberOfPasses = 1; - var numberOfFails = 1; - runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); - runner.suite = ''; - runner.grepTotal = function() {}; - - var stdout = runReporter({}, runner, options); - - var totalTests = numberOfPasses + numberOfFails; - var expectedArray = [ - 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n', - 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n', - '# tests ' + totalTests + '\n', - '# pass ' + numberOfPasses + '\n', - '# fail ' + numberOfFails + '\n' - ]; - expect(stdout, 'to equal', expectedArray); - }); - }); }); }); diff --git a/test/reporters/xunit.spec.js b/test/reporters/xunit.spec.js index 35555968a1..26fce4a1c4 100644 --- a/test/reporters/xunit.spec.js +++ b/test/reporters/xunit.spec.js @@ -1,25 +1,34 @@ 'use strict'; +var EventEmitter = require('events').EventEmitter; var fs = require('fs'); -var mkdirp = require('mkdirp'); +var os = require('os'); var path = require('path'); -var assert = require('assert'); +var mkdirp = require('mkdirp'); +var rimraf = require('rimraf'); +var sinon = require('sinon'); var createStatsCollector = require('../../lib/stats-collector'); -var EventEmitter = require('events').EventEmitter; +var events = require('../../').Runner.constants; var reporters = require('../../').reporters; -var constants = require('../../lib/runnable').constants; -var STATE_FAILED = constants.STATE_FAILED; -var STATE_PASSED = constants.STATE_PASSED; +var states = require('../../').Runnable.constants; + +var Base = reporters.Base; var XUnit = reporters.XUnit; +var EVENT_RUN_END = events.EVENT_RUN_END; +var EVENT_TEST_END = events.EVENT_TEST_END; +var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = events.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING; + +var STATE_FAILED = states.STATE_FAILED; +var STATE_PASSED = states.STATE_PASSED; + describe('XUnit reporter', function() { - var stdout; - var stdoutWrite; - // the runner parameter of the reporter + var sandbox; var runner; + var noop = function() {}; - var callbackArgument = null; - var expectedFailure = 'some-failures'; var expectedLine = 'some-line'; var expectedClassName = 'fullTitle'; var expectedTitle = 'some title'; @@ -27,192 +36,286 @@ describe('XUnit reporter', function() { var expectedDiff = '\n + expected - actual\n\n -foo\n +bar\n '; var expectedStack = 'some-stack'; - var expectedWrite = null; beforeEach(function() { - stdout = []; - runner = {on: function() {}, once: function() {}}; + runner = {on: noop, once: noop}; createStatsCollector(runner); }); - describe('if reporter options output is given', function() { - var expectedOutput = 'some-output'; + describe("when 'reporterOptions.output' is provided", function() { + var expectedOutput = path.join(path.sep, 'path', 'to', 'some-output'); var options = { reporterOptions: { output: expectedOutput } }; - describe('but it cant create a write stream', function() { - it('should throw expected error', function() { - var fsCreateWriteStream = fs.createWriteStream; - fs.createWriteStream = false; - - var boundXUnit = XUnit.bind({}, runner, options); - expect(boundXUnit, 'to throw', 'file output not supported in browser'); - fs.createWriteStream = fsCreateWriteStream; + + describe('when fileStream can be created', function() { + var mkdirpSync; + var fsCreateWriteStream; + + beforeEach(function() { + sandbox = sinon.createSandbox(); + mkdirpSync = sandbox.stub(mkdirp, 'sync'); + fsCreateWriteStream = sandbox.stub(fs, 'createWriteStream'); }); - }); - describe('and it can create a write stream', function() { - it('should locate the output dir, create it, then assign as fileStream', function() { - var expectedDirectory; - var mkdirpSync = mkdirp.sync; - var pathDirname = path.dirname; - var fsCreateWriteStream = fs.createWriteStream; - mkdirp.sync = function(directory) { - expectedDirectory = directory; - }; - path.dirname = function(location) { - return location; - }; - fs.createWriteStream = function(streamDetails) { - return streamDetails; - }; - var contextVariables = { + it('should open given file for writing, recursively creating directories in pathname', function() { + var fakeThis = { fileStream: null }; - XUnit.call(contextVariables, runner, options); + XUnit.call(fakeThis, runner, options); - expect(expectedDirectory, 'to be', expectedOutput); - expect(contextVariables.fileStream, 'to be', expectedOutput); + var expectedDirectory = path.dirname(expectedOutput); + expect(mkdirpSync.calledWith(expectedDirectory), 'to be true'); + expect(fsCreateWriteStream.calledWith(expectedOutput), 'to be true'); + }); - fs.createWriteStream = fsCreateWriteStream; - mkdirp.sync = mkdirpSync; - path.dirname = pathDirname; + afterEach(function() { + sandbox.restore(); }); }); - }); - describe("on 'pending', 'pass' and 'fail' events", function() { - it("should add test to tests called on 'end' event", function() { - var pendingTest = { - name: 'pending', - slow: function() {} - }; - var failTest = { - name: 'fail', - slow: function() {} - }; - var passTest = { - name: 'pass', - slow: function() {} - }; - runner.on = runner.once = function(event, callback) { - if (event === 'pending') { - callback(pendingTest); - } - if (event === 'pass') { - callback(passTest); - } - if (event === 'fail') { - callback(failTest); - } - if (event === 'end') { - callback(); - } - }; + describe('when fileStream cannot be created', function() { + describe('when given an invalid pathname', function() { + var tmpdir; + var invalidPath; - var calledTests = []; - XUnit.call( - { - write: function() {}, - test: function(test) { - calledTests.push(test); + beforeEach(function createInvalidPath() { + tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'mocha-test-')); + + function touch(filename) { + fs.closeSync(fs.openSync(filename, 'w')); } - }, - runner - ); - var expectedCalledTests = [pendingTest, passTest, failTest]; - expect(calledTests, 'to equal', expectedCalledTests); + // Create path where file 'some-file' used as directory + invalidPath = path.join( + tmpdir, + 'some-file', + path.basename(expectedOutput) + ); + touch(path.dirname(invalidPath)); + }); + + it('should throw system error', function() { + var options = { + reporterOptions: { + output: invalidPath + } + }; + var boundXUnit = XUnit.bind({}, runner, options); + expect( + boundXUnit, + 'to throw', + expect.it('to be an', Error).and('to satisfy', { + syscall: 'mkdir', + code: 'EEXIST', + path: path.dirname(invalidPath) + }) + ); + }); + + afterEach(function() { + rimraf.sync(tmpdir); + }); + }); + + describe('when run in browser', function() { + beforeEach(function() { + sandbox = sinon.createSandbox(); + sandbox.stub(fs, 'createWriteStream').value(false); + }); + + it('should throw unsupported error', function() { + var boundXUnit = XUnit.bind({}, runner, options); + expect( + boundXUnit, + 'to throw', + 'file output not supported in browser' + ); + }); + + afterEach(function() { + sandbox.restore(); + }); + }); }); }); - describe('done', function() { - describe('if fileStream is truthy', function() { - it('should run callback with failure inside streams end', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); - var callback = function(failures) { - callbackArgument = failures; + describe('event handlers', function() { + describe("on 'pending', 'pass' and 'fail' events", function() { + it("should add test to tests called on 'end' event", function() { + var pendingTest = { + name: 'pending', + slow: noop + }; + var failTest = { + name: 'fail', + slow: noop + }; + var passTest = { + name: 'pass', + slow: noop }; - var calledEnd = false; - var fileStream = { - end: function(callback) { - calledEnd = true; + runner.on = runner.once = function(event, callback) { + if (event === EVENT_TEST_PENDING) { + callback(pendingTest); + } else if (event === EVENT_TEST_PASS) { + callback(passTest); + } else if (event === EVENT_TEST_FAIL) { + callback(failTest); + } else if (event === EVENT_RUN_END) { callback(); } }; - xunit.done.call({fileStream: fileStream}, expectedFailure, callback); - expect(calledEnd, 'to be', true); - expect(callbackArgument, 'to be', expectedFailure); - }); - }); - describe('if fileStream is falsy', function() { - it('should run callback with failure', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); - var callback = function(failures) { - callbackArgument = failures; + var calledTests = []; + var fakeThis = { + write: noop, + test: function(test) { + calledTests.push(test); + } }; - xunit.done.call({fileStream: false}, expectedFailure, callback); + XUnit.call(fakeThis, runner); - expect(callbackArgument, 'to be', expectedFailure); + var expectedCalledTests = [pendingTest, passTest, failTest]; + expect(calledTests, 'to equal', expectedCalledTests); }); }); }); - describe('write', function() { - describe('if fileStream is truthy', function() { - it('should call fileStream write with line and new line', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); - var fileStream = { - write: function(write) { - expectedWrite = write; + describe('#done', function() { + var xunit; + var options = { + reporterOptions: {} + }; + var expectedNFailures = 13; + var callback; + + beforeEach(function() { + sandbox = sinon.createSandbox(); + callback = sandbox.spy(); + }); + + afterEach(function() { + callback = null; + xunit = null; + sandbox.restore(); + }); + + describe('when output directed to file', function() { + var fakeThis; + + beforeEach(function() { + xunit = new XUnit(runner, options); + + fakeThis = { + fileStream: { + end: sinon.stub().callsFake(function(chunk, encoding, cb) { + if (typeof arguments[0] === 'function') { + cb = arguments[0]; + } + cb(); + }), + write: function(chunk, encoding, cb) {} } }; - xunit.write.call({fileStream: fileStream}, expectedLine); + }); - expect(expectedWrite, 'to be', expectedLine + '\n'); + it("should run completion callback via 'fileStream.end'", function() { + xunit.done.call(fakeThis, expectedNFailures, callback); + + expect(fakeThis.fileStream.end.calledOnce, 'to be true'); + expect(callback.calledOnce, 'to be true'); + expect(callback.calledWith(expectedNFailures), 'to be true'); }); }); - describe('if fileStream is falsy and stdout exists', function() { - it('should call write with line and new line', function() { - stdoutWrite = process.stdout.write; - process.stdout.write = function(string) { - stdout.push(string); - }; - var xunit = new XUnit({on: function() {}, once: function() {}}); - xunit.write.call({fileStream: false}, expectedLine); + describe('when output directed to stdout (or console)', function() { + var fakeThis; + + beforeEach(function() { + xunit = new XUnit(runner, options); + fakeThis = {}; + }); - process.stdout.write = stdoutWrite; + it('should run completion callback', function() { + xunit.done.call(fakeThis, expectedNFailures, callback); - expect(stdout[0], 'to be', expectedLine + '\n'); + expect(callback.calledOnce, 'to be true'); + expect(callback.calledWith(expectedNFailures), 'to be true'); }); }); - describe('if fileStream is falsy and stdout does not exist', function() { - it('should call write with line', function() { - stdoutWrite = process; + }); + + describe('#write', function() { + // :TODO: Method should be named 'writeln', not 'write' + describe('when output directed to file', function() { + var fileStream = { + write: sinon.spy() + }; + + it("should call 'fileStream.write' with line and newline", function() { + var xunit = new XUnit(runner); + var fakeThis = {fileStream: fileStream}; + xunit.write.call(fakeThis, expectedLine); + + expect(fileStream.write.calledWith(expectedLine + '\n'), 'to be true'); + }); + }); + + describe('when output directed to stdout', function() { + it("should call 'process.stdout.write' with line and newline", function() { + var xunit = new XUnit(runner); + var fakeThis = {fileStream: false}; + var stdoutWriteStub = sinon.stub(process.stdout, 'write'); + xunit.write.call(fakeThis, expectedLine); + stdoutWriteStub.restore(); + + expect(stdoutWriteStub.calledWith(expectedLine + '\n'), 'to be true'); + }); + }); + + describe('when output directed to console', function() { + it("should call 'console.log' with line", function() { + // :TODO: XUnit needs a trivially testable means to force console.log() + var realProcess = process; process = false; // eslint-disable-line no-native-reassign, no-global-assign - var cachedConsoleLog = console.log; - console.log = function(string) { - stdout.push(string); - }; - var xunit = new XUnit({on: function() {}, once: function() {}}); - xunit.write.call({fileStream: false}, expectedLine); + var xunit = new XUnit(runner); + var fakeThis = {fileStream: false}; + var consoleLogStub = sinon.stub(console, 'log'); + xunit.write.call(fakeThis, expectedLine); + consoleLogStub.restore(); - console.log = cachedConsoleLog; - process = stdoutWrite; // eslint-disable-line no-native-reassign, no-global-assign - expect(stdout[0], 'to be', expectedLine); + process = realProcess; // eslint-disable-line no-native-reassign, no-global-assign + + expect(consoleLogStub.calledWith(expectedLine), 'to be true'); }); }); }); - describe('test', function() { + describe('#test', function() { + var expectedWrite; + var fakeThis = { + write: function(str) { + expectedWrite = str; + } + }; + + beforeEach(function() { + sandbox = sinon.createSandbox(); + sandbox.stub(Base, 'useColors').value(false); + }); + + afterEach(function() { + sandbox.restore(); + expectedWrite = null; + }); + describe('on test failure', function() { it('should write expected tag with error details', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); + var xunit = new XUnit(runner); var expectedTest = { state: STATE_FAILED, title: expectedTitle, @@ -229,14 +332,9 @@ describe('XUnit reporter', function() { stack: expectedStack } }; - xunit.test.call( - { - write: function(string) { - expectedWrite = string; - } - }, - expectedTest - ); + + xunit.test.call(fakeThis, expectedTest); + sandbox.restore(); var expectedTag = ''; - expect(expectedWrite, 'to be', expectedTag); }); }); + describe('on test in any other state', function() { it('should write expected tag', function() { - var xunit = new XUnit({on: function() {}, once: function() {}}); - + var xunit = new XUnit(runner); var expectedTest = { isPending: function() { return false; @@ -305,14 +396,9 @@ describe('XUnit reporter', function() { }, duration: false }; - xunit.test.call( - { - write: function(string) { - expectedWrite = string; - } - }, - expectedTest - ); + + xunit.test.call(fakeThis, expectedTest); + sandbox.restore(); var expectedTag = ''; - expect(expectedWrite, 'to be', expectedTag); }); }); + it('should write expected summary statistics', function() { - var count = 0; + var numTests = 0; + var numPass = 0; + var numFail = 0; var simpleError = { actual: 'foo', expected: 'bar', @@ -333,8 +421,14 @@ describe('XUnit reporter', function() { stack: expectedStack }; var generateTest = function(passed) { - var t = { - title: expectedTitle + count, + numTests++; + if (passed) { + numPass++; + } else { + numFail++; + } + return { + title: [expectedTitle, numTests].join(': '), state: passed ? STATE_PASSED : STATE_FAILED, isPending: function() { return false; @@ -349,26 +443,36 @@ describe('XUnit reporter', function() { }, duration: 1000 }; - return t; }; var runner = new EventEmitter(); createStatsCollector(runner); var xunit = new XUnit(runner); expectedWrite = ''; - xunit.write = function(string) { - expectedWrite += string; - }; + sandbox.stub(xunit, 'write').callsFake(function(str) { + expectedWrite += str; + }); // 3 tests, no failures (i.e. tests that could not run), and 2 errors - runner.emit('test end'); - runner.emit('pass', generateTest(true)); - runner.emit('test end'); - runner.emit('fail', generateTest(false), simpleError); - runner.emit('test end'); - runner.emit('fail', generateTest(false), simpleError); - runner.emit('end'); + runner.emit(EVENT_TEST_PASS, generateTest(true)); + runner.emit(EVENT_TEST_END); + runner.emit(EVENT_TEST_FAIL, generateTest(false), simpleError); + runner.emit(EVENT_TEST_END); + runner.emit(EVENT_TEST_FAIL, generateTest(false), simpleError); + runner.emit(EVENT_TEST_END); + runner.emit(EVENT_RUN_END); + + sandbox.restore(); + + var expectedNumPass = 1; + var expectedNumFail = 2; + var expectedNumTests = 3; + + expect(expectedNumPass, 'to be', numPass); + expect(expectedNumFail, 'to be', numFail); + expect(expectedNumTests, 'to be', numTests); + // :NOTE: Mocha test "fail" is an XUnit "error" var expectedTag = '= 0, - 'it should contain the text "Mocha Tests"' - ); + expect(lines[0], 'to contain', customSuiteName); }); - it('should use the custom suite name as the suite name when provided in the reporter options', function() { - // arrange + it('should use default name otherwise', function() { + var defaultSuiteName = 'Mocha Tests'; var options = { - reporterOptions: { - // this time, with a custom suite name - suiteName: 'Mocha Is Great!' - } + reporterOptions: {} }; var xunit = new XUnit(runner, options); xunit.fileStream = fileStream; - // act (trigger the end event to force xunit reporter to write the output) - events['end'](); + // Trigger end event to force XUnit reporter to write its output + events[EVENT_RUN_END](); - // assert - assert( - lines[0].indexOf(' Date: Thu, 2 May 2019 01:10:28 -0700 Subject: [PATCH 010/441] various doc-related fixes (#3790) - ensure `.html` gets hit by prettier - fix order in which docs are generated; let assetgraph process API docs - some auto-generated content in `docs/index.md` updated --- .lintstagedrc.json | 5 ++++- docs/index.md | 2 +- jsdoc.conf.json | 2 +- package-scripts.js | 5 ++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.lintstagedrc.json b/.lintstagedrc.json index 74973575e8..14dcdd9302 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -1,7 +1,10 @@ { "linters": { "(bin/*|*.js|**/*.js)": ["eslint --fix", "git add"], - "(*.{json,yml,md}|**/*.{json,yml,md})": ["prettier --write", "git add"] + "(*.{json,yml,md,html}|**/*.{json,yml,md,html})": [ + "prettier --write", + "git add" + ] }, "ignore": ["docs/**/*.js", "test/**/*.fixture.js", "package*.json"] } diff --git a/docs/index.md b/docs/index.md index 4c41381b05..99ca417f0f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -883,7 +883,7 @@ Test Filters Positional Arguments spec One or more files, directories, or globs to test - [array] [default: ["test/"]] + [array] [default: ["test"]] Other Options --help, -h Show usage information & exit [boolean] diff --git a/jsdoc.conf.json b/jsdoc.conf.json index 161b1fd252..e8ea986021 100644 --- a/jsdoc.conf.json +++ b/jsdoc.conf.json @@ -8,7 +8,7 @@ "static": false }, "opts": { - "destination": "docs/_dist/api", + "destination": "docs/_site/api", "encoding": "utf8", "recurse": true, "template": "node_modules/@mocha/docdash", diff --git a/package-scripts.js b/package-scripts.js index 30e4294be1..7febdc016f 100644 --- a/package-scripts.js +++ b/package-scripts.js @@ -266,7 +266,7 @@ module.exports = { docs: { default: { script: - 'nps docs.prebuild && eleventy && nps docs.postbuild && nps docs.api', + 'nps docs.prebuild && nps docs.api && eleventy && nps docs.postbuild', description: 'Build documentation' }, prebuild: { @@ -299,8 +299,7 @@ module.exports = { description: 'Watch docs for changes & build' }, api: { - script: - 'nps docs.preprocess.api && jsdoc -c jsdoc.conf.json && cp LICENSE docs/_dist/api', + script: 'nps docs.preprocess.api && jsdoc -c jsdoc.conf.json', description: 'Build API docs' } }, From a4f1a442a22e53ad629a5f565d4a17b687afce53 Mon Sep 17 00:00:00 2001 From: Christopher Hiller Date: Thu, 2 May 2019 03:01:51 -0700 Subject: [PATCH 011/441] rename "exclude" to "ignore" and create alias; closes #3871 (#3872) --- docs/index.md | 10 +++---- example/config/.mocharc.yml | 6 ++--- lib/cli/run-helpers.js | 6 ++--- lib/cli/run-option-metadata.js | 3 ++- lib/cli/run.js | 12 ++++----- .../{exclude => ignore}/fail.fixture.js | 2 +- .../nested/fail.fixture.js | 2 +- .../nested/pass.fixture.js | 2 +- .../{exclude => ignore}/pass.fixture.js | 2 +- .../{exclude.spec.js => ignore.spec.js} | 26 +++++++++---------- 10 files changed, 36 insertions(+), 35 deletions(-) rename test/integration/fixtures/options/{exclude => ignore}/fail.fixture.js (71%) rename test/integration/fixtures/options/{exclude => ignore}/nested/fail.fixture.js (68%) rename test/integration/fixtures/options/{exclude => ignore}/nested/pass.fixture.js (56%) rename test/integration/fixtures/options/{exclude => ignore}/pass.fixture.js (60%) rename test/integration/options/{exclude.spec.js => ignore.spec.js} (65%) diff --git a/docs/index.md b/docs/index.md index 99ca417f0f..234682c4a4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -817,7 +817,7 @@ Mocha supports the `err.expected` and `err.actual` properties of any thrown `Ass -```plain +```text mocha [spec..] @@ -864,7 +864,7 @@ Configuration --package Path to package.json for config [string] File Handling - --exclude Ignore file(s) or glob pattern(s) + --ignore, --exclude Ignore file(s) or glob pattern(s) [array] [default: (none)] --extension, --watch-extensions File extension(s) to load and/or watch [array] [default: js] @@ -1075,9 +1075,9 @@ Specify an explicit path to a [`package.json` file](#configuring-mocha-nodejs) ( By default, Mocha looks for a `package.json` in the current working directory or nearest ancestor, and will use the first file found (regardless of whether it contains a `mocha` property); to suppress `package.json` lookup, use `--no-package`. -### `--exclude ` +### `--ignore ` -Explicitly exclude one or more files, directories or "globs" that would otherwise be loaded. +Explicitly ignore (exclude) one or more test files, directories or globs (e.g., `some/**/files*`) that would otherwise be loaded. Files specified using `--file` _are not affected_ by this option. @@ -1093,7 +1093,7 @@ Affects `--watch` behavior. Specifying `--extension` will _remove_ `.js` as a test file extension; use `--extension js` to re-add it. For example, to load `.mjs` and `.js` test files, you must supply `--extension mjs --extension js`. -### `--file ` +### `--file ` Explicitly _include_ a test file to be loaded before other test files files. Multiple uses of `--file` are allowed, and will be loaded in order given. diff --git a/example/config/.mocharc.yml b/example/config/.mocharc.yml index 1a5f820482..466b4956f1 100644 --- a/example/config/.mocharc.yml +++ b/example/config/.mocharc.yml @@ -6,8 +6,6 @@ check-leaks: false color: true delay: false diff: true -exclude: - - /path/to/some/excluded/file exit: false # could be expressed as "no-exit: true" extension: - js @@ -25,6 +23,8 @@ global: # fgrep and grep are mutually exclusive # grep: something growl: false +ignore: + - /path/to/some/ignored/file inline-diffs: false # needs to be used with grep or fgrep # invert: false @@ -39,8 +39,8 @@ retries: 1 slow: 75 sort: false spec: test/**/*.spec.js # the positional arguments! -v8-stack-trace-limit: 100 # V8 flags are prepended with "v8-" timeout: false # same as "no-timeout: true" or "timeout: 0" trace-warnings: true # node flags ok ui: bdd +v8-stack-trace-limit: 100 # V8 flags are prepended with "v8-" watch: false diff --git a/lib/cli/run-helpers.js b/lib/cli/run-helpers.js index 732161b146..6f3476d496 100644 --- a/lib/cli/run-helpers.js +++ b/lib/cli/run-helpers.js @@ -123,14 +123,14 @@ exports.handleRequires = (requires = []) => { * @param {Object} [opts] - Options * @param {string[]} [opts.extension] - File extensions to use * @param {string[]} [opts.spec] - Files, dirs, globs to run - * @param {string[]} [opts.exclude] - Files, dirs, globs to exclude + * @param {string[]} [opts.ignore] - Files, dirs, globs to ignore * @param {boolean} [opts.recursive=false] - Find files recursively * @param {boolean} [opts.sort=false] - Sort test files * @returns {string[]} List of files to test * @private */ exports.handleFiles = ({ - exclude = [], + ignore = [], extension = [], file = [], recursive = false, @@ -157,7 +157,7 @@ exports.handleFiles = ({ newFiles = [newFiles]; } newFiles = newFiles.filter(fileName => - exclude.every(pattern => !minimatch(fileName, pattern)) + ignore.every(pattern => !minimatch(fileName, pattern)) ); } diff --git a/lib/cli/run-option-metadata.js b/lib/cli/run-option-metadata.js index 0838e6050c..e10e008fa6 100644 --- a/lib/cli/run-option-metadata.js +++ b/lib/cli/run-option-metadata.js @@ -14,10 +14,10 @@ */ exports.types = { array: [ - 'exclude', 'extension', 'file', 'global', + 'ignore', 'require', 'reporter-option', 'spec' @@ -63,6 +63,7 @@ exports.aliases = { global: ['globals'], grep: ['g'], growl: ['G'], + ignore: ['exclude'], invert: ['i'], 'no-colors': ['C'], reporter: ['R'], diff --git a/lib/cli/run.js b/lib/cli/run.js index 3a6ba0072c..da5ffd7b6a 100644 --- a/lib/cli/run.js +++ b/lib/cli/run.js @@ -82,12 +82,6 @@ exports.builder = yargs => description: 'Show diff on failure', group: GROUPS.OUTPUT }, - exclude: { - defaultDescription: '(none)', - description: 'Ignore file(s) or glob pattern(s)', - group: GROUPS.FILES, - requiresArg: true - }, exit: { description: 'Force Mocha to quit after tests complete', group: GROUPS.RULES @@ -143,6 +137,12 @@ exports.builder = yargs => description: 'Enable Growl notifications', group: GROUPS.OUTPUT }, + ignore: { + defaultDescription: '(none)', + description: 'Ignore file(s) or glob pattern(s)', + group: GROUPS.FILES, + requiresArg: true + }, 'inline-diffs': { description: 'Display actual/expected differences inline within each string', diff --git a/test/integration/fixtures/options/exclude/fail.fixture.js b/test/integration/fixtures/options/ignore/fail.fixture.js similarity index 71% rename from test/integration/fixtures/options/exclude/fail.fixture.js rename to test/integration/fixtures/options/ignore/fail.fixture.js index 2b58528bfc..fb848b288e 100644 --- a/test/integration/fixtures/options/exclude/fail.fixture.js +++ b/test/integration/fixtures/options/ignore/fail.fixture.js @@ -1,6 +1,6 @@ 'use strict'; -describe('exclude test fail', function () { +describe('ignore test fail', function () { it('should not run this test', function () { throw new Error('should not run'); }); diff --git a/test/integration/fixtures/options/exclude/nested/fail.fixture.js b/test/integration/fixtures/options/ignore/nested/fail.fixture.js similarity index 68% rename from test/integration/fixtures/options/exclude/nested/fail.fixture.js rename to test/integration/fixtures/options/ignore/nested/fail.fixture.js index 5264ce7bff..88fb7c811f 100644 --- a/test/integration/fixtures/options/exclude/nested/fail.fixture.js +++ b/test/integration/fixtures/options/ignore/nested/fail.fixture.js @@ -1,6 +1,6 @@ 'use strict'; -describe('exclude test nested fail', function () { +describe('ignore test nested fail', function () { it('should not run this test', function () { throw new Error('should not run'); }); diff --git a/test/integration/fixtures/options/exclude/nested/pass.fixture.js b/test/integration/fixtures/options/ignore/nested/pass.fixture.js similarity index 56% rename from test/integration/fixtures/options/exclude/nested/pass.fixture.js rename to test/integration/fixtures/options/ignore/nested/pass.fixture.js index 36f55d138c..5351e1918d 100644 --- a/test/integration/fixtures/options/exclude/nested/pass.fixture.js +++ b/test/integration/fixtures/options/ignore/nested/pass.fixture.js @@ -1,5 +1,5 @@ 'use strict'; -describe('exclude test nested pass', function () { +describe('ignore test nested pass', function () { it('should find this test', function () {}); }); diff --git a/test/integration/fixtures/options/exclude/pass.fixture.js b/test/integration/fixtures/options/ignore/pass.fixture.js similarity index 60% rename from test/integration/fixtures/options/exclude/pass.fixture.js rename to test/integration/fixtures/options/ignore/pass.fixture.js index ada7e68678..8cb7779f09 100644 --- a/test/integration/fixtures/options/exclude/pass.fixture.js +++ b/test/integration/fixtures/options/ignore/pass.fixture.js @@ -1,5 +1,5 @@ 'use strict'; -describe('exclude test pass', function () { +describe('ignore test pass', function () { it('should find this test', function () {}); }); diff --git a/test/integration/options/exclude.spec.js b/test/integration/options/ignore.spec.js similarity index 65% rename from test/integration/options/exclude.spec.js rename to test/integration/options/ignore.spec.js index dc56410c1f..85d9de4204 100644 --- a/test/integration/options/exclude.spec.js +++ b/test/integration/options/ignore.spec.js @@ -5,7 +5,7 @@ var helpers = require('../helpers'); var runMochaJSON = helpers.runMochaJSON; var resolvePath = helpers.resolveFixturePath; -describe('--exclude', function() { +describe('--ignore', function() { /* * Runs mocha in {path} with the given args. * Calls handleResult with the result. @@ -26,11 +26,11 @@ describe('--exclude', function() { }); } - it('should exclude specific files', function(done) { - var fixtures = path.join('options', 'exclude', '*'); + it('should ignore specific files', function(done) { + var fixtures = path.join('options', 'ignore', '*'); runMochaTest( fixtures, - ['--exclude', resolvePath(path.join('options', 'exclude', 'fail'))], + ['--ignore', resolvePath(path.join('options', 'ignore', 'fail'))], function(res) { expect(res, 'to have passed') .and('to have run test', 'should find this test') @@ -40,11 +40,11 @@ describe('--exclude', function() { ); }); - it('should exclude globbed files', function(done) { - var fixtures = path.join('options', 'exclude', '**', '*'); + it('should ignore globbed files', function(done) { + var fixtures = path.join('options', 'ignore', '**', '*'); runMochaTest( fixtures, - ['--exclude', '**/fail.fixture.js'], + ['--ignore', '**/fail.fixture.js'], function(res) { expect(res, 'to have passed') .and('not to have pending tests') @@ -54,15 +54,15 @@ describe('--exclude', function() { ); }); - it('should exclude multiple patterns', function(done) { - var fixtures = path.join('options', 'exclude', '**', '*'); + it('should ignore multiple patterns', function(done) { + var fixtures = path.join('options', 'ignore', '**', '*'); runMochaTest( fixtures, [ - '--exclude', - resolvePath(path.join('options', 'exclude', 'fail')), - '--exclude', - resolvePath(path.join('options', 'exclude', 'nested', 'fail')) + '--ignore', + resolvePath(path.join('options', 'ignore', 'fail')), + '--ignore', + resolvePath(path.join('options', 'ignore', 'nested', 'fail')) ], function(res) { expect(res, 'to have passed') From 42a7e4e17ff7078936ef494dac37588588551edb Mon Sep 17 00:00:00 2001 From: Christopher Hiller Date: Wed, 13 Mar 2019 17:07:09 -0700 Subject: [PATCH 012/441] fix extension handling; closes #3808 --- lib/cli/options.js | 29 +++++++++- lib/utils.js | 12 +++- test/node-unit/cli/options.spec.js | 90 +++++++++++++++++++++++++++--- 3 files changed, 119 insertions(+), 12 deletions(-) diff --git a/lib/cli/options.js b/lib/cli/options.js index a033c39ac7..8ca16d88c2 100644 --- a/lib/cli/options.js +++ b/lib/cli/options.js @@ -10,7 +10,8 @@ const fs = require('fs'); const yargsParser = require('yargs-parser'); const {types, aliases} = require('./run-option-metadata'); const {ONE_AND_DONE_ARGS} = require('./one-and-dones'); -const mocharc = require('../mocharc.json'); +// paranoia +const mocharc = Object.freeze(require('../mocharc.json')); const {list} = require('./run-helpers'); const {loadConfig, findConfig} = require('./config'); const findUp = require('find-up'); @@ -321,6 +322,30 @@ const loadOptions = (argv = []) => { args.opts = false; args._ = args._.concat(optsConfig._ || []); } + // special case: "extension" option should not combine with default value. + // normally we want to combine "array"-type options, and we _do_ with "extension", but only + // within user-defined configuration (args or anything else). + // we must also search through any aliases of "extension" because while the arguments are /// + // normalized by this point, the config file values are not. + // only the "canonical" option name is used in `mocharc`, so we needn't worry about clearing + // multiple options. + // NOTE: as of this writing, "extension" is the only default value which is of an "array" type; + // it's unknown whether the the below strategy should be generalized to any other future + // "array"-type default option. + const processedMocharc = Object.assign({}, mocharc); + if ( + args.extension || + ['extension'] + .concat(aliases.extension) + .some( + opt => + Object.hasOwnProperty(rcConfig, opt) || + Object.hasOwnProperty(pkgConfig, opt) || + Object.hasOwnProperty(optsConfig, opt) + ) + ) { + delete processedMocharc.extension; + } args = parse( args._, @@ -328,7 +353,7 @@ const loadOptions = (argv = []) => { rcConfig || {}, pkgConfig || {}, optsConfig || {}, - mocharc + processedMocharc ); // recombine positional arguments and "spec" diff --git a/lib/utils.js b/lib/utils.js index 86ba8f0376..14c5ce126d 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -575,9 +575,15 @@ exports.lookupFiles = function lookupFiles(filepath, extensions, recursive) { var stat; if (!fs.existsSync(filepath)) { - if (fs.existsSync(filepath + '.js')) { - filepath += '.js'; - } else { + // check all extensions + if ( + !extensions.some(function(ext) { + if (fs.existsSync(filepath + '.' + ext)) { + filepath += '.' + ext; + return true; + } + }) + ) { // Handle glob files = glob.sync(filepath); if (!files.length) { diff --git a/test/node-unit/cli/options.spec.js b/test/node-unit/cli/options.spec.js index 3438a5564f..62a63f9fd6 100644 --- a/test/node-unit/cli/options.spec.js +++ b/test/node-unit/cli/options.spec.js @@ -27,7 +27,9 @@ const defaults = { timeout: 1000, timeouts: 1000, t: 1000, - opts: '/default/path/to/mocha.opts' + opts: '/default/path/to/mocha.opts', + extension: ['js'], + 'watch-extensions': ['js'] }; describe('options', function() { @@ -59,6 +61,7 @@ describe('options', function() { describe('loadOptions()', function() { describe('when no parameter provided', function() { beforeEach(function() { + this.timeout(500); readFileSync = sandbox.stub(); readFileSync.onFirstCall().returns('{}'); readFileSync.onSecondCall().returns('--retries 3'); @@ -497,8 +500,8 @@ describe('options', function() { beforeEach(function() { readFileSync = sandbox.stub(); config = '/some/.mocharc.json'; - readFileSync.onFirstCall().returns('--retries 3'); - readFileSync.onSecondCall().returns('{}'); + readFileSync.onFirstCall().returns('{}'); + readFileSync.onSecondCall().returns('--retries 3'); findConfig = sandbox.stub(); loadConfig = sandbox.stub().throws('Error', 'failed to parse'); findupSync = sandbox.stub().returns('/some/package.json'); @@ -542,8 +545,8 @@ describe('options', function() { beforeEach(function() { readFileSync = sandbox.stub(); - readFileSync.onFirstCall().returns('--retries 3'); - readFileSync.onSecondCall().returns('{}'); + readFileSync.onFirstCall().returns('{}'); + readFileSync.onSecondCall().throws(); findConfig = sandbox.stub().returns('/some/.mocharc.json'); loadConfig = sandbox.stub().returns({}); findupSync = sandbox.stub().returns('/some/package.json'); @@ -578,8 +581,8 @@ describe('options', function() { beforeEach(function() { readFileSync = sandbox.stub(); - readFileSync.onFirstCall().returns('--retries 3'); - readFileSync.onSecondCall().returns('{}'); + readFileSync.onFirstCall().returns('{}'); + readFileSync.onSecondCall().throws(); findConfig = sandbox.stub().returns(null); loadConfig = sandbox.stub().returns({}); findupSync = sandbox.stub().returns('/some/package.json'); @@ -716,5 +719,78 @@ describe('options', function() { }); }); }); + + describe('"extension" handling', function() { + describe('when user supplies "extension" option', function() { + let result; + + beforeEach(function() { + readFileSync = sandbox.stub(); + readFileSync.onFirstCall().throws(); + findConfig = sandbox.stub().returns('/some/.mocharc.json'); + loadConfig = sandbox.stub().returns({extension: ['tsx']}); + findupSync = sandbox.stub(); + loadOptions = proxyLoadOptions({ + readFileSync, + findConfig, + loadConfig, + findupSync + }); + result = loadOptions(['--extension', 'ts']); + }); + + it('should not concatenate the default value', function() { + expect(result, 'to have property', 'extension', ['ts', 'tsx']); + }); + }); + + describe('when user does not supply "extension" option', function() { + let result; + + beforeEach(function() { + readFileSync = sandbox.stub(); + readFileSync.onFirstCall().throws(); + findConfig = sandbox.stub().returns('/some/.mocharc.json'); + loadConfig = sandbox.stub().returns({}); + findupSync = sandbox.stub(); + loadOptions = proxyLoadOptions({ + readFileSync, + findConfig, + loadConfig, + findupSync + }); + result = loadOptions(); + }); + + it('should retain the default', function() { + expect(result, 'to have property', 'extension', ['js']); + }); + }); + }); + + describe('"spec" handling', function() { + describe('when user supplies "spec" in config and positional arguments', function() { + let result; + + beforeEach(function() { + readFileSync = sandbox.stub(); + readFileSync.onFirstCall().throws(); + findConfig = sandbox.stub().returns('/some/.mocharc.json'); + loadConfig = sandbox.stub().returns({spec: '*.spec.js'}); + findupSync = sandbox.stub(); + loadOptions = proxyLoadOptions({ + readFileSync, + findConfig, + loadConfig, + findupSync + }); + result = loadOptions(['*.test.js']); + }); + + it('should place both into the positional arguments array', function() { + expect(result, 'to have property', '_', ['*.test.js', '*.spec.js']); + }); + }); + }); }); }); From aed20bdb290db1bbf4ef173de297945702ee86e5 Mon Sep 17 00:00:00 2001 From: juergba Date: Thu, 25 Apr 2019 15:50:26 +0200 Subject: [PATCH 013/441] use yargs-parser options.default utils.js: fix lookupFiles() --- lib/cli/options.js | 35 +++++------------------------ lib/cli/run-helpers.js | 4 ++-- lib/utils.js | 20 ++++++++--------- test/integration/file-utils.spec.js | 13 +++++++---- 4 files changed, 26 insertions(+), 46 deletions(-) diff --git a/lib/cli/options.js b/lib/cli/options.js index 8ca16d88c2..340fb01e86 100644 --- a/lib/cli/options.js +++ b/lib/cli/options.js @@ -10,8 +10,7 @@ const fs = require('fs'); const yargsParser = require('yargs-parser'); const {types, aliases} = require('./run-option-metadata'); const {ONE_AND_DONE_ARGS} = require('./one-and-dones'); -// paranoia -const mocharc = Object.freeze(require('../mocharc.json')); +const mocharc = require('../mocharc.json'); const {list} = require('./run-helpers'); const {loadConfig, findConfig} = require('./config'); const findUp = require('find-up'); @@ -81,11 +80,12 @@ const nargOpts = types.array /** * Wrapper around `yargs-parser` which applies our settings * @param {string|string[]} args - Arguments to parse + * @param {Object} defaultValues - Default values of mocharc.json * @param {...Object} configObjects - `configObjects` for yargs-parser * @private * @ignore */ -const parse = (args = [], ...configObjects) => { +const parse = (args = [], defaultValues = {}, ...configObjects) => { // save node-specific args for special handling. // 1. when these args have a "=" they should be considered to have values // 2. if they don't, they just boolean flags @@ -110,6 +110,7 @@ const parse = (args = [], ...configObjects) => { const result = yargsParser.detailed(args, { configuration, configObjects, + default: defaultValues, coerce: coerceOpts, narg: nargOpts, alias: aliases, @@ -322,38 +323,14 @@ const loadOptions = (argv = []) => { args.opts = false; args._ = args._.concat(optsConfig._ || []); } - // special case: "extension" option should not combine with default value. - // normally we want to combine "array"-type options, and we _do_ with "extension", but only - // within user-defined configuration (args or anything else). - // we must also search through any aliases of "extension" because while the arguments are /// - // normalized by this point, the config file values are not. - // only the "canonical" option name is used in `mocharc`, so we needn't worry about clearing - // multiple options. - // NOTE: as of this writing, "extension" is the only default value which is of an "array" type; - // it's unknown whether the the below strategy should be generalized to any other future - // "array"-type default option. - const processedMocharc = Object.assign({}, mocharc); - if ( - args.extension || - ['extension'] - .concat(aliases.extension) - .some( - opt => - Object.hasOwnProperty(rcConfig, opt) || - Object.hasOwnProperty(pkgConfig, opt) || - Object.hasOwnProperty(optsConfig, opt) - ) - ) { - delete processedMocharc.extension; - } args = parse( args._, + mocharc, args, rcConfig || {}, pkgConfig || {}, - optsConfig || {}, - processedMocharc + optsConfig || {} ); // recombine positional arguments and "spec" diff --git a/lib/cli/run-helpers.js b/lib/cli/run-helpers.js index 6f3476d496..0858d61b03 100644 --- a/lib/cli/run-helpers.js +++ b/lib/cli/run-helpers.js @@ -219,7 +219,7 @@ exports.singleRun = (mocha, {files = [], exit = false} = {}) => { */ exports.watchRun = ( mocha, - {extension = ['js'], grep = '', ui = 'bdd', files = []} = {} + {extension = [], grep = '', ui = 'bdd', files = []} = {} ) => { let runner; @@ -291,7 +291,7 @@ exports.watchRun = ( */ exports.runMocha = ( mocha, - {watch = false, extension = ['js'], grep = '', ui = 'bdd', exit = false} = {}, + {watch = false, extension = [], grep = '', ui = 'bdd', exit = false} = {}, files = [] ) => { if (watch) { diff --git a/lib/utils.js b/lib/utils.js index 14c5ce126d..93005cedf2 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -562,7 +562,6 @@ function isHiddenOnUnix(pathname) { * * @public * @memberof Mocha.utils - * @todo Fix extension handling * @param {string} filepath - Base path to start searching from. * @param {string[]} extensions - File extensions to look for. * @param {boolean} recursive - Whether to recurse into subdirectories. @@ -571,19 +570,18 @@ function isHiddenOnUnix(pathname) { * @throws {TypeError} if `filepath` is directory and `extensions` not provided. */ exports.lookupFiles = function lookupFiles(filepath, extensions, recursive) { + extensions = extensions || []; var files = []; var stat; if (!fs.existsSync(filepath)) { // check all extensions - if ( - !extensions.some(function(ext) { - if (fs.existsSync(filepath + '.' + ext)) { - filepath += '.' + ext; - return true; - } - }) - ) { + extensions.forEach(function(ext) { + if (fs.existsSync(filepath + '.' + ext)) { + files.push(filepath + '.' + ext); + } + }); + if (!files.length) { // Handle glob files = glob.sync(filepath); if (!files.length) { @@ -592,8 +590,8 @@ exports.lookupFiles = function lookupFiles(filepath, extensions, recursive) { filepath ); } - return files; } + return files; } // Handle file @@ -624,7 +622,7 @@ exports.lookupFiles = function lookupFiles(filepath, extensions, recursive) { // ignore error return; } - if (!extensions) { + if (!extensions.length) { throw createMissingArgumentError( util.format( 'Argument %s required when argument %s is a directory', diff --git a/test/integration/file-utils.spec.js b/test/integration/file-utils.spec.js index 3fe030ee46..f09018871b 100644 --- a/test/integration/file-utils.spec.js +++ b/test/integration/file-utils.spec.js @@ -58,7 +58,7 @@ describe('file utils', function() { ex.and('to have length', expectedLength); }); - it('should parse extensions from extnsions parameter', function() { + it('should parse extensions from extensions parameter', function() { var nonJsFile = tmpFile('mocha-utils-text.txt'); fs.writeFileSync(nonJsFile, 'yippy skippy ying yang yow'); @@ -66,9 +66,14 @@ describe('file utils', function() { expect(res, 'to contain', nonJsFile).and('to have length', 1); }); - it('should not require the extensions parameter when looking up a file', function() { - var res = utils.lookupFiles(tmpFile('mocha-utils'), undefined, false); - expect(res, 'to be', tmpFile('mocha-utils.js')); + it('should require the extensions parameter when looking up a file', function() { + var dirLookup = function() { + return utils.lookupFiles(tmpFile('mocha-utils'), undefined, false); + }; + expect(dirLookup, 'to throw', { + name: 'Error', + code: 'ERR_MOCHA_NO_FILES_MATCH_PATTERN' + }); }); it('should require the extensions parameter when looking up a directory', function() { From 9b00fedb610241e33f7592c40164e42a38a793cf Mon Sep 17 00:00:00 2001 From: Juerg B <44573692+juergba@users.noreply.github.com> Date: Wed, 8 May 2019 19:29:31 +0200 Subject: [PATCH 014/441] preserve-symlinks{-main} flags (#3900) Update unit test for Node-12 compatibility. --- test/node-unit/cli/node-flags.spec.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/node-unit/cli/node-flags.spec.js b/test/node-unit/cli/node-flags.spec.js index a66a17e4a2..1347f256a9 100644 --- a/test/node-unit/cli/node-flags.spec.js +++ b/test/node-unit/cli/node-flags.spec.js @@ -35,9 +35,12 @@ describe('node-flags', function() { it('should return true for flags starting with "preserve-symlinks"', function() { expect(isNodeFlag('preserve-symlinks'), 'to be true'); expect(isNodeFlag('preserve-symlinks-main'), 'to be true'); - // XXX this is not true in some newer versions of Node.js. figure out where - // this changed. - expect(isNodeFlag('preserve_symlinks'), 'to be false'); + // Node >= v12 both flags exist in process.allowedNodeEnvironmentFlags + const nodeVersion = parseInt(process.version.match(/^v(\d+)\./)[1], 10); + expect( + isNodeFlag('preserve_symlinks'), + nodeVersion >= 12 ? 'to be true' : 'to be false' + ); }); it('should return true for flags starting with "harmony-" or "harmony_"', function() { From ffbcbf63a447f67681b901979dde5d2c70919d24 Mon Sep 17 00:00:00 2001 From: Piotr Kuczynski Date: Sun, 12 May 2019 15:08:29 +0200 Subject: [PATCH 015/441] Document option to define custom report name for XUnit reporter (#3906) --- docs/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/index.md b/docs/index.md index 234682c4a4..a3fa090632 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1467,6 +1467,8 @@ The `xunit` reporter is also available. It outputs an XUnit-compatible XML docum By default, it will output to the console. To write directly to a file, use `--reporter-options output=filename.xml`. +To specify custom report title, use `--reporter-options suiteName="Custom name"`. + ### Third-Party Reporters Mocha allows you to define custom reporters. For more information see the [wiki][mocha-wiki-more-reporters]. From 8ce447181f0c6e1312a4d4f1f1c2f3e64e4f30cc Mon Sep 17 00:00:00 2001 From: Avi Vahl Date: Fri, 17 May 2019 07:48:17 +0300 Subject: [PATCH 016/441] chore: upgrade (most) depedencies to latest (#3903) * chore: upgrade several depedencies to latest only major is diff@4, which doesn't seem to break mocha's use. * chore: upgrade all devDeps to latest stable replaced coffee-script with coffeescript (fixes deprecation notice) and regenerate package-lock.json * Another round of upgrades now using debug@4, which still supports node@6 --- docs/index.md | 6 +- package-lock.json | 4386 ++++++++------------ package-scripts.js | 2 +- package.json | 64 +- test/integration/compiler-globbing.spec.js | 2 +- test/integration/options/compilers.spec.js | 2 +- test/integration/options/extension.spec.js | 2 +- 7 files changed, 1884 insertions(+), 2580 deletions(-) diff --git a/docs/index.md b/docs/index.md index a3fa090632..814b261ba9 100644 --- a/docs/index.md +++ b/docs/index.md @@ -45,7 +45,7 @@ Mocha is a feature-rich JavaScript test framework running on [Node.js][] and in - [extensible reporting, bundled with 9+ reporters](#reporters) - [extensible test DSLs or "interfaces"](#interfaces) - [before, after, before each, after each hooks](#hooks) -- [arbitrary transpiler support (coffee-script etc)](#-compilers) +- [arbitrary transpiler support (coffeescript etc)](#-compilers) - [TextMate bundle](#textmate) ## Table of Contents @@ -864,12 +864,12 @@ Configuration --package Path to package.json for config [string] File Handling - --ignore, --exclude Ignore file(s) or glob pattern(s) - [array] [default: (none)] --extension, --watch-extensions File extension(s) to load and/or watch [array] [default: js] --file Specify file(s) to be loaded prior to root suite execution [array] [default: (none)] + --ignore, --exclude Ignore file(s) or glob pattern(s) + [array] [default: (none)] --recursive Look for tests in subdirectories [boolean] --require, -r Require module [array] [default: (none)] --sort, -S Sort test files [boolean] diff --git a/package-lock.json b/package-lock.json index 2aeadf2b21..fa43458827 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,58 +5,56 @@ "requires": true, "dependencies": { "@11ty/eleventy": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.7.1.tgz", - "integrity": "sha512-tG5L9f2JcwLcoG6XnR8EOYMJWZIw7Gl33BDVct9dRh+upAL5qMPfwgPMN6kKdaMQ9ki42EBHKmLLAVRcyCk1yg==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.8.3.tgz", + "integrity": "sha512-TehjvEuVQaocz3R/rYMJdujg8a2SL4Wt+ZUPKfXZS926Wd14JqLpWtR/dTNPOh3JzAovZDNrOpFmwN3/urX6gQ==", "dev": true, "requires": { "browser-sync": "^2.26.3", "chalk": "^2.4.2", - "chokidar": "^2.0.4", + "chokidar": "^2.1.5", "debug": "^4.1.1", + "dependency-graph": "^0.8.0", "dependency-tree": "^6.3.0", "ejs": "^2.6.1", "fast-glob": "^2.2.6", "fs-extra": "^7.0.1", - "gray-matter": "^4.0.1", + "gray-matter": "^4.0.2", "hamljs": "^0.6.2", - "handlebars": "^4.0.12", - "javascript-stringify": "^1.6.0", - "liquidjs": "^6.2.0", + "handlebars": "^4.1.1", + "javascript-stringify": "^2.0.0", + "liquidjs": "^6.4.3", "lodash": "^4.17.11", - "luxon": "^1.9.0", + "luxon": "^1.12.0", "markdown-it": "^8.4.2", "minimist": "^1.2.0", "moo": "^0.5.0", "multimatch": "^3.0.0", "mustache": "^2.3.0", "normalize-path": "^3.0.0", - "nunjucks": "^3.1.6", + "nunjucks": "^3.2.0", "parse-filepath": "^1.0.2", "please-upgrade-node": "^3.1.1", "pretty": "^2.0.0", "pug": "^2.0.3", - "recursive-copy": "^2.0.9", - "semver": "^5.6.0", + "recursive-copy": "^2.0.10", + "semver": "^6.0.0", "slugify": "^1.3.4", "time-require": "^0.1.2", "valid-url": "^1.0.9" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true + }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true } } }, @@ -70,12 +68,12 @@ } }, "@babel/generator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", - "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", "dev": true, "requires": { - "@babel/types": "^7.3.4", + "@babel/types": "^7.4.4", "jsesc": "^2.5.1", "lodash": "^4.17.11", "source-map": "^0.5.0", @@ -103,12 +101,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.4" } }, "@babel/highlight": { @@ -123,71 +121,60 @@ } }, "@babel/parser": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", - "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", "dev": true }, "@babel/runtime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", - "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.4.tgz", + "integrity": "sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg==", "dev": true, "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "^0.13.2" }, "dependencies": { "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", "dev": true } } }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/traverse": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", - "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", + "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.3.4", + "@babel/generator": "^7.4.4", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.3.4", - "@babel/types": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.11" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "@babel/types": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", - "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -216,6 +203,85 @@ "yargs": "^12.0.5" }, "dependencies": { + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "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" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "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", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "string-width": { + "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", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "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" + } + } + } + }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", @@ -234,18 +300,16 @@ "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" - }, - "dependencies": { - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -291,9 +355,9 @@ "dev": true }, "@sinonjs/commons": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.1.tgz", - "integrity": "sha512-rgmZk5CrBGAMATk0HlHOFvo8V44/r+On6cKS80tqid0Eljd+fFBWBOXZp9H2/EB3faxdNdzXTx6QZIKLkbJ7mA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz", + "integrity": "sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -310,9 +374,9 @@ } }, "@sinonjs/samsam": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.2.0.tgz", - "integrity": "sha512-j5F1rScewLtx6pbTK0UAjA3jJj4RYiSKOix53YWv+Jzy/AZ69qHxUpU8fwVLjyKbEEud9QrLpv6Ggs7WqTimYw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz", + "integrity": "sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw==", "dev": true, "requires": { "@sinonjs/commons": "^1.0.2", @@ -327,9 +391,9 @@ "dev": true }, "@types/babel-types": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.6.tgz", - "integrity": "sha512-8zYZyy2kgwBXdz2j8Ix7LOghGiZbOiHf6vqmmBX1r76FdAzVNv7cODyJTEglUWiOdRnXh0s/o58neUwv5vaitQ==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", + "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==", "dev": true }, "@types/babylon": { @@ -342,15 +406,21 @@ } }, "@types/node": { - "version": "10.12.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.29.tgz", - "integrity": "sha512-J/tnbnj8HcsBgCe2apZbdUpQ7hs4d7oZNTYA5bekWdP0sr2NGsOpI/HRdDroEi209tEvTcTtxhD0FfED3DhEcw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", + "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, "@types/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", - "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, "@types/unist": { @@ -409,13 +479,13 @@ "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, "acorn": { @@ -523,6 +593,12 @@ "repeat-string": "^1.5.2" }, "dependencies": { + "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 + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -566,9 +642,9 @@ } }, "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" }, "ansi-escapes": { "version": "3.2.0", @@ -637,6 +713,15 @@ "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", "dev": true }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -666,6 +751,12 @@ } } }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -728,7 +819,7 @@ }, "array-equal": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, @@ -750,6 +841,16 @@ "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", "dev": true }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -846,11 +947,12 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -884,9 +986,9 @@ "dev": true }, "assetgraph": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/assetgraph/-/assetgraph-5.8.1.tgz", - "integrity": "sha512-u9u6WDu1je6FraTV1Gx5/M8VhKsH6WuTdmz/7XDznwTYD2LZGU2rE/sJVUc2gwOOWF4Ztqa06sTmoW9OSrOdXA==", + "version": "5.8.4", + "resolved": "https://registry.npmjs.org/assetgraph/-/assetgraph-5.8.4.tgz", + "integrity": "sha512-vDGeWPSaRihVny07KsyFHYXFh7w2ScbzKruxNi0pZ7OT3zKzU9ppxVFK1kNnFUEjicLKaFB5Ffh2xk2n6dGjNA==", "dev": true, "requires": { "acorn": "^6.1.0", @@ -907,25 +1009,26 @@ "estraverse": "^4.2.0", "estraverse-fb": "^1.3.2", "font-family-papandreou": "^0.2.0-patch1", - "font-tracer": "^1.0.1", + "font-snapper": "^1.0.0", + "font-tracer": "^1.1.0", "fontkit": "^1.7.7", "gettemporaryfilepath": "^1.0.0", "glob": "^7.0.5", - "html-minifier": "^3.5.8", + "html-minifier": "^4.0.0", "imageinfo": "^1.0.4", - "jsdom": "13.2.0", + "jsdom": "14.0.0", "lines-and-columns": "^1.1.6", "lodash": "4.17.11", "memoizesync": "1.1.1", "mkdirp": "^0.5.1", "normalizeurl": "^1.0.0", "perfectionist": "^2.4.0", - "postcss": "7.0.9", + "postcss": "^7.0.14", "postcss-values-parser": "^2.0.0", "read-pkg-up": "^4.0.0", "repeat-string": "^1.5.4", "schemes": "^1.0.1", - "semver": "^5.3.0", + "semver": "^6.0.0", "sift": "^7.0.1", "source-map": "~0.6.1", "specificity": "^0.4.0", @@ -979,17 +1082,6 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "postcss": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.9.tgz", - "integrity": "sha512-eXB2Fm8/BtSABq7ia1HyvbkoD9zFqq2BWjHUAyRSgbK8qdyKrA6yMCX06l05Onc8bHemeXLB8hzJ8tM0ABc0Zw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-values-parser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", @@ -1022,6 +1114,12 @@ "read-pkg": "^3.0.0" } }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1033,25 +1131,16 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "assetgraph-builder": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-6.10.0.tgz", - "integrity": "sha512-HGpCM92CtNKtk/ijQzIt2icWbHVe05qh4pI8XeEt+/AGy+nkHkAtL9l22aD5bEgsrdiWRbT67+6+4+yxrJj/Iw==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-6.10.1.tgz", + "integrity": "sha512-jRqme+K8BWVAlY3+qqkWH19/FD92aay0TqZzCfaH3HkTTqFPacIHiGA/DRvPPOxjl+wvIvjVNLWSG2QrPxtHrA==", "dev": true, "requires": { - "assetgraph": "5.8.1", + "assetgraph": "5.8.4", "assetgraph-sprite": "^3.0.1", "browserslist": "^4.4.2", "chalk": "^2.3.2", @@ -1070,14 +1159,6 @@ "pngcrush": "^2.0.1", "pngquant": "^2.0.1", "urltools": "^0.4.1" - }, - "dependencies": { - "p-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", - "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", - "dev": true - } } }, "assetgraph-sprite": { @@ -1144,7 +1225,7 @@ }, "source-map": { "version": "0.1.43", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "optional": true, @@ -1156,7 +1237,7 @@ }, "ast-types": { "version": "0.7.8", - "resolved": "http://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk=", "dev": true }, @@ -1173,9 +1254,9 @@ "dev": true }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-each-series": { @@ -1210,18 +1291,18 @@ }, "autolinker": { "version": "0.15.3", - "resolved": "http://registry.npmjs.org/autolinker/-/autolinker-0.15.3.tgz", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.15.3.tgz", "integrity": "sha1-NCQX2PLzRhsUzwkIjV7fh5HcmDI=", "dev": true }, "autoprefixer": { - "version": "9.4.10", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.10.tgz", - "integrity": "sha512-XR8XZ09tUrrSzgSlys4+hy5r2/z4Jp7Ag3pHm31U4g/CTccYPOVe19AkaJ4ey/vRd1sfj+5TtuD6I0PXtutjvQ==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", + "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", "dev": true, "requires": { - "browserslist": "^4.4.2", - "caniuse-lite": "^1.0.30000940", + "browserslist": "^4.5.4", + "caniuse-lite": "^1.0.30000957", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^7.0.14", @@ -1248,6 +1329,14 @@ "requires": { "follow-redirects": "^1.2.5", "is-buffer": "^1.1.5" + }, + "dependencies": { + "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 + } } }, "babel-runtime": { @@ -1285,9 +1374,9 @@ "dev": true }, "bail": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", - "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", + "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==", "dev": true }, "balanced-match": { @@ -1484,9 +1573,9 @@ } }, "bin-version": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.0.0.tgz", - "integrity": "sha512-Ekhwm6AUiMbZ1LgVCNMkgjovpMR30FyQN74laAW9gs0NPjZR5gdY0ARNB0YsQG8GOme3CsHbxmeyq/7Ofq6QYQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", "dev": true, "requires": { "execa": "^1.0.0", @@ -1597,6 +1686,23 @@ "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", "dev": true }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "p-cancelable": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", @@ -1645,9 +1751,9 @@ } }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "bindings": { @@ -1661,7 +1767,7 @@ }, "bl": { "version": "1.2.2", - "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { @@ -1676,9 +1782,9 @@ "dev": true }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", "dev": true }, "bn.js": { @@ -1688,21 +1794,21 @@ "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { "debug": { @@ -1721,9 +1827,9 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true } } @@ -1797,7 +1903,7 @@ }, "brfs": { "version": "1.6.1", - "resolved": "http://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", "dev": true, "requires": { @@ -1889,13 +1995,13 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browser-sync": { - "version": "2.26.3", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.3.tgz", - "integrity": "sha512-VLzpjCA4uXqfzkwqWtMM6hvPm2PNHp2RcmzBXcbi6C9WpkUhhFb8SVAr4CFrCsFxDg+oY6HalOjn8F+egyvhag==", + "version": "2.26.5", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.5.tgz", + "integrity": "sha512-zVa6MmadAFgl5Uk53Yy5cw5tGTO7xSGAWK3Yx70GJ1t5jK+r6B4q3xq+1XbYfLt1SbeFg7WoNWneNhMT4B9jFw==", "dev": true, "requires": { - "browser-sync-client": "^2.26.2", - "browser-sync-ui": "^2.26.2", + "browser-sync-client": "^2.26.4", + "browser-sync-ui": "^2.26.4", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", "chokidar": "^2.0.4", @@ -1910,7 +2016,7 @@ "http-proxy": "1.15.2", "immutable": "^3", "localtunnel": "1.9.1", - "micromatch": "2.3.11", + "micromatch": "^3.1.10", "opn": "5.3.0", "portscanner": "2.1.1", "qs": "6.2.3", @@ -1932,32 +2038,6 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", @@ -1975,24 +2055,6 @@ "wrap-ansi": "^2.0.0" } }, - "expand-brackets": { - "version": "0.1.5", - "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" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -2004,18 +2066,18 @@ "universalify": "^0.1.0" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -2025,24 +2087,6 @@ "number-is-nan": "^1.0.0" } }, - "is-glob": { - "version": "2.0.1", - "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" - } - }, - "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" - } - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -2052,36 +2096,6 @@ "invert-kv": "^1.0.0" } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "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" - } - }, - "normalize-path": { - "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" - } - }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -2091,6 +2105,12 @@ "lcid": "^1.0.0" } }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -2117,8 +2137,18 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "y18n": { - "version": "3.2.1", + "wrap-ansi": { + "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", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true @@ -2157,9 +2187,9 @@ } }, "browser-sync-client": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.2.tgz", - "integrity": "sha512-FEuVJD41fI24HJ30XOT2RyF5WcnEtdJhhTqeyDlnMk/8Ox9MZw109rvk9pdfRWye4soZLe+xcAo9tHSMxvgAdw==", + "version": "2.26.4", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.4.tgz", + "integrity": "sha512-mQiDp5/tf79VezDS5j/EExU4Ze6f5DQYuL0Z7VdJgBbNLTHDfkYGi2R620qc6HkY9XZA0m4/UwihT7J42RBIJA==", "dev": true, "requires": { "etag": "1.8.1", @@ -2169,9 +2199,9 @@ } }, "browser-sync-ui": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.2.tgz", - "integrity": "sha512-LF7GMWo8ELOE0eAlxuRCfnGQT1ZxKP9flCfGgZdXFc6BwmoqaJHlYe7MmVvykKkXjolRXTz8ztXAKGVqNwJ3EQ==", + "version": "2.26.4", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", + "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==", "dev": true, "requires": { "async-each-series": "0.1.1", @@ -2258,7 +2288,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -2312,7 +2342,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -2353,14 +2383,14 @@ } }, "browserslist": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz", - "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", + "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000939", - "electron-to-chromium": "^1.3.113", - "node-releases": "^1.1.8" + "caniuse-lite": "^1.0.30000967", + "electron-to-chromium": "^1.3.133", + "node-releases": "^1.1.19" } }, "bs-recipes": { @@ -2438,9 +2468,9 @@ "dev": true }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, "cache-base": { @@ -2512,6 +2542,18 @@ "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, + "caching-transform": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", + "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "dev": true, + "requires": { + "hasha": "^3.0.0", + "make-dir": "^2.0.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.4.2" + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -2559,13 +2601,13 @@ } }, "camelcase": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.1.0.tgz", - "integrity": "sha512-WP9f9OBL/TAbwOFBJL79FoS9UKUmnp82RWnhlwTgrAJeMq7lytHhe0Jzc6/P7Zq0+2oviXJuPlvkZalWUug9gg==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -2594,19 +2636,20 @@ } }, "caniuse-lite": { - "version": "1.0.30000941", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000941.tgz", - "integrity": "sha512-4vzGb2MfZcO20VMPj1j6nRAixhmtlhkypM4fL4zhgzEucQIYiRzSqPcWIu1OF8i0FETD93FMIPWfUJCAcFvrqA==", + "version": "1.0.30000967", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz", + "integrity": "sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==", "dev": true }, "canvas": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.4.1.tgz", - "integrity": "sha512-SaFomFqDuuuSTScTHQ7nXc5ea71Ieb8ctvwXjR7vzLsBMfp3euTv2xsTY70zIoC5r4sSQZYXv6tiHiORJ4y1vg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.5.0.tgz", + "integrity": "sha512-wwRz2cLMgb9d+rnotOJCoc04Bzj3aJMpWc6JxAD6lP7bYz0ldcn0sKddoZ0vhD5T8HBxrK+XmRDJb68/2VqARw==", "dev": true, "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.11.0" + "nan": "^2.13.2", + "node-pre-gyp": "^0.11.0", + "simple-get": "^3.0.3" } }, "capitalize": { @@ -2628,12 +2671,12 @@ "dev": true }, "catharsis": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", - "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.10.tgz", + "integrity": "sha512-l2OUaz/3PU3MZylspVFJvwHCVfWyvcduPq4lv3AzZ2pJzZCo7kNKFNyatwujD7XgvGkNAE/Jhhbh2uARNwNkfw==", "dev": true, "requires": { - "underscore-contrib": "~0.3.0" + "lodash": "^4.17.11" } }, "caw": { @@ -2649,9 +2692,9 @@ } }, "ccount": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", - "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", + "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==", "dev": true }, "center-align": { @@ -2699,21 +2742,21 @@ } }, "character-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", - "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", + "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==", "dev": true }, "character-entities-html4": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", - "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", + "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==", "dev": true }, "character-entities-legacy": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", - "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", + "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==", "dev": true }, "character-parser": { @@ -2726,9 +2769,9 @@ } }, "character-reference-invalid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", - "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", + "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==", "dev": true }, "chardet": { @@ -2744,9 +2787,9 @@ "dev": true }, "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -2760,18 +2803,7 @@ "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", - "upath": "^1.1.0" - }, - "dependencies": { - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } + "upath": "^1.1.1" } }, "chownr": { @@ -2878,7 +2910,7 @@ }, "slice-ansi": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, @@ -2923,21 +2955,23 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { - "ansi-regex": "^3.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } } } @@ -2973,16 +3007,16 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "coffeescript": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.4.1.tgz", + "integrity": "sha512-34GV1aHrsMpTaO3KfMJL40ZNuvKDR/g98THHnE9bQj8HjMaZvSrLik99WWqyMhRtbe8V5hpx5iLgdcSvM/S2wg==", "dev": true }, "collapse-white-space": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", - "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", + "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", "dev": true }, "collection-visit": { @@ -2996,9 +3030,9 @@ } }, "color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", - "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", + "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -3054,7 +3088,7 @@ "dependencies": { "convert-source-map": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true }, @@ -3067,18 +3101,18 @@ } }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "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.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, "comment-regex": { @@ -3099,6 +3133,12 @@ "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "compare-module-exports": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/compare-module-exports/-/compare-module-exports-2.1.0.tgz", @@ -3160,6 +3200,12 @@ "is-extendable": "^0.1.0" } }, + "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 + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3193,6 +3239,23 @@ "unique-string": "^1.0.0", "write-file-atomic": "^2.0.0", "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "connect": { @@ -3324,15 +3387,14 @@ "dev": true }, "cosmiconfig": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz", - "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", + "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", "dev": true, "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "lodash.get": "^4.4.2", + "js-yaml": "^3.13.0", "parse-json": "^4.0.0" }, "dependencies": { @@ -3364,12 +3426,33 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, + "cp-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", + "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^2.0.0", + "nested-error-stacks": "^2.0.0", + "pify": "^4.0.1", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -3391,7 +3474,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -3404,7 +3487,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -3471,7 +3554,7 @@ }, "css-color-names": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true }, @@ -3734,9 +3817,9 @@ "dev": true }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { "ms": "^2.1.1" } @@ -3766,6 +3849,25 @@ "make-dir": "^1.0.0", "pify": "^2.3.0", "strip-dirs": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + } } }, "decompress-response": { @@ -3889,6 +3991,23 @@ "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", "dev": true }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -3984,6 +4103,12 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "dependency-graph": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.8.0.tgz", + "integrity": "sha512-DCvzSq2UiMsuLnj/9AL484ummEgLtZIcRS7YvtO38QnpX3vqh9nJ8P+zhu8Ja+SmLrBHO2iDbva20jq38qvBkQ==", + "dev": true + }, "dependency-tree": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-6.5.0.tgz", @@ -3994,17 +4119,6 @@ "debug": "^4.1.1", "filing-cabinet": "^2.3.0", "precinct": "^5.3.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "deps-sort": { @@ -4072,7 +4186,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -4118,17 +4232,6 @@ "debug": "^4.0.0", "gonzales-pe": "^4.2.3", "node-source-walk": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "detective-postcss": { @@ -4141,17 +4244,6 @@ "is-url": "^1.2.4", "postcss": "^7.0.2", "postcss-values-parser": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "detective-sass": { @@ -4163,17 +4255,6 @@ "debug": "^4.1.1", "gonzales-pe": "^4.2.3", "node-source-walk": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "detective-scss": { @@ -4185,17 +4266,6 @@ "debug": "^4.1.1", "gonzales-pe": "^4.2.3", "node-source-walk": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "detective-stylus": { @@ -4243,13 +4313,13 @@ "dev": true }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==" }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -4270,6 +4340,15 @@ "lodash.omit": "^4.5.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -4400,6 +4479,15 @@ "url-to-options": "^1.0.1" } }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -4410,7 +4498,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -4482,9 +4570,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.113", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", - "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", + "version": "1.3.133", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz", + "integrity": "sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg==", "dev": true }, "elegant-spinner": { @@ -4688,6 +4776,12 @@ "is-symbol": "^1.0.2" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "es6-promise": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", @@ -4696,7 +4790,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { @@ -4761,9 +4855,9 @@ } }, "eslint": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.0.tgz", - "integrity": "sha512-xwG7SS5JLeqkiR3iOmVgtF8Y6xPdtr6AAsN6ph7Q6R/fv+3UlKYoika8SmNzmb35qdRF+RfTY35kMEdtbi+9wg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -4772,7 +4866,7 @@ "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.2", + "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", "espree": "^5.0.1", @@ -4786,7 +4880,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.2.2", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.11", @@ -4804,24 +4898,6 @@ "text-table": "^0.2.0" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "import-fresh": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", @@ -4850,9 +4926,9 @@ } }, "eslint-config-prettier": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz", - "integrity": "sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.2.0.tgz", + "integrity": "sha512-y0uWc/FRfrHhpPZCYflWC8aE0KRJRY04rdZVfl8cL3sEZmOYyaBdhdlQPjKZBnuRMyLVK+JUZr7HaZFClQiH4w==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -4906,9 +4982,9 @@ } }, "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", + "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", "dev": true, "requires": { "debug": "^2.6.8", @@ -4943,21 +5019,22 @@ } }, "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz", + "integrity": "sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==", "dev": true, "requires": { + "array-includes": "^3.0.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", + "eslint-module-utils": "^2.4.0", "has": "^1.0.3", "lodash": "^4.17.11", "minimatch": "^3.0.4", "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" + "resolve": "^1.10.0" }, "dependencies": { "debug": { @@ -4971,7 +5048,7 @@ }, "doctrine": { "version": "1.5.0", - "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { @@ -4988,6 +5065,12 @@ "locate-path": "^2.0.0" } }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -5079,40 +5162,46 @@ } }, "eslint-plugin-node": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", - "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-9.0.1.tgz", + "integrity": "sha512-fljT5Uyy3lkJzuqhxrYanLSsvaILs9I7CmQ31atTtZ0DoIzRbbvInBh4cQ1CrthFHInHYBQxfPmPt6KLHXNXdw==", "dev": true, "requires": { - "eslint-plugin-es": "^1.3.1", + "eslint-plugin-es": "^1.4.0", "eslint-utils": "^1.3.1", - "ignore": "^5.0.2", + "ignore": "^5.1.1", "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" + "resolve": "^1.10.1", + "semver": "^6.0.0" }, "dependencies": { "ignore": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.5.tgz", - "integrity": "sha512-kOC8IUb8HSDMVcYrDVezCxpJkzSQWTAzf3olpKM6o9rM5zpojx23O0Fl8Wr4+qJ6ZbPEHqf1fdwev/DS7v7pmA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.1.tgz", + "integrity": "sha512-DWjnQIFLenVrwyRCKZT+7a7/U4Cqgar4WG8V++K3hw+lrW1hc/SIwdiGmtxKCVACmHULTuGeBbHJmbwW7/sAvA==", + "dev": true + }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", "dev": true } } }, "eslint-plugin-prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", - "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", + "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-promise": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", - "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz", + "integrity": "sha512-faAHw7uzlNPy7b45J1guyjazw28M+7gJokKUjC5JSFoYfUEyy6Gw/i7YQvmv2Yk00sUjWcmzXQLpU1Ki/C2IZQ==", "dev": true }, "eslint-plugin-standard": { @@ -5122,9 +5211,9 @@ "dev": true }, "eslint-scope": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", - "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -5217,7 +5306,7 @@ }, "event-stream": { "version": "3.3.4", - "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { @@ -5353,6 +5442,12 @@ "repeat-string": "^1.5.2" } }, + "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-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -5362,6 +5457,12 @@ "kind-of": "^3.0.2" } }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", @@ -5416,9 +5517,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", + "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", "dev": true } } @@ -5478,17 +5579,6 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "extglob": { @@ -5612,17 +5702,6 @@ "is-glob": "^4.0.0", "merge2": "^1.2.3", "micromatch": "^3.1.10" - }, - "dependencies": { - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } } }, "fast-json-stable-stringify": { @@ -5683,12 +5762,6 @@ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -5724,17 +5797,6 @@ "sass-lookup": "^3.0.0", "stylus-lookup": "^3.0.1", "typescript": "^3.0.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "fill-range": { @@ -5801,6 +5863,28 @@ "traverse-chain": "~0.1.0" } }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, "find-parent-dir": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", @@ -5816,19 +5900,19 @@ } }, "find-versions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.0.0.tgz", - "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.1.0.tgz", + "integrity": "sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q==", "dev": true, "requires": { - "array-uniq": "^2.0.0", + "array-uniq": "^2.1.0", "semver-regex": "^2.0.0" }, "dependencies": { "array-uniq": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.0.0.tgz", - "integrity": "sha512-O3QZEr+3wDj7otzF7PjNGs6CA3qmYMLvt5xGkjY/V0VxS+ovvqVo/5wKM/OVOAyuX4DTh9H31zE/yKtO66hTkg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", + "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==", "dev": true } } @@ -5845,13 +5929,13 @@ "dependencies": { "colors": { "version": "0.6.2", - "resolved": "http://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", "dev": true }, "commander": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", "dev": true } @@ -5863,13 +5947,6 @@ "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", "requires": { "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - } } }, "flat-cache": { @@ -5908,6 +5985,17 @@ "dev": true, "requires": { "debug": "^3.2.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "font-family-papandreou": { @@ -5916,6 +6004,16 @@ "integrity": "sha512-l6WMbeh7+Zd4TTu3yUUPR5KOepiuGLd/QAPfTIoX8ipTko0IF7PU6dsM4YM2zCDToEPIPSyCBKEJnKlSdYMgaA==", "dev": true }, + "font-snapper": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/font-snapper/-/font-snapper-1.0.0.tgz", + "integrity": "sha512-8E91ADLNoLIXZGGRDuuK13SWPVbbxIwVkcIcvEoQdEpP13U20bOVXXrur4VxUff3pMImrot7cM/9vN0LwiJ32w==", + "dev": true, + "requires": { + "css-font-weight-names": "^0.2.1", + "font-family-papandreou": "^0.2.0-patch1" + } + }, "font-tracer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/font-tracer/-/font-tracer-1.1.0.tgz", @@ -5966,21 +6064,34 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "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": "^1.0.1" - } - }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "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" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -6031,7 +6142,7 @@ }, "fs-access": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { @@ -6087,14 +6198,14 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -6172,12 +6283,12 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -6348,24 +6459,24 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, @@ -6393,13 +6504,13 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -6538,7 +6649,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -6706,7 +6817,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -6732,9 +6843,9 @@ "dev": true }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-func-name": { "version": "2.0.0", @@ -6799,9 +6910,9 @@ "dev": true }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6811,52 +6922,27 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "^2.1.0" } } } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, "glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", @@ -6873,9 +6959,9 @@ } }, "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { @@ -6916,7 +7002,7 @@ }, "debug": { "version": "2.2.0", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", "dev": true, "requires": { @@ -6925,7 +7011,7 @@ }, "ms": { "version": "0.7.1", - "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", "dev": true } @@ -6960,7 +7046,7 @@ }, "got": { "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -7027,9 +7113,9 @@ "dev": true }, "handlebars": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", - "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -7094,14 +7180,6 @@ "dev": true, "requires": { "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } } }, "has-color": { @@ -7168,6 +7246,12 @@ "kind-of": "^4.0.0" }, "dependencies": { + "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 + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -7199,6 +7283,15 @@ "minimalistic-assert": "^1.0.1" } }, + "hasha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", + "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "dev": true, + "requires": { + "is-stream": "^1.0.1" + } + }, "hat": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", @@ -7276,31 +7369,23 @@ } }, "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" } }, "htmlescape": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, @@ -7330,15 +7415,16 @@ "dev": true }, "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { "statuses": { @@ -7407,24 +7493,35 @@ "requires": { "agent-base": "^4.1.0", "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "husky": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", - "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-2.3.0.tgz", + "integrity": "sha512-A/ZQSEILoq+mQM3yC3RIBSaw1bYXdkKnyyKVSUiJl+iBjVZc5LQEXdGY1ZjrDxC4IzfRPiJ0IqzEQGCN5TQa/A==", "dev": true, "requires": { - "cosmiconfig": "^5.0.7", + "cosmiconfig": "^5.2.0", "execa": "^1.0.0", "find-up": "^3.0.0", - "get-stdin": "^6.0.0", + "get-stdin": "^7.0.0", "is-ci": "^2.0.0", - "pkg-dir": "^3.0.0", + "pkg-dir": "^4.1.0", "please-upgrade-node": "^3.1.1", - "read-pkg": "^4.0.1", + "read-pkg": "^5.1.1", "run-node": "^1.0.0", - "slash": "^2.0.0" + "slash": "^3.0.0" }, "dependencies": { "ci-info": { @@ -7434,9 +7531,9 @@ "dev": true }, "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", "dev": true }, "is-ci": { @@ -7458,36 +7555,31 @@ "json-parse-better-errors": "^1.0.1" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.1.0.tgz", + "integrity": "sha512-55k9QN4saZ8q518lE6EFgYiu95u3BWkSajCifhdQjvLvmr8IpnRbhI+UGpWJQfa0KzDguHeeWT1ccO1PmkOi3A==", "dev": true, "requires": { "find-up": "^3.0.0" } }, "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", + "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", "dev": true, "requires": { - "normalize-package-data": "^2.3.2", + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", "parse-json": "^4.0.0", - "pify": "^3.0.0" + "type-fest": "^0.4.1" } }, "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true } } @@ -7499,18 +7591,18 @@ "dev": true }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "ignore": { @@ -7640,9 +7732,9 @@ } }, "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -7656,7 +7748,7 @@ "run-async": "^2.2.0", "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { @@ -7670,9 +7762,9 @@ } }, "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -7698,6 +7790,12 @@ "xtend": "^4.0.0" }, "dependencies": { + "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 + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -7758,6 +7856,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "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 + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -7770,9 +7874,9 @@ } }, "is-alphabetical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", - "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", + "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==", "dev": true }, "is-alphanumeric": { @@ -7782,9 +7886,9 @@ "dev": true }, "is-alphanumerical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", - "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz", + "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", @@ -7807,10 +7911,9 @@ } }, "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 + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" }, "is-callable": { "version": "1.1.4", @@ -7849,6 +7952,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "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 + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -7866,9 +7975,9 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-decimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", - "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", + "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", "dev": true }, "is-descriptor": { @@ -7896,21 +8005,6 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "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" - } - }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -7956,18 +8050,18 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "^2.1.1" } }, "is-hexadecimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", - "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", + "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==", "dev": true }, "is-installed-globally": { @@ -8007,6 +8101,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "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 + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -8029,7 +8129,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -8095,18 +8195,6 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "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", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -8216,9 +8304,9 @@ "dev": true }, "is-whitespace-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", - "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", + "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", "dev": true }, "is-windows": { @@ -8228,9 +8316,9 @@ "dev": true }, "is-word-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", - "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", + "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==", "dev": true }, "is-wsl": { @@ -8240,9 +8328,9 @@ "dev": true }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true }, "isbinaryfile": { @@ -8272,61 +8360,119 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, - "istanbul-lib-instrument": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", - "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.3", - "semver": "^5.5.0" + "append-transform": "^1.0.0" } }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true + } } }, - "javascript-stringify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", - "dev": true - }, - "jpegtran": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/jpegtran/-/jpegtran-1.0.6.tgz", - "integrity": "sha512-H1TQgIg62gueqy1BkBVPO2mTFh68rseOhRhiTBBLAFiEUpyQlNa3EGa0lACAVeAXfryrFQCFVrS2xhsrlpXY9Q==", + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "jpegtran-bin": "^4.0.0", - "memoizeasync": "^1.0.0", - "which": "^1.2.14" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" } }, - "jpegtran-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz", - "integrity": "sha512-2cRl1ism+wJUoYAYFt6O/rLBfpXNWG2dUWbgcEkTt5WGMnqI46eEro8T4C5zGROxKRqyKpCBSdHPvt5UYCtxaQ==", + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.4.tgz", + "integrity": "sha512-QCHGyZEK0bfi9GR215QSm+NJwFKEShbtc7tfbUdLAEzn3kKhLDDZqvljn8rPZM9v8CEOhzL1nlYoO4r1ryl67w==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "javascript-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.0.tgz", + "integrity": "sha512-zzK8+ByrzvOL6N92hRewwUKL0wN0TOaIuUjX0Jj8lraxWvr5wHYs2YTjaj2lstF+8qMv5cmPPef47va8NT8lDw==", + "dev": true + }, + "jpegtran": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/jpegtran/-/jpegtran-1.0.6.tgz", + "integrity": "sha512-H1TQgIg62gueqy1BkBVPO2mTFh68rseOhRhiTBBLAFiEUpyQlNa3EGa0lACAVeAXfryrFQCFVrS2xhsrlpXY9Q==", + "dev": true, + "requires": { + "jpegtran-bin": "^4.0.0", + "memoizeasync": "^1.0.0", + "which": "^1.2.14" + } + }, + "jpegtran-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz", + "integrity": "sha512-2cRl1ism+wJUoYAYFt6O/rLBfpXNWG2dUWbgcEkTt5WGMnqI46eEro8T4C5zGROxKRqyKpCBSdHPvt5UYCtxaQ==", + "dev": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", "logalot": "^2.0.0" } }, @@ -8337,15 +8483,15 @@ "dev": true }, "js-beautify": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.9.1.tgz", - "integrity": "sha512-oxxvVZdOdUfzk8IOLBF2XUZvl2GoBEfA+b0of4u2EBY/46NlXasi8JdFvazA5lCrf9/lQhTjyVy2QCUW7iq0MQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz", + "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==", "dev": true, "requires": { "config-chain": "^1.1.12", - "editorconfig": "^0.15.2", + "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "~0.5.0", + "mkdirp": "~0.5.1", "nopt": "~4.0.1" } }, @@ -8377,12 +8523,12 @@ } }, "js2xmlparser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", - "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.0.tgz", + "integrity": "sha512-WuNgdZOXVmBk5kUPMcTcVUpbGRzLfNkv7+7APq7WiDihpXVKrgxo6wwRpRl9OQeEBgKCVk9mR7RbzrnNWC8oBw==", "dev": true, "requires": { - "xmlcreate": "^1.0.1" + "xmlcreate": "^2.0.0" } }, "jsbn": { @@ -8392,29 +8538,37 @@ "dev": true }, "jsdoc": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", - "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", - "dev": true, - "requires": { - "babylon": "7.0.0-beta.19", - "bluebird": "~3.5.0", - "catharsis": "~0.8.9", - "escape-string-regexp": "~1.0.5", - "js2xmlparser": "~3.0.0", - "klaw": "~2.0.0", - "marked": "~0.3.6", - "mkdirp": "~0.5.1", - "requizzle": "~0.2.1", - "strip-json-comments": "~2.0.1", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.2.tgz", + "integrity": "sha512-S2vzg99C5+gb7FWlrK4TVdyzVPGGkdvpDkCEJH1JABi2PKzPeLu5/zZffcJUifgWUJqXWl41Hoc+MmuM2GukIg==", + "dev": true, + "requires": { + "@babel/parser": "^7.4.4", + "bluebird": "^3.5.4", + "catharsis": "^0.8.10", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.0", + "klaw": "^3.0.0", + "markdown-it": "^8.4.2", + "markdown-it-anchor": "^5.0.2", + "marked": "^0.6.2", + "mkdirp": "^0.5.1", + "requizzle": "^0.2.2", + "strip-json-comments": "^3.0.1", "taffydb": "2.6.2", - "underscore": "~1.8.3" + "underscore": "~1.9.1" }, "dependencies": { - "babylon": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", - "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, "taffydb": { @@ -8422,19 +8576,13 @@ "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true } } }, "jsdom": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.2.0.tgz", - "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.0.0.tgz", + "integrity": "sha512-/VkyPmdtbwqpJSkwDx3YyJ3U1oawYNB/h5z8vTUZGAzjtu2OHTeFRfnJqyMHsJ5Cyes23trOmvUpM1GfHH1leA==", "dev": true, "requires": { "abab": "^2.0.0", @@ -8472,9 +8620,9 @@ "dev": true }, "acorn-globals": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", - "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", "dev": true, "requires": { "acorn": "^6.0.1", @@ -8578,9 +8726,9 @@ } }, "jszip": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.0.tgz", - "integrity": "sha512-4WjbsaEtBK/DHeDZOPiPw5nzSGLDEDDreFRDEgnoMwmknPjTqa+23XuYFk6NiGbeiAeZCctiQ/X/z0lQBmDVOQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.1.tgz", + "integrity": "sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw==", "dev": true, "requires": { "lie": "~3.3.0", @@ -8610,9 +8758,9 @@ "dev": true }, "karma": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.0.1.tgz", - "integrity": "sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", + "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", "dev": true, "requires": { "bluebird": "^3.3.0", @@ -8645,9 +8793,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", + "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", "dev": true }, "source-map": { @@ -8693,7 +8841,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -8748,9 +8896,9 @@ "dev": true }, "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", "dev": true, "requires": { "graceful-fs": "^4.1.9" @@ -8851,9 +8999,9 @@ } }, "lint-staged": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", - "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.6.tgz", + "integrity": "sha512-QT13AniHN6swAtTjsrzxOfE4TVCiQ39xESwLmjGVNCMMZ/PK5aopwvbxLrzw+Zf9OxM3cQG6WCx9lceLzETOnQ==", "dev": true, "requires": { "chalk": "^2.3.1", @@ -8880,9 +9028,18 @@ "staged-git-files": "1.1.2", "string-argv": "^0.0.2", "stringify-object": "^3.2.2", - "yup": "^0.26.10" + "yup": "^0.27.0" }, "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", @@ -8918,14 +9075,11 @@ } } }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true }, "pify": { "version": "3.0.0", @@ -8962,6 +9116,12 @@ "is-extendable": "^0.1.0" } }, + "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-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -8999,16 +9159,10 @@ "rxjs": "^6.3.3" }, "dependencies": { - "p-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", - "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", - "dev": true - }, "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -9080,7 +9234,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -9175,6 +9329,12 @@ "ms": "2.0.0" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -9214,6 +9374,12 @@ "lcid": "^1.0.0" } }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -9240,6 +9406,16 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, + "wrap-ansi": { + "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", + "strip-ansi": "^3.0.1" + } + }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -9328,10 +9504,10 @@ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "lodash.isfinite": { @@ -9442,16 +9618,16 @@ } }, "log4js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.0.2.tgz", - "integrity": "sha512-KE7HjiieVDPPdveA3bJZSuu0n8chMkFl8mIoisBFxwEJ9FmXe4YzNuiqSwYUiR1K8q8/5/8Yd6AClENY1RA9ww==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.2.0.tgz", + "integrity": "sha512-1dJ2ORJcdqbzxvzKM2ceqPBh4O6bbICJpB4dvSEUoMcb14s8MqQ/54zNPqekuN5yjGtxO3GUDTvZfQOQhwdqnA==", "dev": true, "requires": { "date-format": "^2.0.0", - "debug": "^3.1.0", + "debug": "^4.1.1", "flatted": "^2.0.0", "rfdc": "^1.1.2", - "streamroller": "^1.0.1" + "streamroller": "^1.0.5" } }, "logalot": { @@ -9465,9 +9641,9 @@ } }, "lolex": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz", - "integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.0.1.tgz", + "integrity": "sha512-UHuOBZ5jjsKuzbB/gRNNW8Vg8f00Emgskdq2kvZxgBJCS0aqquAuXai/SkWORlKeZEiNQWZjFZOqIUcH9LqKCw==", "dev": true }, "longest": { @@ -9477,9 +9653,9 @@ "dev": true }, "longest-streak": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", - "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", + "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==", "dev": true }, "loud-rejection": { @@ -9527,14 +9703,14 @@ } }, "luxon": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.12.1.tgz", - "integrity": "sha512-Zv/qJb2X1ESTrlniAViWx2aqGwi2cVpeoZFTbPdPiCu4EsadKsmb/QCH8HQjMUpDZKKJIHKHsJxV5Rwpq47HKQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.13.2.tgz", + "integrity": "sha512-U7i2AE+/VWeB8PZZkIeEcxJCZvBA8LegCHufaIFYx3qRQdw2UJw3fuaL/Fqi9Q+2MeFYu+gYqIzr5hWOvAMHBQ==", "dev": true }, "magic-string": { "version": "0.22.5", - "resolved": "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, "requires": { @@ -9542,14 +9718,13 @@ } }, "magicpen": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/magicpen/-/magicpen-5.12.0.tgz", - "integrity": "sha1-u+nunUI2R2rs+EE27KGDPrRwqWs=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/magicpen/-/magicpen-6.0.2.tgz", + "integrity": "sha512-zGaX9FDqnM0P1iZLl7CQsB+cj7NzVLClpCEVAS0GQBWg3u2QEg5Gs4247pVRxb265q/ZUTCB+lB6+NfPu+L63A==", "dev": true, "requires": { "ansi-styles": "2.0.0", - "color-diff": "0.1.7", - "supports-color": "1.2.0" + "color-diff": "0.1.7" }, "dependencies": { "ansi-styles": { @@ -9557,28 +9732,23 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.0.tgz", "integrity": "sha1-QysmFi/qG2PIeIlqvIzFVI8lBj4=", "dev": true - }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", - "dev": true } } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } @@ -9611,7 +9781,7 @@ }, "map-stream": { "version": "0.1.0", - "resolved": "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, @@ -9625,9 +9795,9 @@ } }, "markdown-escapes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", - "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", + "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", "dev": true }, "markdown-it": { @@ -9650,9 +9820,9 @@ "dev": true }, "markdown-it-attrs": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-2.3.2.tgz", - "integrity": "sha512-DyatNvpatg7w+fGkplWGeie7o/0TogBr2w0izyz9ZQfTMv5G3lbDHQFQ42aP2e5L2mJQt0IeAjWzvYaa2d9xzQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-2.3.4.tgz", + "integrity": "sha512-DwGzugbveSUfRiUuxIC7svr8i+x3e3/eUJ7U7GRduNa2SO5Qyd2rZtjx6j0c3uS2xCIddZFcydEVlbg6C3s2vA==", "dev": true }, "markdown-it-prism": { @@ -9708,7 +9878,7 @@ }, "globby": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -9783,9 +9953,9 @@ } }, "markdown-table": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", - "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "dev": true }, "markdown-toc": { @@ -9808,6 +9978,12 @@ "strip-color": "^0.1.0" }, "dependencies": { + "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 + }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -9841,42 +10017,42 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "markdownlint": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.12.0.tgz", - "integrity": "sha512-bjur6ZP0yKHVYh1U5+xD+bVkouKiUyiVzg9c9qkytYRW2nDfSowifKSmpPeO0uZHxzZOYMcV2Oe7sycPOEqMOQ==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.14.1.tgz", + "integrity": "sha512-W3RxMP8GYyJAhgUXIXvBOXT2ai89qDIuLf2ZM0Xd+XcwXBS6Hu06Hg2UKNwMDPTy0uQK8YWCH4hkdxlevm/BgQ==", "dev": true, "requires": { "markdown-it": "8.4.2" } }, "markdownlint-cli": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.14.1.tgz", - "integrity": "sha512-bHueUEp1NmSFPWvOk3SNWhRRAInrdvmuzlkMrZJptUF6jNXJ32OhPXicRw2xg43+NLiUI01V5sc1VIrRWLKgig==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.16.0.tgz", + "integrity": "sha512-BmtWhDvbsnbgYirYOiSOxP8THhkCjp28+xVfTyj3D1JsOlj0Txf3IA9wlT5GHCYaR6QfDlWq4pz/rh+bfOw2Vg==", "dev": true, "requires": { "commander": "~2.9.0", "deep-extend": "~0.5.1", "get-stdin": "~5.0.1", "glob": "~7.1.2", - "js-yaml": "~3.13.0", + "js-yaml": "^3.13.1", "lodash.differencewith": "~4.5.0", "lodash.flatten": "~4.4.0", - "markdownlint": "~0.12.0", + "markdownlint": "~0.14.1", "minimatch": "~3.0.4", "rc": "~1.2.7" }, "dependencies": { "commander": { "version": "2.9.0", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "requires": { @@ -9898,9 +10074,9 @@ } }, "marked": { - "version": "0.3.19", - "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", + "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==", "dev": true }, "matcher": { @@ -9987,17 +10163,17 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", + "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" } }, @@ -10013,7 +10189,7 @@ "dependencies": { "lru-cache": { "version": "2.5.0", - "resolved": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", "integrity": "sha1-2COIrpyWC+y+oMc7uet5tsbOmus=", "dev": true } @@ -10048,7 +10224,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -10066,7 +10242,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -10125,24 +10301,24 @@ "dev": true }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "mime-db": "~1.38.0" + "mime-db": "1.40.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mimic-response": { "version": "1.0.1", @@ -10172,7 +10348,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "minipass": { @@ -10231,7 +10407,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -10294,17 +10470,6 @@ "find": "^0.3.0", "requirejs": "^2.3.5", "requirejs-config-file": "^3.1.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "moo": { @@ -10343,9 +10508,9 @@ "dev": true }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", "dev": true }, "nanomatch": { @@ -10380,43 +10545,43 @@ "dev": true }, "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "requires": { - "debug": "^2.1.2", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "nice-try": { @@ -10455,9 +10620,9 @@ } }, "node-abi": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.7.1.tgz", - "integrity": "sha512-OV8Bq1OrPh6z+Y4dqwo05HqrRL9YNF7QVMRfq1/pguwKLG+q9UB/Lk0x5qXjO23JjJg+/jqCHSTaG1P3tfKfuw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.8.0.tgz", + "integrity": "sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==", "dev": true, "requires": { "semver": "^5.4.1" @@ -10470,13 +10635,6 @@ "requires": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - } } }, "node-libs-browser": { @@ -10512,7 +10670,7 @@ "dependencies": { "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -10527,6 +10685,12 @@ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "path-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", @@ -10550,7 +10714,7 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, @@ -10565,7 +10729,7 @@ }, "vm-browserify": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { @@ -10593,9 +10757,9 @@ } }, "node-releases": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.9.tgz", - "integrity": "sha512-oic3GT4OtbWWKfRolz5Syw0Xus0KRFxeorLNj0s93ofX6PWyuzKjsiGxsCtWktBwwmTF6DdRRf2KreGqeOk5KA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", + "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", "dev": true, "requires": { "semver": "^5.3.0" @@ -10737,9 +10901,9 @@ } }, "nps": { - "version": "5.9.4", - "resolved": "https://registry.npmjs.org/nps/-/nps-5.9.4.tgz", - "integrity": "sha512-4RFiRTG0/hwcdTqfhwOT2sxtC7JEElyZDTsa3DIhf4ekFFL/87y2JvPAIRZJWVnEp+tG2a7qzv0eJE4NgJLlDg==", + "version": "5.9.5", + "resolved": "https://registry.npmjs.org/nps/-/nps-5.9.5.tgz", + "integrity": "sha512-UsjrtowHeXGnKELZUlqiyPSXc3vYs3YwLZEFfZJ1Z9kZCFgtzK4YRVKnxEa+teRMMdw6Q4keAX/M/aLCkPTqIw==", "dev": true, "requires": { "arrify": "^1.0.1", @@ -10827,6 +10991,12 @@ "locate-path": "^2.0.0" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -10888,6 +11058,12 @@ "mimic-fn": "^1.0.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", @@ -10953,6 +11129,12 @@ "read-pkg": "^2.0.0" } }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -10968,6 +11150,29 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "wrap-ansi": { + "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", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "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", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -11126,6 +11331,16 @@ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", "dev": true }, + "wrap-ansi": { + "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", + "strip-ansi": "^3.0.1" + } + }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -11150,1042 +11365,64 @@ } }, "nwsapi": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.3.tgz", - "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", "dev": true }, "nyc": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz", - "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", + "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "requires": { "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^3.0.1", + "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", - "find-cache-dir": "^2.0.0", + "cp-file": "^6.2.0", + "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.3", - "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.1.0", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.1", - "make-dir": "^1.3.0", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", - "test-exclude": "^5.1.0", + "test-exclude": "^5.2.3", "uuid": "^3.3.2", - "yargs": "^12.0.5", - "yargs-parser": "^11.1.1" + "yargs": "^13.2.2", + "yargs-parser": "^13.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "append-transform": { - "version": "1.0.0", - "bundled": true, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { - "default-require-extensions": "^2.0.0" + "source-map": "^0.6.1" } }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "async": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "caching-transform": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^1.3.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.3.0" - } - }, - "camelcase": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "commander": { - "version": "2.17.1", - "bundled": true, - "dev": true, - "optional": true - }, - "commondir": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "default-require-extensions": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "end-of-stream": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "bundled": true, - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-error": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "execa": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "bundled": true, - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "find-cache-dir": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "foreground-child": { - "version": "1.5.6", - "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.3", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "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" - } - }, - "graceful-fs": { - "version": "4.1.15", - "bundled": true, - "dev": true - }, - "handlebars": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "hasha": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "bundled": true, - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "supports-color": "^6.0.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "handlebars": "^4.1.0" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "lcid": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "bundled": true, - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "bundled": true, - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "bundled": true, - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "mem": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.10", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "once": { - "version": "1.4.0", - "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.2", - "bundled": true, - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-is-promise": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "package-hash": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "bundled": true, - "dev": true - }, - "path-type": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "release-zalgo": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve": { - "version": "1.10.0", - "bundled": true, - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "arrify": "^1.0.1", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^1.0.1" - } - }, - "uglify-js": { - "version": "3.4.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "uuid": { - "version": "3.3.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "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" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "2.4.2", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "y18n": { + "resolve-from": { "version": "4.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "yallist": { - "version": "2.1.2", - "bundled": true, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "yargs": { - "version": "12.0.5", - "bundled": true, - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, @@ -12227,6 +11464,12 @@ "is-descriptor": "^0.1.0" } }, + "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 + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -12245,9 +11488,9 @@ "dev": true }, "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-path": { "version": "0.9.2", @@ -12284,16 +11527,6 @@ "es-abstract": "^1.5.1" } }, - "object.omit": { - "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.4", - "is-extendable": "^0.1.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -12332,6 +11565,23 @@ "wrappy": "1" } }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + } + } + }, "openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", @@ -12419,7 +11669,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -12441,7 +11691,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -12490,9 +11740,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { "version": "2.2.0", @@ -12511,9 +11761,9 @@ } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, "p-map-series": { @@ -12541,9 +11791,21 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", + "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } }, "package-json": { "version": "4.0.1", @@ -12573,18 +11835,18 @@ } }, "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" }, "dependencies": { "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true } } @@ -12646,35 +11908,6 @@ "path-root": "^0.1.1" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "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" - } - } - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -12715,9 +11948,9 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -12751,7 +11984,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { @@ -12828,7 +12061,7 @@ }, "pause-stream": { "version": "0.0.11", - "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { @@ -12913,7 +12146,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -12957,7 +12190,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -13188,9 +12421,9 @@ "dev": true }, "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", + "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -13203,15 +12436,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -13652,9 +12876,9 @@ } }, "prebuild-install": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.5.tgz", - "integrity": "sha512-6uZgMVg7yDfqlP5CPurVhtq3hUKBFNufiar4J5hZrlHTo59DDBEtyxw01xCdFss9j0Zb9+qzFVf/s4niayba3w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz", + "integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==", "dev": true, "requires": { "detect-libc": "^1.0.3", @@ -13677,7 +12901,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -13723,17 +12947,6 @@ "detective-typescript": "^4.1.2", "module-definition": "^3.1.0", "node-source-walk": "^4.2.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "prefix-matches": { @@ -13758,16 +12971,10 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.1.tgz", + "integrity": "sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg==", "dev": true }, "prettier-linter-helpers": { @@ -13803,7 +13010,7 @@ }, "pretty-bytes": { "version": "4.0.2", - "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", "dev": true }, @@ -13817,9 +13024,9 @@ } }, "prismjs": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz", - "integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.16.0.tgz", + "integrity": "sha512-OA4MKxjFZHSvZcisLGe14THYsug/nF6O1f0pAJc0KN0wTyAcLqmsbE+lTGKSpyh+9pEW57+k6pg2AfYR+coyHA==", "dev": true, "requires": { "clipboard": "^2.0.0" @@ -14154,7 +13361,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -14209,20 +13416,20 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, @@ -14240,7 +13447,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -14308,7 +13515,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -14319,6 +13526,14 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } } }, "readdirp": { @@ -14372,15 +13587,6 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -14422,6 +13628,15 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "remark": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", @@ -14557,6 +13772,12 @@ "is-finite": "^1.0.0" } }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -14635,9 +13856,9 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "requirejs": { "version": "2.3.6", @@ -14654,24 +13875,6 @@ "esprima": "^4.0.0", "make-dir": "^2.1.0", "stringify-object": "^3.2.1" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } } }, "requires-port": { @@ -14681,26 +13884,18 @@ "dev": true }, "requizzle": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", - "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.2.tgz", + "integrity": "sha512-oJ6y7JcUJkblRGhMByGNcszeLgU0qDxNKFCiUZR1XyzHyVsev+Mxb1tyygxLd1ORsKee1SA5BInFdUwY64GE/A==", "dev": true, "requires": { - "underscore": "~1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } + "lodash": "^4.17.11" } }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -14768,17 +13963,6 @@ "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" - }, - "dependencies": { - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } } }, "restructure": { @@ -14797,9 +13981,9 @@ "dev": true }, "rewiremock": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.13.0.tgz", - "integrity": "sha512-1MkO4mX4j31GilbMsqdgLNXjmrHo9EUKQFCa82rLye8ltOHnJe0rRaHUSKz2yUClr8l0Qnj1ZTjZHmp6vNTrzQ==", + "version": "3.13.7", + "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.13.7.tgz", + "integrity": "sha512-U6iFfdXPiNtIBDcJWmspl/nhVk1EANkXLq2GM78T3ZfegvO5EW0TgNzExLh5iHXFJKQr//SmH9iloK/s4O7UqA==", "dev": true, "requires": { "babel-runtime": "^6.26.0", @@ -14813,9 +13997,9 @@ } }, "rfdc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", - "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, "rgb-regex": { @@ -14826,7 +14010,7 @@ }, "rgba-regex": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, @@ -14896,7 +14080,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -14919,9 +14103,9 @@ } }, "sauce-connect-launcher": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.4.tgz", - "integrity": "sha512-X2vfwulR6brUGiicXKxPm1GJ7dBEeP1II450Uv4bHGrcGOapZNgzJvn9aioea5IC5BPp/7qjKdE3xbbTBIVXMA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.6.tgz", + "integrity": "sha512-yBTYfzI6AWRwoXJoIqmVgz+eCpWX6CsJ4Ap8fowjsGlN+27OKbnQxv6POd4Rzh57BH9WeA9K8orIzNxO8mMBQA==", "dev": true, "requires": { "adm-zip": "~0.4.3", @@ -15007,7 +14191,7 @@ "dependencies": { "commander": { "version": "2.8.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { @@ -15047,9 +14231,9 @@ } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "semver-compare": { "version": "1.0.0", @@ -15111,12 +14295,30 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -15149,11 +14351,35 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, @@ -15231,14 +14457,14 @@ "dev": true }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -15273,7 +14499,7 @@ }, "shasum": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", "dev": true, "requires": { @@ -15341,23 +14567,12 @@ } }, "simple-git": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz", - "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==", + "version": "1.113.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.113.0.tgz", + "integrity": "sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g==", "dev": true, "requires": { "debug": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "simple-swizzle": { @@ -15378,20 +14593,26 @@ } }, "sinon": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.7.tgz", - "integrity": "sha512-rlrre9F80pIQr3M36gOdoCEWzFAMDgHYD8+tocqOw+Zw9OZ8F84a80Ds69eZfcjnzDqqG88ulFld0oin/6rG/g==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.3.2.tgz", + "integrity": "sha512-thErC1z64BeyGiPvF8aoSg0LEnptSaWE7YhdWWbWXgelOyThent7uKOnnEh9zBxDbKixtr5dEko+ws1sZMuFMA==", "dev": true, "requires": { - "@sinonjs/commons": "^1.3.1", + "@sinonjs/commons": "^1.4.0", "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.2.0", + "@sinonjs/samsam": "^3.3.1", "diff": "^3.5.0", - "lolex": "^3.1.0", + "lolex": "^4.0.1", "nise": "^1.4.10", "supports-color": "^5.5.0" }, "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -15537,6 +14758,12 @@ "kind-of": "^3.2.0" }, "dependencies": { + "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 + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -15590,12 +14817,6 @@ "yeast": "0.1.2" } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -15713,12 +14934,6 @@ "ms": "2.0.0" } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -15803,9 +15018,9 @@ } }, "source-map-support": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", - "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -15842,6 +15057,20 @@ "spawn-command": "^0.0.2-1" } }, + "spawn-wrap": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", + "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -15869,9 +15098,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", "dev": true }, "specificity": { @@ -15882,7 +15111,7 @@ }, "split": { "version": "0.3.3", - "resolved": "http://registry.npmjs.org/split/-/split-0.3.3.tgz", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { @@ -15987,14 +15216,14 @@ }, "starts-with": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/starts-with/-/starts-with-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/starts-with/-/starts-with-1.0.2.tgz", "integrity": "sha1-Fnk6cp2J1M89T7LtovkIrjV/GW8=", "dev": true }, "state-toggle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", - "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", + "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", "dev": true }, "static-eval": { @@ -16111,7 +15340,7 @@ }, "stream-combiner": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { @@ -16162,16 +15391,16 @@ } }, "streamroller": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.3.tgz", - "integrity": "sha512-P7z9NwP51EltdZ81otaGAN3ob+/F88USJE546joNq7bqRNTe6jc74fTBDyynxP4qpIfKlt/CesEYicuMzI0yJg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz", + "integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==", "dev": true, "requires": { - "async": "^2.6.1", + "async": "^2.6.2", "date-format": "^2.0.0", - "debug": "^3.1.0", - "fs-extra": "^7.0.0", - "lodash": "^4.17.10" + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11" }, "dependencies": { "async": { @@ -16182,6 +15411,15 @@ "requires": { "lodash": "^4.17.11" } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } } } }, @@ -16255,17 +15493,17 @@ } }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^4.0.0" + "ansi-regex": "^4.1.0" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" } } }, @@ -16301,7 +15539,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-indent": { @@ -16359,17 +15597,6 @@ "requires": { "commander": "^2.8.1", "debug": "^4.1.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "subarg": { @@ -16383,24 +15610,24 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { "has-flag": "^3.0.0" } }, "svgo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", - "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -16410,7 +15637,7 @@ "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", "csso": "^3.5.1", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", "sax": "~1.2.4", @@ -16471,9 +15698,9 @@ } }, "synchronous-promise": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.6.tgz", - "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.7.tgz", + "integrity": "sha512-16GbgwTmFMYFyQMLvtQjvNWh30dsFe1cAW5Fg1wm5+dg84L9Pe36mftsIRU95/W2YsISxsz/xq4VB23sqpgb/A==", "dev": true }, "syntax-error": { @@ -16486,9 +15713,9 @@ } }, "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.3.3.tgz", + "integrity": "sha512-3wUNCgdWX6PNpOe3amTTPWPuF6VGvgzjKCaO1snFj0z7Y3mUPWf5+zDtxUVGispJkDECPmR29wbzh6bVMOHbcw==", "dev": true, "requires": { "ajv": "^6.9.1", @@ -16498,14 +15725,14 @@ }, "dependencies": { "string-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", - "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.0.0" + "strip-ansi": "^5.1.0" } } } @@ -16517,9 +15744,9 @@ "dev": true }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "tar": { @@ -16607,7 +15834,7 @@ "dependencies": { "bluebird": { "version": "2.9.34", - "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", "dev": true }, @@ -16661,49 +15888,127 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, - "get-stream": { + "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } @@ -16790,7 +16095,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -16916,6 +16221,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "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 + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -16957,16 +16268,14 @@ "requires": { "is-buffer": "^2.0.0", "vfile": "^3.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", - "dev": true - } } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, "token-stream": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", @@ -17038,15 +16347,15 @@ "dev": true }, "trim-trailing-lines": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", - "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", + "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==", "dev": true }, "trough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", - "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", + "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", "dev": true }, "tslib": { @@ -17091,14 +16400,20 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true + }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, "typedarray": { @@ -17108,9 +16423,9 @@ "dev": true }, "typescript": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz", - "integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==", + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", + "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", "dev": true }, "typescript-eslint-parser": { @@ -17144,21 +16459,15 @@ "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.12.tgz", + "integrity": "sha512-KeQesOpPiZNgVwJj8Ge3P4JYbQHUdZzpx6Fahy6eKAYRSV4zhVmLXoC+JtOeYxcHCHTve8RG1ZGdTvpeOUM26Q==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.20.0", "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -17221,23 +16530,6 @@ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, - "underscore-contrib": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", - "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", - "dev": true, - "requires": { - "underscore": "1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, "underscore.string": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", @@ -17245,19 +16537,18 @@ "dev": true }, "unexpected": { - "version": "10.40.2", - "resolved": "https://registry.npmjs.org/unexpected/-/unexpected-10.40.2.tgz", - "integrity": "sha512-xwLScBxEnHiK8H8yLblQ6u3Uoammhpk+oCB/HWiNY6exMEwxenUR+eWIKderEXQPOlZkUEakBAKborGJqK6hZQ==", + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/unexpected/-/unexpected-11.5.1.tgz", + "integrity": "sha512-Zqr5aRiH4cRtXtaWm7LyAR6dwpQXs4u9a+VrR11eNDGAXuE7qKy6rsMTKgk/CVzeDkSASn7T9MardgoJc1eDog==", "dev": true, "requires": { "array-changes": "3.0.1", "array-changes-async": "3.0.1", - "babel-runtime": "6.26.0", "detect-indent": "3.0.1", - "diff": "1.1.0", + "diff": "4.0.1", "greedy-interval-packer": "1.2.0", "leven": "2.1.0", - "magicpen": "5.12.0", + "magicpen": "^6.0.2", "unexpected-bluebird": "2.9.34-longstack2" }, "dependencies": { @@ -17272,12 +16563,6 @@ "repeating": "^1.1.0" } }, - "diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.1.0.tgz", - "integrity": "sha1-eYpJOBqkZBUem08Ob/Kwmooa0j8=", - "dev": true - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -17308,15 +16593,15 @@ "dev": true }, "unexpected-sinon": { - "version": "10.11.1", - "resolved": "https://registry.npmjs.org/unexpected-sinon/-/unexpected-sinon-10.11.1.tgz", - "integrity": "sha512-2zSX7vsOYlljjS/3DeQolFzYgA22PmH0ncLCva+ve2AHHJBO0Xnxyt8ri1en1W5b7nRg5F7N6HNdflVNhI7dww==", + "version": "10.11.2", + "resolved": "https://registry.npmjs.org/unexpected-sinon/-/unexpected-sinon-10.11.2.tgz", + "integrity": "sha512-N2KIKPweTVs6AK8cDKQTUwu0fGWyGt+cI/UJZ/eltAyOKgsHL9eILttdGfpZjI/iMYcHcbtUwIlXoHfmh6EcBw==", "dev": true }, "unherit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", - "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", + "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -17455,9 +16740,9 @@ } }, "unist-util-visit-parents": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", - "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.0.tgz", + "integrity": "sha512-j0XZY3063E6v7qhx4+Q2Z0r8SMrLX7Mr6DabiCy67zMEcFQYtpNOplLlEK1KKEBEs9S+xB5U+yloQxbSwF9P/g==", "dev": true, "requires": { "unist-util-is": "^2.1.2" @@ -17524,6 +16809,12 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true } } }, @@ -17534,9 +16825,9 @@ "dev": true }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "update-notifier": { @@ -17707,9 +16998,9 @@ } }, "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", "dev": true }, "verror": { @@ -17733,20 +17024,6 @@ "replace-ext": "1.0.0", "unist-util-stringify-position": "^1.0.0", "vfile-message": "^1.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - } } }, "vfile-location": { @@ -17842,17 +17119,6 @@ "dev": true, "requires": { "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "whatwg-mimetype": { @@ -17946,43 +17212,23 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "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", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { - "ansi-regex": "^2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } } } @@ -18032,6 +17278,15 @@ "write-file-atomic": "^2.0.0" }, "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -18100,9 +17355,9 @@ "dev": true }, "xmlcreate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", - "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.1.tgz", + "integrity": "sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA==", "dev": true }, "xmldom": { @@ -18135,11 +17390,11 @@ "dev": true }, "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "requires": { - "cliui": "^4.0.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "os-locale": "^3.1.0", @@ -18149,44 +17404,25 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" + "yargs-parser": "^13.1.0" }, "dependencies": { - "get-caller-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.1.tgz", - "integrity": "sha512-SpOZHfz845AH0wJYVuZk2jWDqFmu7Xubsx+ldIpwzy5pDUpu7OJHK7QYNSA2NPlDSKQwM1GFaAkciOWjjW92Sg==" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "string-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", - "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "strip-ansi": "^5.1.0" } } } }, "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -18202,6 +17438,76 @@ "yargs": "^12.0.5" }, "dependencies": { + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "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", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", @@ -18219,17 +17525,15 @@ "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" - }, - "dependencies": { - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -18251,16 +17555,16 @@ "dev": true }, "yup": { - "version": "0.26.10", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz", - "integrity": "sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", + "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", "dev": true, "requires": { - "@babel/runtime": "7.0.0", + "@babel/runtime": "^7.0.0", "fn-name": "~2.0.1", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.5", + "synchronous-promise": "^2.0.6", "toposort": "^2.0.2" } } diff --git a/package-scripts.js b/package-scripts.js index 7febdc016f..7a84e550b7 100644 --- a/package-scripts.js +++ b/package-scripts.js @@ -137,7 +137,7 @@ module.exports = { script: test( 'requires', [ - '--require coffee-script/register', + '--require coffeescript/register', '--require test/require/a.js', '--require test/require/b.coffee', '--require test/require/c.js', diff --git a/package.json b/package.json index 67f1aae4f0..272d5249b5 100644 --- a/package.json +++ b/package.json @@ -504,13 +504,13 @@ "version": "nps version" }, "dependencies": { - "ansi-colors": "3.2.3", + "ansi-colors": "3.2.4", "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", + "debug": "4.1.1", + "diff": "4.0.1", "escape-string-regexp": "1.0.5", "find-up": "3.0.0", - "glob": "7.1.3", + "glob": "7.1.4", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.13.1", @@ -521,68 +521,68 @@ "node-environment-flags": "1.0.5", "object.assign": "4.1.0", "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", + "supports-color": "6.1.0", "which": "1.3.1", "wide-align": "1.1.3", - "yargs": "13.2.2", - "yargs-parser": "13.0.0", + "yargs": "13.2.4", + "yargs-parser": "13.1.0", "yargs-unparser": "1.5.0" }, "devDependencies": { - "@11ty/eleventy": "^0.7.1", + "@11ty/eleventy": "^0.8.3", "@mocha/contributors": "^1.0.3", "@mocha/docdash": "^2.1.0", - "assetgraph-builder": "^6.10.0", - "autoprefixer": "^9.4.10", + "assetgraph-builder": "^6.10.1", + "autoprefixer": "^9.5.1", "browserify": "^16.2.3", "browserify-package-json": "^1.0.1", "chai": "^4.2.0", - "coffee-script": "^1.12.7", + "coffeescript": "^2.4.1", "coveralls": "^3.0.3", "cross-env": "^5.2.0", "cross-spawn": "^6.0.5", - "eslint": "^5.15.0", - "eslint-config-prettier": "^3.6.0", + "eslint": "^5.16.0", + "eslint-config-prettier": "^4.2.0", "eslint-config-semistandard": "^13.0.0", "eslint-config-standard": "^12.0.0", - "eslint-plugin-import": "^2.16.0", - "eslint-plugin-node": "^8.0.1", - "eslint-plugin-prettier": "^3.0.1", - "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-import": "^2.17.2", + "eslint-plugin-node": "^9.0.1", + "eslint-plugin-prettier": "^3.1.0", + "eslint-plugin-promise": "^4.1.1", "eslint-plugin-standard": "^4.0.0", - "husky": "^1.3.1", - "jsdoc": "^3.5.5", - "karma": "^4.0.1", + "husky": "^2.3.0", + "jsdoc": "^3.6.2", + "karma": "^4.1.0", "karma-browserify": "^6.0.0", "karma-chrome-launcher": "^2.2.0", "karma-mocha": "^1.3.0", "karma-mocha-reporter": "^2.2.5", "karma-sauce-launcher": "^2.0.2", - "lint-staged": "^8.1.5", + "lint-staged": "^8.1.6", "markdown-it": "^8.4.2", "markdown-it-anchor": "^5.0.2", - "markdown-it-attrs": "^2.3.2", + "markdown-it-attrs": "^2.3.4", "markdown-it-prism": "^2.0.1", "markdown-magic": "^0.1.25", "markdown-magic-package-json": "^2.0.0", "markdown-toc": "^1.2.0", - "markdownlint-cli": "^0.14.1", - "nps": "^5.9.4", - "nyc": "^13.3.0", - "prettier": "^1.16.4", + "markdownlint-cli": "^0.16.0", + "nps": "^5.9.5", + "nyc": "^14.1.1", + "prettier": "^1.17.1", "remark": "^10.0.1", "remark-github": "^7.0.6", "remark-inline-links": "^3.1.2", - "rewiremock": "^3.13.0", + "rewiremock": "^3.13.7", "rimraf": "^2.6.3", - "sinon": "^7.2.7", - "strip-ansi": "^5.0.0", - "svgo": "^1.2.0", + "sinon": "^7.3.2", + "strip-ansi": "^5.2.0", + "svgo": "^1.2.2", "through2": "^3.0.1", "to-vfile": "^5.0.2", - "unexpected": "^10.40.2", + "unexpected": "^11.5.1", "unexpected-eventemitter": "^1.1.3", - "unexpected-sinon": "^10.11.1", + "unexpected-sinon": "^10.11.2", "uslug": "^1.0.4", "watchify": "^3.11.1" }, diff --git a/test/integration/compiler-globbing.spec.js b/test/integration/compiler-globbing.spec.js index 20ea050e4d..f245f4ab91 100644 --- a/test/integration/compiler-globbing.spec.js +++ b/test/integration/compiler-globbing.spec.js @@ -10,7 +10,7 @@ describe('globbing like --compilers', function() { process.execPath + '" "' + path.join('bin', 'mocha') + - '" -R json --require coffee-script/register --require test/compiler-fixtures/foo.fixture "test/compiler/*.@(coffee|foo)"', + '" -R json --require coffeescript/register --require test/compiler-fixtures/foo.fixture "test/compiler/*.@(coffee|foo)"', {cwd: path.join(__dirname, '..', '..')}, function(error, stdout) { if (error && !stdout) { diff --git a/test/integration/options/compilers.spec.js b/test/integration/options/compilers.spec.js index 99fa79a7f5..ea4826ccda 100644 --- a/test/integration/options/compilers.spec.js +++ b/test/integration/options/compilers.spec.js @@ -6,7 +6,7 @@ var invokeMocha = helpers.invokeMocha; describe('--compilers', function() { it('should report deprecation', function(done) { invokeMocha( - ['--compilers', 'coffee:coffee-script/register'], + ['--compilers', 'coffee:coffeescript/register'], function(err, res) { if (err) { return done(err); diff --git a/test/integration/options/extension.spec.js b/test/integration/options/extension.spec.js index 760e3bcd88..d07ab129fe 100644 --- a/test/integration/options/extension.spec.js +++ b/test/integration/options/extension.spec.js @@ -8,7 +8,7 @@ describe('--extension', function() { it('should allow comma-separated variables', function(done) { var args = [ '--require', - 'coffee-script/register', + 'coffeescript/register', '--require', './test/setup', '--reporter', From 94033bf5f5d4266caa8b53f3eb4b1b1de76a114c Mon Sep 17 00:00:00 2001 From: Juerg B <44573692+juergba@users.noreply.github.com> Date: Fri, 17 May 2019 11:06:20 +0200 Subject: [PATCH 017/441] Revert "chore: upgrade (most) depedencies to latest (#3903)" (#3918) This reverts commit 8ce447181f0c6e1312a4d4f1f1c2f3e64e4f30cc. --- docs/index.md | 6 +- package-lock.json | 4412 +++++++++++--------- package-scripts.js | 2 +- package.json | 64 +- test/integration/compiler-globbing.spec.js | 2 +- test/integration/options/compilers.spec.js | 2 +- test/integration/options/extension.spec.js | 2 +- 7 files changed, 2593 insertions(+), 1897 deletions(-) diff --git a/docs/index.md b/docs/index.md index 814b261ba9..a3fa090632 100644 --- a/docs/index.md +++ b/docs/index.md @@ -45,7 +45,7 @@ Mocha is a feature-rich JavaScript test framework running on [Node.js][] and in - [extensible reporting, bundled with 9+ reporters](#reporters) - [extensible test DSLs or "interfaces"](#interfaces) - [before, after, before each, after each hooks](#hooks) -- [arbitrary transpiler support (coffeescript etc)](#-compilers) +- [arbitrary transpiler support (coffee-script etc)](#-compilers) - [TextMate bundle](#textmate) ## Table of Contents @@ -864,12 +864,12 @@ Configuration --package Path to package.json for config [string] File Handling + --ignore, --exclude Ignore file(s) or glob pattern(s) + [array] [default: (none)] --extension, --watch-extensions File extension(s) to load and/or watch [array] [default: js] --file Specify file(s) to be loaded prior to root suite execution [array] [default: (none)] - --ignore, --exclude Ignore file(s) or glob pattern(s) - [array] [default: (none)] --recursive Look for tests in subdirectories [boolean] --require, -r Require module [array] [default: (none)] --sort, -S Sort test files [boolean] diff --git a/package-lock.json b/package-lock.json index fa43458827..2aeadf2b21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,56 +5,58 @@ "requires": true, "dependencies": { "@11ty/eleventy": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.8.3.tgz", - "integrity": "sha512-TehjvEuVQaocz3R/rYMJdujg8a2SL4Wt+ZUPKfXZS926Wd14JqLpWtR/dTNPOh3JzAovZDNrOpFmwN3/urX6gQ==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.7.1.tgz", + "integrity": "sha512-tG5L9f2JcwLcoG6XnR8EOYMJWZIw7Gl33BDVct9dRh+upAL5qMPfwgPMN6kKdaMQ9ki42EBHKmLLAVRcyCk1yg==", "dev": true, "requires": { "browser-sync": "^2.26.3", "chalk": "^2.4.2", - "chokidar": "^2.1.5", + "chokidar": "^2.0.4", "debug": "^4.1.1", - "dependency-graph": "^0.8.0", "dependency-tree": "^6.3.0", "ejs": "^2.6.1", "fast-glob": "^2.2.6", "fs-extra": "^7.0.1", - "gray-matter": "^4.0.2", + "gray-matter": "^4.0.1", "hamljs": "^0.6.2", - "handlebars": "^4.1.1", - "javascript-stringify": "^2.0.0", - "liquidjs": "^6.4.3", + "handlebars": "^4.0.12", + "javascript-stringify": "^1.6.0", + "liquidjs": "^6.2.0", "lodash": "^4.17.11", - "luxon": "^1.12.0", + "luxon": "^1.9.0", "markdown-it": "^8.4.2", "minimist": "^1.2.0", "moo": "^0.5.0", "multimatch": "^3.0.0", "mustache": "^2.3.0", "normalize-path": "^3.0.0", - "nunjucks": "^3.2.0", + "nunjucks": "^3.1.6", "parse-filepath": "^1.0.2", "please-upgrade-node": "^3.1.1", "pretty": "^2.0.0", "pug": "^2.0.3", - "recursive-copy": "^2.0.10", - "semver": "^6.0.0", + "recursive-copy": "^2.0.9", + "semver": "^5.6.0", "slugify": "^1.3.4", "time-require": "^0.1.2", "valid-url": "^1.0.9" }, "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true - }, - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true } } }, @@ -68,12 +70,12 @@ } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", + "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", "dev": true, "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.3.4", "jsesc": "^2.5.1", "lodash": "^4.17.11", "source-map": "^0.5.0", @@ -101,12 +103,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.0.0" } }, "@babel/highlight": { @@ -121,60 +123,71 @@ } }, "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", + "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", "dev": true }, "@babel/runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.4.tgz", - "integrity": "sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", + "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.12.0" }, "dependencies": { "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", "dev": true } } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" } }, "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", + "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", + "@babel/generator": "^7.3.4", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.3.4", + "@babel/types": "^7.3.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.11" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", + "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -203,85 +216,6 @@ "yargs": "^12.0.5" }, "dependencies": { - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "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" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "wrap-ansi": { - "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", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "string-width": { - "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", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "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" - } - } - } - }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", @@ -300,16 +234,18 @@ "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + }, + "dependencies": { + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } } } @@ -355,9 +291,9 @@ "dev": true }, "@sinonjs/commons": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz", - "integrity": "sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.1.tgz", + "integrity": "sha512-rgmZk5CrBGAMATk0HlHOFvo8V44/r+On6cKS80tqid0Eljd+fFBWBOXZp9H2/EB3faxdNdzXTx6QZIKLkbJ7mA==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -374,9 +310,9 @@ } }, "@sinonjs/samsam": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz", - "integrity": "sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.2.0.tgz", + "integrity": "sha512-j5F1rScewLtx6pbTK0UAjA3jJj4RYiSKOix53YWv+Jzy/AZ69qHxUpU8fwVLjyKbEEud9QrLpv6Ggs7WqTimYw==", "dev": true, "requires": { "@sinonjs/commons": "^1.0.2", @@ -391,9 +327,9 @@ "dev": true }, "@types/babel-types": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", - "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.6.tgz", + "integrity": "sha512-8zYZyy2kgwBXdz2j8Ix7LOghGiZbOiHf6vqmmBX1r76FdAzVNv7cODyJTEglUWiOdRnXh0s/o58neUwv5vaitQ==", "dev": true }, "@types/babylon": { @@ -406,21 +342,15 @@ } }, "@types/node": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", - "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "version": "10.12.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.29.tgz", + "integrity": "sha512-J/tnbnj8HcsBgCe2apZbdUpQ7hs4d7oZNTYA5bekWdP0sr2NGsOpI/HRdDroEi209tEvTcTtxhD0FfED3DhEcw==", "dev": true }, "@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", + "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", "dev": true }, "@types/unist": { @@ -479,13 +409,13 @@ "dev": true }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.18", + "negotiator": "0.6.1" } }, "acorn": { @@ -593,12 +523,6 @@ "repeat-string": "^1.5.2" }, "dependencies": { - "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 - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -642,9 +566,9 @@ } }, "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" }, "ansi-escapes": { "version": "3.2.0", @@ -713,15 +637,6 @@ "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", "dev": true }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -751,12 +666,6 @@ } } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -819,7 +728,7 @@ }, "array-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, @@ -841,16 +750,6 @@ "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", "dev": true }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -947,12 +846,11 @@ } }, "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "dev": true, "requires": { - "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -986,9 +884,9 @@ "dev": true }, "assetgraph": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/assetgraph/-/assetgraph-5.8.4.tgz", - "integrity": "sha512-vDGeWPSaRihVny07KsyFHYXFh7w2ScbzKruxNi0pZ7OT3zKzU9ppxVFK1kNnFUEjicLKaFB5Ffh2xk2n6dGjNA==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/assetgraph/-/assetgraph-5.8.1.tgz", + "integrity": "sha512-u9u6WDu1je6FraTV1Gx5/M8VhKsH6WuTdmz/7XDznwTYD2LZGU2rE/sJVUc2gwOOWF4Ztqa06sTmoW9OSrOdXA==", "dev": true, "requires": { "acorn": "^6.1.0", @@ -1009,26 +907,25 @@ "estraverse": "^4.2.0", "estraverse-fb": "^1.3.2", "font-family-papandreou": "^0.2.0-patch1", - "font-snapper": "^1.0.0", - "font-tracer": "^1.1.0", + "font-tracer": "^1.0.1", "fontkit": "^1.7.7", "gettemporaryfilepath": "^1.0.0", "glob": "^7.0.5", - "html-minifier": "^4.0.0", + "html-minifier": "^3.5.8", "imageinfo": "^1.0.4", - "jsdom": "14.0.0", + "jsdom": "13.2.0", "lines-and-columns": "^1.1.6", "lodash": "4.17.11", "memoizesync": "1.1.1", "mkdirp": "^0.5.1", "normalizeurl": "^1.0.0", "perfectionist": "^2.4.0", - "postcss": "^7.0.14", + "postcss": "7.0.9", "postcss-values-parser": "^2.0.0", "read-pkg-up": "^4.0.0", "repeat-string": "^1.5.4", "schemes": "^1.0.1", - "semver": "^6.0.0", + "semver": "^5.3.0", "sift": "^7.0.1", "source-map": "~0.6.1", "specificity": "^0.4.0", @@ -1082,6 +979,17 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "postcss": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.9.tgz", + "integrity": "sha512-eXB2Fm8/BtSABq7ia1HyvbkoD9zFqq2BWjHUAyRSgbK8qdyKrA6yMCX06l05Onc8bHemeXLB8hzJ8tM0ABc0Zw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-values-parser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", @@ -1114,12 +1022,6 @@ "read-pkg": "^3.0.0" } }, - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1131,16 +1033,25 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "assetgraph-builder": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-6.10.1.tgz", - "integrity": "sha512-jRqme+K8BWVAlY3+qqkWH19/FD92aay0TqZzCfaH3HkTTqFPacIHiGA/DRvPPOxjl+wvIvjVNLWSG2QrPxtHrA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-6.10.0.tgz", + "integrity": "sha512-HGpCM92CtNKtk/ijQzIt2icWbHVe05qh4pI8XeEt+/AGy+nkHkAtL9l22aD5bEgsrdiWRbT67+6+4+yxrJj/Iw==", "dev": true, "requires": { - "assetgraph": "5.8.4", + "assetgraph": "5.8.1", "assetgraph-sprite": "^3.0.1", "browserslist": "^4.4.2", "chalk": "^2.3.2", @@ -1159,6 +1070,14 @@ "pngcrush": "^2.0.1", "pngquant": "^2.0.1", "urltools": "^0.4.1" + }, + "dependencies": { + "p-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", + "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", + "dev": true + } } }, "assetgraph-sprite": { @@ -1225,7 +1144,7 @@ }, "source-map": { "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "optional": true, @@ -1237,7 +1156,7 @@ }, "ast-types": { "version": "0.7.8", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "resolved": "http://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk=", "dev": true }, @@ -1254,9 +1173,9 @@ "dev": true }, "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, "async-each-series": { @@ -1291,18 +1210,18 @@ }, "autolinker": { "version": "0.15.3", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.15.3.tgz", + "resolved": "http://registry.npmjs.org/autolinker/-/autolinker-0.15.3.tgz", "integrity": "sha1-NCQX2PLzRhsUzwkIjV7fh5HcmDI=", "dev": true }, "autoprefixer": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", - "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", + "version": "9.4.10", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.10.tgz", + "integrity": "sha512-XR8XZ09tUrrSzgSlys4+hy5r2/z4Jp7Ag3pHm31U4g/CTccYPOVe19AkaJ4ey/vRd1sfj+5TtuD6I0PXtutjvQ==", "dev": true, "requires": { - "browserslist": "^4.5.4", - "caniuse-lite": "^1.0.30000957", + "browserslist": "^4.4.2", + "caniuse-lite": "^1.0.30000940", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^7.0.14", @@ -1329,14 +1248,6 @@ "requires": { "follow-redirects": "^1.2.5", "is-buffer": "^1.1.5" - }, - "dependencies": { - "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 - } } }, "babel-runtime": { @@ -1374,9 +1285,9 @@ "dev": true }, "bail": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", - "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", "dev": true }, "balanced-match": { @@ -1573,9 +1484,9 @@ } }, "bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.0.0.tgz", + "integrity": "sha512-Ekhwm6AUiMbZ1LgVCNMkgjovpMR30FyQN74laAW9gs0NPjZR5gdY0ARNB0YsQG8GOme3CsHbxmeyq/7Ofq6QYQ==", "dev": true, "requires": { "execa": "^1.0.0", @@ -1686,23 +1597,6 @@ "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", "dev": true }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, "p-cancelable": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", @@ -1751,9 +1645,9 @@ } }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", "dev": true }, "bindings": { @@ -1767,7 +1661,7 @@ }, "bl": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { @@ -1782,9 +1676,9 @@ "dev": true }, "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", "dev": true }, "bn.js": { @@ -1794,21 +1688,21 @@ "dev": true }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "dev": true, "requires": { - "bytes": "3.1.0", + "bytes": "3.0.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" }, "dependencies": { "debug": { @@ -1827,9 +1721,9 @@ "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true } } @@ -1903,7 +1797,7 @@ }, "brfs": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "resolved": "http://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", "dev": true, "requires": { @@ -1995,13 +1889,13 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browser-sync": { - "version": "2.26.5", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.5.tgz", - "integrity": "sha512-zVa6MmadAFgl5Uk53Yy5cw5tGTO7xSGAWK3Yx70GJ1t5jK+r6B4q3xq+1XbYfLt1SbeFg7WoNWneNhMT4B9jFw==", + "version": "2.26.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.3.tgz", + "integrity": "sha512-VLzpjCA4uXqfzkwqWtMM6hvPm2PNHp2RcmzBXcbi6C9WpkUhhFb8SVAr4CFrCsFxDg+oY6HalOjn8F+egyvhag==", "dev": true, "requires": { - "browser-sync-client": "^2.26.4", - "browser-sync-ui": "^2.26.4", + "browser-sync-client": "^2.26.2", + "browser-sync-ui": "^2.26.2", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", "chokidar": "^2.0.4", @@ -2016,7 +1910,7 @@ "http-proxy": "1.15.2", "immutable": "^3", "localtunnel": "1.9.1", - "micromatch": "^3.1.10", + "micromatch": "2.3.11", "opn": "5.3.0", "portscanner": "2.1.1", "qs": "6.2.3", @@ -2038,6 +1932,32 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", @@ -2055,6 +1975,24 @@ "wrap-ansi": "^2.0.0" } }, + "expand-brackets": { + "version": "0.1.5", + "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" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -2066,18 +2004,18 @@ "universalify": "^0.1.0" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -2087,6 +2025,24 @@ "number-is-nan": "^1.0.0" } }, + "is-glob": { + "version": "2.0.1", + "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" + } + }, + "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" + } + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -2096,6 +2052,36 @@ "invert-kv": "^1.0.0" } }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "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" + } + }, + "normalize-path": { + "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" + } + }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -2105,12 +2091,6 @@ "lcid": "^1.0.0" } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -2137,16 +2117,6 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "wrap-ansi": { - "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", - "strip-ansi": "^3.0.1" - } - }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -2187,9 +2157,9 @@ } }, "browser-sync-client": { - "version": "2.26.4", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.4.tgz", - "integrity": "sha512-mQiDp5/tf79VezDS5j/EExU4Ze6f5DQYuL0Z7VdJgBbNLTHDfkYGi2R620qc6HkY9XZA0m4/UwihT7J42RBIJA==", + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.2.tgz", + "integrity": "sha512-FEuVJD41fI24HJ30XOT2RyF5WcnEtdJhhTqeyDlnMk/8Ox9MZw109rvk9pdfRWye4soZLe+xcAo9tHSMxvgAdw==", "dev": true, "requires": { "etag": "1.8.1", @@ -2199,9 +2169,9 @@ } }, "browser-sync-ui": { - "version": "2.26.4", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", - "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==", + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.2.tgz", + "integrity": "sha512-LF7GMWo8ELOE0eAlxuRCfnGQT1ZxKP9flCfGgZdXFc6BwmoqaJHlYe7MmVvykKkXjolRXTz8ztXAKGVqNwJ3EQ==", "dev": true, "requires": { "async-each-series": "0.1.1", @@ -2288,7 +2258,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -2342,7 +2312,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -2383,14 +2353,14 @@ } }, "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz", + "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" + "caniuse-lite": "^1.0.30000939", + "electron-to-chromium": "^1.3.113", + "node-releases": "^1.1.8" } }, "bs-recipes": { @@ -2468,9 +2438,9 @@ "dev": true }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, "cache-base": { @@ -2542,18 +2512,6 @@ "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - } - }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -2601,13 +2559,13 @@ } }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.1.0.tgz", + "integrity": "sha512-WP9f9OBL/TAbwOFBJL79FoS9UKUmnp82RWnhlwTgrAJeMq7lytHhe0Jzc6/P7Zq0+2oviXJuPlvkZalWUug9gg==" }, "camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -2636,20 +2594,19 @@ } }, "caniuse-lite": { - "version": "1.0.30000967", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz", - "integrity": "sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==", + "version": "1.0.30000941", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000941.tgz", + "integrity": "sha512-4vzGb2MfZcO20VMPj1j6nRAixhmtlhkypM4fL4zhgzEucQIYiRzSqPcWIu1OF8i0FETD93FMIPWfUJCAcFvrqA==", "dev": true }, "canvas": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.5.0.tgz", - "integrity": "sha512-wwRz2cLMgb9d+rnotOJCoc04Bzj3aJMpWc6JxAD6lP7bYz0ldcn0sKddoZ0vhD5T8HBxrK+XmRDJb68/2VqARw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.4.1.tgz", + "integrity": "sha512-SaFomFqDuuuSTScTHQ7nXc5ea71Ieb8ctvwXjR7vzLsBMfp3euTv2xsTY70zIoC5r4sSQZYXv6tiHiORJ4y1vg==", "dev": true, "requires": { - "nan": "^2.13.2", - "node-pre-gyp": "^0.11.0", - "simple-get": "^3.0.3" + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0" } }, "capitalize": { @@ -2671,12 +2628,12 @@ "dev": true }, "catharsis": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.10.tgz", - "integrity": "sha512-l2OUaz/3PU3MZylspVFJvwHCVfWyvcduPq4lv3AzZ2pJzZCo7kNKFNyatwujD7XgvGkNAE/Jhhbh2uARNwNkfw==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", "dev": true, "requires": { - "lodash": "^4.17.11" + "underscore-contrib": "~0.3.0" } }, "caw": { @@ -2692,9 +2649,9 @@ } }, "ccount": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", - "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", + "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", "dev": true }, "center-align": { @@ -2742,21 +2699,21 @@ } }, "character-entities": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", - "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", + "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", "dev": true }, "character-entities-html4": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", - "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", + "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", "dev": true }, "character-entities-legacy": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", - "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", + "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", "dev": true }, "character-parser": { @@ -2769,9 +2726,9 @@ } }, "character-reference-invalid": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", - "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", + "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", "dev": true }, "chardet": { @@ -2787,9 +2744,9 @@ "dev": true }, "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -2803,7 +2760,18 @@ "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", - "upath": "^1.1.1" + "upath": "^1.1.0" + }, + "dependencies": { + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } } }, "chownr": { @@ -2910,7 +2878,7 @@ }, "slice-ansi": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, @@ -2955,23 +2923,21 @@ } }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "ansi-regex": "^3.0.0" } } } @@ -3007,16 +2973,16 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "coffeescript": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.4.1.tgz", - "integrity": "sha512-34GV1aHrsMpTaO3KfMJL40ZNuvKDR/g98THHnE9bQj8HjMaZvSrLik99WWqyMhRtbe8V5hpx5iLgdcSvM/S2wg==", + "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 }, "collapse-white-space": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", - "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", + "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", "dev": true }, "collection-visit": { @@ -3030,9 +2996,9 @@ } }, "color": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", - "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", + "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -3088,7 +3054,7 @@ "dependencies": { "convert-source-map": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true }, @@ -3101,18 +3067,18 @@ } }, "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, "comment-regex": { @@ -3133,12 +3099,6 @@ "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", "dev": true }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, "compare-module-exports": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/compare-module-exports/-/compare-module-exports-2.1.0.tgz", @@ -3200,12 +3160,6 @@ "is-extendable": "^0.1.0" } }, - "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 - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3239,23 +3193,6 @@ "unique-string": "^1.0.0", "write-file-atomic": "^2.0.0", "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, "connect": { @@ -3387,14 +3324,15 @@ "dev": true }, "cosmiconfig": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", - "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz", + "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==", "dev": true, "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.13.0", + "js-yaml": "^3.9.0", + "lodash.get": "^4.4.2", "parse-json": "^4.0.0" }, "dependencies": { @@ -3426,33 +3364,12 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -3474,7 +3391,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -3487,7 +3404,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -3554,7 +3471,7 @@ }, "css-color-names": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true }, @@ -3817,9 +3734,9 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { "ms": "^2.1.1" } @@ -3849,25 +3766,6 @@ "make-dir": "^1.0.0", "pify": "^2.3.0", "strip-dirs": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - } } }, "decompress-response": { @@ -3991,23 +3889,6 @@ "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", "dev": true }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -4103,12 +3984,6 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "dependency-graph": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.8.0.tgz", - "integrity": "sha512-DCvzSq2UiMsuLnj/9AL484ummEgLtZIcRS7YvtO38QnpX3vqh9nJ8P+zhu8Ja+SmLrBHO2iDbva20jq38qvBkQ==", - "dev": true - }, "dependency-tree": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-6.5.0.tgz", @@ -4119,6 +3994,17 @@ "debug": "^4.1.1", "filing-cabinet": "^2.3.0", "precinct": "^5.3.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "deps-sort": { @@ -4186,7 +4072,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -4232,6 +4118,17 @@ "debug": "^4.0.0", "gonzales-pe": "^4.2.3", "node-source-walk": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "detective-postcss": { @@ -4244,6 +4141,17 @@ "is-url": "^1.2.4", "postcss": "^7.0.2", "postcss-values-parser": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "detective-sass": { @@ -4255,6 +4163,17 @@ "debug": "^4.1.1", "gonzales-pe": "^4.2.3", "node-source-walk": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "detective-scss": { @@ -4266,6 +4185,17 @@ "debug": "^4.1.1", "gonzales-pe": "^4.2.3", "node-source-walk": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "detective-stylus": { @@ -4313,13 +4243,13 @@ "dev": true }, "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -4340,15 +4270,6 @@ "lodash.omit": "^4.5.0" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -4479,15 +4400,6 @@ "url-to-options": "^1.0.1" } }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -4498,7 +4410,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -4570,9 +4482,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.133", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz", - "integrity": "sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg==", + "version": "1.3.113", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", + "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", "dev": true }, "elegant-spinner": { @@ -4776,12 +4688,6 @@ "is-symbol": "^1.0.2" } }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, "es6-promise": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", @@ -4790,7 +4696,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { @@ -4855,9 +4761,9 @@ } }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.0.tgz", + "integrity": "sha512-xwG7SS5JLeqkiR3iOmVgtF8Y6xPdtr6AAsN6ph7Q6R/fv+3UlKYoika8SmNzmb35qdRF+RfTY35kMEdtbi+9wg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -4866,7 +4772,7 @@ "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", + "eslint-scope": "^4.0.2", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", "espree": "^5.0.1", @@ -4880,7 +4786,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "js-yaml": "^3.12.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.11", @@ -4898,6 +4804,24 @@ "text-table": "^0.2.0" }, "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "import-fresh": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", @@ -4926,9 +4850,9 @@ } }, "eslint-config-prettier": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.2.0.tgz", - "integrity": "sha512-y0uWc/FRfrHhpPZCYflWC8aE0KRJRY04rdZVfl8cL3sEZmOYyaBdhdlQPjKZBnuRMyLVK+JUZr7HaZFClQiH4w==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz", + "integrity": "sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -4982,9 +4906,9 @@ } }, "eslint-module-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", - "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", "dev": true, "requires": { "debug": "^2.6.8", @@ -5019,22 +4943,21 @@ } }, "eslint-plugin-import": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz", - "integrity": "sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", + "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", "dev": true, "requires": { - "array-includes": "^3.0.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.0", + "eslint-module-utils": "^2.3.0", "has": "^1.0.3", "lodash": "^4.17.11", "minimatch": "^3.0.4", "read-pkg-up": "^2.0.0", - "resolve": "^1.10.0" + "resolve": "^1.9.0" }, "dependencies": { "debug": { @@ -5048,7 +4971,7 @@ }, "doctrine": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { @@ -5065,12 +4988,6 @@ "locate-path": "^2.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -5162,46 +5079,40 @@ } }, "eslint-plugin-node": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-9.0.1.tgz", - "integrity": "sha512-fljT5Uyy3lkJzuqhxrYanLSsvaILs9I7CmQ31atTtZ0DoIzRbbvInBh4cQ1CrthFHInHYBQxfPmPt6KLHXNXdw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", + "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", "dev": true, "requires": { - "eslint-plugin-es": "^1.4.0", + "eslint-plugin-es": "^1.3.1", "eslint-utils": "^1.3.1", - "ignore": "^5.1.1", + "ignore": "^5.0.2", "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.0.0" + "resolve": "^1.8.1", + "semver": "^5.5.0" }, "dependencies": { "ignore": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.1.tgz", - "integrity": "sha512-DWjnQIFLenVrwyRCKZT+7a7/U4Cqgar4WG8V++K3hw+lrW1hc/SIwdiGmtxKCVACmHULTuGeBbHJmbwW7/sAvA==", - "dev": true - }, - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.5.tgz", + "integrity": "sha512-kOC8IUb8HSDMVcYrDVezCxpJkzSQWTAzf3olpKM6o9rM5zpojx23O0Fl8Wr4+qJ6ZbPEHqf1fdwev/DS7v7pmA==", "dev": true } } }, "eslint-plugin-prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", - "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", + "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-promise": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz", - "integrity": "sha512-faAHw7uzlNPy7b45J1guyjazw28M+7gJokKUjC5JSFoYfUEyy6Gw/i7YQvmv2Yk00sUjWcmzXQLpU1Ki/C2IZQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", "dev": true }, "eslint-plugin-standard": { @@ -5211,9 +5122,9 @@ "dev": true }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -5306,7 +5217,7 @@ }, "event-stream": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { @@ -5442,12 +5353,6 @@ "repeat-string": "^1.5.2" } }, - "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-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -5457,12 +5362,6 @@ "kind-of": "^3.0.2" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", @@ -5517,9 +5416,9 @@ }, "dependencies": { "mime": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", - "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", "dev": true } } @@ -5579,6 +5478,17 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "extglob": { @@ -5702,6 +5612,17 @@ "is-glob": "^4.0.0", "merge2": "^1.2.3", "micromatch": "^3.1.10" + }, + "dependencies": { + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } } }, "fast-json-stable-stringify": { @@ -5762,6 +5683,12 @@ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -5797,8 +5724,19 @@ "sass-lookup": "^3.0.0", "stylus-lookup": "^3.0.1", "typescript": "^3.0.3" - } - }, + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -5863,28 +5801,6 @@ "traverse-chain": "~0.1.0" } }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, "find-parent-dir": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", @@ -5900,19 +5816,19 @@ } }, "find-versions": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.1.0.tgz", - "integrity": "sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.0.0.tgz", + "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", "dev": true, "requires": { - "array-uniq": "^2.1.0", + "array-uniq": "^2.0.0", "semver-regex": "^2.0.0" }, "dependencies": { "array-uniq": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", - "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.0.0.tgz", + "integrity": "sha512-O3QZEr+3wDj7otzF7PjNGs6CA3qmYMLvt5xGkjY/V0VxS+ovvqVo/5wKM/OVOAyuX4DTh9H31zE/yKtO66hTkg==", "dev": true } } @@ -5929,13 +5845,13 @@ "dependencies": { "colors": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "resolved": "http://registry.npmjs.org/colors/-/colors-0.6.2.tgz", "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", "dev": true }, "commander": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.1.0.tgz", "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", "dev": true } @@ -5947,6 +5863,13 @@ "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", "requires": { "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + } } }, "flat-cache": { @@ -5985,17 +5908,6 @@ "dev": true, "requires": { "debug": "^3.2.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "font-family-papandreou": { @@ -6004,16 +5916,6 @@ "integrity": "sha512-l6WMbeh7+Zd4TTu3yUUPR5KOepiuGLd/QAPfTIoX8ipTko0IF7PU6dsM4YM2zCDToEPIPSyCBKEJnKlSdYMgaA==", "dev": true }, - "font-snapper": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/font-snapper/-/font-snapper-1.0.0.tgz", - "integrity": "sha512-8E91ADLNoLIXZGGRDuuK13SWPVbbxIwVkcIcvEoQdEpP13U20bOVXXrur4VxUff3pMImrot7cM/9vN0LwiJ32w==", - "dev": true, - "requires": { - "css-font-weight-names": "^0.2.1", - "font-family-papandreou": "^0.2.0-patch1" - } - }, "font-tracer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/font-tracer/-/font-tracer-1.1.0.tgz", @@ -6064,34 +5966,21 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "for-own": { + "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": "^1.0.1" + } + }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "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" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - } - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -6142,7 +6031,7 @@ }, "fs-access": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { @@ -6198,14 +6087,14 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", "dev": true, "optional": true, "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -6283,12 +6172,12 @@ "optional": true }, "debug": { - "version": "4.1.1", + "version": "2.6.9", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "deep-extend": { @@ -6459,24 +6348,24 @@ } }, "ms": { - "version": "2.1.1", + "version": "2.0.0", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.3.0", + "version": "2.2.4", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^2.1.2", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", + "version": "0.10.3", "bundled": true, "dev": true, "optional": true, @@ -6504,13 +6393,13 @@ } }, "npm-bundled": { - "version": "1.0.6", + "version": "1.0.5", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", + "version": "1.2.0", "bundled": true, "dev": true, "optional": true, @@ -6649,7 +6538,7 @@ "optional": true }, "semver": { - "version": "5.7.0", + "version": "5.6.0", "bundled": true, "dev": true, "optional": true @@ -6817,7 +6706,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -6843,9 +6732,9 @@ "dev": true }, "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "get-func-name": { "version": "2.0.0", @@ -6910,9 +6799,9 @@ "dev": true }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6922,27 +6811,52 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "^1.0.0" } } } }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, "glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", @@ -6959,9 +6873,9 @@ } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", "dev": true }, "globby": { @@ -7002,7 +6916,7 @@ }, "debug": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", "dev": true, "requires": { @@ -7011,7 +6925,7 @@ }, "ms": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz", "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", "dev": true } @@ -7046,7 +6960,7 @@ }, "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -7113,9 +7027,9 @@ "dev": true }, "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", + "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -7180,6 +7094,14 @@ "dev": true, "requires": { "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } } }, "has-color": { @@ -7246,12 +7168,6 @@ "kind-of": "^4.0.0" }, "dependencies": { - "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 - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -7283,15 +7199,6 @@ "minimalistic-assert": "^1.0.1" } }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, "hat": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", @@ -7369,23 +7276,31 @@ } }, "html-minifier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", - "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", - "dev": true, - "requires": { - "camel-case": "^3.0.0", - "clean-css": "^4.2.1", - "commander": "^2.19.0", - "he": "^1.2.0", - "param-case": "^2.1.1", - "relateurl": "^0.2.7", - "uglify-js": "^3.5.1" + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } } }, "htmlescape": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, @@ -7415,16 +7330,15 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.6.3", + "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, "dependencies": { "statuses": { @@ -7493,35 +7407,24 @@ "requires": { "agent-base": "^4.1.0", "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "husky": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-2.3.0.tgz", - "integrity": "sha512-A/ZQSEILoq+mQM3yC3RIBSaw1bYXdkKnyyKVSUiJl+iBjVZc5LQEXdGY1ZjrDxC4IzfRPiJ0IqzEQGCN5TQa/A==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", + "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", "dev": true, "requires": { - "cosmiconfig": "^5.2.0", + "cosmiconfig": "^5.0.7", "execa": "^1.0.0", "find-up": "^3.0.0", - "get-stdin": "^7.0.0", + "get-stdin": "^6.0.0", "is-ci": "^2.0.0", - "pkg-dir": "^4.1.0", + "pkg-dir": "^3.0.0", "please-upgrade-node": "^3.1.1", - "read-pkg": "^5.1.1", + "read-pkg": "^4.0.1", "run-node": "^1.0.0", - "slash": "^3.0.0" + "slash": "^2.0.0" }, "dependencies": { "ci-info": { @@ -7531,9 +7434,9 @@ "dev": true }, "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true }, "is-ci": { @@ -7555,31 +7458,36 @@ "json-parse-better-errors": "^1.0.1" } }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "pkg-dir": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.1.0.tgz", - "integrity": "sha512-55k9QN4saZ8q518lE6EFgYiu95u3BWkSajCifhdQjvLvmr8IpnRbhI+UGpWJQfa0KzDguHeeWT1ccO1PmkOi3A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { "find-up": "^3.0.0" } }, "read-pkg": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", - "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dev": true, "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", + "normalize-package-data": "^2.3.2", "parse-json": "^4.0.0", - "type-fest": "^0.4.1" + "pify": "^3.0.0" } }, "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true } } @@ -7591,18 +7499,18 @@ "dev": true }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, "ignore": { @@ -7732,9 +7640,9 @@ } }, "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -7748,7 +7656,7 @@ "run-async": "^2.2.0", "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", + "strip-ansi": "^5.0.0", "through": "^2.3.6" }, "dependencies": { @@ -7762,9 +7670,9 @@ } }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -7790,12 +7698,6 @@ "xtend": "^4.0.0" }, "dependencies": { - "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 - }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -7856,12 +7758,6 @@ "kind-of": "^3.0.2" }, "dependencies": { - "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 - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -7874,9 +7770,9 @@ } }, "is-alphabetical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", - "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", + "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", "dev": true }, "is-alphanumeric": { @@ -7886,9 +7782,9 @@ "dev": true }, "is-alphanumerical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz", - "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", + "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", @@ -7911,9 +7807,10 @@ } }, "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + "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-callable": { "version": "1.1.4", @@ -7952,12 +7849,6 @@ "kind-of": "^3.0.2" }, "dependencies": { - "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 - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -7975,9 +7866,9 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-decimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", - "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", + "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", "dev": true }, "is-descriptor": { @@ -8005,6 +7896,21 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "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" + } + }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -8050,18 +7956,18 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "^2.1.0" } }, "is-hexadecimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", - "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", + "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", "dev": true }, "is-installed-globally": { @@ -8101,12 +8007,6 @@ "kind-of": "^3.0.2" }, "dependencies": { - "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 - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -8129,7 +8029,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -8195,6 +8095,18 @@ "isobject": "^3.0.1" } }, + "is-posix-bracket": { + "version": "0.1.1", + "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", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -8304,9 +8216,9 @@ "dev": true }, "is-whitespace-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", - "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", + "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", "dev": true }, "is-windows": { @@ -8316,9 +8228,9 @@ "dev": true }, "is-word-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", - "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", + "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", "dev": true }, "is-wsl": { @@ -8328,9 +8240,9 @@ "dev": true }, "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isbinaryfile": { @@ -8360,115 +8272,57 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", "dev": true }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "istanbul-lib-instrument": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", + "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", "dev": true, "requires": { - "append-transform": "^1.0.0" + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "istanbul-lib-coverage": "^2.0.3", + "semver": "^5.5.0" } }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - } + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "javascript-stringify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", + "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", + "dev": true + }, + "jpegtran": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/jpegtran/-/jpegtran-1.0.6.tgz", + "integrity": "sha512-H1TQgIg62gueqy1BkBVPO2mTFh68rseOhRhiTBBLAFiEUpyQlNa3EGa0lACAVeAXfryrFQCFVrS2xhsrlpXY9Q==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" + "jpegtran-bin": "^4.0.0", + "memoizeasync": "^1.0.0", + "which": "^1.2.14" } }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.4.tgz", - "integrity": "sha512-QCHGyZEK0bfi9GR215QSm+NJwFKEShbtc7tfbUdLAEzn3kKhLDDZqvljn8rPZM9v8CEOhzL1nlYoO4r1ryl67w==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "javascript-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.0.tgz", - "integrity": "sha512-zzK8+ByrzvOL6N92hRewwUKL0wN0TOaIuUjX0Jj8lraxWvr5wHYs2YTjaj2lstF+8qMv5cmPPef47va8NT8lDw==", - "dev": true - }, - "jpegtran": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/jpegtran/-/jpegtran-1.0.6.tgz", - "integrity": "sha512-H1TQgIg62gueqy1BkBVPO2mTFh68rseOhRhiTBBLAFiEUpyQlNa3EGa0lACAVeAXfryrFQCFVrS2xhsrlpXY9Q==", - "dev": true, - "requires": { - "jpegtran-bin": "^4.0.0", - "memoizeasync": "^1.0.0", - "which": "^1.2.14" - } - }, - "jpegtran-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz", - "integrity": "sha512-2cRl1ism+wJUoYAYFt6O/rLBfpXNWG2dUWbgcEkTt5WGMnqI46eEro8T4C5zGROxKRqyKpCBSdHPvt5UYCtxaQ==", + "jpegtran-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz", + "integrity": "sha512-2cRl1ism+wJUoYAYFt6O/rLBfpXNWG2dUWbgcEkTt5WGMnqI46eEro8T4C5zGROxKRqyKpCBSdHPvt5UYCtxaQ==", "dev": true, "requires": { "bin-build": "^3.0.0", @@ -8483,15 +8337,15 @@ "dev": true }, "js-beautify": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz", - "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.9.1.tgz", + "integrity": "sha512-oxxvVZdOdUfzk8IOLBF2XUZvl2GoBEfA+b0of4u2EBY/46NlXasi8JdFvazA5lCrf9/lQhTjyVy2QCUW7iq0MQ==", "dev": true, "requires": { "config-chain": "^1.1.12", - "editorconfig": "^0.15.3", + "editorconfig": "^0.15.2", "glob": "^7.1.3", - "mkdirp": "~0.5.1", + "mkdirp": "~0.5.0", "nopt": "~4.0.1" } }, @@ -8523,12 +8377,12 @@ } }, "js2xmlparser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.0.tgz", - "integrity": "sha512-WuNgdZOXVmBk5kUPMcTcVUpbGRzLfNkv7+7APq7WiDihpXVKrgxo6wwRpRl9OQeEBgKCVk9mR7RbzrnNWC8oBw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", "dev": true, "requires": { - "xmlcreate": "^2.0.0" + "xmlcreate": "^1.0.1" } }, "jsbn": { @@ -8538,37 +8392,29 @@ "dev": true }, "jsdoc": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.2.tgz", - "integrity": "sha512-S2vzg99C5+gb7FWlrK4TVdyzVPGGkdvpDkCEJH1JABi2PKzPeLu5/zZffcJUifgWUJqXWl41Hoc+MmuM2GukIg==", - "dev": true, - "requires": { - "@babel/parser": "^7.4.4", - "bluebird": "^3.5.4", - "catharsis": "^0.8.10", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.0", - "klaw": "^3.0.0", - "markdown-it": "^8.4.2", - "markdown-it-anchor": "^5.0.2", - "marked": "^0.6.2", - "mkdirp": "^0.5.1", - "requizzle": "^0.2.2", - "strip-json-comments": "^3.0.1", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", + "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", + "dev": true, + "requires": { + "babylon": "7.0.0-beta.19", + "bluebird": "~3.5.0", + "catharsis": "~0.8.9", + "escape-string-regexp": "~1.0.5", + "js2xmlparser": "~3.0.0", + "klaw": "~2.0.0", + "marked": "~0.3.6", + "mkdirp": "~0.5.1", + "requizzle": "~0.2.1", + "strip-json-comments": "~2.0.1", "taffydb": "2.6.2", - "underscore": "~1.9.1" + "underscore": "~1.8.3" }, "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "babylon": { + "version": "7.0.0-beta.19", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", + "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", "dev": true }, "taffydb": { @@ -8576,13 +8422,19 @@ "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true } } }, "jsdom": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.0.0.tgz", - "integrity": "sha512-/VkyPmdtbwqpJSkwDx3YyJ3U1oawYNB/h5z8vTUZGAzjtu2OHTeFRfnJqyMHsJ5Cyes23trOmvUpM1GfHH1leA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.2.0.tgz", + "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==", "dev": true, "requires": { "abab": "^2.0.0", @@ -8620,9 +8472,9 @@ "dev": true }, "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", + "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", "dev": true, "requires": { "acorn": "^6.0.1", @@ -8726,9 +8578,9 @@ } }, "jszip": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.1.tgz", - "integrity": "sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.0.tgz", + "integrity": "sha512-4WjbsaEtBK/DHeDZOPiPw5nzSGLDEDDreFRDEgnoMwmknPjTqa+23XuYFk6NiGbeiAeZCctiQ/X/z0lQBmDVOQ==", "dev": true, "requires": { "lie": "~3.3.0", @@ -8758,9 +8610,9 @@ "dev": true }, "karma": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", - "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.0.1.tgz", + "integrity": "sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A==", "dev": true, "requires": { "bluebird": "^3.3.0", @@ -8793,9 +8645,9 @@ }, "dependencies": { "mime": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", - "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", "dev": true }, "source-map": { @@ -8841,7 +8693,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -8896,9 +8748,9 @@ "dev": true }, "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", "dev": true, "requires": { "graceful-fs": "^4.1.9" @@ -8999,9 +8851,9 @@ } }, "lint-staged": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.6.tgz", - "integrity": "sha512-QT13AniHN6swAtTjsrzxOfE4TVCiQ39xESwLmjGVNCMMZ/PK5aopwvbxLrzw+Zf9OxM3cQG6WCx9lceLzETOnQ==", + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", + "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==", "dev": true, "requires": { "chalk": "^2.3.1", @@ -9028,18 +8880,9 @@ "staged-git-files": "1.1.2", "string-argv": "^0.0.2", "stringify-object": "^3.2.2", - "yup": "^0.27.0" + "yup": "^0.26.10" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", @@ -9075,11 +8918,14 @@ } } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } }, "pify": { "version": "3.0.0", @@ -9116,12 +8962,6 @@ "is-extendable": "^0.1.0" } }, - "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-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -9159,10 +8999,16 @@ "rxjs": "^6.3.3" }, "dependencies": { + "p-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", + "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", + "dev": true + }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -9234,7 +9080,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -9329,12 +9175,6 @@ "ms": "2.0.0" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -9374,12 +9214,6 @@ "lcid": "^1.0.0" } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -9406,16 +9240,6 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "wrap-ansi": { - "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", - "strip-ansi": "^3.0.1" - } - }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -9504,10 +9328,10 @@ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "lodash.isfinite": { @@ -9618,16 +9442,16 @@ } }, "log4js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.2.0.tgz", - "integrity": "sha512-1dJ2ORJcdqbzxvzKM2ceqPBh4O6bbICJpB4dvSEUoMcb14s8MqQ/54zNPqekuN5yjGtxO3GUDTvZfQOQhwdqnA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.0.2.tgz", + "integrity": "sha512-KE7HjiieVDPPdveA3bJZSuu0n8chMkFl8mIoisBFxwEJ9FmXe4YzNuiqSwYUiR1K8q8/5/8Yd6AClENY1RA9ww==", "dev": true, "requires": { "date-format": "^2.0.0", - "debug": "^4.1.1", + "debug": "^3.1.0", "flatted": "^2.0.0", "rfdc": "^1.1.2", - "streamroller": "^1.0.5" + "streamroller": "^1.0.1" } }, "logalot": { @@ -9641,9 +9465,9 @@ } }, "lolex": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.0.1.tgz", - "integrity": "sha512-UHuOBZ5jjsKuzbB/gRNNW8Vg8f00Emgskdq2kvZxgBJCS0aqquAuXai/SkWORlKeZEiNQWZjFZOqIUcH9LqKCw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz", + "integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==", "dev": true }, "longest": { @@ -9653,9 +9477,9 @@ "dev": true }, "longest-streak": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", - "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", + "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", "dev": true }, "loud-rejection": { @@ -9703,14 +9527,14 @@ } }, "luxon": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.13.2.tgz", - "integrity": "sha512-U7i2AE+/VWeB8PZZkIeEcxJCZvBA8LegCHufaIFYx3qRQdw2UJw3fuaL/Fqi9Q+2MeFYu+gYqIzr5hWOvAMHBQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.12.1.tgz", + "integrity": "sha512-Zv/qJb2X1ESTrlniAViWx2aqGwi2cVpeoZFTbPdPiCu4EsadKsmb/QCH8HQjMUpDZKKJIHKHsJxV5Rwpq47HKQ==", "dev": true }, "magic-string": { "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "resolved": "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, "requires": { @@ -9718,13 +9542,14 @@ } }, "magicpen": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/magicpen/-/magicpen-6.0.2.tgz", - "integrity": "sha512-zGaX9FDqnM0P1iZLl7CQsB+cj7NzVLClpCEVAS0GQBWg3u2QEg5Gs4247pVRxb265q/ZUTCB+lB6+NfPu+L63A==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/magicpen/-/magicpen-5.12.0.tgz", + "integrity": "sha1-u+nunUI2R2rs+EE27KGDPrRwqWs=", "dev": true, "requires": { "ansi-styles": "2.0.0", - "color-diff": "0.1.7" + "color-diff": "0.1.7", + "supports-color": "1.2.0" }, "dependencies": { "ansi-styles": { @@ -9732,23 +9557,28 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.0.tgz", "integrity": "sha1-QysmFi/qG2PIeIlqvIzFVI8lBj4=", "dev": true + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true } } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } @@ -9781,7 +9611,7 @@ }, "map-stream": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "resolved": "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, @@ -9795,9 +9625,9 @@ } }, "markdown-escapes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", - "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", + "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", "dev": true }, "markdown-it": { @@ -9820,9 +9650,9 @@ "dev": true }, "markdown-it-attrs": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-2.3.4.tgz", - "integrity": "sha512-DwGzugbveSUfRiUuxIC7svr8i+x3e3/eUJ7U7GRduNa2SO5Qyd2rZtjx6j0c3uS2xCIddZFcydEVlbg6C3s2vA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-2.3.2.tgz", + "integrity": "sha512-DyatNvpatg7w+fGkplWGeie7o/0TogBr2w0izyz9ZQfTMv5G3lbDHQFQ42aP2e5L2mJQt0IeAjWzvYaa2d9xzQ==", "dev": true }, "markdown-it-prism": { @@ -9878,7 +9708,7 @@ }, "globby": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -9953,9 +9783,9 @@ } }, "markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", + "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", "dev": true }, "markdown-toc": { @@ -9978,12 +9808,6 @@ "strip-color": "^0.1.0" }, "dependencies": { - "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 - }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -10017,42 +9841,42 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "markdownlint": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.14.1.tgz", - "integrity": "sha512-W3RxMP8GYyJAhgUXIXvBOXT2ai89qDIuLf2ZM0Xd+XcwXBS6Hu06Hg2UKNwMDPTy0uQK8YWCH4hkdxlevm/BgQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.12.0.tgz", + "integrity": "sha512-bjur6ZP0yKHVYh1U5+xD+bVkouKiUyiVzg9c9qkytYRW2nDfSowifKSmpPeO0uZHxzZOYMcV2Oe7sycPOEqMOQ==", "dev": true, "requires": { "markdown-it": "8.4.2" } }, "markdownlint-cli": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.16.0.tgz", - "integrity": "sha512-BmtWhDvbsnbgYirYOiSOxP8THhkCjp28+xVfTyj3D1JsOlj0Txf3IA9wlT5GHCYaR6QfDlWq4pz/rh+bfOw2Vg==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.14.1.tgz", + "integrity": "sha512-bHueUEp1NmSFPWvOk3SNWhRRAInrdvmuzlkMrZJptUF6jNXJ32OhPXicRw2xg43+NLiUI01V5sc1VIrRWLKgig==", "dev": true, "requires": { "commander": "~2.9.0", "deep-extend": "~0.5.1", "get-stdin": "~5.0.1", "glob": "~7.1.2", - "js-yaml": "^3.13.1", + "js-yaml": "~3.13.0", "lodash.differencewith": "~4.5.0", "lodash.flatten": "~4.4.0", - "markdownlint": "~0.14.1", + "markdownlint": "~0.12.0", "minimatch": "~3.0.4", "rc": "~1.2.7" }, "dependencies": { "commander": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "requires": { @@ -10074,9 +9898,9 @@ } }, "marked": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", - "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==", + "version": "0.3.19", + "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", "dev": true }, "matcher": { @@ -10163,17 +9987,17 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", + "mimic-fn": "^1.0.0", "p-is-promise": "^2.0.0" } }, @@ -10189,7 +10013,7 @@ "dependencies": { "lru-cache": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", + "resolved": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", "integrity": "sha1-2COIrpyWC+y+oMc7uet5tsbOmus=", "dev": true } @@ -10224,7 +10048,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -10242,7 +10066,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -10301,24 +10125,24 @@ "dev": true }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "~1.38.0" } }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "mimic-response": { "version": "1.0.1", @@ -10348,7 +10172,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "minipass": { @@ -10407,7 +10231,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -10470,6 +10294,17 @@ "find": "^0.3.0", "requirejs": "^2.3.5", "requirejs-config-file": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "moo": { @@ -10508,9 +10343,9 @@ "dev": true }, "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", "dev": true }, "nanomatch": { @@ -10545,43 +10380,43 @@ "dev": true }, "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", + "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", "dev": true, "requires": { - "debug": "^3.2.6", + "debug": "^2.1.2", "iconv-lite": "^0.4.4", "sax": "^1.2.4" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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.1.1" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, "nice-try": { @@ -10620,9 +10455,9 @@ } }, "node-abi": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.8.0.tgz", - "integrity": "sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.7.1.tgz", + "integrity": "sha512-OV8Bq1OrPh6z+Y4dqwo05HqrRL9YNF7QVMRfq1/pguwKLG+q9UB/Lk0x5qXjO23JjJg+/jqCHSTaG1P3tfKfuw==", "dev": true, "requires": { "semver": "^5.4.1" @@ -10635,6 +10470,13 @@ "requires": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + } } }, "node-libs-browser": { @@ -10670,7 +10512,7 @@ "dependencies": { "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -10685,12 +10527,6 @@ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "path-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", @@ -10714,7 +10550,7 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, @@ -10729,7 +10565,7 @@ }, "vm-browserify": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { @@ -10757,9 +10593,9 @@ } }, "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.9.tgz", + "integrity": "sha512-oic3GT4OtbWWKfRolz5Syw0Xus0KRFxeorLNj0s93ofX6PWyuzKjsiGxsCtWktBwwmTF6DdRRf2KreGqeOk5KA==", "dev": true, "requires": { "semver": "^5.3.0" @@ -10901,9 +10737,9 @@ } }, "nps": { - "version": "5.9.5", - "resolved": "https://registry.npmjs.org/nps/-/nps-5.9.5.tgz", - "integrity": "sha512-UsjrtowHeXGnKELZUlqiyPSXc3vYs3YwLZEFfZJ1Z9kZCFgtzK4YRVKnxEa+teRMMdw6Q4keAX/M/aLCkPTqIw==", + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/nps/-/nps-5.9.4.tgz", + "integrity": "sha512-4RFiRTG0/hwcdTqfhwOT2sxtC7JEElyZDTsa3DIhf4ekFFL/87y2JvPAIRZJWVnEp+tG2a7qzv0eJE4NgJLlDg==", "dev": true, "requires": { "arrify": "^1.0.1", @@ -10991,12 +10827,6 @@ "locate-path": "^2.0.0" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -11058,12 +10888,6 @@ "mimic-fn": "^1.0.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", @@ -11129,12 +10953,6 @@ "read-pkg": "^2.0.0" } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -11150,29 +10968,6 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "wrap-ansi": { - "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", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "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", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -11331,16 +11126,6 @@ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", "dev": true }, - "wrap-ansi": { - "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", - "strip-ansi": "^3.0.1" - } - }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -11365,64 +11150,1042 @@ } }, "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.3.tgz", + "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==", "dev": true }, "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz", + "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==", "dev": true, "requires": { "archy": "^1.0.0", - "caching-transform": "^3.0.2", + "arrify": "^1.0.1", + "caching-transform": "^3.0.1", "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", + "find-cache-dir": "^2.0.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", + "istanbul-lib-coverage": "^2.0.3", + "istanbul-lib-hook": "^2.0.3", + "istanbul-lib-instrument": "^3.1.0", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.2", + "istanbul-reports": "^2.1.1", + "make-dir": "^1.3.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", + "test-exclude": "^5.1.0", "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" + "yargs": "^12.0.5", + "yargs-parser": "^11.1.1" }, "dependencies": { - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "append-transform": { + "version": "1.0.0", + "bundled": true, "dev": true, "requires": { - "source-map": "^0.6.1" + "default-require-extensions": "^2.0.0" } }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "archy": { + "version": "1.0.0", + "bundled": true, "dev": true }, - "source-map": { + "arrify": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "async": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "caching-transform": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "hasha": "^3.0.0", + "make-dir": "^1.3.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.3.0" + } + }, + "camelcase": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "commander": { + "version": "2.17.1", + "bundled": true, + "dev": true, + "optional": true + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cross-spawn": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "default-require-extensions": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "bundled": true, + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es6-error": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "execa": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "bundled": true, + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "find-cache-dir": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "foreground-child": { + "version": "1.5.6", + "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.3", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "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" + } + }, + "graceful-fs": { + "version": "4.1.15", + "bundled": true, + "dev": true + }, + "handlebars": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "hasha": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-stream": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.3", + "make-dir": "^1.3.0", + "supports-color": "^6.0.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.3", + "make-dir": "^1.3.0", + "rimraf": "^2.6.2", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "^4.1.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "lcid": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "bundled": true, + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "bundled": true, + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "mem": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" + } + }, + "merge-source-map": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.10", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "bundled": true, + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-is-promise": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "package-hash": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "release-zalgo": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "spawn-wrap": { + "version": "1.4.2", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "arrify": "^1.0.1", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^1.0.1" + } + }, + "uglify-js": { + "version": "3.4.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "uuid": { + "version": "3.3.2", + "bundled": true, + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "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" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "2.4.2", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "y18n": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true, "dev": true + }, + "yargs": { + "version": "12.0.5", + "bundled": true, + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -11464,12 +12227,6 @@ "is-descriptor": "^0.1.0" } }, - "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 - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -11488,9 +12245,9 @@ "dev": true }, "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" }, "object-path": { "version": "0.9.2", @@ -11527,6 +12284,16 @@ "es-abstract": "^1.5.1" } }, + "object.omit": { + "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.4", + "is-extendable": "^0.1.1" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -11565,23 +12332,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - } - } - }, "openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", @@ -11669,7 +12419,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -11691,7 +12441,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -11740,9 +12490,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" }, "p-limit": { "version": "2.2.0", @@ -11761,9 +12511,9 @@ } }, "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, "p-map-series": { @@ -11791,21 +12541,9 @@ } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" }, "package-json": { "version": "4.0.1", @@ -11835,18 +12573,18 @@ } }, "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", "dev": true, "requires": { "callsites": "^3.0.0" }, "dependencies": { "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", "dev": true } } @@ -11908,6 +12646,35 @@ "path-root": "^0.1.1" } }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "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" + } + } + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -11948,9 +12715,9 @@ } }, "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", "dev": true }, "pascalcase": { @@ -11984,7 +12751,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { @@ -12061,7 +12828,7 @@ }, "pause-stream": { "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { @@ -12146,7 +12913,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -12190,7 +12957,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -12421,9 +13188,9 @@ "dev": true }, "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -12436,6 +13203,15 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -12876,9 +13652,9 @@ } }, "prebuild-install": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz", - "integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.5.tgz", + "integrity": "sha512-6uZgMVg7yDfqlP5CPurVhtq3hUKBFNufiar4J5hZrlHTo59DDBEtyxw01xCdFss9j0Zb9+qzFVf/s4niayba3w==", "dev": true, "requires": { "detect-libc": "^1.0.3", @@ -12901,7 +13677,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -12947,6 +13723,17 @@ "detective-typescript": "^4.1.2", "module-definition": "^3.1.0", "node-source-walk": "^4.2.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "prefix-matches": { @@ -12971,10 +13758,16 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, "prettier": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.1.tgz", - "integrity": "sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg==", + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", "dev": true }, "prettier-linter-helpers": { @@ -13010,7 +13803,7 @@ }, "pretty-bytes": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", "dev": true }, @@ -13024,9 +13817,9 @@ } }, "prismjs": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.16.0.tgz", - "integrity": "sha512-OA4MKxjFZHSvZcisLGe14THYsug/nF6O1f0pAJc0KN0wTyAcLqmsbE+lTGKSpyh+9pEW57+k6pg2AfYR+coyHA==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz", + "integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==", "dev": true, "requires": { "clipboard": "^2.0.0" @@ -13361,7 +14154,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -13416,20 +14209,20 @@ } }, "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" } }, @@ -13447,7 +14240,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -13515,25 +14308,17 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -13587,6 +14372,15 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -13628,15 +14422,6 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, "remark": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", @@ -13772,12 +14557,6 @@ "is-finite": "^1.0.0" } }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -13856,9 +14635,9 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "requirejs": { "version": "2.3.6", @@ -13875,6 +14654,24 @@ "esprima": "^4.0.0", "make-dir": "^2.1.0", "stringify-object": "^3.2.1" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "requires-port": { @@ -13884,18 +14681,26 @@ "dev": true }, "requizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.2.tgz", - "integrity": "sha512-oJ6y7JcUJkblRGhMByGNcszeLgU0qDxNKFCiUZR1XyzHyVsev+Mxb1tyygxLd1ORsKee1SA5BInFdUwY64GE/A==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", "dev": true, "requires": { - "lodash": "^4.17.11" + "underscore": "~1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } } }, "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -13963,6 +14768,17 @@ "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" + }, + "dependencies": { + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } } }, "restructure": { @@ -13981,9 +14797,9 @@ "dev": true }, "rewiremock": { - "version": "3.13.7", - "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.13.7.tgz", - "integrity": "sha512-U6iFfdXPiNtIBDcJWmspl/nhVk1EANkXLq2GM78T3ZfegvO5EW0TgNzExLh5iHXFJKQr//SmH9iloK/s4O7UqA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.13.0.tgz", + "integrity": "sha512-1MkO4mX4j31GilbMsqdgLNXjmrHo9EUKQFCa82rLye8ltOHnJe0rRaHUSKz2yUClr8l0Qnj1ZTjZHmp6vNTrzQ==", "dev": true, "requires": { "babel-runtime": "^6.26.0", @@ -13997,9 +14813,9 @@ } }, "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", + "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", "dev": true }, "rgb-regex": { @@ -14010,7 +14826,7 @@ }, "rgba-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, @@ -14080,7 +14896,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -14103,9 +14919,9 @@ } }, "sauce-connect-launcher": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.6.tgz", - "integrity": "sha512-yBTYfzI6AWRwoXJoIqmVgz+eCpWX6CsJ4Ap8fowjsGlN+27OKbnQxv6POd4Rzh57BH9WeA9K8orIzNxO8mMBQA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.4.tgz", + "integrity": "sha512-X2vfwulR6brUGiicXKxPm1GJ7dBEeP1II450Uv4bHGrcGOapZNgzJvn9aioea5IC5BPp/7qjKdE3xbbTBIVXMA==", "dev": true, "requires": { "adm-zip": "~0.4.3", @@ -14191,7 +15007,7 @@ "dependencies": { "commander": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { @@ -14231,9 +15047,9 @@ } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, "semver-compare": { "version": "1.0.0", @@ -14295,30 +15111,12 @@ "ms": "2.0.0" } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -14351,35 +15149,11 @@ "ms": "2.0.0" } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true } } }, @@ -14457,14 +15231,14 @@ "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -14499,7 +15273,7 @@ }, "shasum": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", "dev": true, "requires": { @@ -14567,12 +15341,23 @@ } }, "simple-git": { - "version": "1.113.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.113.0.tgz", - "integrity": "sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g==", + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz", + "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==", "dev": true, "requires": { "debug": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "simple-swizzle": { @@ -14593,26 +15378,20 @@ } }, "sinon": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.3.2.tgz", - "integrity": "sha512-thErC1z64BeyGiPvF8aoSg0LEnptSaWE7YhdWWbWXgelOyThent7uKOnnEh9zBxDbKixtr5dEko+ws1sZMuFMA==", + "version": "7.2.7", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.7.tgz", + "integrity": "sha512-rlrre9F80pIQr3M36gOdoCEWzFAMDgHYD8+tocqOw+Zw9OZ8F84a80Ds69eZfcjnzDqqG88ulFld0oin/6rG/g==", "dev": true, "requires": { - "@sinonjs/commons": "^1.4.0", + "@sinonjs/commons": "^1.3.1", "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.1", + "@sinonjs/samsam": "^3.2.0", "diff": "^3.5.0", - "lolex": "^4.0.1", + "lolex": "^3.1.0", "nise": "^1.4.10", "supports-color": "^5.5.0" }, "dependencies": { - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -14758,12 +15537,6 @@ "kind-of": "^3.2.0" }, "dependencies": { - "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 - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -14817,6 +15590,12 @@ "yeast": "0.1.2" } }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -14934,6 +15713,12 @@ "ms": "2.0.0" } }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -15018,9 +15803,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -15057,20 +15842,6 @@ "spawn-command": "^0.0.2-1" } }, - "spawn-wrap": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", - "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -15098,9 +15869,9 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, "specificity": { @@ -15111,7 +15882,7 @@ }, "split": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "resolved": "http://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { @@ -15216,14 +15987,14 @@ }, "starts-with": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/starts-with/-/starts-with-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/starts-with/-/starts-with-1.0.2.tgz", "integrity": "sha1-Fnk6cp2J1M89T7LtovkIrjV/GW8=", "dev": true }, "state-toggle": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", - "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", + "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", "dev": true }, "static-eval": { @@ -15340,7 +16111,7 @@ }, "stream-combiner": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { @@ -15391,16 +16162,16 @@ } }, "streamroller": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz", - "integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.3.tgz", + "integrity": "sha512-P7z9NwP51EltdZ81otaGAN3ob+/F88USJE546joNq7bqRNTe6jc74fTBDyynxP4qpIfKlt/CesEYicuMzI0yJg==", "dev": true, "requires": { - "async": "^2.6.2", + "async": "^2.6.1", "date-format": "^2.0.0", - "debug": "^3.2.6", - "fs-extra": "^7.0.1", - "lodash": "^4.17.11" + "debug": "^3.1.0", + "fs-extra": "^7.0.0", + "lodash": "^4.17.10" }, "dependencies": { "async": { @@ -15411,15 +16182,6 @@ "requires": { "lodash": "^4.17.11" } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } } } }, @@ -15493,17 +16255,17 @@ } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" } } }, @@ -15539,7 +16301,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-indent": { @@ -15597,6 +16359,17 @@ "requires": { "commander": "^2.8.1", "debug": "^4.1.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "subarg": { @@ -15610,24 +16383,24 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "requires": { "has-flag": "^3.0.0" } }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", + "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -15637,7 +16410,7 @@ "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", "csso": "^3.5.1", - "js-yaml": "^3.13.1", + "js-yaml": "^3.12.0", "mkdirp": "~0.5.1", "object.values": "^1.1.0", "sax": "~1.2.4", @@ -15698,9 +16471,9 @@ } }, "synchronous-promise": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.7.tgz", - "integrity": "sha512-16GbgwTmFMYFyQMLvtQjvNWh30dsFe1cAW5Fg1wm5+dg84L9Pe36mftsIRU95/W2YsISxsz/xq4VB23sqpgb/A==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.6.tgz", + "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==", "dev": true }, "syntax-error": { @@ -15713,9 +16486,9 @@ } }, "table": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.3.3.tgz", - "integrity": "sha512-3wUNCgdWX6PNpOe3amTTPWPuF6VGvgzjKCaO1snFj0z7Y3mUPWf5+zDtxUVGispJkDECPmR29wbzh6bVMOHbcw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", "dev": true, "requires": { "ajv": "^6.9.1", @@ -15725,14 +16498,14 @@ }, "dependencies": { "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", + "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "strip-ansi": "^5.0.0" } } } @@ -15744,9 +16517,9 @@ "dev": true }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", "dev": true }, "tar": { @@ -15834,7 +16607,7 @@ "dependencies": { "bluebird": { "version": "2.9.34", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", + "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", "dev": true }, @@ -15875,140 +16648,62 @@ }, "term-size": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "strip-bom": { + "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -16095,7 +16790,7 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -16221,12 +16916,6 @@ "kind-of": "^3.0.2" }, "dependencies": { - "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 - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -16268,14 +16957,16 @@ "requires": { "is-buffer": "^2.0.0", "vfile": "^3.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + } } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, "token-stream": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", @@ -16347,15 +17038,15 @@ "dev": true }, "trim-trailing-lines": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", - "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", + "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", "dev": true }, "trough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", - "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", + "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", "dev": true }, "tslib": { @@ -16400,20 +17091,14 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true - }, "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -16423,9 +17108,9 @@ "dev": true }, "typescript": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", - "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz", + "integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==", "dev": true }, "typescript-eslint-parser": { @@ -16459,15 +17144,21 @@ "dev": true }, "uglify-js": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.12.tgz", - "integrity": "sha512-KeQesOpPiZNgVwJj8Ge3P4JYbQHUdZzpx6Fahy6eKAYRSV4zhVmLXoC+JtOeYxcHCHTve8RG1ZGdTvpeOUM26Q==", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "~2.20.0", + "commander": "~2.17.1", "source-map": "~0.6.1" }, "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -16530,6 +17221,23 @@ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, "underscore.string": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", @@ -16537,18 +17245,19 @@ "dev": true }, "unexpected": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/unexpected/-/unexpected-11.5.1.tgz", - "integrity": "sha512-Zqr5aRiH4cRtXtaWm7LyAR6dwpQXs4u9a+VrR11eNDGAXuE7qKy6rsMTKgk/CVzeDkSASn7T9MardgoJc1eDog==", + "version": "10.40.2", + "resolved": "https://registry.npmjs.org/unexpected/-/unexpected-10.40.2.tgz", + "integrity": "sha512-xwLScBxEnHiK8H8yLblQ6u3Uoammhpk+oCB/HWiNY6exMEwxenUR+eWIKderEXQPOlZkUEakBAKborGJqK6hZQ==", "dev": true, "requires": { "array-changes": "3.0.1", "array-changes-async": "3.0.1", + "babel-runtime": "6.26.0", "detect-indent": "3.0.1", - "diff": "4.0.1", + "diff": "1.1.0", "greedy-interval-packer": "1.2.0", "leven": "2.1.0", - "magicpen": "^6.0.2", + "magicpen": "5.12.0", "unexpected-bluebird": "2.9.34-longstack2" }, "dependencies": { @@ -16563,6 +17272,12 @@ "repeating": "^1.1.0" } }, + "diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.1.0.tgz", + "integrity": "sha1-eYpJOBqkZBUem08Ob/Kwmooa0j8=", + "dev": true + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -16593,15 +17308,15 @@ "dev": true }, "unexpected-sinon": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/unexpected-sinon/-/unexpected-sinon-10.11.2.tgz", - "integrity": "sha512-N2KIKPweTVs6AK8cDKQTUwu0fGWyGt+cI/UJZ/eltAyOKgsHL9eILttdGfpZjI/iMYcHcbtUwIlXoHfmh6EcBw==", + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/unexpected-sinon/-/unexpected-sinon-10.11.1.tgz", + "integrity": "sha512-2zSX7vsOYlljjS/3DeQolFzYgA22PmH0ncLCva+ve2AHHJBO0Xnxyt8ri1en1W5b7nRg5F7N6HNdflVNhI7dww==", "dev": true }, "unherit": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", - "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", + "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -16740,9 +17455,9 @@ } }, "unist-util-visit-parents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.0.tgz", - "integrity": "sha512-j0XZY3063E6v7qhx4+Q2Z0r8SMrLX7Mr6DabiCy67zMEcFQYtpNOplLlEK1KKEBEs9S+xB5U+yloQxbSwF9P/g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", + "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", "dev": true, "requires": { "unist-util-is": "^2.1.2" @@ -16809,12 +17524,6 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true } } }, @@ -16825,9 +17534,9 @@ "dev": true }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, "update-notifier": { @@ -16998,9 +17707,9 @@ } }, "vendors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", - "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", "dev": true }, "verror": { @@ -17024,6 +17733,20 @@ "replace-ext": "1.0.0", "unist-util-stringify-position": "^1.0.0", "vfile-message": "^1.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + } } }, "vfile-location": { @@ -17119,6 +17842,17 @@ "dev": true, "requires": { "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "whatwg-mimetype": { @@ -17212,23 +17946,43 @@ "dev": true }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" } } } @@ -17278,15 +18032,6 @@ "write-file-atomic": "^2.0.0" }, "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -17355,9 +18100,9 @@ "dev": true }, "xmlcreate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.1.tgz", - "integrity": "sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", "dev": true }, "xmldom": { @@ -17390,11 +18135,11 @@ "dev": true }, "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", + "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", "requires": { - "cliui": "^5.0.0", + "cliui": "^4.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "os-locale": "^3.1.0", @@ -17404,25 +18149,44 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" + "yargs-parser": "^13.0.0" }, "dependencies": { + "get-caller-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.1.tgz", + "integrity": "sha512-SpOZHfz845AH0wJYVuZk2jWDqFmu7Xubsx+ldIpwzy5pDUpu7OJHK7QYNSA2NPlDSKQwM1GFaAkciOWjjW92Sg==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", + "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "strip-ansi": "^5.0.0" + } + }, + "yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -17438,76 +18202,6 @@ "yargs": "^12.0.5" }, "dependencies": { - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "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", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", @@ -17525,15 +18219,17 @@ "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + }, + "dependencies": { + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } } } @@ -17555,16 +18251,16 @@ "dev": true }, "yup": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", - "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", + "version": "0.26.10", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz", + "integrity": "sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==", "dev": true, "requires": { - "@babel/runtime": "^7.0.0", + "@babel/runtime": "7.0.0", "fn-name": "~2.0.1", - "lodash": "^4.17.11", + "lodash": "^4.17.10", "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.6", + "synchronous-promise": "^2.0.5", "toposort": "^2.0.2" } } diff --git a/package-scripts.js b/package-scripts.js index 7a84e550b7..7febdc016f 100644 --- a/package-scripts.js +++ b/package-scripts.js @@ -137,7 +137,7 @@ module.exports = { script: test( 'requires', [ - '--require coffeescript/register', + '--require coffee-script/register', '--require test/require/a.js', '--require test/require/b.coffee', '--require test/require/c.js', diff --git a/package.json b/package.json index 272d5249b5..67f1aae4f0 100644 --- a/package.json +++ b/package.json @@ -504,13 +504,13 @@ "version": "nps version" }, "dependencies": { - "ansi-colors": "3.2.4", + "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", - "debug": "4.1.1", - "diff": "4.0.1", + "debug": "3.2.6", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", "find-up": "3.0.0", - "glob": "7.1.4", + "glob": "7.1.3", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.13.1", @@ -521,68 +521,68 @@ "node-environment-flags": "1.0.5", "object.assign": "4.1.0", "strip-json-comments": "2.0.1", - "supports-color": "6.1.0", + "supports-color": "6.0.0", "which": "1.3.1", "wide-align": "1.1.3", - "yargs": "13.2.4", - "yargs-parser": "13.1.0", + "yargs": "13.2.2", + "yargs-parser": "13.0.0", "yargs-unparser": "1.5.0" }, "devDependencies": { - "@11ty/eleventy": "^0.8.3", + "@11ty/eleventy": "^0.7.1", "@mocha/contributors": "^1.0.3", "@mocha/docdash": "^2.1.0", - "assetgraph-builder": "^6.10.1", - "autoprefixer": "^9.5.1", + "assetgraph-builder": "^6.10.0", + "autoprefixer": "^9.4.10", "browserify": "^16.2.3", "browserify-package-json": "^1.0.1", "chai": "^4.2.0", - "coffeescript": "^2.4.1", + "coffee-script": "^1.12.7", "coveralls": "^3.0.3", "cross-env": "^5.2.0", "cross-spawn": "^6.0.5", - "eslint": "^5.16.0", - "eslint-config-prettier": "^4.2.0", + "eslint": "^5.15.0", + "eslint-config-prettier": "^3.6.0", "eslint-config-semistandard": "^13.0.0", "eslint-config-standard": "^12.0.0", - "eslint-plugin-import": "^2.17.2", - "eslint-plugin-node": "^9.0.1", - "eslint-plugin-prettier": "^3.1.0", - "eslint-plugin-promise": "^4.1.1", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-node": "^8.0.1", + "eslint-plugin-prettier": "^3.0.1", + "eslint-plugin-promise": "^4.0.1", "eslint-plugin-standard": "^4.0.0", - "husky": "^2.3.0", - "jsdoc": "^3.6.2", - "karma": "^4.1.0", + "husky": "^1.3.1", + "jsdoc": "^3.5.5", + "karma": "^4.0.1", "karma-browserify": "^6.0.0", "karma-chrome-launcher": "^2.2.0", "karma-mocha": "^1.3.0", "karma-mocha-reporter": "^2.2.5", "karma-sauce-launcher": "^2.0.2", - "lint-staged": "^8.1.6", + "lint-staged": "^8.1.5", "markdown-it": "^8.4.2", "markdown-it-anchor": "^5.0.2", - "markdown-it-attrs": "^2.3.4", + "markdown-it-attrs": "^2.3.2", "markdown-it-prism": "^2.0.1", "markdown-magic": "^0.1.25", "markdown-magic-package-json": "^2.0.0", "markdown-toc": "^1.2.0", - "markdownlint-cli": "^0.16.0", - "nps": "^5.9.5", - "nyc": "^14.1.1", - "prettier": "^1.17.1", + "markdownlint-cli": "^0.14.1", + "nps": "^5.9.4", + "nyc": "^13.3.0", + "prettier": "^1.16.4", "remark": "^10.0.1", "remark-github": "^7.0.6", "remark-inline-links": "^3.1.2", - "rewiremock": "^3.13.7", + "rewiremock": "^3.13.0", "rimraf": "^2.6.3", - "sinon": "^7.3.2", - "strip-ansi": "^5.2.0", - "svgo": "^1.2.2", + "sinon": "^7.2.7", + "strip-ansi": "^5.0.0", + "svgo": "^1.2.0", "through2": "^3.0.1", "to-vfile": "^5.0.2", - "unexpected": "^11.5.1", + "unexpected": "^10.40.2", "unexpected-eventemitter": "^1.1.3", - "unexpected-sinon": "^10.11.2", + "unexpected-sinon": "^10.11.1", "uslug": "^1.0.4", "watchify": "^3.11.1" }, diff --git a/test/integration/compiler-globbing.spec.js b/test/integration/compiler-globbing.spec.js index f245f4ab91..20ea050e4d 100644 --- a/test/integration/compiler-globbing.spec.js +++ b/test/integration/compiler-globbing.spec.js @@ -10,7 +10,7 @@ describe('globbing like --compilers', function() { process.execPath + '" "' + path.join('bin', 'mocha') + - '" -R json --require coffeescript/register --require test/compiler-fixtures/foo.fixture "test/compiler/*.@(coffee|foo)"', + '" -R json --require coffee-script/register --require test/compiler-fixtures/foo.fixture "test/compiler/*.@(coffee|foo)"', {cwd: path.join(__dirname, '..', '..')}, function(error, stdout) { if (error && !stdout) { diff --git a/test/integration/options/compilers.spec.js b/test/integration/options/compilers.spec.js index ea4826ccda..99fa79a7f5 100644 --- a/test/integration/options/compilers.spec.js +++ b/test/integration/options/compilers.spec.js @@ -6,7 +6,7 @@ var invokeMocha = helpers.invokeMocha; describe('--compilers', function() { it('should report deprecation', function(done) { invokeMocha( - ['--compilers', 'coffee:coffeescript/register'], + ['--compilers', 'coffee:coffee-script/register'], function(err, res) { if (err) { return done(err); diff --git a/test/integration/options/extension.spec.js b/test/integration/options/extension.spec.js index d07ab129fe..760e3bcd88 100644 --- a/test/integration/options/extension.spec.js +++ b/test/integration/options/extension.spec.js @@ -8,7 +8,7 @@ describe('--extension', function() { it('should allow comma-separated variables', function(done) { var args = [ '--require', - 'coffeescript/register', + 'coffee-script/register', '--require', './test/setup', '--reporter', From 8f2a35d8975dce56c7c534df0bc374a1dd9d8f62 Mon Sep 17 00:00:00 2001 From: Christopher Hiller Date: Tue, 12 Mar 2019 11:57:53 -0700 Subject: [PATCH 018/441] fix timeout/slow string values and duplicate arguments --- lib/cli/run-option-metadata.js | 4 +- lib/cli/run.js | 7 +++ test/integration/duplicate-arguments.spec.js | 36 +++++++++++++ .../fixtures/options/slow-test.fixture.js | 11 ++++ .../fixtures/passing-async.fixture.js | 7 +++ .../fixtures/passing-sync.fixture.js | 6 +++ test/integration/invalid-arguments.spec.js | 28 +++++----- test/integration/options/timeout.spec.js | 52 +++++++++++++++++++ test/node-unit/cli/options.spec.js | 4 +- 9 files changed, 138 insertions(+), 17 deletions(-) create mode 100644 test/integration/duplicate-arguments.spec.js create mode 100644 test/integration/fixtures/options/slow-test.fixture.js create mode 100644 test/integration/fixtures/passing-async.fixture.js create mode 100644 test/integration/fixtures/passing-sync.fixture.js create mode 100644 test/integration/options/timeout.spec.js diff --git a/lib/cli/run-option-metadata.js b/lib/cli/run-option-metadata.js index e10e008fa6..f19bd57788 100644 --- a/lib/cli/run-option-metadata.js +++ b/lib/cli/run-option-metadata.js @@ -44,8 +44,8 @@ exports.types = { 'sort', 'watch' ], - number: ['retries', 'slow', 'timeout'], - string: ['fgrep', 'grep', 'package', 'reporter', 'ui'] + number: ['retries'], + string: ['fgrep', 'grep', 'package', 'reporter', 'ui', 'slow', 'timeout'] }; /** diff --git a/lib/cli/run.js b/lib/cli/run.js index da5ffd7b6a..0541ec6a83 100644 --- a/lib/cli/run.js +++ b/lib/cli/run.js @@ -258,6 +258,13 @@ exports.builder = yargs => } }); + types.boolean + .concat(types.string, types.number) + .filter(opt => Array.isArray(argv[opt])) + .forEach(opt => { + argv[opt] = argv[opt].pop(); + }); + // yargs.implies() isn't flexible enough to handle this if (argv.invert && !('fgrep' in argv || 'grep' in argv)) { throw createMissingArgumentError( diff --git a/test/integration/duplicate-arguments.spec.js b/test/integration/duplicate-arguments.spec.js new file mode 100644 index 0000000000..28fd225d9b --- /dev/null +++ b/test/integration/duplicate-arguments.spec.js @@ -0,0 +1,36 @@ +'use strict'; + +var runMocha = require('./helpers').runMocha; + +describe('when non-array argument is provided multiple times', function() { + describe('when the same argument name is used', function() { + it('should prefer the last value', function(done) { + runMocha( + 'passing-sync', + ['--no-async-only', '--async-only', '--no-async-only'], + function(err, result) { + if (err) { + return done(err); + } + expect(result, 'to have passed'); + done(); + } + ); + }); + }); + + describe('when a different argument name is used', function() { + it('should prefer the last value', function(done) { + runMocha('passing-async', ['--timeout', '100', '-t', '10'], function( + err, + result + ) { + if (err) { + return done(err); + } + expect(result, 'to have failed'); + done(); + }); + }); + }); +}); diff --git a/test/integration/fixtures/options/slow-test.fixture.js b/test/integration/fixtures/options/slow-test.fixture.js new file mode 100644 index 0000000000..f15cb6d9dd --- /dev/null +++ b/test/integration/fixtures/options/slow-test.fixture.js @@ -0,0 +1,11 @@ +'use strict'; + +describe('a suite', function() { + it('should succeed in 500ms', function(done) { + setTimeout(done, 500); + }); + + it('should succeed in 1.5s', function(done) { + setTimeout(done, 1500); + }); +}); diff --git a/test/integration/fixtures/passing-async.fixture.js b/test/integration/fixtures/passing-async.fixture.js new file mode 100644 index 0000000000..24db0b98d0 --- /dev/null +++ b/test/integration/fixtures/passing-async.fixture.js @@ -0,0 +1,7 @@ +'use strict'; + +describe('a suite', function() { + it('should succeed in 50ms', function(done) { + setTimeout(done, 50); + }); +}); diff --git a/test/integration/fixtures/passing-sync.fixture.js b/test/integration/fixtures/passing-sync.fixture.js new file mode 100644 index 0000000000..6087ebcbd4 --- /dev/null +++ b/test/integration/fixtures/passing-sync.fixture.js @@ -0,0 +1,6 @@ +'use strict'; + +describe('a suite', function() { + it('should succeed', function() { + }); +}); diff --git a/test/integration/invalid-arguments.spec.js b/test/integration/invalid-arguments.spec.js index 6c147bdb48..e1eabf20ae 100644 --- a/test/integration/invalid-arguments.spec.js +++ b/test/integration/invalid-arguments.spec.js @@ -3,18 +3,20 @@ var invokeMocha = require('./helpers').invokeMocha; describe('invalid arguments', function() { - it('should exit with failure if arguments are invalid', function(done) { - invokeMocha( - ['--ui'], - function(err, result) { - if (err) { - return done(err); - } - expect(result, 'to have failed'); - expect(result.output, 'to match', /not enough arguments/i); - done(); - }, - {stdio: 'pipe'} - ); + describe('when argument is missing required value', function() { + it('should exit with failure', function(done) { + invokeMocha( + ['--ui'], + function(err, result) { + if (err) { + return done(err); + } + expect(result, 'to have failed'); + expect(result.output, 'to match', /not enough arguments/i); + done(); + }, + {stdio: 'pipe'} + ); + }); }); }); diff --git a/test/integration/options/timeout.spec.js b/test/integration/options/timeout.spec.js new file mode 100644 index 0000000000..ac786da54d --- /dev/null +++ b/test/integration/options/timeout.spec.js @@ -0,0 +1,52 @@ +'use strict'; + +var helpers = require('../helpers'); +var runMochaJSON = helpers.runMochaJSON; + +describe('--timeout', function() { + it('should allow human-readable string value', function(done) { + runMochaJSON('options/slow-test', ['--timeout', '1s'], function(err, res) { + if (err) { + done(err); + return; + } + expect(res, 'to have failed') + .and('to have passed test count', 1) + .and('to have failed test count', 1); + done(); + }); + }); + + it('should allow numeric value', function(done) { + runMochaJSON('options/slow-test', ['--timeout', '1000'], function( + err, + res + ) { + if (err) { + done(err); + return; + } + expect(res, 'to have failed') + .and('to have passed test count', 1) + .and('to have failed test count', 1); + done(); + }); + }); + + it('should allow multiple values', function(done) { + var fixture = 'options/slow-test'; + runMochaJSON(fixture, ['--timeout', '2s', '--timeout', '1000'], function( + err, + res + ) { + if (err) { + done(err); + return; + } + expect(res, 'to have failed') + .and('to have passed test count', 1) + .and('to have failed test count', 1); + done(); + }); + }); +}); diff --git a/test/node-unit/cli/options.spec.js b/test/node-unit/cli/options.spec.js index 62a63f9fd6..2e1e4aa09d 100644 --- a/test/node-unit/cli/options.spec.js +++ b/test/node-unit/cli/options.spec.js @@ -629,7 +629,7 @@ describe('options', function() { findupSync }); - expect(loadOptions(), 'to satisfy', {timeout: 800, require: ['foo']}); + expect(loadOptions(), 'to satisfy', {timeout: '800', require: ['foo']}); }); it('should prioritize package.json over mocha.opts', function() { @@ -692,7 +692,7 @@ describe('options', function() { loadOptions('--timeout 500'), 'to have property', 'timeout', - 500 + '500' ); }); }); From ffe1967c8d2a3ec4503c3fa9d24beeb62beefaa3 Mon Sep 17 00:00:00 2001 From: juergba Date: Thu, 2 May 2019 19:54:21 +0200 Subject: [PATCH 019/441] coerce function for boolean/string/number types --- lib/cli/options.js | 21 ++++++++++++++++----- lib/cli/run-option-metadata.js | 12 +++++++++++- lib/cli/run.js | 7 ------- test/node-unit/cli/options.spec.js | 8 ++++---- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/lib/cli/options.js b/lib/cli/options.js index 340fb01e86..fcc619a9b3 100644 --- a/lib/cli/options.js +++ b/lib/cli/options.js @@ -54,15 +54,26 @@ const configuration = Object.assign({}, YARGS_PARSER_CONFIG, { }); /** - * This is a really fancy way to ensure unique values for `array`-type - * options. + * This is a really fancy way to: + * - ensure unique values for `array`-type options + * - use its array's last element for `boolean`/`number`/`string`- options given multiple times * This is passed as the `coerce` option to `yargs-parser` * @private * @ignore */ -const coerceOpts = types.array.reduce( - (acc, arg) => Object.assign(acc, {[arg]: v => Array.from(new Set(list(v)))}), - {} +const coerceOpts = Object.assign( + types.array.reduce( + (acc, arg) => + Object.assign(acc, {[arg]: v => Array.from(new Set(list(v)))}), + {} + ), + types.boolean + .concat(types.string, types.number) + .reduce( + (acc, arg) => + Object.assign(acc, {[arg]: v => (Array.isArray(v) ? v.pop() : v)}), + {} + ) ); /** diff --git a/lib/cli/run-option-metadata.js b/lib/cli/run-option-metadata.js index f19bd57788..fbc4ea9072 100644 --- a/lib/cli/run-option-metadata.js +++ b/lib/cli/run-option-metadata.js @@ -45,7 +45,17 @@ exports.types = { 'watch' ], number: ['retries'], - string: ['fgrep', 'grep', 'package', 'reporter', 'ui', 'slow', 'timeout'] + string: [ + 'config', + 'fgrep', + 'grep', + 'opts', + 'package', + 'reporter', + 'ui', + 'slow', + 'timeout' + ] }; /** diff --git a/lib/cli/run.js b/lib/cli/run.js index 0541ec6a83..da5ffd7b6a 100644 --- a/lib/cli/run.js +++ b/lib/cli/run.js @@ -258,13 +258,6 @@ exports.builder = yargs => } }); - types.boolean - .concat(types.string, types.number) - .filter(opt => Array.isArray(argv[opt])) - .forEach(opt => { - argv[opt] = argv[opt].pop(); - }); - // yargs.implies() isn't flexible enough to handle this if (argv.invert && !('fgrep' in argv || 'grep' in argv)) { throw createMissingArgumentError( diff --git a/test/node-unit/cli/options.spec.js b/test/node-unit/cli/options.spec.js index 2e1e4aa09d..3c39cc7f09 100644 --- a/test/node-unit/cli/options.spec.js +++ b/test/node-unit/cli/options.spec.js @@ -86,7 +86,7 @@ describe('options', function() { config: false, opts: false, package: false, - retries: 3 + retries: '3' }) ); }); @@ -202,7 +202,7 @@ describe('options', function() { config: false, opts: false, package: false, - retries: 3 + retries: '3' } ) ); @@ -427,7 +427,7 @@ describe('options', function() { config: false, opts: false, package: false, - retries: 3 + retries: '3' }) ); }); @@ -476,7 +476,7 @@ describe('options', function() { config: false, opts: false, package: false, - retries: 3 + retries: '3' }) ); }); From 750c5f81625f4f67d0d3a4602e344dac8663ee07 Mon Sep 17 00:00:00 2001 From: Juerg B <44573692+juergba@users.noreply.github.com> Date: Fri, 17 May 2019 15:39:33 +0200 Subject: [PATCH 020/441] Fix regression/bug in "lookupFiles()" (#3905) --- lib/utils.js | 37 ++++++++++++++++------------- test/integration/file-utils.spec.js | 28 ++++++++++++++++++++++ 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/lib/utils.js b/lib/utils.js index 93005cedf2..013d3ffe0a 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -563,33 +563,38 @@ function isHiddenOnUnix(pathname) { * @public * @memberof Mocha.utils * @param {string} filepath - Base path to start searching from. - * @param {string[]} extensions - File extensions to look for. - * @param {boolean} recursive - Whether to recurse into subdirectories. + * @param {string[]} [extensions=[]] - File extensions to look for. + * @param {boolean} [recursive=false] - Whether to recurse into subdirectories. * @return {string[]} An array of paths. * @throws {Error} if no files match pattern. * @throws {TypeError} if `filepath` is directory and `extensions` not provided. */ exports.lookupFiles = function lookupFiles(filepath, extensions, recursive) { extensions = extensions || []; + recursive = recursive || false; var files = []; var stat; if (!fs.existsSync(filepath)) { - // check all extensions - extensions.forEach(function(ext) { - if (fs.existsSync(filepath + '.' + ext)) { - files.push(filepath + '.' + ext); - } - }); + var pattern; + if (glob.hasMagic(filepath)) { + // Handle glob as is without extensions + pattern = filepath; + } else { + // glob pattern e.g. 'filepath+(.js|.ts)' + var strExtensions = extensions + .map(function(v) { + return '.' + v; + }) + .join('|'); + pattern = filepath + '+(' + strExtensions + ')'; + } + files = glob.sync(pattern, {nodir: true}); if (!files.length) { - // Handle glob - files = glob.sync(filepath); - if (!files.length) { - throw createNoFilesMatchPatternError( - 'Cannot find any files matching pattern ' + exports.dQuote(filepath), - filepath - ); - } + throw createNoFilesMatchPatternError( + 'Cannot find any files matching pattern ' + exports.dQuote(filepath), + filepath + ); } return files; } diff --git a/test/integration/file-utils.spec.js b/test/integration/file-utils.spec.js index f09018871b..ae97b996e2 100644 --- a/test/integration/file-utils.spec.js +++ b/test/integration/file-utils.spec.js @@ -66,6 +66,34 @@ describe('file utils', function() { expect(res, 'to contain', nonJsFile).and('to have length', 1); }); + it('should return only the ".js" file', function() { + var TsFile = tmpFile('mocha-utils.ts'); + fs.writeFileSync(TsFile, 'yippy skippy ying yang yow'); + + var res = utils + .lookupFiles(tmpFile('mocha-utils'), ['js'], false) + .map(path.normalize.bind(path)); + expect(res, 'to contain', tmpFile('mocha-utils.js')).and( + 'to have length', + 1 + ); + }); + + it('should return ".js" and ".ts" files', function() { + var TsFile = tmpFile('mocha-utils.ts'); + fs.writeFileSync(TsFile, 'yippy skippy ying yang yow'); + + var res = utils + .lookupFiles(tmpFile('mocha-utils'), ['js', 'ts'], false) + .map(path.normalize.bind(path)); + expect( + res, + 'to contain', + tmpFile('mocha-utils.js'), + tmpFile('mocha-utils.ts') + ).and('to have length', 2); + }); + it('should require the extensions parameter when looking up a file', function() { var dirLookup = function() { return utils.lookupFiles(tmpFile('mocha-utils'), undefined, false); From a7581542c879722986afecaa578e3734be3045ed Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Tue, 14 May 2019 17:38:51 +0200 Subject: [PATCH 021/441] Extend tests for `--watch` options This commit adds two test cases to test the `--watch` option. We check that touching a test file reruns the tests and we test that touching a file that has a correct extensions reruns the test. This commit adds `fs-extra` as a new dev dependency. --- .eslintrc.yml | 2 + package-lock.json | 46 +++++- package.json | 1 + test/integration/helpers.js | 41 +++--- test/integration/options/watch.spec.js | 189 ++++++++++++++++++++----- 5 files changed, 222 insertions(+), 57 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 3fe7399ed0..f696b45ca8 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -25,6 +25,8 @@ overrides: - bin/* - lib/cli/**/*.js - test/node-unit/**/*.js + - test/integration/options/watch.spec.js + - test/integration/helpers.js - lib/growl.js parserOptions: ecmaVersion: 6 diff --git a/package-lock.json b/package-lock.json index 2aeadf2b21..359f0ee697 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,6 +52,26 @@ "ms": "^2.1.1" } }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -6051,9 +6071,9 @@ "dev": true }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.0.1.tgz", + "integrity": "sha512-W+XLrggcDzlle47X/XnS7FXrXu9sDo+Ze9zpndeBxdgv88FHLm1HtmkhEwavruS6koanBjp098rUpHs65EmG7A==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -16182,6 +16202,26 @@ "requires": { "lodash": "^4.17.11" } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } } } }, diff --git a/package.json b/package.json index 67f1aae4f0..b8fc469780 100644 --- a/package.json +++ b/package.json @@ -550,6 +550,7 @@ "eslint-plugin-prettier": "^3.0.1", "eslint-plugin-promise": "^4.0.1", "eslint-plugin-standard": "^4.0.0", + "fs-extra": "^8.0.1", "husky": "^1.3.1", "jsdoc": "^3.5.5", "karma": "^4.0.1", diff --git a/test/integration/helpers.js b/test/integration/helpers.js index b774bb7890..a705a2fe9b 100644 --- a/test/integration/helpers.js +++ b/test/integration/helpers.js @@ -114,32 +114,37 @@ module.exports = { ); }, /** - * Invokes the mocha binary for the given fixture using the JSON reporter, - * returning the **raw** string output, as well as exit code. + * Invokes the mocha binary with the given arguments fixture using + * the JSON reporter. Returns the child process and a promise for the + * results of running the command. The result includes the **raw** + * string output, as well as exit code. * * By default, `STDERR` is ignored. Pass `{stdio: 'pipe'}` as `opts` if you - * want it. - * @param {string} fixturePath - Path from __dirname__ + * want it as part of the result output. + * * @param {string[]} args - Array of args - * @param {Function} fn - Callback * @param {Object} [opts] - Opts for `spawn()` - * @returns {string} Raw output + * @returns {[ChildProcess|Promise]} */ - runMochaJSONRaw: function(fixturePath, args, fn, opts) { - var path; - - path = resolveFixturePath(fixturePath); + runMochaJSONRawAsync: function(args, opts) { args = args || []; - return invokeSubMocha( - args.concat(['--reporter', 'json', path]), - function(err, resRaw) { - if (err) return fn(err); + let childProcess; + const resultPromise = new Promise((resolve, reject) => { + childProcess = invokeSubMocha( + [...args, '--reporter', 'json'], + function(err, resRaw) { + if (err) { + reject(err); + } else { + resolve(resRaw); + } + }, + opts + ); + }); - fn(null, resRaw); - }, - opts - ); + return [childProcess, resultPromise]; }, /** diff --git a/test/integration/options/watch.spec.js b/test/integration/options/watch.spec.js index 1df65fa342..1fb187a1e7 100644 --- a/test/integration/options/watch.spec.js +++ b/test/integration/options/watch.spec.js @@ -1,56 +1,173 @@ 'use strict'; -var helpers = require('../helpers'); -var runMochaJSONRaw = helpers.runMochaJSONRaw; +const fs = require('fs-extra'); +const os = require('os'); +const path = require('path'); +const helpers = require('../helpers'); +const runMochaJSONRawAsync = helpers.runMochaJSONRawAsync; + +const sigintExitCode = 130; describe('--watch', function() { - var args = []; + describe('when enabled', function() { + this.timeout(10 * 1000); + this.slow(3000); - before(function() { - args = ['--watch']; - }); + beforeEach(function() { + this.tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'mocha-')); - describe('when enabled', function() { - before(function() { + const fixtureSource = helpers.DEFAULT_FIXTURE; + + this.testFile = path.join(this.tempDir, 'test.js'); + fs.copySync(fixtureSource, this.testFile); + }); + + afterEach(function() { + if (this.tempDir) { + return fs.remove(this.tempDir); + } + }); + + it('should show the cursor and signal correct exit code, when watch process is terminated', function() { // Feature works but SIMULATING the signal (ctrl+c) via child process // does not work due to lack of POSIX signal compliance on Windows. if (process.platform === 'win32') { this.skip(); } - }); - it('should show the cursor and signal correct exit code, when watch process is terminated', function(done) { - this.timeout(0); - this.slow(3000); - - var fixture = 'exit.fixture.js'; - var spawnOpts = {stdio: 'pipe'}; - var mocha = runMochaJSONRaw( - fixture, - args, - function postmortem(err, data) { - if (err) { - return done(err); - } - - var expectedCloseCursor = '\u001b[?25h'; + const [mocha, resultPromise] = runMochaJSONRawAsync([ + helpers.DEFAULT_FIXTURE, + '--watch' + ]); + + return sleep(1000) + .then(() => { + mocha.kill('SIGINT'); + return resultPromise; + }) + .then(data => { + const expectedCloseCursor = '\u001b[?25h'; expect(data.output, 'to contain', expectedCloseCursor); - function exitStatusBySignal(sig) { - return 128 + sig; - } + expect(data.code, 'to be', sigintExitCode); + }); + }); + + it('reruns test when watched test file is touched', function() { + const [mocha, outputPromise] = runMochaJSONWatchAsync([this.testFile], { + cwd: this.tempDir + }); - var sigint = 2; - expect(data.code, 'to be', exitStatusBySignal(sigint)); - done(); - }, - spawnOpts + return expect( + sleep(1000) + .then(() => { + touchFile(this.testFile); + return sleep(1000); + }) + .then(() => { + mocha.kill('SIGINT'); + return outputPromise; + }), + 'when fulfilled', + 'to have length', + 2 ); + }); - setTimeout(function() { - // Kill the child process - mocha.kill('SIGINT'); - }, 1000); + it('reruns test when file matching extension is touched', function() { + const watchedFile = path.join(this.tempDir, 'file.xyz'); + touchFile(watchedFile); + const [mocha, outputPromise] = runMochaJSONWatchAsync( + [this.testFile, '--extension', 'xyz,js'], + { + cwd: this.tempDir + } + ); + + return expect( + sleep(1000) + .then(() => { + touchFile(watchedFile); + return sleep(1000); + }) + .then(() => { + mocha.kill('SIGINT'); + return outputPromise; + }), + 'when fulfilled', + 'to have length', + 2 + ); + }); + + it('ignores files in "node_modules" and ".git"', function() { + const nodeModulesFile = path.join( + this.tempDir, + 'node_modules', + 'file.xyz' + ); + const gitFile = path.join(this.tempDir, '.git', 'file.xyz'); + + touchFile(gitFile); + touchFile(nodeModulesFile); + + const [mocha, outputPromise] = runMochaJSONWatchAsync( + [this.testFile, '--extension', 'xyz,js'], + { + cwd: this.tempDir + } + ); + + return expect( + sleep(1000) + .then(() => { + touchFile(gitFile); + touchFile(nodeModulesFile); + }) + .then(() => sleep(1000)) + .then(() => { + mocha.kill('SIGINT'); + return outputPromise; + }), + 'when fulfilled', + 'to have length', + 1 + ); }); }); }); + +/** + * Invokes the mocha binary with the `--watch` argument for the given fixture. + * + * Returns child process and a promise for the test results. The test results + * are an array of JSON objects generated by the JSON reporter. + */ +function runMochaJSONWatchAsync(args, spawnOpts) { + args = [...args, '--watch']; + const [mocha, mochaDone] = runMochaJSONRawAsync(args, spawnOpts); + const testResults = mochaDone.then(data => { + const testResults = data.output + // eslint-disable-next-line no-control-regex + .replace(/\u001b\[\?25./g, '') + .split('\u001b[2K') + .map(x => JSON.parse(x)); + return testResults; + }); + return [mocha, testResults]; +} + +/** + * Synchronously touch a file by appending a space to the end. Creates + * the file and all its parent directories if necessary. + */ +function touchFile(file) { + fs.ensureDirSync(path.dirname(file)); + fs.appendFileSync(file, ' '); +} + +function sleep(time) { + return new Promise(resolve => { + setTimeout(resolve, time); + }); +} From 29b7615148b383f4b177ecd21c917bad6f621561 Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Sat, 25 May 2019 07:10:29 +0200 Subject: [PATCH 022/441] Extract `runWatch` into separate module (#3930) Also remove default values from `runWatch` they are already set by `runMocha`. --- lib/cli/run-helpers.js | 103 ++------------------------------------- lib/cli/watch-run.js | 107 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 99 deletions(-) create mode 100644 lib/cli/watch-run.js diff --git a/lib/cli/run-helpers.js b/lib/cli/run-helpers.js index 0858d61b03..a3848598f9 100644 --- a/lib/cli/run-helpers.js +++ b/lib/cli/run-helpers.js @@ -12,12 +12,13 @@ const path = require('path'); const ansi = require('ansi-colors'); const debug = require('debug')('mocha:cli:run:helpers'); const minimatch = require('minimatch'); -const Context = require('../context'); -const Mocha = require('../mocha'); const utils = require('../utils'); +const watchRun = require('./watch-run'); const cwd = (exports.cwd = process.cwd()); +exports.watchRun = watchRun; + /** * Exits Mocha when tests + code under test has finished execution (default) * @param {number} code - Exit code; typically # of failures @@ -65,32 +66,6 @@ const exitMocha = code => { done(); }; -/** - * Hide the cursor. - * @ignore - * @private - */ -const hideCursor = () => { - process.stdout.write('\u001b[?25l'); -}; - -/** - * Show the cursor. - * @ignore - * @private - */ -const showCursor = () => { - process.stdout.write('\u001b[?25h'); -}; - -/** - * Stop cursor business - * @private - */ -const stop = () => { - process.stdout.write('\u001b[2K'); -}; - /** * Coerce a comma-delimited string (or array thereof) into a flattened array of * strings @@ -207,76 +182,6 @@ exports.singleRun = (mocha, {files = [], exit = false} = {}) => { return mocha.run(exit ? exitMocha : exitMochaLater); }; -/** - * Run Mocha in "watch" mode - * @param {Mocha} mocha - Mocha instance - * @param {Object} [opts] - Options - * @param {string[]} [opts.extension] - List of extensions to watch - * @param {string|RegExp} [opts.grep] - Grep for test titles - * @param {string} [opts.ui=bdd] - User interface - * @param {string[]} [files] - Array of test files - * @private - */ -exports.watchRun = ( - mocha, - {extension = [], grep = '', ui = 'bdd', files = []} = {} -) => { - let runner; - - console.log(); - hideCursor(); - process.on('SIGINT', () => { - showCursor(); - console.log('\n'); - process.exit(130); - }); - - const watchFiles = utils.files(cwd, extension); - let runAgain = false; - - const loadAndRun = () => { - try { - mocha.files = files; - runAgain = false; - runner = mocha.run(() => { - runner = null; - if (runAgain) { - rerun(); - } - }); - } catch (e) { - console.log(e.stack); - } - }; - - const purge = () => { - watchFiles.forEach(Mocha.unloadFile); - }; - - loadAndRun(); - - const rerun = () => { - purge(); - stop(); - if (!grep) { - mocha.grep(null); - } - mocha.suite = mocha.suite.clone(); - mocha.suite.ctx = new Context(); - mocha.ui(ui); - loadAndRun(); - }; - - utils.watch(watchFiles, () => { - runAgain = true; - if (runner) { - runner.abort(); - } else { - rerun(); - } - }); -}; - /** * Actually run tests * @param {Mocha} mocha - Mocha instance @@ -295,7 +200,7 @@ exports.runMocha = ( files = [] ) => { if (watch) { - exports.watchRun(mocha, {extension, grep, ui, files}); + watchRun(mocha, {extension, grep, ui, files}); } else { exports.singleRun(mocha, {files, exit}); } diff --git a/lib/cli/watch-run.js b/lib/cli/watch-run.js new file mode 100644 index 0000000000..54765b7cf7 --- /dev/null +++ b/lib/cli/watch-run.js @@ -0,0 +1,107 @@ +'use strict'; + +const utils = require('../utils'); +const Context = require('../context'); +const Mocha = require('../mocha'); + +/** + * Exports the `watchRun` function that runs mocha in "watch" mode. + * @see module:lib/cli/run-helpers + * @module + * @private + */ + +/** + * Run Mocha in "watch" mode + * @param {Mocha} mocha - Mocha instance + * @param {Object} opts - Options + * @param {string[]} opts.extension - List of extensions to watch + * @param {string|RegExp} opts.grep - Grep for test titles + * @param {string} opts.ui - User interface + * @param {string[]} opts.files - Array of test files + * @private + */ +module.exports = (mocha, {extension, grep, ui, files}) => { + let runner; + + console.log(); + hideCursor(); + process.on('SIGINT', () => { + showCursor(); + console.log('\n'); + // By UNIX/Posix convention this indicates that the process was + // killed by SIGINT which has portable number 2. + process.exit(128 + 2); + }); + + const watchFiles = utils.files(process.cwd(), extension); + let runAgain = false; + + const loadAndRun = () => { + try { + mocha.files = files; + runAgain = false; + runner = mocha.run(() => { + runner = null; + if (runAgain) { + rerun(); + } + }); + } catch (e) { + console.log(e.stack); + } + }; + + const purge = () => { + watchFiles.forEach(Mocha.unloadFile); + }; + + loadAndRun(); + + const rerun = () => { + purge(); + eraseLine(); + if (!grep) { + mocha.grep(null); + } + mocha.suite = mocha.suite.clone(); + mocha.suite.ctx = new Context(); + mocha.ui(ui); + loadAndRun(); + }; + + utils.watch(watchFiles, () => { + runAgain = true; + if (runner) { + runner.abort(); + } else { + rerun(); + } + }); +}; + +/** + * Hide the cursor. + * @ignore + * @private + */ +const hideCursor = () => { + process.stdout.write('\u001b[?25l'); +}; + +/** + * Show the cursor. + * @ignore + * @private + */ +const showCursor = () => { + process.stdout.write('\u001b[?25h'); +}; + +/** + * Erases the line on stdout + * @private + */ +const eraseLine = () => { + process.stdout.write('\u001b[2K'); +}; From f3ed729b6908f3893e6f87722c6e996cca5f7733 Mon Sep 17 00:00:00 2001 From: Brian Lagerman <49239617+brian-lagerman@users.noreply.github.com> Date: Mon, 3 Jun 2019 15:50:05 +0200 Subject: [PATCH 023/441] Add mocha.min.js file to stacktrace filter (#3922) --- lib/utils.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/utils.js b/lib/utils.js index 013d3ffe0a..996e843507 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -723,7 +723,8 @@ exports.stackTraceFilter = function() { function isMochaInternal(line) { return ( ~line.indexOf('node_modules' + slash + 'mocha' + slash) || - ~line.indexOf(slash + 'mocha.js') + ~line.indexOf(slash + 'mocha.js') || + ~line.indexOf(slash + 'mocha.min.js') ); } From ca861d495885ca6f4b34998fcfeca85ed095a934 Mon Sep 17 00:00:00 2001 From: Christopher Hiller Date: Wed, 5 Jun 2019 11:38:29 -0700 Subject: [PATCH 024/441] ugprades for npm audit --- package-lock.json | 3148 +++++++++++++++++++-------------------------- package.json | 44 +- 2 files changed, 1339 insertions(+), 1853 deletions(-) diff --git a/package-lock.json b/package-lock.json index 359f0ee697..91e3c92f92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,44 +5,65 @@ "requires": true, "dependencies": { "@11ty/eleventy": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.7.1.tgz", - "integrity": "sha512-tG5L9f2JcwLcoG6XnR8EOYMJWZIw7Gl33BDVct9dRh+upAL5qMPfwgPMN6kKdaMQ9ki42EBHKmLLAVRcyCk1yg==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.8.3.tgz", + "integrity": "sha512-TehjvEuVQaocz3R/rYMJdujg8a2SL4Wt+ZUPKfXZS926Wd14JqLpWtR/dTNPOh3JzAovZDNrOpFmwN3/urX6gQ==", "dev": true, "requires": { "browser-sync": "^2.26.3", "chalk": "^2.4.2", - "chokidar": "^2.0.4", + "chokidar": "^2.1.5", "debug": "^4.1.1", + "dependency-graph": "^0.8.0", "dependency-tree": "^6.3.0", "ejs": "^2.6.1", "fast-glob": "^2.2.6", "fs-extra": "^7.0.1", - "gray-matter": "^4.0.1", + "gray-matter": "^4.0.2", "hamljs": "^0.6.2", - "handlebars": "^4.0.12", - "javascript-stringify": "^1.6.0", - "liquidjs": "^6.2.0", + "handlebars": "^4.1.1", + "javascript-stringify": "^2.0.0", + "liquidjs": "^6.4.3", "lodash": "^4.17.11", - "luxon": "^1.9.0", + "luxon": "^1.12.0", "markdown-it": "^8.4.2", "minimist": "^1.2.0", "moo": "^0.5.0", "multimatch": "^3.0.0", "mustache": "^2.3.0", "normalize-path": "^3.0.0", - "nunjucks": "^3.1.6", + "nunjucks": "^3.2.0", "parse-filepath": "^1.0.2", "please-upgrade-node": "^3.1.1", "pretty": "^2.0.0", "pug": "^2.0.3", - "recursive-copy": "^2.0.9", - "semver": "^5.6.0", + "recursive-copy": "^2.0.10", + "semver": "^6.0.0", "slugify": "^1.3.4", "time-require": "^0.1.2", "valid-url": "^1.0.9" }, "dependencies": { + "chokidar": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -63,6 +84,15 @@ "universalify": "^0.1.0" } }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -74,9 +104,21 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true + }, + "semver": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", + "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "dev": true + }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true } } }, @@ -90,12 +132,12 @@ } }, "@babel/generator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", - "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", "dev": true, "requires": { - "@babel/types": "^7.3.4", + "@babel/types": "^7.4.4", "jsesc": "^2.5.1", "lodash": "^4.17.11", "source-map": "^0.5.0", @@ -123,12 +165,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.4" } }, "@babel/highlight": { @@ -149,50 +191,64 @@ "dev": true }, "@babel/runtime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", - "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", + "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", "dev": true, "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "^0.13.2" }, "dependencies": { "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", "dev": true } } }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + }, + "dependencies": { + "@babel/parser": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "dev": true + } } }, "@babel/traverse": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", - "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", + "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.3.4", + "@babel/generator": "^7.4.4", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.3.4", - "@babel/types": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.5", + "@babel/types": "^7.4.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.11" }, "dependencies": { + "@babel/parser": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "dev": true + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -205,9 +261,9 @@ } }, "@babel/types": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", - "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -311,9 +367,9 @@ "dev": true }, "@sinonjs/commons": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.1.tgz", - "integrity": "sha512-rgmZk5CrBGAMATk0HlHOFvo8V44/r+On6cKS80tqid0Eljd+fFBWBOXZp9H2/EB3faxdNdzXTx6QZIKLkbJ7mA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz", + "integrity": "sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -330,9 +386,9 @@ } }, "@sinonjs/samsam": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.2.0.tgz", - "integrity": "sha512-j5F1rScewLtx6pbTK0UAjA3jJj4RYiSKOix53YWv+Jzy/AZ69qHxUpU8fwVLjyKbEEud9QrLpv6Ggs7WqTimYw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz", + "integrity": "sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw==", "dev": true, "requires": { "@sinonjs/commons": "^1.0.2", @@ -347,9 +403,9 @@ "dev": true }, "@types/babel-types": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.6.tgz", - "integrity": "sha512-8zYZyy2kgwBXdz2j8Ix7LOghGiZbOiHf6vqmmBX1r76FdAzVNv7cODyJTEglUWiOdRnXh0s/o58neUwv5vaitQ==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", + "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==", "dev": true }, "@types/babylon": { @@ -368,9 +424,9 @@ "dev": true }, "@types/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", - "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, "@types/unist": { @@ -657,6 +713,15 @@ "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", "dev": true }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -686,6 +751,12 @@ } } }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -770,6 +841,16 @@ "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", "dev": true }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -904,9 +985,9 @@ "dev": true }, "assetgraph": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/assetgraph/-/assetgraph-5.8.1.tgz", - "integrity": "sha512-u9u6WDu1je6FraTV1Gx5/M8VhKsH6WuTdmz/7XDznwTYD2LZGU2rE/sJVUc2gwOOWF4Ztqa06sTmoW9OSrOdXA==", + "version": "5.8.4", + "resolved": "https://registry.npmjs.org/assetgraph/-/assetgraph-5.8.4.tgz", + "integrity": "sha512-vDGeWPSaRihVny07KsyFHYXFh7w2ScbzKruxNi0pZ7OT3zKzU9ppxVFK1kNnFUEjicLKaFB5Ffh2xk2n6dGjNA==", "dev": true, "requires": { "acorn": "^6.1.0", @@ -927,25 +1008,26 @@ "estraverse": "^4.2.0", "estraverse-fb": "^1.3.2", "font-family-papandreou": "^0.2.0-patch1", - "font-tracer": "^1.0.1", + "font-snapper": "^1.0.0", + "font-tracer": "^1.1.0", "fontkit": "^1.7.7", "gettemporaryfilepath": "^1.0.0", "glob": "^7.0.5", - "html-minifier": "^3.5.8", + "html-minifier": "^4.0.0", "imageinfo": "^1.0.4", - "jsdom": "13.2.0", + "jsdom": "14.0.0", "lines-and-columns": "^1.1.6", "lodash": "4.17.11", "memoizesync": "1.1.1", "mkdirp": "^0.5.1", "normalizeurl": "^1.0.0", "perfectionist": "^2.4.0", - "postcss": "7.0.9", + "postcss": "^7.0.14", "postcss-values-parser": "^2.0.0", "read-pkg-up": "^4.0.0", "repeat-string": "^1.5.4", "schemes": "^1.0.1", - "semver": "^5.3.0", + "semver": "^6.0.0", "sift": "^7.0.1", "source-map": "~0.6.1", "specificity": "^0.4.0", @@ -999,17 +1081,6 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "postcss": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.9.tgz", - "integrity": "sha512-eXB2Fm8/BtSABq7ia1HyvbkoD9zFqq2BWjHUAyRSgbK8qdyKrA6yMCX06l05Onc8bHemeXLB8hzJ8tM0ABc0Zw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-values-parser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", @@ -1042,6 +1113,12 @@ "read-pkg": "^3.0.0" } }, + "semver": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", + "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1053,25 +1130,16 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "assetgraph-builder": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-6.10.0.tgz", - "integrity": "sha512-HGpCM92CtNKtk/ijQzIt2icWbHVe05qh4pI8XeEt+/AGy+nkHkAtL9l22aD5bEgsrdiWRbT67+6+4+yxrJj/Iw==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-6.10.1.tgz", + "integrity": "sha512-jRqme+K8BWVAlY3+qqkWH19/FD92aay0TqZzCfaH3HkTTqFPacIHiGA/DRvPPOxjl+wvIvjVNLWSG2QrPxtHrA==", "dev": true, "requires": { - "assetgraph": "5.8.1", + "assetgraph": "5.8.4", "assetgraph-sprite": "^3.0.1", "browserslist": "^4.4.2", "chalk": "^2.3.2", @@ -1090,14 +1158,6 @@ "pngcrush": "^2.0.1", "pngquant": "^2.0.1", "urltools": "^0.4.1" - }, - "dependencies": { - "p-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", - "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", - "dev": true - } } }, "assetgraph-sprite": { @@ -1235,17 +1295,46 @@ "dev": true }, "autoprefixer": { - "version": "9.4.10", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.10.tgz", - "integrity": "sha512-XR8XZ09tUrrSzgSlys4+hy5r2/z4Jp7Ag3pHm31U4g/CTccYPOVe19AkaJ4ey/vRd1sfj+5TtuD6I0PXtutjvQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.0.tgz", + "integrity": "sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ==", "dev": true, "requires": { - "browserslist": "^4.4.2", - "caniuse-lite": "^1.0.30000940", + "browserslist": "^4.6.1", + "caniuse-lite": "^1.0.30000971", + "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.14", + "postcss": "^7.0.16", "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", + "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "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 + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "aws-sign2": { @@ -1504,9 +1593,9 @@ } }, "bin-version": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.0.0.tgz", - "integrity": "sha512-Ekhwm6AUiMbZ1LgVCNMkgjovpMR30FyQN74laAW9gs0NPjZR5gdY0ARNB0YsQG8GOme3CsHbxmeyq/7Ofq6QYQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", "dev": true, "requires": { "execa": "^1.0.0", @@ -1696,9 +1785,9 @@ "dev": true }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", "dev": true }, "bn.js": { @@ -1708,23 +1797,29 @@ "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1734,6 +1829,28 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1741,9 +1858,33 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true } } @@ -1909,13 +2050,13 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browser-sync": { - "version": "2.26.3", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.3.tgz", - "integrity": "sha512-VLzpjCA4uXqfzkwqWtMM6hvPm2PNHp2RcmzBXcbi6C9WpkUhhFb8SVAr4CFrCsFxDg+oY6HalOjn8F+egyvhag==", + "version": "2.26.5", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.5.tgz", + "integrity": "sha512-zVa6MmadAFgl5Uk53Yy5cw5tGTO7xSGAWK3Yx70GJ1t5jK+r6B4q3xq+1XbYfLt1SbeFg7WoNWneNhMT4B9jFw==", "dev": true, "requires": { - "browser-sync-client": "^2.26.2", - "browser-sync-ui": "^2.26.2", + "browser-sync-client": "^2.26.4", + "browser-sync-ui": "^2.26.4", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", "chokidar": "^2.0.4", @@ -1930,7 +2071,7 @@ "http-proxy": "1.15.2", "immutable": "^3", "localtunnel": "1.9.1", - "micromatch": "2.3.11", + "micromatch": "^3.1.10", "opn": "5.3.0", "portscanner": "2.1.1", "qs": "6.2.3", @@ -1952,32 +2093,6 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", @@ -1995,24 +2110,6 @@ "wrap-ansi": "^2.0.0" } }, - "expand-brackets": { - "version": "0.1.5", - "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" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -2030,12 +2127,6 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -2045,24 +2136,6 @@ "number-is-nan": "^1.0.0" } }, - "is-glob": { - "version": "2.0.1", - "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" - } - }, - "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" - } - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -2072,39 +2145,9 @@ "invert-kv": "^1.0.0" } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "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" - } - }, - "normalize-path": { - "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" - } - }, "os-locale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -2145,7 +2188,7 @@ }, "yargs": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", "dev": true, "requires": { @@ -2167,7 +2210,7 @@ }, "yargs-parser": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "resolved": "http://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", "dev": true, "requires": { @@ -2177,9 +2220,9 @@ } }, "browser-sync-client": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.2.tgz", - "integrity": "sha512-FEuVJD41fI24HJ30XOT2RyF5WcnEtdJhhTqeyDlnMk/8Ox9MZw109rvk9pdfRWye4soZLe+xcAo9tHSMxvgAdw==", + "version": "2.26.4", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.4.tgz", + "integrity": "sha512-mQiDp5/tf79VezDS5j/EExU4Ze6f5DQYuL0Z7VdJgBbNLTHDfkYGi2R620qc6HkY9XZA0m4/UwihT7J42RBIJA==", "dev": true, "requires": { "etag": "1.8.1", @@ -2189,9 +2232,9 @@ } }, "browser-sync-ui": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.2.tgz", - "integrity": "sha512-LF7GMWo8ELOE0eAlxuRCfnGQT1ZxKP9flCfGgZdXFc6BwmoqaJHlYe7MmVvykKkXjolRXTz8ztXAKGVqNwJ3EQ==", + "version": "2.26.4", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", + "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==", "dev": true, "requires": { "async-each-series": "0.1.1", @@ -2373,14 +2416,14 @@ } }, "browserslist": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz", - "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.1.tgz", + "integrity": "sha512-1MC18ooMPRG2UuVFJTHFIAkk6mpByJfxCrnUyvSlu/hyQSFHMrlhM02SzNuCV+quTP4CKmqtOMAIjrifrpBJXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000939", - "electron-to-chromium": "^1.3.113", - "node-releases": "^1.1.8" + "caniuse-lite": "^1.0.30000971", + "electron-to-chromium": "^1.3.137", + "node-releases": "^1.1.21" } }, "bs-recipes": { @@ -2458,9 +2501,9 @@ "dev": true }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, "cache-base": { @@ -2532,6 +2575,36 @@ "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, + "caching-transform": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", + "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "dev": true, + "requires": { + "hasha": "^3.0.0", + "make-dir": "^2.0.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.4.2" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -2614,19 +2687,28 @@ } }, "caniuse-lite": { - "version": "1.0.30000941", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000941.tgz", - "integrity": "sha512-4vzGb2MfZcO20VMPj1j6nRAixhmtlhkypM4fL4zhgzEucQIYiRzSqPcWIu1OF8i0FETD93FMIPWfUJCAcFvrqA==", + "version": "1.0.30000973", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000973.tgz", + "integrity": "sha512-/F3t/Yo8LEdRSEPCmI15fLu5vepVh9UCg/9inJXF5AAfW7xRRJkbaM2ut52iRMQMnGCLQouLbFdbOA+VEFOIsg==", "dev": true }, "canvas": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.4.1.tgz", - "integrity": "sha512-SaFomFqDuuuSTScTHQ7nXc5ea71Ieb8ctvwXjR7vzLsBMfp3euTv2xsTY70zIoC5r4sSQZYXv6tiHiORJ4y1vg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.5.0.tgz", + "integrity": "sha512-wwRz2cLMgb9d+rnotOJCoc04Bzj3aJMpWc6JxAD6lP7bYz0ldcn0sKddoZ0vhD5T8HBxrK+XmRDJb68/2VqARw==", "dev": true, "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.11.0" + "nan": "^2.13.2", + "node-pre-gyp": "^0.11.0", + "simple-get": "^3.0.3" + }, + "dependencies": { + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true + } } }, "capitalize": { @@ -2648,12 +2730,12 @@ "dev": true }, "catharsis": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", - "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.10.tgz", + "integrity": "sha512-l2OUaz/3PU3MZylspVFJvwHCVfWyvcduPq4lv3AzZ2pJzZCo7kNKFNyatwujD7XgvGkNAE/Jhhbh2uARNwNkfw==", "dev": true, "requires": { - "underscore-contrib": "~0.3.0" + "lodash": "^4.17.11" } }, "caw": { @@ -3016,9 +3098,9 @@ } }, "color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", - "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -3119,6 +3201,12 @@ "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "compare-module-exports": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/compare-module-exports/-/compare-module-exports-2.1.0.tgz", @@ -3390,21 +3478,52 @@ } } }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "cp-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", + "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, + "graceful-fs": "^4.1.2", + "make-dir": "^2.0.0", + "nested-error-stacks": "^2.0.0", + "pify": "^4.0.1", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, "requires": { "capture-stack-trace": "^1.0.0" } @@ -3909,6 +4028,23 @@ "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", "dev": true }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -4004,6 +4140,12 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "dependency-graph": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.8.0.tgz", + "integrity": "sha512-DCvzSq2UiMsuLnj/9AL484ummEgLtZIcRS7YvtO38QnpX3vqh9nJ8P+zhu8Ja+SmLrBHO2iDbva20jq38qvBkQ==", + "dev": true + }, "dependency-tree": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-6.5.0.tgz", @@ -4290,6 +4432,15 @@ "lodash.omit": "^4.5.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -4502,9 +4653,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.113", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", - "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", + "version": "1.3.146", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.146.tgz", + "integrity": "sha512-BrUq08sx7eR4PCwLbjFxXmjcbDro6DSoc1pN8VCxq76U+o9JQzJlWH/NVtcpAqcktwpE5CVvMyqHqTQfCETNoQ==", "dev": true }, "elegant-spinner": { @@ -4708,6 +4859,12 @@ "is-symbol": "^1.0.2" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "es6-promise": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", @@ -4781,9 +4938,9 @@ } }, "eslint": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.0.tgz", - "integrity": "sha512-xwG7SS5JLeqkiR3iOmVgtF8Y6xPdtr6AAsN6ph7Q6R/fv+3UlKYoika8SmNzmb35qdRF+RfTY35kMEdtbi+9wg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -4792,7 +4949,7 @@ "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.2", + "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", "espree": "^5.0.1", @@ -4806,7 +4963,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.2.2", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.11", @@ -4833,15 +4990,6 @@ "ms": "^2.1.1" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "import-fresh": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", @@ -4926,9 +5074,9 @@ } }, "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", + "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", "dev": true, "requires": { "debug": "^2.6.8", @@ -4963,21 +5111,22 @@ } }, "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.3.tgz", + "integrity": "sha512-qeVf/UwXFJbeyLbxuY8RgqDyEKCkqV7YC+E5S5uOjAp4tOc8zj01JP3ucoBM8JcEqd1qRasJSg6LLlisirfy0Q==", "dev": true, "requires": { + "array-includes": "^3.0.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", + "eslint-module-utils": "^2.4.0", "has": "^1.0.3", "lodash": "^4.17.11", "minimatch": "^3.0.4", "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" + "resolve": "^1.11.0" }, "dependencies": { "debug": { @@ -5090,6 +5239,15 @@ "read-pkg": "^2.0.0" } }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -5121,18 +5279,18 @@ } }, "eslint-plugin-prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", - "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", + "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-promise": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", - "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz", + "integrity": "sha512-faAHw7uzlNPy7b45J1guyjazw28M+7gJokKUjC5JSFoYfUEyy6Gw/i7YQvmv2Yk00sUjWcmzXQLpU1Ki/C2IZQ==", "dev": true }, "eslint-plugin-standard": { @@ -5142,9 +5300,9 @@ "dev": true }, "eslint-scope": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", - "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -5436,9 +5594,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true } } @@ -5621,9 +5779,9 @@ "dev": true }, "fast-glob": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", - "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", @@ -5703,12 +5861,6 @@ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -5727,9 +5879,9 @@ } }, "filing-cabinet": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-2.3.2.tgz", - "integrity": "sha512-31zt8QRdGW8HEQNdAz2Hsk/eixQE+ZOFh7k9Fwh6cHb/ms7SbyE+JInGG8HP36HL6erPb6aCw6Q8OeyxE9PfNg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-2.3.3.tgz", + "integrity": "sha512-Lp9FNBm74UnZI/0tVcH8WlJZmnYf9/qImt1/VUaEj3rlBl+V7M5yVAzYPJ7X1T2WxQeCrSQN4jN64SlQa6Rbew==", "dev": true, "requires": { "app-module-path": "^2.2.0", @@ -5739,7 +5891,7 @@ "is-relative-path": "^1.0.2", "module-definition": "^3.0.0", "module-lookup-amd": "^6.1.0", - "resolve": "^1.9.0", + "resolve": "^1.11.1", "resolve-dependency-path": "^2.0.0", "sass-lookup": "^3.0.0", "stylus-lookup": "^3.0.1", @@ -5754,6 +5906,15 @@ "requires": { "ms": "^2.1.1" } + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } } } }, @@ -5821,6 +5982,44 @@ "traverse-chain": "~0.1.0" } }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, "find-parent-dir": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", @@ -5836,19 +6035,19 @@ } }, "find-versions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.0.0.tgz", - "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.1.0.tgz", + "integrity": "sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q==", "dev": true, "requires": { - "array-uniq": "^2.0.0", + "array-uniq": "^2.1.0", "semver-regex": "^2.0.0" }, "dependencies": { "array-uniq": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.0.0.tgz", - "integrity": "sha512-O3QZEr+3wDj7otzF7PjNGs6CA3qmYMLvt5xGkjY/V0VxS+ovvqVo/5wKM/OVOAyuX4DTh9H31zE/yKtO66hTkg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", + "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==", "dev": true } } @@ -5936,6 +6135,16 @@ "integrity": "sha512-l6WMbeh7+Zd4TTu3yUUPR5KOepiuGLd/QAPfTIoX8ipTko0IF7PU6dsM4YM2zCDToEPIPSyCBKEJnKlSdYMgaA==", "dev": true }, + "font-snapper": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/font-snapper/-/font-snapper-1.0.0.tgz", + "integrity": "sha512-8E91ADLNoLIXZGGRDuuK13SWPVbbxIwVkcIcvEoQdEpP13U20bOVXXrur4VxUff3pMImrot7cM/9vN0LwiJ32w==", + "dev": true, + "requires": { + "css-font-weight-names": "^0.2.1", + "font-family-papandreou": "^0.2.0-patch1" + } + }, "font-tracer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/font-tracer/-/font-tracer-1.1.0.tgz", @@ -5986,21 +6195,34 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "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": "^1.0.1" - } - }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "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" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -6093,9 +6315,9 @@ } }, "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", "dev": true, "requires": { "minipass": "^2.2.1" @@ -6831,42 +7053,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "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" - } - } - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -7047,9 +7233,9 @@ "dev": true }, "handlebars": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", - "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -7219,6 +7405,15 @@ "minimalistic-assert": "^1.0.1" } }, + "hasha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", + "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "dev": true, + "requires": { + "is-stream": "^1.0.1" + } + }, "hat": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", @@ -7296,25 +7491,43 @@ } }, "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "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 + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + } + } } } }, @@ -7350,15 +7563,16 @@ "dev": true }, "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { "statuses": { @@ -7660,9 +7874,9 @@ } }, "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -7676,7 +7890,7 @@ "run-async": "^2.2.0", "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { @@ -7690,9 +7904,9 @@ } }, "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -7916,21 +8130,6 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "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" - } - }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -8115,18 +8314,6 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "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", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -8292,53 +8479,169 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, - "istanbul-lib-instrument": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", - "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.3", - "semver": "^5.5.0" + "append-transform": "^1.0.0" } }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "@babel/parser": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "dev": true + }, + "semver": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", + "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "dev": true + } } }, - "javascript-stringify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", - "dev": true - }, - "jpegtran": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/jpegtran/-/jpegtran-1.0.6.tgz", - "integrity": "sha512-H1TQgIg62gueqy1BkBVPO2mTFh68rseOhRhiTBBLAFiEUpyQlNa3EGa0lACAVeAXfryrFQCFVrS2xhsrlpXY9Q==", + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "jpegtran-bin": "^4.0.0", - "memoizeasync": "^1.0.0", - "which": "^1.2.14" - } - }, + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "javascript-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.0.tgz", + "integrity": "sha512-zzK8+ByrzvOL6N92hRewwUKL0wN0TOaIuUjX0Jj8lraxWvr5wHYs2YTjaj2lstF+8qMv5cmPPef47va8NT8lDw==", + "dev": true + }, + "jpegtran": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/jpegtran/-/jpegtran-1.0.6.tgz", + "integrity": "sha512-H1TQgIg62gueqy1BkBVPO2mTFh68rseOhRhiTBBLAFiEUpyQlNa3EGa0lACAVeAXfryrFQCFVrS2xhsrlpXY9Q==", + "dev": true, + "requires": { + "jpegtran-bin": "^4.0.0", + "memoizeasync": "^1.0.0", + "which": "^1.2.14" + } + }, "jpegtran-bin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz", @@ -8357,15 +8660,15 @@ "dev": true }, "js-beautify": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.9.1.tgz", - "integrity": "sha512-oxxvVZdOdUfzk8IOLBF2XUZvl2GoBEfA+b0of4u2EBY/46NlXasi8JdFvazA5lCrf9/lQhTjyVy2QCUW7iq0MQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz", + "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==", "dev": true, "requires": { "config-chain": "^1.1.12", - "editorconfig": "^0.15.2", + "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "~0.5.0", + "mkdirp": "~0.5.1", "nopt": "~4.0.1" } }, @@ -8397,12 +8700,12 @@ } }, "js2xmlparser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", - "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.0.tgz", + "integrity": "sha512-WuNgdZOXVmBk5kUPMcTcVUpbGRzLfNkv7+7APq7WiDihpXVKrgxo6wwRpRl9OQeEBgKCVk9mR7RbzrnNWC8oBw==", "dev": true, "requires": { - "xmlcreate": "^1.0.1" + "xmlcreate": "^2.0.0" } }, "jsbn": { @@ -8412,29 +8715,43 @@ "dev": true }, "jsdoc": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", - "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.2.tgz", + "integrity": "sha512-S2vzg99C5+gb7FWlrK4TVdyzVPGGkdvpDkCEJH1JABi2PKzPeLu5/zZffcJUifgWUJqXWl41Hoc+MmuM2GukIg==", "dev": true, "requires": { - "babylon": "7.0.0-beta.19", - "bluebird": "~3.5.0", - "catharsis": "~0.8.9", - "escape-string-regexp": "~1.0.5", - "js2xmlparser": "~3.0.0", - "klaw": "~2.0.0", - "marked": "~0.3.6", - "mkdirp": "~0.5.1", - "requizzle": "~0.2.1", - "strip-json-comments": "~2.0.1", + "@babel/parser": "^7.4.4", + "bluebird": "^3.5.4", + "catharsis": "^0.8.10", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.0", + "klaw": "^3.0.0", + "markdown-it": "^8.4.2", + "markdown-it-anchor": "^5.0.2", + "marked": "^0.6.2", + "mkdirp": "^0.5.1", + "requizzle": "^0.2.2", + "strip-json-comments": "^3.0.1", "taffydb": "2.6.2", - "underscore": "~1.8.3" + "underscore": "~1.9.1" }, "dependencies": { - "babylon": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", - "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "@babel/parser": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, "taffydb": { @@ -8442,19 +8759,13 @@ "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true } } }, "jsdom": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.2.0.tgz", - "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.0.0.tgz", + "integrity": "sha512-/VkyPmdtbwqpJSkwDx3YyJ3U1oawYNB/h5z8vTUZGAzjtu2OHTeFRfnJqyMHsJ5Cyes23trOmvUpM1GfHH1leA==", "dev": true, "requires": { "abab": "^2.0.0", @@ -8492,9 +8803,9 @@ "dev": true }, "acorn-globals": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", - "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", "dev": true, "requires": { "acorn": "^6.0.1", @@ -8630,9 +8941,9 @@ "dev": true }, "karma": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.0.1.tgz", - "integrity": "sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", + "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", "dev": true, "requires": { "bluebird": "^3.3.0", @@ -8665,9 +8976,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true }, "source-map": { @@ -8768,9 +9079,9 @@ "dev": true }, "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", "dev": true, "requires": { "graceful-fs": "^4.1.9" @@ -8871,14 +9182,14 @@ } }, "lint-staged": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", - "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==", + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.7.tgz", + "integrity": "sha512-egT0goFhIFoOGk6rasPngTFh2qDqxZddM0PwI58oi66RxCDcn5uDwxmiasWIF0qGnchHSYVJ8HPRD5LrFo7TKA==", "dev": true, "requires": { "chalk": "^2.3.1", "commander": "^2.14.1", - "cosmiconfig": "^5.0.2", + "cosmiconfig": "^5.2.0", "debug": "^3.1.0", "dedent": "^0.7.0", "del": "^3.0.0", @@ -8900,9 +9211,21 @@ "staged-git-files": "1.1.2", "string-argv": "^0.0.2", "stringify-object": "^3.2.2", - "yup": "^0.26.10" + "yup": "^0.27.0" }, "dependencies": { + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, "del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", @@ -8939,14 +9262,30 @@ } }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -9019,16 +9358,10 @@ "rxjs": "^6.3.3" }, "dependencies": { - "p-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", - "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", - "dev": true - }, "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -9227,7 +9560,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -9268,7 +9601,7 @@ }, "yargs": { "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", "dev": true, "requires": { @@ -9289,7 +9622,7 @@ }, "yargs-parser": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "resolved": "http://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", "dev": true, "requires": { @@ -9348,6 +9681,12 @@ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -9462,16 +9801,27 @@ } }, "log4js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.0.2.tgz", - "integrity": "sha512-KE7HjiieVDPPdveA3bJZSuu0n8chMkFl8mIoisBFxwEJ9FmXe4YzNuiqSwYUiR1K8q8/5/8Yd6AClENY1RA9ww==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.3.1.tgz", + "integrity": "sha512-nPGS7w7kBnzNm1j8JycFxwLCbIMae8tHCo0cCdx/khB20Tcod8SZThYEB9E0c27ObcTGA1mlPowaf3hantQ/FA==", "dev": true, "requires": { "date-format": "^2.0.0", - "debug": "^3.1.0", + "debug": "^4.1.1", "flatted": "^2.0.0", "rfdc": "^1.1.2", - "streamroller": "^1.0.1" + "streamroller": "^1.0.5" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "logalot": { @@ -9485,9 +9835,9 @@ } }, "lolex": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz", - "integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.1.0.tgz", + "integrity": "sha512-BYxIEXiVq5lGIXeVHnsFzqa1TxN5acnKnPCdlZSpzm8viNEOhiigupA4vTQ9HEFQ6nLTQ9wQOgBknJgzUYQ9Aw==", "dev": true }, "longest": { @@ -9547,9 +9897,9 @@ } }, "luxon": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.12.1.tgz", - "integrity": "sha512-Zv/qJb2X1ESTrlniAViWx2aqGwi2cVpeoZFTbPdPiCu4EsadKsmb/QCH8HQjMUpDZKKJIHKHsJxV5Rwpq47HKQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.16.0.tgz", + "integrity": "sha512-qaqB+JwpGwtl7UbIXng3A/l4W/ySBr8drQvwtMLZBMiLD2V+0fEnPWMrs+UjnIy9PsktazQaKvwDUCLzoWz0Hw==", "dev": true }, "magic-string": { @@ -9664,24 +10014,24 @@ } }, "markdown-it-anchor": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz", - "integrity": "sha512-AFM/woBI8QDJMS/9+MmsBMT5/AR+ImfOsunQZTZhzcTmna3rIzAzbOh5E0l6mlFM/i9666BpUtkqQ9bS7WApCg==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.2.4.tgz", + "integrity": "sha512-n8zCGjxA3T+Mx1pG8HEgbJbkB8JFUuRkeTZQuIM8iPY6oQ8sWOPRZJDFC9a/pNg2QkHEjjGkhBEl/RSyzaDZ3A==", "dev": true }, "markdown-it-attrs": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-2.3.2.tgz", - "integrity": "sha512-DyatNvpatg7w+fGkplWGeie7o/0TogBr2w0izyz9ZQfTMv5G3lbDHQFQ42aP2e5L2mJQt0IeAjWzvYaa2d9xzQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-2.4.1.tgz", + "integrity": "sha512-BASnIYS+JLpjlhDf7jLV8VOuccxjfDDnQcz5dLfgPsYw8OsgbASexADdIkF7tIdGn+jaQSA4qOZXM3v3W3JBCg==", "dev": true }, "markdown-it-prism": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/markdown-it-prism/-/markdown-it-prism-2.0.1.tgz", - "integrity": "sha512-hO5vcnMsVWUw3WWrhric++7I4O8Nfv4NJx7kfypa45c2qfeLUtyH0lw6R5WdqTEWVstWElGCHfbB9hDjQHUd/w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/markdown-it-prism/-/markdown-it-prism-2.0.2.tgz", + "integrity": "sha512-tBRK+L36D2m4NauUr9teyFYJXBtw6XtuCdCJJWeNabSBwKlgI3oil4TfHHWd0bunwSf8zkmXEZkJzDVgVkfp+g==", "dev": true, "requires": { - "prismjs": "^1.15.0" + "prismjs": "^1.16.0" } }, "markdown-link": { @@ -9918,9 +10268,9 @@ } }, "marked": { - "version": "0.3.19", - "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", + "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==", "dev": true }, "matcher": { @@ -10400,31 +10750,14 @@ "dev": true }, "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "requires": { - "debug": "^2.1.2", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" - }, - "dependencies": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } } }, "negotiator": { @@ -10434,9 +10767,15 @@ "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "nice-try": { @@ -10445,24 +10784,16 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "nise": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz", - "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.0.tgz", + "integrity": "sha512-Z3sfYEkLFzFmL8KY6xnSJLRxwQwYBjOXi/24lb62ZnZiGA0JUzGGTI6TBIgfCSMIDl9Jlu8SRmHNACLTemDHww==", "dev": true, "requires": { "@sinonjs/formatio": "^3.1.0", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^2.3.2", + "lolex": "^4.1.0", "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "dev": true - } } }, "no-case": { @@ -10475,9 +10806,9 @@ } }, "node-abi": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.7.1.tgz", - "integrity": "sha512-OV8Bq1OrPh6z+Y4dqwo05HqrRL9YNF7QVMRfq1/pguwKLG+q9UB/Lk0x5qXjO23JjJg+/jqCHSTaG1P3tfKfuw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.8.0.tgz", + "integrity": "sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==", "dev": true, "requires": { "semver": "^5.4.1" @@ -10613,9 +10944,9 @@ } }, "node-releases": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.9.tgz", - "integrity": "sha512-oic3GT4OtbWWKfRolz5Syw0Xus0KRFxeorLNj0s93ofX6PWyuzKjsiGxsCtWktBwwmTF6DdRRf2KreGqeOk5KA==", + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.23.tgz", + "integrity": "sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==", "dev": true, "requires": { "semver": "^5.3.0" @@ -10757,9 +11088,9 @@ } }, "nps": { - "version": "5.9.4", - "resolved": "https://registry.npmjs.org/nps/-/nps-5.9.4.tgz", - "integrity": "sha512-4RFiRTG0/hwcdTqfhwOT2sxtC7JEElyZDTsa3DIhf4ekFFL/87y2JvPAIRZJWVnEp+tG2a7qzv0eJE4NgJLlDg==", + "version": "5.9.5", + "resolved": "https://registry.npmjs.org/nps/-/nps-5.9.5.tgz", + "integrity": "sha512-UsjrtowHeXGnKELZUlqiyPSXc3vYs3YwLZEFfZJ1Z9kZCFgtzK4YRVKnxEa+teRMMdw6Q4keAX/M/aLCkPTqIw==", "dev": true, "requires": { "arrify": "^1.0.1", @@ -11113,7 +11444,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -11154,7 +11485,7 @@ }, "yargs": { "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", "dev": true, "requires": { @@ -11170,1042 +11501,80 @@ } }, "nwsapi": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.3.tgz", - "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", "dev": true }, "nyc": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz", - "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", + "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "requires": { "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^3.0.1", + "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", - "find-cache-dir": "^2.0.0", + "cp-file": "^6.2.0", + "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.3", - "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.1.0", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.1", - "make-dir": "^1.3.0", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", - "test-exclude": "^5.1.0", + "test-exclude": "^5.2.3", "uuid": "^3.3.2", - "yargs": "^12.0.5", - "yargs-parser": "^11.1.1" + "yargs": "^13.2.2", + "yargs-parser": "^13.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "append-transform": { - "version": "1.0.0", - "bundled": true, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "default-require-extensions": "^2.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "async": { - "version": "2.6.2", - "bundled": true, + "merge-source-map": { + "version": "1.1.0", + "resolved": false, + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { - "lodash": "^4.17.11" + "source-map": "^0.6.1" } }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "caching-transform": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^1.3.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.3.0" - } - }, - "camelcase": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "commander": { - "version": "2.17.1", - "bundled": true, - "dev": true, - "optional": true - }, - "commondir": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "default-require-extensions": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "end-of-stream": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "bundled": true, - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-error": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "execa": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "bundled": true, - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "find-cache-dir": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "foreground-child": { - "version": "1.5.6", - "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.3", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "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" - } - }, - "graceful-fs": { - "version": "4.1.15", - "bundled": true, - "dev": true - }, - "handlebars": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "hasha": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "bundled": true, - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "supports-color": "^6.0.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "handlebars": "^4.1.0" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "lcid": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "bundled": true, - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "bundled": true, - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "bundled": true, - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "mem": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.10", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "once": { - "version": "1.4.0", - "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.2", - "bundled": true, - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-is-promise": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "package-hash": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "bundled": true, - "dev": true - }, - "path-type": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "release-zalgo": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve": { - "version": "1.10.0", - "bundled": true, - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, "resolve-from": { "version": "4.0.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "arrify": "^1.0.1", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^1.0.1" - } - }, - "uglify-js": { - "version": "3.4.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "uuid": { - "version": "3.3.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "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" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "2.4.2", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "y18n": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "2.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "yargs": { - "version": "12.0.5", - "bundled": true, - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "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 } } }, @@ -12304,16 +11673,6 @@ "es-abstract": "^1.5.1" } }, - "object.omit": { - "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.4", - "is-extendable": "^0.1.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -12352,6 +11711,15 @@ "wrappy": "1" } }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, "openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", @@ -12360,7 +11728,7 @@ }, "opn": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "resolved": "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz", "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, "requires": { @@ -12400,21 +11768,21 @@ } }, "optipng": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/optipng/-/optipng-2.0.0.tgz", - "integrity": "sha512-4iClrdhjPbziIefK9GBnGIpAUPcW6nbJkRyabgLRVtsJNtvzAjgq+V0J1cOEN1OXlr0xd5BQO0dj/XotOx6hnw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/optipng/-/optipng-2.1.0.tgz", + "integrity": "sha512-Qih2It6tRiHr6tjxY3fL16G+vXJa4+LbpIA4vrNabpvpCOzlnNUwNQqQg9h4lxu/fTz3yReqlqqeIna+KVhTDA==", "dev": true, "requires": { "gettemporaryfilepath": "^1.0.0", "memoizeasync": "^1.1.0", - "optipng-bin": "^5.0.0", + "optipng-bin": "^6.0.0", "which": "^1.2.14" } }, "optipng-bin": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-5.1.0.tgz", - "integrity": "sha512-9baoqZTNNmXQjq/PQTWEXbVV3AMO2sI/GaaqZJZ8SExfAzjijeAP7FEeT+TtyumSw7gr0PZtSUYB/Ke7iHQVKA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-6.0.0.tgz", + "integrity": "sha512-95bB4y8IaTsa/8x6QH4bLUuyvyOoGBCLDA7wOgDL8UFqJpSUh1Hob8JRJhit+wC1ZLN3tQ7mFt7KuBj0x8F2Wg==", "dev": true, "requires": { "bin-build": "^3.0.0", @@ -12531,9 +11899,9 @@ } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, "p-map-series": { @@ -12565,6 +11933,18 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" }, + "package-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", + "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", @@ -12593,18 +11973,18 @@ } }, "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" }, "dependencies": { "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true } } @@ -12666,35 +12046,6 @@ "path-root": "^0.1.1" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "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" - } - } - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -13672,9 +13023,9 @@ } }, "prebuild-install": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.5.tgz", - "integrity": "sha512-6uZgMVg7yDfqlP5CPurVhtq3hUKBFNufiar4J5hZrlHTo59DDBEtyxw01xCdFss9j0Zb9+qzFVf/s4niayba3w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz", + "integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==", "dev": true, "requires": { "detect-libc": "^1.0.3", @@ -13778,16 +13129,10 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.1.tgz", + "integrity": "sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg==", "dev": true }, "prettier-linter-helpers": { @@ -13829,7 +13174,7 @@ }, "pretty-ms": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz", + "resolved": "http://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz", "integrity": "sha1-2oeaaC/zOjcBEEbxPWJ/Z8c7hPY=", "dev": true, "requires": { @@ -13837,9 +13182,9 @@ } }, "prismjs": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz", - "integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.16.0.tgz", + "integrity": "sha512-OA4MKxjFZHSvZcisLGe14THYsug/nF6O1f0pAJc0KN0wTyAcLqmsbE+lTGKSpyh+9pEW57+k6pg2AfYR+coyHA==", "dev": true, "requires": { "clipboard": "^2.0.0" @@ -14031,7 +13376,7 @@ }, "yargs": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { @@ -14235,15 +13580,26 @@ "dev": true }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "rc": { @@ -14392,15 +13748,6 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -14442,6 +13789,15 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "remark": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", @@ -14701,20 +14057,12 @@ "dev": true }, "requizzle": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", - "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.2.tgz", + "integrity": "sha512-oJ6y7JcUJkblRGhMByGNcszeLgU0qDxNKFCiUZR1XyzHyVsev+Mxb1tyygxLd1ORsKee1SA5BInFdUwY64GE/A==", "dev": true, "requires": { - "underscore": "~1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } + "lodash": "^4.17.11" } }, "resolve": { @@ -14788,17 +14136,6 @@ "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" - }, - "dependencies": { - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } } }, "restructure": { @@ -14817,9 +14154,9 @@ "dev": true }, "rewiremock": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.13.0.tgz", - "integrity": "sha512-1MkO4mX4j31GilbMsqdgLNXjmrHo9EUKQFCa82rLye8ltOHnJe0rRaHUSKz2yUClr8l0Qnj1ZTjZHmp6vNTrzQ==", + "version": "3.13.7", + "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.13.7.tgz", + "integrity": "sha512-U6iFfdXPiNtIBDcJWmspl/nhVk1EANkXLq2GM78T3ZfegvO5EW0TgNzExLh5iHXFJKQr//SmH9iloK/s4O7UqA==", "dev": true, "requires": { "babel-runtime": "^6.26.0", @@ -14833,9 +14170,9 @@ } }, "rfdc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", - "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, "rgb-regex": { @@ -15131,12 +14468,30 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -15169,11 +14524,35 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, @@ -15251,9 +14630,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { @@ -15361,9 +14740,9 @@ } }, "simple-git": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz", - "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==", + "version": "1.113.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.113.0.tgz", + "integrity": "sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g==", "dev": true, "requires": { "debug": "^4.0.1" @@ -15398,16 +14777,16 @@ } }, "sinon": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.7.tgz", - "integrity": "sha512-rlrre9F80pIQr3M36gOdoCEWzFAMDgHYD8+tocqOw+Zw9OZ8F84a80Ds69eZfcjnzDqqG88ulFld0oin/6rG/g==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.3.2.tgz", + "integrity": "sha512-thErC1z64BeyGiPvF8aoSg0LEnptSaWE7YhdWWbWXgelOyThent7uKOnnEh9zBxDbKixtr5dEko+ws1sZMuFMA==", "dev": true, "requires": { - "@sinonjs/commons": "^1.3.1", + "@sinonjs/commons": "^1.4.0", "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.2.0", + "@sinonjs/samsam": "^3.3.1", "diff": "^3.5.0", - "lolex": "^3.1.0", + "lolex": "^4.0.1", "nise": "^1.4.10", "supports-color": "^5.5.0" }, @@ -15823,9 +15202,9 @@ } }, "source-map-support": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", - "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -15862,6 +15241,20 @@ "spawn-command": "^0.0.2-1" } }, + "spawn-wrap": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", + "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -16182,16 +15575,16 @@ } }, "streamroller": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.3.tgz", - "integrity": "sha512-P7z9NwP51EltdZ81otaGAN3ob+/F88USJE546joNq7bqRNTe6jc74fTBDyynxP4qpIfKlt/CesEYicuMzI0yJg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz", + "integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==", "dev": true, "requires": { - "async": "^2.6.1", + "async": "^2.6.2", "date-format": "^2.0.0", - "debug": "^3.1.0", - "fs-extra": "^7.0.0", - "lodash": "^4.17.10" + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11" }, "dependencies": { "async": { @@ -16295,17 +15688,17 @@ } }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^4.0.0" + "ansi-regex": "^4.1.0" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" } } }, @@ -16438,9 +15831,9 @@ } }, "svgo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", - "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -16450,7 +15843,7 @@ "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", "csso": "^3.5.1", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", "sax": "~1.2.4", @@ -16511,9 +15904,9 @@ } }, "synchronous-promise": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.6.tgz", - "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.9.tgz", + "integrity": "sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg==", "dev": true }, "syntax-error": { @@ -16526,9 +15919,9 @@ } }, "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz", + "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", "dev": true, "requires": { "ajv": "^6.9.1", @@ -16538,14 +15931,14 @@ }, "dependencies": { "string-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", - "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.0.0" + "strip-ansi": "^5.1.0" } } } @@ -16557,24 +15950,24 @@ "dev": true }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", "dev": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" }, "dependencies": { "yallist": { @@ -16748,6 +16141,90 @@ } } }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -16874,7 +16351,7 @@ }, "strip-ansi": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", "dev": true } @@ -16990,9 +16467,9 @@ } }, "to-vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-5.0.2.tgz", - "integrity": "sha512-Gp2q0HCUR+4At6c6mvFKug75NP/8Cu5r7ONvEcJJPBGiDT4HeLBrRnPKJbOe84nHJqYhIah2y367Tr2+IUkwMA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-5.0.3.tgz", + "integrity": "sha512-z1Lfx60yAMDMmr+f426Y4yECsHdl8GVEAE+LymjRF5oOIZ7T4N20IxWNAxXLMRzP9jSSll38Z0fKVAhVLsdLOw==", "dev": true, "requires": { "is-buffer": "^2.0.0", @@ -17007,6 +16484,12 @@ } } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, "token-stream": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", @@ -17132,13 +16615,30 @@ "dev": true }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + } } }, "typedarray": { @@ -17148,9 +16648,9 @@ "dev": true }, "typescript": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz", - "integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.1.tgz", + "integrity": "sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw==", "dev": true }, "typescript-eslint-parser": { @@ -17184,26 +16684,29 @@ "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, + "optional": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.20.0", "source-map": "~0.6.1" }, "dependencies": { "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true, + "optional": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "optional": true } } }, @@ -17261,23 +16764,6 @@ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, - "underscore-contrib": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", - "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", - "dev": true, - "requires": { - "underscore": "1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, "underscore.string": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", @@ -17348,9 +16834,9 @@ "dev": true }, "unexpected-sinon": { - "version": "10.11.1", - "resolved": "https://registry.npmjs.org/unexpected-sinon/-/unexpected-sinon-10.11.1.tgz", - "integrity": "sha512-2zSX7vsOYlljjS/3DeQolFzYgA22PmH0ncLCva+ve2AHHJBO0Xnxyt8ri1en1W5b7nRg5F7N6HNdflVNhI7dww==", + "version": "10.11.2", + "resolved": "https://registry.npmjs.org/unexpected-sinon/-/unexpected-sinon-10.11.2.tgz", + "integrity": "sha512-N2KIKPweTVs6AK8cDKQTUwu0fGWyGt+cI/UJZ/eltAyOKgsHL9eILttdGfpZjI/iMYcHcbtUwIlXoHfmh6EcBw==", "dev": true }, "unherit": { @@ -17747,9 +17233,9 @@ } }, "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", "dev": true }, "verror": { @@ -18140,9 +17626,9 @@ "dev": true }, "xmlcreate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", - "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.1.tgz", + "integrity": "sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA==", "dev": true }, "xmldom": { @@ -18291,16 +17777,16 @@ "dev": true }, "yup": { - "version": "0.26.10", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz", - "integrity": "sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", + "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", "dev": true, "requires": { - "@babel/runtime": "7.0.0", + "@babel/runtime": "^7.0.0", "fn-name": "~2.0.1", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.5", + "synchronous-promise": "^2.0.6", "toposort": "^2.0.2" } } diff --git a/package.json b/package.json index b8fc469780..8cc9ea2bb9 100644 --- a/package.json +++ b/package.json @@ -529,11 +529,11 @@ "yargs-unparser": "1.5.0" }, "devDependencies": { - "@11ty/eleventy": "^0.7.1", + "@11ty/eleventy": "^0.8.3", "@mocha/contributors": "^1.0.3", "@mocha/docdash": "^2.1.0", - "assetgraph-builder": "^6.10.0", - "autoprefixer": "^9.4.10", + "assetgraph-builder": "^6.10.1", + "autoprefixer": "^9.6.0", "browserify": "^16.2.3", "browserify-package-json": "^1.0.1", "chai": "^4.2.0", @@ -541,49 +541,49 @@ "coveralls": "^3.0.3", "cross-env": "^5.2.0", "cross-spawn": "^6.0.5", - "eslint": "^5.15.0", + "eslint": "^5.16.0", "eslint-config-prettier": "^3.6.0", "eslint-config-semistandard": "^13.0.0", "eslint-config-standard": "^12.0.0", - "eslint-plugin-import": "^2.16.0", + "eslint-plugin-import": "^2.17.3", "eslint-plugin-node": "^8.0.1", - "eslint-plugin-prettier": "^3.0.1", - "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-prettier": "^3.1.0", + "eslint-plugin-promise": "^4.1.1", "eslint-plugin-standard": "^4.0.0", "fs-extra": "^8.0.1", "husky": "^1.3.1", - "jsdoc": "^3.5.5", - "karma": "^4.0.1", + "jsdoc": "^3.6.2", + "karma": "^4.1.0", "karma-browserify": "^6.0.0", "karma-chrome-launcher": "^2.2.0", "karma-mocha": "^1.3.0", "karma-mocha-reporter": "^2.2.5", "karma-sauce-launcher": "^2.0.2", - "lint-staged": "^8.1.5", + "lint-staged": "^8.1.7", "markdown-it": "^8.4.2", - "markdown-it-anchor": "^5.0.2", - "markdown-it-attrs": "^2.3.2", - "markdown-it-prism": "^2.0.1", + "markdown-it-anchor": "^5.2.4", + "markdown-it-attrs": "^2.4.1", + "markdown-it-prism": "^2.0.2", "markdown-magic": "^0.1.25", "markdown-magic-package-json": "^2.0.0", "markdown-toc": "^1.2.0", "markdownlint-cli": "^0.14.1", - "nps": "^5.9.4", - "nyc": "^13.3.0", - "prettier": "^1.16.4", + "nps": "^5.9.5", + "nyc": "^14.1.1", + "prettier": "^1.17.1", "remark": "^10.0.1", "remark-github": "^7.0.6", "remark-inline-links": "^3.1.2", - "rewiremock": "^3.13.0", + "rewiremock": "^3.13.7", "rimraf": "^2.6.3", - "sinon": "^7.2.7", - "strip-ansi": "^5.0.0", - "svgo": "^1.2.0", + "sinon": "^7.3.2", + "strip-ansi": "^5.2.0", + "svgo": "^1.2.2", "through2": "^3.0.1", - "to-vfile": "^5.0.2", + "to-vfile": "^5.0.3", "unexpected": "^10.40.2", "unexpected-eventemitter": "^1.1.3", - "unexpected-sinon": "^10.11.1", + "unexpected-sinon": "^10.11.2", "uslug": "^1.0.4", "watchify": "^3.11.1" }, From d02a0966d03b0945c77412bee5ea56b48ca26cf2 Mon Sep 17 00:00:00 2001 From: Pascal Date: Thu, 6 Jun 2019 01:36:26 -0400 Subject: [PATCH 025/441] modify Mocha constructor to accept options.global or options.globals (#3914) * consume options.global or options.globals in the constructor. filter unique values * added tests for options.global and options.globals * fixed API doc link --- lib/mocha.js | 13 ++++++++--- test/unit/mocha.spec.js | 48 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/lib/mocha.js b/lib/mocha.js index aab5604448..c0a5aa6dd9 100644 --- a/lib/mocha.js +++ b/lib/mocha.js @@ -106,6 +106,10 @@ function Mocha(options) { options.color = 'color' in options ? options.color : options.useColors; } + // Globals are passed in as options.global, with options.globals for backward compatibility. + options.globals = options.global || options.globals || []; + delete options.global; + this.grep(options.grep) .fgrep(options.fgrep) .ui(options.ui) @@ -540,7 +544,7 @@ Mocha.prototype._growl = growl.notify; * Specifies whitelist of variable names to be expected in global scope. * * @public - * @see {@link https://mochajs.org/#--globals-names|CLI option} + * @see {@link https://mochajs.org/#-global-variable-name|CLI option} * @see {@link Mocha#checkLeaks} * @param {String[]|String} globals - Accepted global variable name(s). * @return {Mocha} this @@ -551,9 +555,12 @@ Mocha.prototype._growl = growl.notify; * mocha.globals(['jQuery', 'MyLib']); */ Mocha.prototype.globals = function(globals) { - this.options.globals = (this.options.globals || []) + this.options.globals = this.options.globals .concat(globals) - .filter(Boolean); + .filter(Boolean) + .filter(function(elt, idx, arr) { + return arr.indexOf(elt) === idx; + }); return this; }; diff --git a/test/unit/mocha.spec.js b/test/unit/mocha.spec.js index 16fbbd7f82..ed99a3e257 100644 --- a/test/unit/mocha.spec.js +++ b/test/unit/mocha.spec.js @@ -21,6 +21,7 @@ describe('Mocha', function() { sandbox.stub(Mocha.prototype, 'useColors').returnsThis(); sandbox.stub(utils, 'deprecate'); sandbox.stub(Mocha.prototype, 'timeout').returnsThis(); + sandbox.stub(Mocha.prototype, 'globals').returnsThis(); }); describe('when "useColors" option is defined', function() { @@ -64,6 +65,44 @@ describe('Mocha', function() { ); }); }); + + describe('when "options.global" is provided', function() { + it('should pass "options.global" to #globals()', function() { + // eslint-disable-next-line no-new + new Mocha({global: ['singular']}); + expect(Mocha.prototype.globals, 'to have a call satisfying', [ + ['singular'] + ]).and('was called once'); + }); + it('should delete mocha.options.global', function() { + var mocha = new Mocha({global: ['singular']}); + expect(mocha.options.global, 'to be', undefined); + }); + }); + + describe('when "options.globals" is provided', function() { + it('should pass "options.globals" to #globals()', function() { + // eslint-disable-next-line no-new + new Mocha({globals: ['plural']}); + expect(Mocha.prototype.globals, 'to have a call satisfying', [ + ['plural'] + ]).and('was called once'); + }); + }); + + describe('when "options.global" AND "options.globals" are provided', function() { + it('should pass "options.global" to #globals(), ignoring "options.globals"', function() { + // eslint-disable-next-line no-new + new Mocha({global: ['singular'], globals: ['plural']}); + expect(Mocha.prototype.globals, 'to have a call satisfying', [ + ['singular'] + ]).and('was called once'); + }); + it('should delete mocha.options.global', function() { + var mocha = new Mocha({global: ['singular'], globals: ['plural']}); + expect(mocha.options.global, 'to be', undefined); + }); + }); }); describe('#allowUncaught()', function() { @@ -159,6 +198,7 @@ describe('Mocha', function() { describe('when argument is valid', function() { var elem = 'foo'; var elem2 = 'bar'; + var elem3 = 'baz'; it('should add string to the whitelist', function() { var mocha = new Mocha(opts); @@ -174,6 +214,14 @@ describe('Mocha', function() { expect(mocha.options.globals, 'to contain', elem, elem2); expect(mocha.options.globals, 'to have length', elems.length); }); + + it('should not have duplicates', function() { + var mocha = new Mocha({globals: [elem, elem2]}); + var elems = [elem, elem2, elem3]; + mocha.globals(elems); + expect(mocha.options.globals, 'to contain', elem, elem2, elem3); + expect(mocha.options.globals, 'to have length', elems.length); + }); }); }); From 9ea45e7557a193c4b69816085397a6655fb5bc06 Mon Sep 17 00:00:00 2001 From: Christopher Hiller Date: Sun, 9 Jun 2019 22:42:04 -0700 Subject: [PATCH 026/441] do not fork if no node flags present (#3827) * do not fork if no node flags present * peer review changes, also ensure `lib/cli/cli.js` is executable --- bin/mocha | 58 ++++++++++++++++++++++++++++---------------------- lib/cli/cli.js | 2 ++ 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/bin/mocha b/bin/mocha index cec93a3366..df7cf48ca3 100755 --- a/bin/mocha +++ b/bin/mocha @@ -3,14 +3,14 @@ 'use strict'; /** - * This wrapper executable checks for known node flags and appends them when found, before invoking the "real" _mocha(1) executable. + * This wrapper executable checks for known node flags and appends them when found, + * before invoking the "real" executable (`lib/cli/cli.js`) * * @module bin/mocha * @private */ const {deprecate, warn} = require('../lib/utils'); -const {spawn} = require('child_process'); const {loadOptions} = require('../lib/cli/options'); const { unparseNodeFlags, @@ -22,7 +22,6 @@ const debug = require('debug')('mocha:cli:mocha'); const {aliases} = require('../lib/cli/run-option-metadata'); const nodeEnv = require('node-environment-flags'); -const mochaPath = require.resolve('./_mocha'); const mochaArgs = {}; const nodeArgs = {}; @@ -118,32 +117,39 @@ if (nodeArgs.gc) { delete nodeArgs.gc; } -debug('final node args', nodeArgs); +if (Object.keys(nodeArgs).length) { + const {spawn} = require('child_process'); + const mochaPath = require.resolve('../lib/cli/cli.js'); -const args = [].concat( - unparseNodeFlags(nodeArgs), - mochaPath, - unparse(mochaArgs, {alias: aliases}) -); + debug('final node args', nodeArgs); -debug(`exec ${process.execPath} w/ args:`, args); + const args = [].concat( + unparseNodeFlags(nodeArgs), + mochaPath, + unparse(mochaArgs, {alias: aliases}) + ); -const proc = spawn(process.execPath, args, { - stdio: 'inherit' -}); + debug(`exec ${process.execPath} w/ args:`, args); -proc.on('exit', (code, signal) => { - process.on('exit', () => { - if (signal) { - process.kill(process.pid, signal); - } else { - process.exit(code); - } + const proc = spawn(process.execPath, args, { + stdio: 'inherit' }); -}); -// terminate children. -process.on('SIGINT', () => { - proc.kill('SIGINT'); // calls runner.abort() - proc.kill('SIGTERM'); // if that didn't work, we're probably in an infinite loop, so make it die. -}); + proc.on('exit', (code, signal) => { + process.on('exit', () => { + if (signal) { + process.kill(process.pid, signal); + } else { + process.exit(code); + } + }); + }); + + // terminate children. + process.on('SIGINT', () => { + proc.kill('SIGINT'); // calls runner.abort() + proc.kill('SIGTERM'); // if that didn't work, we're probably in an infinite loop, so make it die. + }); +} else { + require('../lib/cli/cli').main(unparse(mochaArgs, {alias: aliases})); +} diff --git a/lib/cli/cli.js b/lib/cli/cli.js index 8e82983af4..dee8e70dd4 100755 --- a/lib/cli/cli.js +++ b/lib/cli/cli.js @@ -1,3 +1,5 @@ +#!/usr/bin/env node + 'use strict'; /** From 3064d25ee50cde6aabeca5751e090c8893cdbd31 Mon Sep 17 00:00:00 2001 From: Christopher Hiller Date: Wed, 12 Jun 2019 10:58:11 -0700 Subject: [PATCH 027/441] update @mocha/docdash to v2.1.1 (#3945) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91e3c92f92..4b751c2727 100644 --- a/package-lock.json +++ b/package-lock.json @@ -327,9 +327,9 @@ } }, "@mocha/docdash": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@mocha/docdash/-/docdash-2.1.0.tgz", - "integrity": "sha512-7IHmZJlWjasKdWGSEKwI0HxqSN3OC+BRPhFNhY9QAN7xnJWGBo7eU6+phwRWheU42Dnj8Tm2JeLzBG9YJEGvCA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@mocha/docdash/-/docdash-2.1.1.tgz", + "integrity": "sha512-D6l+L2rItDsO2bcc2Fl/REKDaOZMMUB1VYuFdgrM2Kk02DMCnhzZWyuBfXyNWfh3YplR38AJlOifx0dHutYD6g==", "dev": true, "requires": { "taffydb": "^2.7.3" diff --git a/package.json b/package.json index 8cc9ea2bb9..0df4039ec8 100644 --- a/package.json +++ b/package.json @@ -531,7 +531,7 @@ "devDependencies": { "@11ty/eleventy": "^0.8.3", "@mocha/contributors": "^1.0.3", - "@mocha/docdash": "^2.1.0", + "@mocha/docdash": "^2.1.1", "assetgraph-builder": "^6.10.1", "autoprefixer": "^9.6.0", "browserify": "^16.2.3", From e341ea4ad9f02b2f55798872f49e15ee023b3134 Mon Sep 17 00:00:00 2001 From: "P. Roebuck" Date: Wed, 12 Jun 2019 15:10:06 -0500 Subject: [PATCH 028/441] Update CI config files to use Node-12.x (#3919) * ci(.travis.yml): Update Travis config to use Node-12 Downgrade to Node-10 for browser tests so we can use the pre-built canvas package. * ci(appveyor.yml): Update AppVeyor config to use Node-12 Future-proof install for Node versions to use alternative Node update method if pre-installed version unavailable. --- .travis.yml | 5 ++++- appveyor.yml | 11 +++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2de2a30cdb..e6125d7d3c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,11 @@ stages: # defaults language: node_js -node_js: '11' +node_js: '12' addons: apt: packages: + # Growl - libnotify-bin # `nvm install` happens before the cache is restored, which means # we must install our own npm elsewhere (`~/npm`) @@ -49,6 +50,8 @@ jobs: node_js: '6' - script: npm start test.bundle test.browser + # XXX: update when canvas supplies a prebuilt binary for Node.js v12.x + node_js: 10 install: npm ci # we need the native modules here addons: artifacts: diff --git a/appveyor.yml b/appveyor.yml index 32ed327dea..780466f46b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,7 +12,7 @@ shallow_clone: true clone_depth: 1 environment: matrix: - - nodejs_version: '11' + - nodejs_version: '12' - nodejs_version: '10' - nodejs_version: '8' - nodejs_version: '6' @@ -35,7 +35,14 @@ install: ## Node-related installs - ps: Add-AppveyorMessage "Installing Node..." - set PATH=%APPDATA%\npm;C:\MinGW\bin;%PATH% - - ps: Install-Product node $env:nodejs_version x64 + ## Prefer pre-installed Node versions, with fallback to manual update + - ps: | + try { + Install-Product node $env:nodejs_version $env:platform + } catch { + Add-AppveyorMessage " install failed - attempting manual update..." + Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) $env:platform + } - ps: Add-AppveyorMessage "Installing npm..." - npm install -g npm ## Mocha-related package installs From c903147f059fd5c8a0b2b61a47e9612fd4426760 Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Thu, 13 Jun 2019 13:27:35 +0200 Subject: [PATCH 029/441] More, improved integration tests for watching (#3929) To extend the test coverage for mocha in watch mode we add the following two tests: * Check that test files are reloaded * Check that watched dependencies are reloaded To support this change we consolidate `runMochaJSONWatchAsync`, `runMochaJSONRawAsync`, and repeated code in tests into `runMochaWatch`. We introduce `invokeMochaAsync` in `test/integration/helpers` as an async alternative to `invokeMocha`. We also eliminate the test for the cursor control character in the output. Its usefulness is dubious as it relies on an implementation detail and the other tests cover the intended behavior. We are also more explicit which test fixtures are used. Instead of setting `this.testFile` in a `beforeEach` hook we do this explicitly for the tests that require it. This prevents interference in tests that do not use the file. --- .../options/watch/dependency.fixture.js | 1 + .../options/watch/test-file-change.fixture.js | 8 + .../watch/test-with-dependency.fixture.js | 7 + test/integration/helpers.js | 66 ++--- test/integration/options/watch.spec.js | 225 +++++++++--------- 5 files changed, 168 insertions(+), 139 deletions(-) create mode 100644 test/integration/fixtures/options/watch/dependency.fixture.js create mode 100644 test/integration/fixtures/options/watch/test-file-change.fixture.js create mode 100644 test/integration/fixtures/options/watch/test-with-dependency.fixture.js diff --git a/test/integration/fixtures/options/watch/dependency.fixture.js b/test/integration/fixtures/options/watch/dependency.fixture.js new file mode 100644 index 0000000000..d4975b8bd6 --- /dev/null +++ b/test/integration/fixtures/options/watch/dependency.fixture.js @@ -0,0 +1 @@ +module.exports.testShouldFail = false; diff --git a/test/integration/fixtures/options/watch/test-file-change.fixture.js b/test/integration/fixtures/options/watch/test-file-change.fixture.js new file mode 100644 index 0000000000..ca897b050c --- /dev/null +++ b/test/integration/fixtures/options/watch/test-file-change.fixture.js @@ -0,0 +1,8 @@ +// This will be replaced in the tests +const testShouldFail = true; + +it('checks dependency', () => { + if (testShouldFail === true) { + throw new Error('test failed'); + } +}); diff --git a/test/integration/fixtures/options/watch/test-with-dependency.fixture.js b/test/integration/fixtures/options/watch/test-with-dependency.fixture.js new file mode 100644 index 0000000000..94d60dffe7 --- /dev/null +++ b/test/integration/fixtures/options/watch/test-with-dependency.fixture.js @@ -0,0 +1,7 @@ +const dependency = require('./lib/dependency'); + +it('checks dependency', () => { + if (dependency.testShouldFail === true) { + throw new Error('test failed'); + } +}); diff --git a/test/integration/helpers.js b/test/integration/helpers.js index a705a2fe9b..78251c986b 100644 --- a/test/integration/helpers.js +++ b/test/integration/helpers.js @@ -113,39 +113,6 @@ module.exports = { opts ); }, - /** - * Invokes the mocha binary with the given arguments fixture using - * the JSON reporter. Returns the child process and a promise for the - * results of running the command. The result includes the **raw** - * string output, as well as exit code. - * - * By default, `STDERR` is ignored. Pass `{stdio: 'pipe'}` as `opts` if you - * want it as part of the result output. - * - * @param {string[]} args - Array of args - * @param {Object} [opts] - Opts for `spawn()` - * @returns {[ChildProcess|Promise]} - */ - runMochaJSONRawAsync: function(args, opts) { - args = args || []; - - let childProcess; - const resultPromise = new Promise((resolve, reject) => { - childProcess = invokeSubMocha( - [...args, '--reporter', 'json'], - function(err, resRaw) { - if (err) { - reject(err); - } else { - resolve(resRaw); - } - }, - opts - ); - }); - - return [childProcess, resultPromise]; - }, /** * regular expression used for splitting lines based on new line / dot symbol. @@ -174,6 +141,8 @@ module.exports = { */ invokeMocha: invokeMocha, + invokeMochaAsync: invokeMochaAsync, + /** * Resolves the path to a fixture to the full path. */ @@ -227,6 +196,37 @@ function invokeMocha(args, fn, opts) { ); } +/** + * Invokes the mocha binary with the given arguments. Returns the + * child process and a promise for the results of running the + * command. The promise resolves when the child process exits. The + * result includes the **raw** string output, as well as exit code. + * + * By default, `STDERR` is ignored. Pass `{stdio: 'pipe'}` as `opts` if you + * want it as part of the result output. + * + * @param {string[]} args - Array of args + * @param {Object} [opts] - Opts for `spawn()` + * @returns {[ChildProcess|Promise]} + */ +function invokeMochaAsync(args, opts) { + let mochaProcess; + const resultPromise = new Promise((resolve, reject) => { + mochaProcess = _spawnMochaWithListeners( + defaultArgs([MOCHA_EXECUTABLE].concat(args)), + (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }, + opts + ); + }); + return [mochaProcess, resultPromise]; +} + function invokeSubMocha(args, fn, opts) { if (typeof args === 'function') { opts = fn; diff --git a/test/integration/options/watch.spec.js b/test/integration/options/watch.spec.js index 1fb187a1e7..53dd9900c3 100644 --- a/test/integration/options/watch.spec.js +++ b/test/integration/options/watch.spec.js @@ -4,9 +4,6 @@ const fs = require('fs-extra'); const os = require('os'); const path = require('path'); const helpers = require('../helpers'); -const runMochaJSONRawAsync = helpers.runMochaJSONRawAsync; - -const sigintExitCode = 130; describe('--watch', function() { describe('when enabled', function() { @@ -15,11 +12,6 @@ describe('--watch', function() { beforeEach(function() { this.tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'mocha-')); - - const fixtureSource = helpers.DEFAULT_FIXTURE; - - this.testFile = path.join(this.tempDir, 'test.js'); - fs.copySync(fixtureSource, this.testFile); }); afterEach(function() { @@ -28,79 +20,39 @@ describe('--watch', function() { } }); - it('should show the cursor and signal correct exit code, when watch process is terminated', function() { - // Feature works but SIMULATING the signal (ctrl+c) via child process - // does not work due to lack of POSIX signal compliance on Windows. - if (process.platform === 'win32') { - this.skip(); - } - - const [mocha, resultPromise] = runMochaJSONRawAsync([ - helpers.DEFAULT_FIXTURE, - '--watch' - ]); - - return sleep(1000) - .then(() => { - mocha.kill('SIGINT'); - return resultPromise; - }) - .then(data => { - const expectedCloseCursor = '\u001b[?25h'; - expect(data.output, 'to contain', expectedCloseCursor); - - expect(data.code, 'to be', sigintExitCode); - }); - }); - it('reruns test when watched test file is touched', function() { - const [mocha, outputPromise] = runMochaJSONWatchAsync([this.testFile], { - cwd: this.tempDir - }); + const testFile = path.join(this.tempDir, 'test.js'); + copyFixture('__default__', testFile); - return expect( - sleep(1000) - .then(() => { - touchFile(this.testFile); - return sleep(1000); - }) - .then(() => { - mocha.kill('SIGINT'); - return outputPromise; - }), - 'when fulfilled', - 'to have length', - 2 - ); + return runMochaWatch([testFile], this.tempDir, () => { + touchFile(testFile); + }).then(results => { + expect(results, 'to have length', 2); + }); }); it('reruns test when file matching extension is touched', function() { + const testFile = path.join(this.tempDir, 'test.js'); + copyFixture('__default__', testFile); + const watchedFile = path.join(this.tempDir, 'file.xyz'); touchFile(watchedFile); - const [mocha, outputPromise] = runMochaJSONWatchAsync( - [this.testFile, '--extension', 'xyz,js'], - { - cwd: this.tempDir - } - ); - return expect( - sleep(1000) - .then(() => { - touchFile(watchedFile); - return sleep(1000); - }) - .then(() => { - mocha.kill('SIGINT'); - return outputPromise; - }), - 'when fulfilled', - 'to have length', - 2 - ); + return runMochaWatch( + [testFile, '--extension', 'xyz,js'], + this.tempDir, + () => { + touchFile(watchedFile); + } + ).then(results => { + expect(results, 'to have length', 2); + }); }); - it('ignores files in "node_modules" and ".git"', function() { + it('ignores files in "node_modules" and ".git" by default', function() { + const testFile = path.join(this.tempDir, 'test.js'); + copyFixture('__default__', testFile); + const nodeModulesFile = path.join( this.tempDir, 'node_modules', @@ -111,50 +63,91 @@ describe('--watch', function() { touchFile(gitFile); touchFile(nodeModulesFile); - const [mocha, outputPromise] = runMochaJSONWatchAsync( - [this.testFile, '--extension', 'xyz,js'], - { - cwd: this.tempDir + return runMochaWatch( + [testFile, '--extension', 'xyz,js'], + this.tempDir, + () => { + touchFile(gitFile); + touchFile(nodeModulesFile); } - ); + ).then(results => { + expect(results, 'to have length', 1); + }); + }); - return expect( - sleep(1000) - .then(() => { - touchFile(gitFile); - touchFile(nodeModulesFile); - }) - .then(() => sleep(1000)) - .then(() => { - mocha.kill('SIGINT'); - return outputPromise; - }), - 'when fulfilled', - 'to have length', - 1 - ); + it('reloads test files when they change', function() { + const testFile = path.join(this.tempDir, 'test.js'); + copyFixture('options/watch/test-file-change', testFile); + + return runMochaWatch([testFile], this.tempDir, () => { + replaceFileContents( + testFile, + 'testShouldFail = true', + 'testShouldFail = false' + ); + }).then(results => { + expect(results, 'to have length', 2); + expect(results[0].passes, 'to have length', 0); + expect(results[0].failures, 'to have length', 1); + expect(results[1].passes, 'to have length', 1); + expect(results[1].failures, 'to have length', 0); + }); + }); + + it('reloads test dependencies when they change', function() { + const testFile = path.join(this.tempDir, 'test.js'); + copyFixture('options/watch/test-with-dependency', testFile); + + const dependency = path.join(this.tempDir, 'lib', 'dependency.js'); + copyFixture('options/watch/dependency', dependency); + + return runMochaWatch([testFile], this.tempDir, () => { + replaceFileContents( + dependency, + 'module.exports.testShouldFail = false', + 'module.exports.testShouldFail = true' + ); + }).then(results => { + expect(results, 'to have length', 2); + expect(results[0].passes, 'to have length', 1); + expect(results[0].failures, 'to have length', 0); + expect(results[1].passes, 'to have length', 0); + expect(results[1].failures, 'to have length', 1); + }); }); }); }); /** - * Invokes the mocha binary with the `--watch` argument for the given fixture. + * Runs the mocha binary in watch mode calls `change` and returns the + * JSON reporter output. * - * Returns child process and a promise for the test results. The test results - * are an array of JSON objects generated by the JSON reporter. + * The function starts mocha with the given arguments and `--watch` and + * waits until the first test run has completed. Then it calls `change` + * and waits until the second test run has been completed. Mocha is + * killed and the list of JSON outputs is returned. */ -function runMochaJSONWatchAsync(args, spawnOpts) { - args = [...args, '--watch']; - const [mocha, mochaDone] = runMochaJSONRawAsync(args, spawnOpts); - const testResults = mochaDone.then(data => { - const testResults = data.output - // eslint-disable-next-line no-control-regex - .replace(/\u001b\[\?25./g, '') - .split('\u001b[2K') - .map(x => JSON.parse(x)); - return testResults; - }); - return [mocha, testResults]; +function runMochaWatch(args, cwd, change) { + const [mochaProcess, resultPromise] = helpers.invokeMochaAsync( + [...args, '--watch', '--reporter', 'json'], + {cwd} + ); + + return sleep(1000) + .then(() => change()) + .then(() => sleep(1000)) + .then(() => { + mochaProcess.kill('SIGINT'); + return resultPromise; + }) + .then(data => { + const testResults = data.output + // eslint-disable-next-line no-control-regex + .replace(/\u001b\[\?25./g, '') + .split('\u001b[2K') + .map(x => JSON.parse(x)); + return testResults; + }); } /** @@ -166,6 +159,26 @@ function touchFile(file) { fs.appendFileSync(file, ' '); } +/** + * Synchronously eplace all substrings matched by `pattern` with + * `replacement` in the file’s content. + */ +function replaceFileContents(file, pattern, replacement) { + const contents = fs.readFileSync(file, 'utf-8'); + const newContents = contents.replace(pattern, replacement); + fs.writeFileSync(file, newContents, 'utf-8'); +} + +/** + * Synchronously copy a fixture to the given destion file path. Creates + * parent directories of the destination path if necessary. + */ +function copyFixture(fixtureName, dest) { + const fixtureSource = helpers.resolveFixturePath(fixtureName); + fs.ensureDirSync(path.dirname(dest)); + fs.copySync(fixtureSource, dest); +} + function sleep(time) { return new Promise(resolve => { setTimeout(resolve, time); From 47318a75fb0a218f843289de0511e8558f8b4df0 Mon Sep 17 00:00:00 2001 From: Christopher Hiller Date: Wed, 19 Jun 2019 00:50:13 -0700 Subject: [PATCH 030/441] update @mocha/contributors to v1.0.4 (#3944) --- package-lock.json | 28 +++++++++++++--------------- package.json | 2 +- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4b751c2727..08a127af94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -280,9 +280,9 @@ } }, "@mocha/contributors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@mocha/contributors/-/contributors-1.0.3.tgz", - "integrity": "sha512-BXrD00uf9gXqYVhS4wsKNdR7I88fQgNcxFNUhsdwZoWX4OZsR+F3fy8N+rizFMOGMiJbSa/Qm9CVjXYSXNznZA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@mocha/contributors/-/contributors-1.0.4.tgz", + "integrity": "sha512-bdOaBixwP7948K7xlqSXnelbsLDAnCX1h4qSRYfbRADMg+UtNJE+ggpzTdBVpdLNxJLkgnRM5KJ9MXiLoMib3Q==", "dev": true, "requires": { "log-symbols": "^2.2.0", @@ -310,18 +310,16 @@ "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" - }, - "dependencies": { - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/package.json b/package.json index 0df4039ec8..b8f51c452c 100644 --- a/package.json +++ b/package.json @@ -530,7 +530,7 @@ }, "devDependencies": { "@11ty/eleventy": "^0.8.3", - "@mocha/contributors": "^1.0.3", + "@mocha/contributors": "^1.0.4", "@mocha/docdash": "^2.1.1", "assetgraph-builder": "^6.10.1", "autoprefixer": "^9.6.0", From ccee5f1b37bb405b81814daa35c63801cad20b4d Mon Sep 17 00:00:00 2001 From: Craig Taub Date: Wed, 19 Jun 2019 11:05:47 +0100 Subject: [PATCH 031/441] Base reporter store ref to console.log (#3725) * add console.log ref * inherit println * unit test change * use static property and fix test * fix base test * rename consoleLog * test include Base.consoleLog check * linter rule so reporters dont console.log * use hooks for stubs with base test * restore stub dont callThrough * fix test + rebase * fix faulty rebase. Removed printLn * remove superfluous base --- .eslintrc.yml | 9 +++++++++ lib/reporters/base.js | 23 +++++++++++++++-------- lib/reporters/doc.js | 24 ++++++++++++++---------- lib/reporters/dot.js | 2 +- lib/reporters/landing.js | 2 +- lib/reporters/list.js | 8 ++++---- lib/reporters/progress.js | 4 ++-- lib/reporters/spec.js | 14 +++++++------- lib/reporters/xunit.js | 2 +- test/reporters/base.spec.js | 24 +++++++++++++++++++++++- test/reporters/xunit.spec.js | 4 ++-- 11 files changed, 79 insertions(+), 37 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index f696b45ca8..a668139868 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -79,3 +79,12 @@ overrides: parserOptions: ecmaVersion: 6 sourceType: module + + - files: + - lib/reporters/*.js + rules: + no-restricted-syntax: + - error + # disallow Reporters using `console.log()` + - selector: 'CallExpression[callee.object.name=console][callee.property.name=log]' + message: &GH-3604 See https://github.com/mochajs/mocha/issues/3604 diff --git a/lib/reporters/base.js b/lib/reporters/base.js index 3736c018ca..670a160fa8 100644 --- a/lib/reporters/base.js +++ b/lib/reporters/base.js @@ -27,6 +27,11 @@ exports = module.exports = Base; var isatty = tty.isatty(1) && tty.isatty(2); +/** + * Save log references to avoid tests interfering (see GH-3604). + */ +var consoleLog = console.log; + /** * Enable coloring by default, except in the browser interface. */ @@ -192,7 +197,7 @@ var generateDiff = (exports.generateDiff = function(actual, expected) { * Error property */ exports.list = function(failures) { - console.log(); + Base.consoleLog(); failures.forEach(function(test, i) { // format var fmt = @@ -253,7 +258,7 @@ exports.list = function(failures) { testTitle += str; }); - console.log(fmt, i + 1, testTitle, msg, stack); + Base.consoleLog(fmt, i + 1, testTitle, msg, stack); }); }; @@ -308,7 +313,7 @@ Base.prototype.epilogue = function() { var stats = this.stats; var fmt; - console.log(); + Base.consoleLog(); // passes fmt = @@ -316,26 +321,26 @@ Base.prototype.epilogue = function() { color('green', ' %d passing') + color('light', ' (%s)'); - console.log(fmt, stats.passes || 0, milliseconds(stats.duration)); + Base.consoleLog(fmt, stats.passes || 0, milliseconds(stats.duration)); // pending if (stats.pending) { fmt = color('pending', ' ') + color('pending', ' %d pending'); - console.log(fmt, stats.pending); + Base.consoleLog(fmt, stats.pending); } // failures if (stats.failures) { fmt = color('fail', ' %d failing'); - console.log(fmt, stats.failures); + Base.consoleLog(fmt, stats.failures); Base.list(this.failures); - console.log(); + Base.consoleLog(); } - console.log(); + Base.consoleLog(); }; /** @@ -488,4 +493,6 @@ function sameType(a, b) { return objToString.call(a) === objToString.call(b); } +Base.consoleLog = consoleLog; + Base.abstract = true; diff --git a/lib/reporters/doc.js b/lib/reporters/doc.js index efcb2d0caf..5a6af8fb42 100644 --- a/lib/reporters/doc.js +++ b/lib/reporters/doc.js @@ -44,41 +44,45 @@ function Doc(runner, options) { return; } ++indents; - console.log('%s
', indent()); + Base.consoleLog('%s
', indent()); ++indents; - console.log('%s

%s

', indent(), utils.escape(suite.title)); - console.log('%s
', indent()); + Base.consoleLog('%s

%s

', indent(), utils.escape(suite.title)); + Base.consoleLog('%s
', indent()); }); runner.on(EVENT_SUITE_END, function(suite) { if (suite.root) { return; } - console.log('%s
', indent()); + Base.consoleLog('%s
', indent()); --indents; - console.log('%s
', indent()); + Base.consoleLog('%s
', indent()); --indents; }); runner.on(EVENT_TEST_PASS, function(test) { - console.log('%s
%s
', indent(), utils.escape(test.title)); + Base.consoleLog('%s
%s
', indent(), utils.escape(test.title)); var code = utils.escape(utils.clean(test.body)); - console.log('%s
%s
', indent(), code); + Base.consoleLog('%s
%s
', indent(), code); }); runner.on(EVENT_TEST_FAIL, function(test, err) { - console.log( + Base.consoleLog( '%s
%s
', indent(), utils.escape(test.title) ); var code = utils.escape(utils.clean(test.body)); - console.log( + Base.consoleLog( '%s
%s
', indent(), code ); - console.log('%s
%s
', indent(), utils.escape(err)); + Base.consoleLog( + '%s
%s
', + indent(), + utils.escape(err) + ); }); } diff --git a/lib/reporters/dot.js b/lib/reporters/dot.js index c4c5ce5d92..3913f0c679 100644 --- a/lib/reporters/dot.js +++ b/lib/reporters/dot.js @@ -68,7 +68,7 @@ function Dot(runner, options) { }); runner.once(EVENT_RUN_END, function() { - console.log(); + process.stdout.write('\n'); self.epilogue(); }); } diff --git a/lib/reporters/landing.js b/lib/reporters/landing.js index b124c7789c..a6af946c42 100644 --- a/lib/reporters/landing.js +++ b/lib/reporters/landing.js @@ -95,7 +95,7 @@ function Landing(runner, options) { runner.once(EVENT_RUN_END, function() { cursor.show(); - console.log(); + process.stdout.write('\n'); self.epilogue(); }); } diff --git a/lib/reporters/list.js b/lib/reporters/list.js index cdf4279644..c7ff8c4ea8 100644 --- a/lib/reporters/list.js +++ b/lib/reporters/list.js @@ -41,7 +41,7 @@ function List(runner, options) { var n = 0; runner.on(EVENT_RUN_BEGIN, function() { - console.log(); + Base.consoleLog(); }); runner.on(EVENT_TEST_BEGIN, function(test) { @@ -50,7 +50,7 @@ function List(runner, options) { runner.on(EVENT_TEST_PENDING, function(test) { var fmt = color('checkmark', ' -') + color('pending', ' %s'); - console.log(fmt, test.fullTitle()); + Base.consoleLog(fmt, test.fullTitle()); }); runner.on(EVENT_TEST_PASS, function(test) { @@ -59,12 +59,12 @@ function List(runner, options) { color('pass', ' %s: ') + color(test.speed, '%dms'); cursor.CR(); - console.log(fmt, test.fullTitle(), test.duration); + Base.consoleLog(fmt, test.fullTitle(), test.duration); }); runner.on(EVENT_TEST_FAIL, function(test) { cursor.CR(); - console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); + Base.consoleLog(color('fail', ' %d) %s'), ++n, test.fullTitle()); }); runner.once(EVENT_RUN_END, self.epilogue.bind(self)); diff --git a/lib/reporters/progress.js b/lib/reporters/progress.js index 0432e4fb0a..0211122a9d 100644 --- a/lib/reporters/progress.js +++ b/lib/reporters/progress.js @@ -58,7 +58,7 @@ function Progress(runner, options) { // tests started runner.on(EVENT_RUN_BEGIN, function() { - console.log(); + process.stdout.write('\n'); cursor.hide(); }); @@ -91,7 +91,7 @@ function Progress(runner, options) { // and the failures if any runner.once(EVENT_RUN_END, function() { cursor.show(); - console.log(); + process.stdout.write('\n'); self.epilogue(); }); } diff --git a/lib/reporters/spec.js b/lib/reporters/spec.js index e1ae95e92d..e51ed80ac4 100644 --- a/lib/reporters/spec.js +++ b/lib/reporters/spec.js @@ -46,24 +46,24 @@ function Spec(runner, options) { } runner.on(EVENT_RUN_BEGIN, function() { - console.log(); + Base.consoleLog(); }); runner.on(EVENT_SUITE_BEGIN, function(suite) { ++indents; - console.log(color('suite', '%s%s'), indent(), suite.title); + Base.consoleLog(color('suite', '%s%s'), indent(), suite.title); }); runner.on(EVENT_SUITE_END, function() { --indents; if (indents === 1) { - console.log(); + Base.consoleLog(); } }); runner.on(EVENT_TEST_PENDING, function(test) { var fmt = indent() + color('pending', ' - %s'); - console.log(fmt, test.title); + Base.consoleLog(fmt, test.title); }); runner.on(EVENT_TEST_PASS, function(test) { @@ -73,19 +73,19 @@ function Spec(runner, options) { indent() + color('checkmark', ' ' + Base.symbols.ok) + color('pass', ' %s'); - console.log(fmt, test.title); + Base.consoleLog(fmt, test.title); } else { fmt = indent() + color('checkmark', ' ' + Base.symbols.ok) + color('pass', ' %s') + color(test.speed, ' (%dms)'); - console.log(fmt, test.title, test.duration); + Base.consoleLog(fmt, test.title, test.duration); } }); runner.on(EVENT_TEST_FAIL, function(test) { - console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); + Base.consoleLog(indent() + color('fail', ' %d) %s'), ++n, test.title); }); runner.once(EVENT_RUN_END, self.epilogue.bind(self)); diff --git a/lib/reporters/xunit.js b/lib/reporters/xunit.js index 09b32f1ca7..6c9c937be8 100644 --- a/lib/reporters/xunit.js +++ b/lib/reporters/xunit.js @@ -142,7 +142,7 @@ XUnit.prototype.write = function(line) { } else if (typeof process === 'object' && process.stdout) { process.stdout.write(line + '\n'); } else { - console.log(line); + Base.consoleLog(line); } }; diff --git a/test/reporters/base.spec.js b/test/reporters/base.spec.js index 739063f32a..80957c39aa 100644 --- a/test/reporters/base.spec.js +++ b/test/reporters/base.spec.js @@ -5,7 +5,6 @@ var chai = require('chai'); var sinon = require('sinon'); var helpers = require('./helpers'); var reporters = require('../../').reporters; - var AssertionError = assert.AssertionError; var Base = reporters.Base; var chaiExpect = chai.expect; @@ -417,4 +416,27 @@ describe('Base reporter', function() { var errOut = stdout.join('\n').trim(); expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); + + describe('when reporter output immune to user test changes', function() { + var sandbox; + var baseConsoleLog; + + beforeEach(function() { + sandbox = sinon.createSandbox(); + sandbox.stub(console, 'log'); + baseConsoleLog = sandbox.stub(Base, 'consoleLog'); + }); + + it('should let you stub out console.log without effecting reporters output', function() { + Base.list([]); + baseConsoleLog.restore(); + + expect(baseConsoleLog, 'was called'); + expect(console.log, 'was not called'); + }); + + afterEach(function() { + sandbox.restore(); + }); + }); }); diff --git a/test/reporters/xunit.spec.js b/test/reporters/xunit.spec.js index 26fce4a1c4..2d05312fae 100644 --- a/test/reporters/xunit.spec.js +++ b/test/reporters/xunit.spec.js @@ -277,14 +277,14 @@ describe('XUnit reporter', function() { }); describe('when output directed to console', function() { - it("should call 'console.log' with line", function() { + it("should call 'Base.consoleLog' with line", function() { // :TODO: XUnit needs a trivially testable means to force console.log() var realProcess = process; process = false; // eslint-disable-line no-native-reassign, no-global-assign var xunit = new XUnit(runner); var fakeThis = {fileStream: false}; - var consoleLogStub = sinon.stub(console, 'log'); + var consoleLogStub = sinon.stub(Base, 'consoleLog'); xunit.write.call(fakeThis, expectedLine); consoleLogStub.restore(); From 15b96afccaf508312445770e3af1c145d90b28c6 Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Wed, 26 Jun 2019 19:33:19 +0200 Subject: [PATCH 032/441] Collect test files later (#3953) This commit prepares improvements to the watch mode behavior. In the future we want Mocha in watch mode to pick up new test files. This requires that the test files are collected inside `watchRun` instead of before. To accomplish this change we rename `handleFiles` to `collectFiles` and move it to its own module. Instead of calling `collectFiles` in `lib/cli/run` and passing the files on to `watchRun` or `singleRun` we pass down the file collection parameters through `runMocha` and call `collectFiles` in both `watchRun` and `singleRun`. --- lib/cli/collect-files.js | 84 +++++++++++++++++++++++++ lib/cli/run-helpers.js | 130 ++++++++++----------------------------- lib/cli/run.js | 6 +- lib/cli/watch-run.js | 11 ++-- 4 files changed, 126 insertions(+), 105 deletions(-) create mode 100644 lib/cli/collect-files.js diff --git a/lib/cli/collect-files.js b/lib/cli/collect-files.js new file mode 100644 index 0000000000..ff35ed3d36 --- /dev/null +++ b/lib/cli/collect-files.js @@ -0,0 +1,84 @@ +'use strict'; + +const path = require('path'); +const ansi = require('ansi-colors'); +const debug = require('debug')('mocha:cli:run:helpers'); +const minimatch = require('minimatch'); +const utils = require('../utils'); + +/** + * Exports a function that collects test files from CLI parameters. + * @see module:lib/cli/run-helpers + * @see module:lib/cli/watch-run + * @module + * @private + */ + +/** + * Smash together an array of test files in the correct order + * @param {Object} opts - Options + * @param {string[]} opts.extension - File extensions to use + * @param {string[]} opts.spec - Files, dirs, globs to run + * @param {string[]} opts.ignore - Files, dirs, globs to ignore + * @param {string[]} opts.file - List of additional files to include + * @param {boolean} opts.recursive - Find files recursively + * @param {boolean} opts.sort - Sort test files + * @returns {string[]} List of files to test + * @private + */ +module.exports = ({ignore, extension, file, recursive, sort, spec} = {}) => { + let files = []; + const unmatched = []; + spec.forEach(arg => { + let newFiles; + try { + newFiles = utils.lookupFiles(arg, extension, recursive); + } catch (err) { + if (err.code === 'ERR_MOCHA_NO_FILES_MATCH_PATTERN') { + unmatched.push({message: err.message, pattern: err.pattern}); + return; + } + + throw err; + } + + if (typeof newFiles !== 'undefined') { + if (typeof newFiles === 'string') { + newFiles = [newFiles]; + } + newFiles = newFiles.filter(fileName => + ignore.every(pattern => !minimatch(fileName, pattern)) + ); + } + + files = files.concat(newFiles); + }); + + if (!files.length) { + // give full message details when only 1 file is missing + const noneFoundMsg = + unmatched.length === 1 + ? `Error: No test files found: ${JSON.stringify(unmatched[0].pattern)}` // stringify to print escaped characters raw + : 'Error: No test files found'; + console.error(ansi.red(noneFoundMsg)); + process.exit(1); + } else { + // print messages as an warning + unmatched.forEach(warning => { + console.warn(ansi.yellow(`Warning: ${warning.message}`)); + }); + } + + const fileArgs = file.map(filepath => path.resolve(filepath)); + files = files.map(filepath => path.resolve(filepath)); + + // ensure we don't sort the stuff from fileArgs; order is important! + if (sort) { + files.sort(); + } + + // add files given through --file to be ran first + files = fileArgs.concat(files); + debug('files (in order): ', files); + return files; +}; diff --git a/lib/cli/run-helpers.js b/lib/cli/run-helpers.js index a3848598f9..fce5e6250c 100644 --- a/lib/cli/run-helpers.js +++ b/lib/cli/run-helpers.js @@ -9,11 +9,9 @@ const fs = require('fs'); const path = require('path'); -const ansi = require('ansi-colors'); const debug = require('debug')('mocha:cli:run:helpers'); -const minimatch = require('minimatch'); -const utils = require('../utils'); const watchRun = require('./watch-run'); +const collectFiles = require('./collect-files'); const cwd = (exports.cwd = process.cwd()); @@ -94,90 +92,18 @@ exports.handleRequires = (requires = []) => { }; /** - * Smash together an array of test files in the correct order - * @param {Object} [opts] - Options - * @param {string[]} [opts.extension] - File extensions to use - * @param {string[]} [opts.spec] - Files, dirs, globs to run - * @param {string[]} [opts.ignore] - Files, dirs, globs to ignore - * @param {boolean} [opts.recursive=false] - Find files recursively - * @param {boolean} [opts.sort=false] - Sort test files - * @returns {string[]} List of files to test - * @private - */ -exports.handleFiles = ({ - ignore = [], - extension = [], - file = [], - recursive = false, - sort = false, - spec = [] -} = {}) => { - let files = []; - const unmatched = []; - spec.forEach(arg => { - let newFiles; - try { - newFiles = utils.lookupFiles(arg, extension, recursive); - } catch (err) { - if (err.code === 'ERR_MOCHA_NO_FILES_MATCH_PATTERN') { - unmatched.push({message: err.message, pattern: err.pattern}); - return; - } - - throw err; - } - - if (typeof newFiles !== 'undefined') { - if (typeof newFiles === 'string') { - newFiles = [newFiles]; - } - newFiles = newFiles.filter(fileName => - ignore.every(pattern => !minimatch(fileName, pattern)) - ); - } - - files = files.concat(newFiles); - }); - - if (!files.length) { - // give full message details when only 1 file is missing - const noneFoundMsg = - unmatched.length === 1 - ? `Error: No test files found: ${JSON.stringify(unmatched[0].pattern)}` // stringify to print escaped characters raw - : 'Error: No test files found'; - console.error(ansi.red(noneFoundMsg)); - process.exit(1); - } else { - // print messages as an warning - unmatched.forEach(warning => { - console.warn(ansi.yellow(`Warning: ${warning.message}`)); - }); - } - - const fileArgs = file.map(filepath => path.resolve(filepath)); - files = files.map(filepath => path.resolve(filepath)); - - // ensure we don't sort the stuff from fileArgs; order is important! - if (sort) { - files.sort(); - } - - // add files given through --file to be ran first - files = fileArgs.concat(files); - debug('files (in order): ', files); - return files; -}; - -/** - * Give Mocha files and tell it to run + * Collect test files and run mocha instance. * @param {Mocha} mocha - Mocha instance - * @param {Options} [opts] - Options - * @param {string[]} [opts.files] - List of test files + * @param {Options} [opts] - Command line options * @param {boolean} [opts.exit] - Whether or not to force-exit after tests are complete + * @param {Object} fileCollectParams - Parameters that control test + * file collection. See `lib/cli/collect-files.js`. * @returns {Runner} * @private */ -exports.singleRun = (mocha, {files = [], exit = false} = {}) => { +exports.singleRun = (mocha, {exit}, fileCollectParams) => { + const files = collectFiles(fileCollectParams); + debug('running tests with files', files); mocha.files = files; return mocha.run(exit ? exitMocha : exitMochaLater); }; @@ -185,24 +111,36 @@ exports.singleRun = (mocha, {files = [], exit = false} = {}) => { /** * Actually run tests * @param {Mocha} mocha - Mocha instance - * @param {Object} [opts] - Options - * @param {boolean} [opts.watch=false] - Enable watch mode - * @param {string[]} [opts.extension] - List of extensions to watch - * @param {string|RegExp} [opts.grep] - Grep for test titles - * @param {string} [opts.ui=bdd] - User interface - * @param {boolean} [opts.exit=false] - Force-exit Mocha when tests done - * @param {string[]} [files] - Array of test files + * @param {Object} opts - Command line options * @private */ -exports.runMocha = ( - mocha, - {watch = false, extension = [], grep = '', ui = 'bdd', exit = false} = {}, - files = [] -) => { +exports.runMocha = (mocha, options) => { + const { + watch = false, + extension = [], + grep = '', + ui = 'bdd', + exit = false, + ignore = [], + file = [], + recursive = false, + sort = false, + spec = [] + } = options; + + const fileCollectParams = { + ignore, + extension, + file, + recursive, + sort, + spec + }; + if (watch) { - watchRun(mocha, {extension, grep, ui, files}); + watchRun(mocha, {ui, grep}, fileCollectParams); } else { - exports.singleRun(mocha, {files, exit}); + exports.singleRun(mocha, {exit}, fileCollectParams); } }; diff --git a/lib/cli/run.js b/lib/cli/run.js index da5ffd7b6a..bb7c021998 100644 --- a/lib/cli/run.js +++ b/lib/cli/run.js @@ -16,7 +16,6 @@ const { const { list, - handleFiles, handleRequires, validatePlugin, runMocha @@ -290,8 +289,5 @@ exports.builder = yargs => exports.handler = argv => { debug('post-yargs config', argv); const mocha = new Mocha(argv); - const files = handleFiles(argv); - - debug('running tests with files', files); - runMocha(mocha, argv, files); + runMocha(mocha, argv); }; diff --git a/lib/cli/watch-run.js b/lib/cli/watch-run.js index 54765b7cf7..10d4407673 100644 --- a/lib/cli/watch-run.js +++ b/lib/cli/watch-run.js @@ -3,6 +3,7 @@ const utils = require('../utils'); const Context = require('../context'); const Mocha = require('../mocha'); +const collectFiles = require('./collect-files'); /** * Exports the `watchRun` function that runs mocha in "watch" mode. @@ -15,14 +16,16 @@ const Mocha = require('../mocha'); * Run Mocha in "watch" mode * @param {Mocha} mocha - Mocha instance * @param {Object} opts - Options - * @param {string[]} opts.extension - List of extensions to watch * @param {string|RegExp} opts.grep - Grep for test titles * @param {string} opts.ui - User interface - * @param {string[]} opts.files - Array of test files + * @param {Object} fileCollectParams - Parameters that control test + * file collection. See `lib/cli/collect-files.js`. + * @param {string[]} fileCollectParams.extension - List of extensions to watch * @private */ -module.exports = (mocha, {extension, grep, ui, files}) => { +module.exports = (mocha, {grep, ui}, fileCollectParams) => { let runner; + const files = collectFiles(fileCollectParams); console.log(); hideCursor(); @@ -34,7 +37,7 @@ module.exports = (mocha, {extension, grep, ui, files}) => { process.exit(128 + 2); }); - const watchFiles = utils.files(process.cwd(), extension); + const watchFiles = utils.files(process.cwd(), fileCollectParams.extension); let runAgain = false; const loadAndRun = () => { From 5d4dd98747637d0e7ed3007328ec9627dd7eda41 Mon Sep 17 00:00:00 2001 From: Gabe Gorelick Date: Thu, 27 Jun 2019 03:11:23 -0500 Subject: [PATCH 033/441] Fix No Files error when file is passed via --files (#3942) Fixes #3941 --- lib/cli/collect-files.js | 23 ++++++++++++----------- test/integration/options/file.spec.js | 12 ++++++++++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/lib/cli/collect-files.js b/lib/cli/collect-files.js index ff35ed3d36..61d54ac4b3 100644 --- a/lib/cli/collect-files.js +++ b/lib/cli/collect-files.js @@ -54,6 +54,18 @@ module.exports = ({ignore, extension, file, recursive, sort, spec} = {}) => { files = files.concat(newFiles); }); + const fileArgs = file.map(filepath => path.resolve(filepath)); + files = files.map(filepath => path.resolve(filepath)); + + // ensure we don't sort the stuff from fileArgs; order is important! + if (sort) { + files.sort(); + } + + // add files given through --file to be ran first + files = fileArgs.concat(files); + debug('files (in order): ', files); + if (!files.length) { // give full message details when only 1 file is missing const noneFoundMsg = @@ -69,16 +81,5 @@ module.exports = ({ignore, extension, file, recursive, sort, spec} = {}) => { }); } - const fileArgs = file.map(filepath => path.resolve(filepath)); - files = files.map(filepath => path.resolve(filepath)); - - // ensure we don't sort the stuff from fileArgs; order is important! - if (sort) { - files.sort(); - } - - // add files given through --file to be ran first - files = fileArgs.concat(files); - debug('files (in order): ', files); return files; }; diff --git a/test/integration/options/file.spec.js b/test/integration/options/file.spec.js index f96b58668d..cbe361d8aa 100644 --- a/test/integration/options/file.spec.js +++ b/test/integration/options/file.spec.js @@ -52,4 +52,16 @@ describe('--file', function() { done(); }); }); + + it('should support having no other test files', function(done) { + args = ['--file', resolvePath(fixtures.alpha)]; + + runMochaJSON('filethatdoesnotexist.js', args, function(err, res) { + if (err) { + return done(err); + } + expect(res, 'to have passed').and('to have passed test count', 1); + done(); + }); + }); }); From 88f45d5fd146a03f728788c93594958f22942c44 Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Wed, 17 Jul 2019 13:27:12 +0200 Subject: [PATCH 034/441] Don't re-initialize grep option on watch re-run (#3960) We remove code that called `mocha.grep(null)` on watch re-runs if the `--grep` option was not supplied. The code seems to serve no purpose and is the cause of #2027. --- lib/cli/run-helpers.js | 3 +-- lib/cli/watch-run.js | 6 +----- test/integration/options/watch.spec.js | 20 +++++++++++++++++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/cli/run-helpers.js b/lib/cli/run-helpers.js index fce5e6250c..7b3c7aa4fe 100644 --- a/lib/cli/run-helpers.js +++ b/lib/cli/run-helpers.js @@ -118,7 +118,6 @@ exports.runMocha = (mocha, options) => { const { watch = false, extension = [], - grep = '', ui = 'bdd', exit = false, ignore = [], @@ -138,7 +137,7 @@ exports.runMocha = (mocha, options) => { }; if (watch) { - watchRun(mocha, {ui, grep}, fileCollectParams); + watchRun(mocha, {ui}, fileCollectParams); } else { exports.singleRun(mocha, {exit}, fileCollectParams); } diff --git a/lib/cli/watch-run.js b/lib/cli/watch-run.js index 10d4407673..e7ef34c632 100644 --- a/lib/cli/watch-run.js +++ b/lib/cli/watch-run.js @@ -16,14 +16,13 @@ const collectFiles = require('./collect-files'); * Run Mocha in "watch" mode * @param {Mocha} mocha - Mocha instance * @param {Object} opts - Options - * @param {string|RegExp} opts.grep - Grep for test titles * @param {string} opts.ui - User interface * @param {Object} fileCollectParams - Parameters that control test * file collection. See `lib/cli/collect-files.js`. * @param {string[]} fileCollectParams.extension - List of extensions to watch * @private */ -module.exports = (mocha, {grep, ui}, fileCollectParams) => { +module.exports = (mocha, {ui}, fileCollectParams) => { let runner; const files = collectFiles(fileCollectParams); @@ -64,9 +63,6 @@ module.exports = (mocha, {grep, ui}, fileCollectParams) => { const rerun = () => { purge(); eraseLine(); - if (!grep) { - mocha.grep(null); - } mocha.suite = mocha.suite.clone(); mocha.suite.ctx = new Context(); mocha.ui(ui); diff --git a/test/integration/options/watch.spec.js b/test/integration/options/watch.spec.js index 53dd9900c3..5d9fb2f26a 100644 --- a/test/integration/options/watch.spec.js +++ b/test/integration/options/watch.spec.js @@ -115,6 +115,20 @@ describe('--watch', function() { expect(results[1].failures, 'to have length', 1); }); }); + + // Regression test for https://github.com/mochajs/mocha/issues/2027 + it('respects --fgrep on re-runs', function() { + const testFile = path.join(this.tempDir, 'test.js'); + copyFixture('options/grep', testFile); + + return runMochaWatch([testFile, '--fgrep', 'match'], this.tempDir, () => { + touchFile(testFile); + }).then(results => { + expect(results, 'to have length', 2); + expect(results[0].tests, 'to have length', 2); + expect(results[1].tests, 'to have length', 2); + }); + }); }); }); @@ -160,7 +174,7 @@ function touchFile(file) { } /** - * Synchronously eplace all substrings matched by `pattern` with + * Synchronously replace all substrings matched by `pattern` with * `replacement` in the file’s content. */ function replaceFileContents(file, pattern, replacement) { @@ -170,8 +184,8 @@ function replaceFileContents(file, pattern, replacement) { } /** - * Synchronously copy a fixture to the given destion file path. Creates - * parent directories of the destination path if necessary. + * Synchronously copy a fixture to the given destination file path. + * Creates parent directories of the destination path if necessary. */ function copyFixture(fixtureName, dest) { const fixtureSource = helpers.resolveFixturePath(fixtureName); From 6201e426bb6856f4dc3314fffb2f25fca719f12f Mon Sep 17 00:00:00 2001 From: "JeongHoon Byun (aka Outsider)" Date: Thu, 18 Jul 2019 02:27:18 +0900 Subject: [PATCH 035/441] Hide stacktrace when cli args are missing (#3963) * hide stacktrace when cli args is missing Signed-off-by: Outsider * Update lib/cli/options.js Co-Authored-By: David da Silva * remove unused lines Signed-off-by: Outsider --- lib/cli/options.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/cli/options.js b/lib/cli/options.js index fcc619a9b3..a88dbfbf17 100644 --- a/lib/cli/options.js +++ b/lib/cli/options.js @@ -7,6 +7,7 @@ */ const fs = require('fs'); +const ansi = require('ansi-colors'); const yargsParser = require('yargs-parser'); const {types, aliases} = require('./run-option-metadata'); const {ONE_AND_DONE_ARGS} = require('./one-and-dones'); @@ -16,7 +17,6 @@ const {loadConfig, findConfig} = require('./config'); const findUp = require('find-up'); const {deprecate} = require('../utils'); const debug = require('debug')('mocha:cli:options'); -const {createMissingArgumentError} = require('../errors'); const {isNodeFlag} = require('./node-flags'); /** @@ -131,7 +131,8 @@ const parse = (args = [], defaultValues = {}, ...configObjects) => { boolean: types.boolean.concat(nodeArgs.map(pair => pair[0])) }); if (result.error) { - throw createMissingArgumentError(result.error.message); + console.error(ansi.red(`Error: ${result.error.message}`)); + process.exit(1); } // reapply "=" arg values from above From f77cac46879426c924e947c749f57c72c59c3b5e Mon Sep 17 00:00:00 2001 From: Daniel Ruf <827205+DanielRuf@users.noreply.github.com> Date: Wed, 17 Jul 2019 19:31:15 +0200 Subject: [PATCH 036/441] fix: do not redeclare variable (#3956) --- docs/example/Array.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/example/Array.js b/docs/example/Array.js index 18105cf75f..9be8287b65 100644 --- a/docs/example/Array.js +++ b/docs/example/Array.js @@ -13,7 +13,7 @@ describe('Array', function(){ var arr = []; var n = arr.push('foo'); expect(n).to.equal(1); - var n = arr.push('bar'); + n = arr.push('bar'); expect(n).to.equal(2); }) @@ -39,7 +39,7 @@ describe('Array', function(){ var arr = []; var n = arr.unshift('foo'); expect(n).to.equal(1); - var n = arr.unshift('bar'); + n = arr.unshift('bar'); expect(n).to.equal(2); }) @@ -70,4 +70,5 @@ describe('Array', function(){ expect(arr).to.have.length(1); }) }) -}) \ No newline at end of file +}) + From 59d70ee1dfb29541a30d886ae152401dc7a35156 Mon Sep 17 00:00:00 2001 From: Daniel Ruf <827205+DanielRuf@users.noreply.github.com> Date: Wed, 17 Jul 2019 19:31:49 +0200 Subject: [PATCH 037/441] fix: remove duplicate line-height property (#3957) --- mocha.css | 1 - 1 file changed, 1 deletion(-) diff --git a/mocha.css b/mocha.css index ec96b003c9..4ca8fcb897 100644 --- a/mocha.css +++ b/mocha.css @@ -139,7 +139,6 @@ body { #mocha .test .html-error { overflow: auto; color: black; - line-height: 1.5; display: block; float: left; clear: left; From cc595afaffc8117d14ebdd382018754d6c48c4b0 Mon Sep 17 00:00:00 2001 From: Craig Taub Date: Thu, 18 Jul 2019 21:58:39 +0100 Subject: [PATCH 038/441] update CHANGELOG.md for v6.2.0 [ci skip] --- CHANGELOG.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d87143b0f7..fe9ca8a6c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,43 @@ +# 6.2.0 / 2019-07-18 + +## :tada: Enhancements + +- #3827: Do not fork child-process if no Node flags are present (@boneskull) +- #3725: Base reporter store ref to console.log, see [mocha/wiki](https://github.com/mochajs/mocha/wiki/HOW-TO:-Correctly-stub-stdout) (@craigtaub) + +## :bug: Fixes + +- #3942: Fix "No test files found" Error when file is passed via `--file` (@gabegorelick) +- #3914: Modify Mocha constructor to accept options `global` or `globals` (@pascalpp) +- #3894: Fix parsing of config files with `_mocha` binary (@juergba) +- #3834: Fix CLI parsing with default values (@boneskull, @juergba) +- #3831: Fix `--timeout`/`--slow` string values and duplicate arguments (@boneskull, @juergba) + +## :book: Documentation + +- #3906: Document option to define custom report name for XUnit reporter (@pkuczynski) +- #3889: Adds doc links for mocha-examples (@craigtaub) +- #3887: Fix broken links (@toyjhlee) +- #3841: Fix anchors to configuration section (@trescube) + +## :mag: Coverage + +- #3915, #3929: Increase tests coverage for `--watch` options (@geigerzaehler) + +## :nut_and_bolt: Other + +- #3953: Collect test files later, prepares improvements to the `--watch` mode behavior (@geigerzaehler) +- #3939: Upgrade for npm audit (@boneskull) +- #3930: Extract `runWatch` into separate module (@geigerzaehler) +- #3922: Add `mocha.min.js` file to stacktrace filter (@brian-lagerman) +- #3919: Update CI config files to use Node-12.x (@plroebuck) +- #3892: Rework reporter tests (@plroebuck) +- #3872: Rename `--exclude` to `--ignore` and create alias (@boneskull) +- #3963: Hide stacktrace when cli args are missing (@outsideris) +- #3956: Do not redeclare variable in docs array example (@DanielRuf) +- #3957: Remove duplicate line-height property in `mocha.css` (@DanielRuf) +- #3960: Don't re-initialize grep option on watch re-run (@geigerzaehler) + # 6.1.4 / 2019-04-18 ## :lock: Security Fixes From bd477769d6d76f467363ef2ff27e0b622aa5a132 Mon Sep 17 00:00:00 2001 From: Craig Taub Date: Thu, 18 Jul 2019 21:59:56 +0100 Subject: [PATCH 039/441] Release v6.2.0 --- CHANGELOG.md | 46 +++++++++++++++++++++++----------------------- package-lock.json | 2 +- package.json | 10 +++++++++- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe9ca8a6c8..f61ff11537 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,41 +2,41 @@ ## :tada: Enhancements -- #3827: Do not fork child-process if no Node flags are present (@boneskull) -- #3725: Base reporter store ref to console.log, see [mocha/wiki](https://github.com/mochajs/mocha/wiki/HOW-TO:-Correctly-stub-stdout) (@craigtaub) +- [#3827](https://github.com/mochajs/mocha/issues/3827): Do not fork child-process if no Node flags are present ([**@boneskull**](https://github.com/boneskull)) +- [#3725](https://github.com/mochajs/mocha/issues/3725): Base reporter store ref to console.log, see [mocha/wiki](https://github.com/mochajs/mocha/wiki/HOW-TO:-Correctly-stub-stdout) ([**@craigtaub**](https://github.com/craigtaub)) ## :bug: Fixes -- #3942: Fix "No test files found" Error when file is passed via `--file` (@gabegorelick) -- #3914: Modify Mocha constructor to accept options `global` or `globals` (@pascalpp) -- #3894: Fix parsing of config files with `_mocha` binary (@juergba) -- #3834: Fix CLI parsing with default values (@boneskull, @juergba) -- #3831: Fix `--timeout`/`--slow` string values and duplicate arguments (@boneskull, @juergba) +- [#3942](https://github.com/mochajs/mocha/issues/3942): Fix "No test files found" Error when file is passed via `--file` ([**@gabegorelick**](https://github.com/gabegorelick)) +- [#3914](https://github.com/mochajs/mocha/issues/3914): Modify Mocha constructor to accept options `global` or `globals` ([**@pascalpp**](https://github.com/pascalpp)) +- [#3894](https://github.com/mochajs/mocha/issues/3894): Fix parsing of config files with `_mocha` binary ([**@juergba**](https://github.com/juergba)) +- [#3834](https://github.com/mochajs/mocha/issues/3834): Fix CLI parsing with default values ([**@boneskull**](https://github.com/boneskull), [**@juergba**](https://github.com/juergba)) +- [#3831](https://github.com/mochajs/mocha/issues/3831): Fix `--timeout`/`--slow` string values and duplicate arguments ([**@boneskull**](https://github.com/boneskull), [**@juergba**](https://github.com/juergba)) ## :book: Documentation -- #3906: Document option to define custom report name for XUnit reporter (@pkuczynski) -- #3889: Adds doc links for mocha-examples (@craigtaub) -- #3887: Fix broken links (@toyjhlee) -- #3841: Fix anchors to configuration section (@trescube) +- [#3906](https://github.com/mochajs/mocha/issues/3906): Document option to define custom report name for XUnit reporter ([**@pkuczynski**](https://github.com/pkuczynski)) +- [#3889](https://github.com/mochajs/mocha/issues/3889): Adds doc links for mocha-examples ([**@craigtaub**](https://github.com/craigtaub)) +- [#3887](https://github.com/mochajs/mocha/issues/3887): Fix broken links ([**@toyjhlee**](https://github.com/toyjhlee)) +- [#3841](https://github.com/mochajs/mocha/issues/3841): Fix anchors to configuration section ([**@trescube**](https://github.com/trescube)) ## :mag: Coverage -- #3915, #3929: Increase tests coverage for `--watch` options (@geigerzaehler) +- [#3915](https://github.com/mochajs/mocha/issues/3915), [#3929](https://github.com/mochajs/mocha/issues/3929): Increase tests coverage for `--watch` options ([**@geigerzaehler**](https://github.com/geigerzaehler)) ## :nut_and_bolt: Other -- #3953: Collect test files later, prepares improvements to the `--watch` mode behavior (@geigerzaehler) -- #3939: Upgrade for npm audit (@boneskull) -- #3930: Extract `runWatch` into separate module (@geigerzaehler) -- #3922: Add `mocha.min.js` file to stacktrace filter (@brian-lagerman) -- #3919: Update CI config files to use Node-12.x (@plroebuck) -- #3892: Rework reporter tests (@plroebuck) -- #3872: Rename `--exclude` to `--ignore` and create alias (@boneskull) -- #3963: Hide stacktrace when cli args are missing (@outsideris) -- #3956: Do not redeclare variable in docs array example (@DanielRuf) -- #3957: Remove duplicate line-height property in `mocha.css` (@DanielRuf) -- #3960: Don't re-initialize grep option on watch re-run (@geigerzaehler) +- [#3953](https://github.com/mochajs/mocha/issues/3953): Collect test files later, prepares improvements to the `--watch` mode behavior ([**@geigerzaehler**](https://github.com/geigerzaehler)) +- [#3939](https://github.com/mochajs/mocha/issues/3939): Upgrade for npm audit ([**@boneskull**](https://github.com/boneskull)) +- [#3930](https://github.com/mochajs/mocha/issues/3930): Extract `runWatch` into separate module ([**@geigerzaehler**](https://github.com/geigerzaehler)) +- [#3922](https://github.com/mochajs/mocha/issues/3922): Add `mocha.min.js` file to stacktrace filter ([**@brian-lagerman**](https://github.com/brian-lagerman)) +- [#3919](https://github.com/mochajs/mocha/issues/3919): Update CI config files to use Node-12.x ([**@plroebuck**](https://github.com/plroebuck)) +- [#3892](https://github.com/mochajs/mocha/issues/3892): Rework reporter tests ([**@plroebuck**](https://github.com/plroebuck)) +- [#3872](https://github.com/mochajs/mocha/issues/3872): Rename `--exclude` to `--ignore` and create alias ([**@boneskull**](https://github.com/boneskull)) +- [#3963](https://github.com/mochajs/mocha/issues/3963): Hide stacktrace when cli args are missing ([**@outsideris**](https://github.com/outsideris)) +- [#3956](https://github.com/mochajs/mocha/issues/3956): Do not redeclare variable in docs array example ([**@DanielRuf**](https://github.com/DanielRuf)) +- [#3957](https://github.com/mochajs/mocha/issues/3957): Remove duplicate line-height property in `mocha.css` ([**@DanielRuf**](https://github.com/DanielRuf)) +- [#3960](https://github.com/mochajs/mocha/issues/3960): Don't re-initialize grep option on watch re-run ([**@geigerzaehler**](https://github.com/geigerzaehler)) # 6.1.4 / 2019-04-18 diff --git a/package-lock.json b/package-lock.json index 08a127af94..f7f44d0866 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "mocha", - "version": "6.1.4", + "version": "6.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b8f51c452c..b33729afaa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mocha", - "version": "6.1.4", + "version": "6.2.0", "description": "simple, flexible, fun test framework", "keywords": [ "mocha", @@ -78,6 +78,7 @@ "Bjorn Stromberg ", "Brendan Nee ", "Brian Beck ", + "Brian Lagerman <49239617+brian-lagerman@users.noreply.github.com>", "Brian Lalor ", "Brian M. Carlson ", "Brian Moore ", @@ -111,6 +112,7 @@ "Cory Thomas ", "Craig Taub ", "Cube ", + "Daniel Ruf <827205+DanielRuf@users.noreply.github.com>", "Daniel Ruf ", "Daniel St. Jules ", "Daniel Stockman ", @@ -163,6 +165,7 @@ "Fredrik Enestad ", "Fredrik Lindin ", "Fumiaki MATSUSHIMA ", + "Gabe Gorelick ", "Gabriel Silk ", "Gareth Aye ", "Gareth Murphy ", @@ -343,6 +346,7 @@ "P. Roebuck ", "Panu Horsmalahti ", "Parker Moore ", + "Pascal ", "Pat Finnigan ", "Paul Armstrong ", "Paul Miller ", @@ -353,6 +357,7 @@ "Peter Rust ", "Phil Sung ", "Philip M. White ", + "Piotr Kuczynski ", "PoppinL ", "Poprádi Árpád ", "Prayag Verma ", @@ -414,6 +419,7 @@ "Sorin Iclanzan ", "Standa Opichal ", "startswithaj ", + "Stephen Hess ", "Stephen Mathieson ", "Steve Mason ", "Stewart Taylor ", @@ -431,6 +437,7 @@ "Thedark1337 ", "Thomas Broadley ", "Thomas Grainger ", + "Thomas Scholtes ", "Thomas Vantuycom ", "Tim Ehat ", "Tim Harshman ", @@ -444,6 +451,7 @@ "Tom Coquereau ", "Tom Hughes ", "Tomer Eskenazi ", + "toyjhlee ", "traleig1 ", "Travis Jeffery ", "tripu ", From 48da42e6ad59827242b4671b4d34a9c69b91e0cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20M=C3=BCller?= Date: Fri, 19 Jul 2019 12:10:17 +0200 Subject: [PATCH 040/441] Remove jsdoc index.html placeholder from eleventy file structure and fix broken link in jsdoc tutorial (#3966) --- docs/api-tutorials/custom-reporter.md | 12 ++++++------ docs/api/index.html | 14 -------------- 2 files changed, 6 insertions(+), 20 deletions(-) delete mode 100644 docs/api/index.html diff --git a/docs/api-tutorials/custom-reporter.md b/docs/api-tutorials/custom-reporter.md index 1555ce26d0..a5abee8ce3 100644 --- a/docs/api-tutorials/custom-reporter.md +++ b/docs/api-tutorials/custom-reporter.md @@ -112,9 +112,9 @@ The event names are exported from the `constants` property of `Mocha.Runner`: > It's important to understand that all `Suite` callbacks will be run _before_ the [Runner] emits `EVENT_RUN_BEGIN`. Hooks and tests, however, won't run until _after_ the [Runner] emits `EVENT_RUN_BEGIN`. -[runner]: /api/runner -[test]: /api/test -[hook]: /api/hook -[suite]: /api/suite -[base]: /api/mocha.reporters.base -[delay]: /#delayed-root-suite +[runner]: /api/runner.html +[test]: /api/test.html +[hook]: /api/hook.html +[suite]: /api/suite.html +[base]: /api/mocha.reporters.base.html +[delay]: /#delayed-root-suite.html diff --git a/docs/api/index.html b/docs/api/index.html deleted file mode 100644 index b937ab3b43..0000000000 --- a/docs/api/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Document - - -

- The JSDoc API documentation will be placed here by the build system -

- - From 0e9d8ad59a78a482d97f4fe735dafa1f65dc89d2 Mon Sep 17 00:00:00 2001 From: Dmitrii Sorin Date: Sat, 20 Jul 2019 18:18:26 +1000 Subject: [PATCH 041/441] tty.getWindowSize is not a function inside a "worker_threads" worker (#3955) Use "isTTY" instead of tty.isatty(fd) --- lib/reporters/base.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/reporters/base.js b/lib/reporters/base.js index 670a160fa8..b1d026fcce 100644 --- a/lib/reporters/base.js +++ b/lib/reporters/base.js @@ -25,7 +25,7 @@ exports = module.exports = Base; * Check if both stdio streams are associated with a tty. */ -var isatty = tty.isatty(1) && tty.isatty(2); +var isatty = process.stdout.isTTY && process.stderr.isTTY; /** * Save log references to avoid tests interfering (see GH-3604). From 91b3a547b9bce571bf3f98417691d38658c6d576 Mon Sep 17 00:00:00 2001 From: "JeongHoon Byun (aka Outsider)" Date: Sat, 20 Jul 2019 20:29:42 +0900 Subject: [PATCH 042/441] fix style on mochajs.org (#3886) Signed-off-by: Outsider --- docs/css/prism.css | 1 - docs/css/style.css | 6 ++++++ docs/index.md | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/css/prism.css b/docs/css/prism.css index fca66adb37..793fd5df2b 100644 --- a/docs/css/prism.css +++ b/docs/css/prism.css @@ -115,7 +115,6 @@ pre[class*="language-"] { .language-css .token.string, .style .token.string { color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); } .token.atrule, diff --git a/docs/css/style.css b/docs/css/style.css index dd60370a30..e0ac07bb7a 100644 --- a/docs/css/style.css +++ b/docs/css/style.css @@ -174,6 +174,12 @@ code { line-height: 1.8; } +:not(pre)>code { + background-color: #f5f2f0; + border-radius: 3px; + padding: .2em .4em; +} + pre { background-color: #f3f3f3; border: 1px solid #ddd; diff --git a/docs/index.md b/docs/index.md index a3fa090632..ab898764c0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1176,7 +1176,7 @@ Requires either `--grep` or `--fgrep` (but not both). ### `--debug, --inspect, --debug-brk, --inspect-brk, debug, inspect` -> _BREAKING CHANGE in v6.0.0; `-d` is no longer an alias for `--debug`._ > _Other updates in v6.0.0:_ > _In versions of Node.js implementing `--inspect` and `--inspect-brk`, `--debug` and `--debug-brk` are respectively aliases for these two options._ > _Likewise, `debug` (not `--debug`) is an alias for `inspect` (not `--inspect`) in Node.js versions where `debug` is deprecated._ +> _BREAKING CHANGE in v6.0.0; `-d` is no longer an alias for `--debug`. Other updates in v6.0.0: In versions of Node.js implementing `--inspect` and `--inspect-brk`, `--debug` and `--debug-brk` are respectively aliases for these two options. Likewise, `debug` (not `--debug`) is an alias for `inspect` (not `--inspect`) in Node.js versions where `debug` is deprecated._ Enables Node.js' debugger or inspector. @@ -1637,7 +1637,7 @@ In addition to supporting the legacy [`mocha.opts`](#mochaopts) run-control form - **JavaScript**: Create a `.mocharc.js` in your project's root directory, and export an object (`module.exports = {/* ... */}`) containing your configuration. - **YAML**: Create a `.mocharc.yaml` (or `.mocharc.yml`) in your project's root directory. - **JSON**: Create a `.mocharc.json` (or `.mocharc.jsonc`) in your project's root directory. Comments — while not valid JSON — are allowed in this file, and will be ignored by Mocha. -- **`package.json`**: Create a `mocha` property in your project's `package.json`. +- **package.json**: Create a `mocha` property in your project's `package.json`. Mocha suggests using one of the above strategies for configuration instead of the legacy `mocha.opts` format. From 1e6cf3b74af087dd8c4c79804c7206a0bb589404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20D=C3=ADaz=20Ce=C3=B1era?= <46492068+MarioDiaz98@users.noreply.github.com> Date: Sat, 20 Jul 2019 15:53:20 +0200 Subject: [PATCH 043/441] Add Matomo to website (#3765) * Added Matomo to index.md * Fixed * Deleted

* Deleted center tag and added style css * Requested changes done * Changed Matomo logo to another file * Changing css and adding aside to html * Fixed height and width * Fixed identations * Deleted footer logo * Requested changes done * Last changes * Trim and eresize matomo image * Remove resizing, it increased image weight * Retain matomo image aspect ratio --- docs/_includes/default.html | 10 ++++++++++ docs/css/style.css | 11 +++++++++++ docs/images/matomo-logo.png | Bin 0 -> 26528 bytes 3 files changed, 21 insertions(+) create mode 100644 docs/images/matomo-logo.png diff --git a/docs/_includes/default.html b/docs/_includes/default.html index 92b673b878..0a2a60b11e 100644 --- a/docs/_includes/default.html +++ b/docs/_includes/default.html @@ -33,6 +33,16 @@

{{ content }}
+ +