From 6088f7dc85695fcf0de1ecaf7fb8beceb883ee8f Mon Sep 17 00:00:00 2001 From: Bharath Chadarajupalli Date: Sun, 22 Mar 2020 17:25:46 -0700 Subject: [PATCH 1/7] =?UTF-8?q?Cli=20reporting=20when=20there=20is=20a=20t?= =?UTF-8?q?est=20setup=20issue=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- runner/clireporter.ts | 18 ++++++++++++++++-- runner/steps.ts | 2 ++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/runner/clireporter.ts b/runner/clireporter.ts index 42a6f89..2cb1da0 100644 --- a/runner/clireporter.ts +++ b/runner/clireporter.ts @@ -90,6 +90,7 @@ export class CliReporter { this.emitter = emitter; this.stream = stream; this.options = options; + var testEndEventExpectedNext = false; cleankill.onInterrupt(() => { return new Promise((resolve) => { this.flush(); @@ -120,9 +121,15 @@ export class CliReporter { this.log(browser, 'Beginning tests via', chalk.magenta(data.url)); this.updateStatus(); }); - + emitter.on( + 'test-start', + (browser: BrowserDef, data: {url: string}, stats: Stats) => { + testEndEventExpectedNext = true; + }); + emitter.on( 'test-end', (browser: BrowserDef, data: TestEndData, stats: Stats) => { + testEndEventExpectedNext = false; this.browserStats[browser.id] = stats; if (data.state === 'failing') { this.writeTestError(browser, data); @@ -140,11 +147,18 @@ export class CliReporter { if (error) { this.log(chalk.red, browser, 'Tests failed:', error); } else { - this.log(chalk.green, browser, 'Tests passed'); + if (testEndEventExpectedNext) { + this.log(chalk.red, browser, 'A test setup failed!'); + } else { + this.log(chalk.green, browser, 'Tests passed'); + } } }); emitter.on('run-end', (error: any) => { + if (testEndEventExpectedNext) { + error = 'A test setup failed!'; + } if (error) { this.log(chalk.red, 'Test run ended in failure:', error); } else { diff --git a/runner/steps.ts b/runner/steps.ts index 614b942..893d410 100644 --- a/runner/steps.ts +++ b/runner/steps.ts @@ -80,6 +80,8 @@ export async function prepare(context: Context): Promise { export async function runTests(context: Context): Promise { context.emit('log:debug', 'step: runTests'); + var suites = context.options.suites; + context.emit('log:info', 'Running Suite: ' + suites[0]); const result = runBrowsers(context); const runners = result.runners; From 4142815f358a1532e2d94ea0e94bc882422c1f2f Mon Sep 17 00:00:00 2001 From: vsbharath <34461558+vsbharath@users.noreply.github.com> Date: Sun, 22 Mar 2020 17:40:51 -0700 Subject: [PATCH 2/7] Fixing syntax issue --- runner/clireporter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runner/clireporter.ts b/runner/clireporter.ts index 2cb1da0..d5e40e7 100644 --- a/runner/clireporter.ts +++ b/runner/clireporter.ts @@ -90,7 +90,7 @@ export class CliReporter { this.emitter = emitter; this.stream = stream; this.options = options; - var testEndEventExpectedNext = false; + let testEndEventExpectedNext = false; cleankill.onInterrupt(() => { return new Promise((resolve) => { this.flush(); From 9a25c9f524611f6038901038f433638870239377 Mon Sep 17 00:00:00 2001 From: vsbharath <34461558+vsbharath@users.noreply.github.com> Date: Sun, 22 Mar 2020 17:41:34 -0700 Subject: [PATCH 3/7] Fixing syntax issue --- runner/steps.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runner/steps.ts b/runner/steps.ts index 893d410..218d739 100644 --- a/runner/steps.ts +++ b/runner/steps.ts @@ -80,7 +80,7 @@ export async function prepare(context: Context): Promise { export async function runTests(context: Context): Promise { context.emit('log:debug', 'step: runTests'); - var suites = context.options.suites; + let suites = context.options.suites; context.emit('log:info', 'Running Suite: ' + suites[0]); const result = runBrowsers(context); From 4cfe355d3dd8483023aaf8de355aaaf3ff6f0a15 Mon Sep 17 00:00:00 2001 From: Bharath Chadarajupalli Date: Sun, 22 Mar 2020 18:30:55 -0700 Subject: [PATCH 4/7] BuiltFiles --- browser/childrunner.js | 175 ++++++++ browser/clisocket.js | 139 +++++++ browser/config.js | 91 +++++ browser/declarations.js | 0 browser/environment.js | 77 ++++ browser/environment/compatability.js | 37 ++ browser/environment/errors.js | 31 ++ browser/environment/helpers.js | 188 +++++++++ browser/index.js | 90 ++++ browser/mocha.js | 87 ++++ browser/mocha/extend.js | 50 +++ browser/mocha/fixture.js | 15 + browser/mocha/replace.js | 91 +++++ browser/mocha/stub.js | 44 ++ browser/more-declarations.js | 0 browser/reporters.js | 46 +++ browser/reporters/console.js | 122 ++++++ browser/reporters/html.js | 29 ++ browser/reporters/multi.js | 249 +++++++++++ browser/reporters/title.js | 80 ++++ browser/suites.js | 146 +++++++ browser/util.js | 265 ++++++++++++ runner/browserrunner.js | 217 ++++++++++ runner/cli.js | 206 ++++++++++ runner/clireporter.js | 290 +++++++++++++ runner/config.js | 591 +++++++++++++++++++++++++++ runner/context.js | 254 ++++++++++++ runner/gulp.js | 48 +++ runner/httpbin.js | 143 +++++++ runner/paths.js | 171 ++++++++ runner/plugin.js | 160 ++++++++ runner/port-scanner.js | 116 ++++++ runner/steps.js | 267 ++++++++++++ runner/test.js | 148 +++++++ runner/webserver.js | 376 +++++++++++++++++ test/integration/browser.js | 550 +++++++++++++++++++++++++ test/integration/setup_test_dir.js | 158 +++++++ test/retry-failures-reporter.js | 184 +++++++++ test/unit/cli.js | 438 ++++++++++++++++++++ test/unit/config.js | 72 ++++ test/unit/context.js | 249 +++++++++++ test/unit/grunt.js | 182 +++++++++ test/unit/gulp.js | 168 ++++++++ test/unit/paths.js | 227 ++++++++++ 44 files changed, 7267 insertions(+) create mode 100644 browser/childrunner.js create mode 100644 browser/clisocket.js create mode 100644 browser/config.js create mode 100644 browser/declarations.js create mode 100644 browser/environment.js create mode 100644 browser/environment/compatability.js create mode 100644 browser/environment/errors.js create mode 100644 browser/environment/helpers.js create mode 100644 browser/index.js create mode 100644 browser/mocha.js create mode 100644 browser/mocha/extend.js create mode 100644 browser/mocha/fixture.js create mode 100644 browser/mocha/replace.js create mode 100644 browser/mocha/stub.js create mode 100644 browser/more-declarations.js create mode 100644 browser/reporters.js create mode 100644 browser/reporters/console.js create mode 100644 browser/reporters/html.js create mode 100644 browser/reporters/multi.js create mode 100644 browser/reporters/title.js create mode 100644 browser/suites.js create mode 100644 browser/util.js create mode 100644 runner/browserrunner.js create mode 100644 runner/cli.js create mode 100644 runner/clireporter.js create mode 100644 runner/config.js create mode 100644 runner/context.js create mode 100644 runner/gulp.js create mode 100644 runner/httpbin.js create mode 100644 runner/paths.js create mode 100644 runner/plugin.js create mode 100644 runner/port-scanner.js create mode 100644 runner/steps.js create mode 100644 runner/test.js create mode 100644 runner/webserver.js create mode 100644 test/integration/browser.js create mode 100644 test/integration/setup_test_dir.js create mode 100644 test/retry-failures-reporter.js create mode 100644 test/unit/cli.js create mode 100644 test/unit/config.js create mode 100644 test/unit/context.js create mode 100644 test/unit/grunt.js create mode 100644 test/unit/gulp.js create mode 100644 test/unit/paths.js diff --git a/browser/childrunner.js b/browser/childrunner.js new file mode 100644 index 0000000..4b50946 --- /dev/null +++ b/browser/childrunner.js @@ -0,0 +1,175 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import * as util from './util.js'; +/** + * A Mocha suite (or suites) run within a child iframe, but reported as if they + * are part of the current context. + */ +var ChildRunner = /** @class */ (function () { + function ChildRunner(url, parentScope) { + this.eventListenersToRemoveOnClean = []; + this.parentScope = parentScope; + var urlBits = util.parseUrl(url); + util.mergeParams(urlBits.params, util.getParams(parentScope.location.search)); + delete urlBits.params.cli_browser_id; + this.url = "" + urlBits.base + util.paramsToQuery(urlBits.params); + this.state = 'initializing'; + } + /** + * Listeners added using this method will be removed on done() + * + * @param type event type + * @param listener object which receives a notification + * @param target event target + */ + ChildRunner.prototype.addEventListener = function (type, listener, target) { + target.addEventListener(type, listener); + var descriptor = { target: target, type: type, listener: listener }; + this.eventListenersToRemoveOnClean.push(descriptor); + }; + /** + * Removes all event listeners added by a method addEventListener defined + * on an instance of ChildRunner. + */ + ChildRunner.prototype.removeAllEventListeners = function () { + this.eventListenersToRemoveOnClean.forEach(function (_a) { + var target = _a.target, type = _a.type, listener = _a.listener; + return target.removeEventListener(type, listener); + }); + }; + /** + * @return {ChildRunner} The `ChildRunner` that was registered for this + * window. + */ + ChildRunner.current = function () { + return ChildRunner.get(window); + }; + /** + * @param {!Window} target A window to find the ChildRunner of. + * @param {boolean} traversal Whether this is a traversal from a child window. + * @return {ChildRunner} The `ChildRunner` that was registered for `target`. + */ + ChildRunner.get = function (target, traversal) { + var childRunner = ChildRunner.byUrl[target.location.href]; + if (childRunner) { + return childRunner; + } + if (window.parent === window) { + // Top window. + if (traversal) { + console.warn('Subsuite loaded but was never registered. This most likely is due to wonky history behavior. Reloading...'); + window.location.reload(); + } + return null; + } + // Otherwise, traverse. + return window.parent.WCT._ChildRunner.get(target, true); + }; + /** + * Loads and runs the subsuite. + * + * @param {function} done Node-style callback. + */ + ChildRunner.prototype.run = function (done) { + var _this = this; + util.debug('ChildRunner#run', this.url); + this.state = 'loading'; + this.onRunComplete = done; + this.container = document.getElementById('subsuites'); + if (!this.container) { + var container_1 = (this.container = document.createElement('div')); + container_1.id = 'subsuites'; + document.body.appendChild(container_1); + } + var container = this.container; + var iframe = (this.iframe = document.createElement('iframe')); + iframe.classList.add('subsuite'); + iframe.src = this.url; + // Let the iframe expand the URL for us. + var url = (this.url = iframe.src); + container.appendChild(iframe); + ChildRunner.byUrl[url] = this; + this.timeoutId = setTimeout(function () { return _this.loaded(new Error('Timed out loading ' + url)); }, ChildRunner.loadTimeout); + this.addEventListener('error', function () { return _this.loaded(new Error('Failed to load document ' + _this.url)); }, iframe); + this.addEventListener('DOMContentLoaded', function () { return _this.loaded(); }, iframe.contentWindow); + }; + /** + * Called when the sub suite's iframe has loaded (or errored during load). + * + * @param {*} error The error that occured, if any. + */ + ChildRunner.prototype.loaded = function (error) { + util.debug('ChildRunner#loaded', this.url, error); + if (this.iframe.contentWindow == null && error) { + this.signalRunComplete(error); + this.done(); + return; + } + // Not all targets have WCT loaded (compatiblity mode) + if (this.iframe.contentWindow.WCT) { + this.share = this.iframe.contentWindow.WCT.share; + } + if (error) { + this.signalRunComplete(error); + this.done(); + } + }; + /** + * Called in mocha/run.js when all dependencies have loaded, and the child is + * ready to start running tests + * + * @param {*} error The error that occured, if any. + */ + ChildRunner.prototype.ready = function (error) { + util.debug('ChildRunner#ready', this.url, error); + if (this.timeoutId) { + clearTimeout(this.timeoutId); + } + if (error) { + this.signalRunComplete(error); + this.done(); + } + }; + /** + * Called when the sub suite's tests are complete, so that it can clean up. + */ + ChildRunner.prototype.done = function () { + var _this = this; + util.debug('ChildRunner#done', this.url, arguments); + // Make sure to clear that timeout. + this.ready(); + this.signalRunComplete(); + if (this.iframe) { + // Be safe and avoid potential browser crashes when logic attempts to + // interact with the removed iframe. + setTimeout(function () { + _this.removeAllEventListeners(); + _this.container.removeChild(_this.iframe); + _this.iframe = undefined; + _this.share = null; + }, 0); + } + }; + ChildRunner.prototype.signalRunComplete = function (error) { + if (this.onRunComplete) { + this.state = 'complete'; + this.onRunComplete(error); + this.onRunComplete = null; + } + }; + // ChildRunners get a pretty generous load timeout by default. + ChildRunner.loadTimeout = 60000; + // We can't maintain properties on iframe elements in Firefox/Safari/???, so + // we track childRunners by URL. + ChildRunner.byUrl = {}; + return ChildRunner; +}()); +export default ChildRunner; diff --git a/browser/clisocket.js b/browser/clisocket.js new file mode 100644 index 0000000..73a0c27 --- /dev/null +++ b/browser/clisocket.js @@ -0,0 +1,139 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import ChildRunner from './childrunner.js'; +import * as util from './util.js'; +var SOCKETIO_ENDPOINT = window.location.protocol + '//' + window.location.host; +var SOCKETIO_LIBRARY = SOCKETIO_ENDPOINT + '/socket.io/socket.io.js'; +/** + * A socket for communication between the CLI and browser runners. + * + * @param {string} browserId An ID generated by the CLI runner. + * @param {!io.Socket} socket The socket.io `Socket` to communicate over. + */ +var CLISocket = /** @class */ (function () { + function CLISocket(browserId, socket) { + this.browserId = browserId; + this.socket = socket; + } + /** + * @param {!Mocha.Runner} runner The Mocha `Runner` to observe, reporting + * interesting events back to the CLI runner. + */ + CLISocket.prototype.observe = function (runner) { + var _this = this; + this.emitEvent('browser-start', { + url: window.location.toString(), + }); + // We only emit a subset of events that we care about, and follow a more + // general event format that is hopefully applicable to test runners beyond + // mocha. + // + // For all possible mocha events, see: + // https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36 + runner.on('test', function (test) { + _this.emitEvent('test-start', { test: getTitles(test) }); + }); + runner.on('test end', function (test) { + _this.emitEvent('test-end', { + state: getState(test), + test: getTitles(test), + duration: test.duration, + error: test.err, + }); + }); + runner.on('fail', function (test, err) { + // fail the test run if we catch errors outside of a test function + if (test.type !== 'test') { + _this.emitEvent('browser-fail', 'Error thrown outside of test function: ' + err.stack); + } + }); + runner.on('childRunner start', function (childRunner) { + _this.emitEvent('sub-suite-start', childRunner.share); + }); + runner.on('childRunner end', function (childRunner) { + _this.emitEvent('sub-suite-end', childRunner.share); + }); + runner.on('end', function () { + _this.emitEvent('browser-end'); + }); + }; + /** + * @param {string} event The name of the event to fire. + * @param {*} data Additional data to pass with the event. + */ + CLISocket.prototype.emitEvent = function (event, data) { + this.socket.emit('client-event', { + browserId: this.browserId, + event: event, + data: data, + }); + }; + /** + * Builds a `CLISocket` if we are within a CLI-run environment; short-circuits + * otherwise. + * + * @param {function(*, CLISocket)} done Node-style callback. + */ + CLISocket.init = function (done) { + var browserId = util.getParam('cli_browser_id'); + if (!browserId) + return done(); + // Only fire up the socket for root runners. + if (ChildRunner.current()) + return done(); + util.loadScript(SOCKETIO_LIBRARY, function (error) { + if (error) + return done(error); + var socket = io(SOCKETIO_ENDPOINT); + socket.on('error', function (error) { + socket.off(); + done(error); + }); + socket.on('connect', function () { + socket.off(); + done(null, new CLISocket(browserId, socket)); + }); + }); + }; + return CLISocket; +}()); +export default CLISocket; +// Misc Utility +/** + * @param {!Mocha.Runnable} runnable The test or suite to extract titles from. + * @return {!Array.} The titles of the runnable and its parents. + */ +function getTitles(runnable) { + var titles = []; + while (runnable && !runnable.root && runnable.title) { + titles.unshift(runnable.title); + runnable = runnable.parent; + } + return titles; +} +/** + * @param {!Mocha.Runnable} runnable + * @return {string} + */ +function getState(runnable) { + if (runnable.state === 'passed') { + return 'passing'; + } + else if (runnable.state === 'failed') { + return 'failing'; + } + else if (runnable.pending) { + return 'pending'; + } + else { + return 'unknown'; + } +} diff --git a/browser/config.js b/browser/config.js new file mode 100644 index 0000000..65fc27c --- /dev/null +++ b/browser/config.js @@ -0,0 +1,91 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import ChildRunner from './childrunner.js'; +import * as util from './util.js'; +/** + * The global configuration state for WCT's browser client. + */ +export var _config = { + environmentScripts: !!window.__wctUseNpm ? + [ + 'stacky/browser.js', + 'async/lib/async.js', + 'lodash/index.js', + 'mocha/mocha.js', + 'chai/chai.js', + '@polymer/sinonjs/sinon.js', + 'sinon-chai/lib/sinon-chai.js', + 'accessibility-developer-tools/dist/js/axs_testing.js', + '@polymer/test-fixture/test-fixture.js' + ] : + [ + 'stacky/browser.js', + 'async/lib/async.js', + 'lodash/lodash.js', + 'mocha/mocha.js', + 'chai/chai.js', + 'sinonjs/sinon.js', + 'sinon-chai/lib/sinon-chai.js', + 'accessibility-developer-tools/dist/js/axs_testing.js' + ], + environmentImports: !!window.__wctUseNpm ? [] : + ['test-fixture/test-fixture.html'], + root: null, + waitForFrameworks: true, + waitFor: null, + numConcurrentSuites: 1, + trackConsoleError: true, + mochaOptions: { timeout: 10 * 1000 }, + verbose: false, +}; +/** + * Merges initial `options` into WCT's global configuration. + * + * @param {Object} options The options to merge. See `browser/config.ts` for a + * reference. + */ +export function setup(options) { + var childRunner = ChildRunner.current(); + if (childRunner) { + _deepMerge(_config, childRunner.parentScope.WCT._config); + // But do not force the mocha UI + delete _config.mochaOptions.ui; + } + if (options && typeof options === 'object') { + _deepMerge(_config, options); + } + if (!_config.root) { + // Sibling dependencies. + var root = util.scriptPrefix('browser.js'); + _config.root = util.basePath(root.substr(0, root.length - 1)); + if (!_config.root) { + throw new Error('Unable to detect root URL for WCT sources. Please set WCT.root before including browser.js'); + } + } +} +/** + * Retrieves a configuration value. + */ +export function get(key) { + return _config[key]; +} +// Internal +function _deepMerge(target, source) { + Object.keys(source).forEach(function (key) { + if (target[key] !== null && typeof target[key] === 'object' && + !Array.isArray(target[key])) { + _deepMerge(target[key], source[key]); + } + else { + target[key] = source[key]; + } + }); +} diff --git a/browser/declarations.js b/browser/declarations.js new file mode 100644 index 0000000..e69de29 diff --git a/browser/environment.js b/browser/environment.js new file mode 100644 index 0000000..bd78f9d --- /dev/null +++ b/browser/environment.js @@ -0,0 +1,77 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import * as config from './config.js'; +import * as reporters from './reporters.js'; +import * as util from './util.js'; +/** + * Loads all environment scripts ...synchronously ...after us. + */ +export function loadSync() { + util.debug('Loading environment scripts:'); + var a11ySuiteScriptPath = 'web-component-tester/data/a11ySuite.js'; + var scripts = config.get('environmentScripts'); + var a11ySuiteWillBeLoaded = window.__generatedByWct || scripts.indexOf(a11ySuiteScriptPath) > -1; + // We can't inject a11ySuite when running the npm version because it is a + // module-based script that needs `'); // jshint ignore:line + }); + util.debug('Environment scripts loaded'); + var imports = config.get('environmentImports'); + imports.forEach(function (path) { + var url = util.expandUrl(path, config.get('root')); + util.debug('Loading environment import:', url); + // Synchronous load. + document.write(''); // jshint ignore:line + }); + util.debug('Environment imports loaded'); +} +/** + * We have some hard dependencies on things that should be loaded via + * `environmentScripts`, so we assert that they're present here; and do any + * post-facto setup. + */ +export function ensureDependenciesPresent() { + _ensureMocha(); + _checkChai(); +} +function _ensureMocha() { + var Mocha = window.Mocha; + if (!Mocha) { + throw new Error('WCT requires Mocha. Please ensure that it is present in WCT.environmentScripts, or that you load it before loading web-component-tester/browser.js'); + } + reporters.injectMocha(Mocha); + // Magic loading of mocha's stylesheet + var mochaPrefix = util.scriptPrefix('mocha.js'); + // only load mocha stylesheet for the test runner output + // Not the end of the world, if it doesn't load. + if (mochaPrefix && window.top === window.self) { + util.loadStyle(mochaPrefix + 'mocha.css'); + } +} +function _checkChai() { + if (!window.chai) { + util.debug('Chai not present; not registering shorthands'); + return; + } + window.assert = window.chai.assert; + window.expect = window.chai.expect; +} diff --git a/browser/environment/compatability.js b/browser/environment/compatability.js new file mode 100644 index 0000000..460b800 --- /dev/null +++ b/browser/environment/compatability.js @@ -0,0 +1,37 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import ChildRunner from '../childrunner.js'; +// polymer-test-tools (and Polymer/tools) support HTML tests where each file is +// expected to call `done()`, which posts a message to the parent window. +window.addEventListener('message', function (event) { + if (!event.data || (event.data !== 'ok' && !event.data.error)) { + return; + } + var childRunner = ChildRunner.get(event.source); + if (!childRunner) { + return; + } + childRunner.ready(); + // The name of the suite as exposed to the user. + var reporter = childRunner.parentScope.WCT._reporter; + var title = reporter.suiteTitle(event.source.location); + reporter.emitOutOfBandTest('page-wide tests via global done()', event.data.error, title, true); + childRunner.done(); +}); +// Attempt to ensure that we complete a test suite if it is interrupted by a +// document unload. +window.addEventListener('unload', function (_event) { + // Mocha's hook queue is asynchronous; but we want synchronous behavior if + // we've gotten to the point of unloading the document. + Mocha.Runner.immediately = function (callback) { + callback(); + }; +}); diff --git a/browser/environment/errors.js b/browser/environment/errors.js new file mode 100644 index 0000000..dd5d9f3 --- /dev/null +++ b/browser/environment/errors.js @@ -0,0 +1,31 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import * as config from '../config.js'; +// We may encounter errors during initialization (for example, syntax errors in +// a test file). Hang onto those (and more) until we are ready to report them. +export var globalErrors = []; +/** + * Hook the environment to pick up on global errors. + */ +export function listenForErrors() { + window.addEventListener('error', function (event) { + globalErrors.push(event.error); + }); + // Also, we treat `console.error` as a test failure. Unless you prefer not. + var origConsole = console; + var origError = console.error; + console.error = function wctShimmedError() { + origError.apply(origConsole, arguments); + if (config.get('trackConsoleError')) { + throw 'console.error: ' + Array.prototype.join.call(arguments, ' '); + } + }; +} diff --git a/browser/environment/helpers.js b/browser/environment/helpers.js new file mode 100644 index 0000000..802240f --- /dev/null +++ b/browser/environment/helpers.js @@ -0,0 +1,188 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +// Make sure that we use native timers, in case they're being stubbed out. +var nativeSetInterval = window.setInterval; +var nativeSetTimeout = window.setTimeout; +var nativeRequestAnimationFrame = window.requestAnimationFrame; +/** + * Runs `stepFn`, catching any error and passing it to `callback` (Node-style). + * Otherwise, calls `callback` with no arguments on success. + * + * @param {function()} callback + * @param {function()} stepFn + */ +function safeStep(callback, stepFn) { + var err; + try { + stepFn(); + } + catch (error) { + err = error; + } + callback(err); +} +/** + * Runs your test at declaration time (before Mocha has begun tests). Handy for + * when you need to test document initialization. + * + * Be aware that any errors thrown asynchronously cannot be tied to your test. + * You may want to catch them and pass them to the done event, instead. See + * `safeStep`. + * + * @param {string} name The name of the test. + * @param {function(?function())} testFn The test function. If an argument is + * accepted, the test will be treated as async, just like Mocha tests. + */ +function testImmediate(name, testFn) { + if (testFn.length > 0) { + return testImmediateAsync(name, testFn); + } + var err; + try { + testFn(); + } + catch (error) { + err = error; + } + test(name, function (done) { + done(err); + }); +} +/** + * An async-only variant of `testImmediate`. + * + * @param {string} name + * @param {function(?function())} testFn + */ +function testImmediateAsync(name, testFn) { + var testComplete = false; + var err; + test(name, function (done) { + var intervalId = nativeSetInterval(function () { + if (!testComplete) + return; + clearInterval(intervalId); + done(err); + }, 10); + }); + try { + testFn(function (error) { + if (error) + err = error; + testComplete = true; + }); + } + catch (error) { + err = error; + testComplete = true; + } +} +/** + * Triggers a flush of any pending events, observations, etc and calls you back + * after they have been processed. + * + * @param {function()} callback + */ +function flush(callback) { + // Ideally, this function would be a call to Polymer.dom.flush, but that + // doesn't support a callback yet + // (https://github.com/Polymer/polymer-dev/issues/851), + // ...and there's cross-browser flakiness to deal with. + // Make sure that we're invoking the callback with no arguments so that the + // caller can pass Mocha callbacks, etc. + var done = function done() { + callback(); + }; + // Because endOfMicrotask is flaky for IE, we perform microtask checkpoints + // ourselves (https://github.com/Polymer/polymer-dev/issues/114): + var isIE = navigator.appName === 'Microsoft Internet Explorer'; + if (isIE && window.Platform && window.Platform.performMicrotaskCheckpoint) { + var reallyDone_1 = done; + done = function doneIE() { + Platform.performMicrotaskCheckpoint(); + nativeSetTimeout(reallyDone_1, 0); + }; + } + // Everyone else gets a regular flush. + var scope; + if (window.Polymer && window.Polymer.dom && window.Polymer.dom.flush) { + scope = window.Polymer.dom; + } + else if (window.Polymer && window.Polymer.flush) { + scope = window.Polymer; + } + else if (window.WebComponents && window.WebComponents.flush) { + scope = window.WebComponents; + } + if (scope) { + scope.flush(); + } + // Ensure that we are creating a new _task_ to allow all active microtasks to + // finish (the code you're testing may be using endOfMicrotask, too). + nativeSetTimeout(done, 0); +} +/** + * Advances a single animation frame. + * + * Calls `flush`, `requestAnimationFrame`, `flush`, and `callback` sequentially + * @param {function()} callback + */ +function animationFrameFlush(callback) { + flush(function () { + nativeRequestAnimationFrame(function () { + flush(callback); + }); + }); +} +/** + * DEPRECATED: Use `flush`. + * @param {function} callback + */ +function asyncPlatformFlush(callback) { + console.warn('asyncPlatformFlush is deprecated in favor of the more terse flush()'); + return window.flush(callback); +} +/** + * + */ +function waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime) { + timeoutTime = timeoutTime || Date.now() + (timeout || 1000); + intervalOrMutationEl = intervalOrMutationEl || 32; + try { + fn(); + } + catch (e) { + if (Date.now() > timeoutTime) { + throw e; + } + else { + if (typeof intervalOrMutationEl !== 'number') { + intervalOrMutationEl.onMutation(intervalOrMutationEl, function () { + waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime); + }); + } + else { + nativeSetTimeout(function () { + waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime); + }, intervalOrMutationEl); + } + return; + } + } + next(); +} +window.safeStep = safeStep; +window.testImmediate = testImmediate; +window.testImmediateAsync = testImmediateAsync; +window.flush = flush; +window.animationFrameFlush = animationFrameFlush; +window.asyncPlatformFlush = asyncPlatformFlush; +window.waitFor = waitFor; diff --git a/browser/index.js b/browser/index.js new file mode 100644 index 0000000..bad8121 --- /dev/null +++ b/browser/index.js @@ -0,0 +1,90 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +/** + * This file is the entry point into `web-component-tester`'s browser client. + */ +// Registers a bunch of globals: +import './environment/helpers.js'; +import ChildRunner from './childrunner.js'; +import CLISocket from './clisocket.js'; +import * as config from './config.js'; +import * as environment from './environment.js'; +import * as errors from './environment/errors.js'; +import * as mocha from './mocha.js'; +import * as reporters from './reporters.js'; +import MultiReporter from './reporters/multi.js'; +import * as suites from './suites.js'; +import * as util from './util.js'; +// You can configure WCT before it has loaded by assigning your custom +// configuration to the global `WCT`. +config.setup(window.WCT); +// Maybe some day we'll expose WCT as a module to whatever module registry you +// are using (aka the UMD approach), or as an es6 module. +var WCT = window.WCT = { + // A generic place to hang data about the current suite. This object is + // reported + // back via the `sub-suite-start` and `sub-suite-end` events. + share: {}, + // Until then, we get to rely on it to expose parent runners to their + // children. + _ChildRunner: ChildRunner, + _reporter: undefined, + _config: config._config, + // Public API + /** + * Loads suites of tests, supporting both `.js` and `.html` files. + * + * @param {!Array.} files The files to load. + */ + loadSuites: suites.loadSuites, +}; +// Load Process +errors.listenForErrors(); +mocha.stubInterfaces(); +environment.loadSync(); +// Give any scripts on the page a chance to declare tests and muck with things. +document.addEventListener('DOMContentLoaded', function () { + util.debug('DOMContentLoaded'); + environment.ensureDependenciesPresent(); + // We need the socket built prior to building its reporter. + CLISocket.init(function (error, socket) { + if (error) + throw error; + // Are we a child of another run? + var current = ChildRunner.current(); + var parent = current && current.parentScope.WCT._reporter; + util.debug('parentReporter:', parent); + var childSuites = suites.activeChildSuites(); + var reportersToUse = reporters.determineReporters(socket, parent); + // +1 for any local tests. + var reporter = new MultiReporter(childSuites.length + 1, reportersToUse, parent); + WCT._reporter = reporter; // For environment/compatibility.js + // We need the reporter so that we can report errors during load. + suites.loadJsSuites(reporter, function (error) { + // Let our parent know that we're about to start the tests. + if (current) + current.ready(error); + if (error) + throw error; + // Emit any errors we've encountered up til now + errors.globalErrors.forEach(function onError(error) { + reporter.emitOutOfBandTest('Test Suite Initialization', error); + }); + suites.runSuites(reporter, childSuites, function (error) { + // Make sure to let our parent know that we're done. + if (current) + current.done(); + if (error) + throw error; + }); + }); + }); +}); diff --git a/browser/mocha.js b/browser/mocha.js new file mode 100644 index 0000000..b34e262 --- /dev/null +++ b/browser/mocha.js @@ -0,0 +1,87 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import './mocha/fixture.js'; +import './mocha/stub.js'; +import './mocha/replace.js'; +import * as config from './config.js'; +import { applyExtensions } from './mocha/extend.js'; +// Mocha global helpers, broken out by testing method. +// +// Keys are the method for a particular interface; values are their analog in +// the opposite interface. +var MOCHA_EXPORTS = { + // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/tdd.js + tdd: { + 'setup': '"before"', + 'teardown': '"after"', + 'suiteSetup': '"beforeEach"', + 'suiteTeardown': '"afterEach"', + 'suite': '"describe" or "context"', + 'test': '"it" or "specify"', + }, + // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/bdd.js + bdd: { + 'before': '"setup"', + 'after': '"teardown"', + 'beforeEach': '"suiteSetup"', + 'afterEach': '"suiteTeardown"', + 'describe': '"suite"', + 'context': '"suite"', + 'xdescribe': '"suite.skip"', + 'xcontext': '"suite.skip"', + 'it': '"test"', + 'xit': '"test.skip"', + 'specify': '"test"', + 'xspecify': '"test.skip"', + }, +}; +/** + * Exposes all Mocha methods up front, configuring and running mocha + * automatically when you call them. + * + * The assumption is that it is a one-off (sub-)suite of tests being run. + */ +export function stubInterfaces() { + var keys = Object.keys(MOCHA_EXPORTS); + keys.forEach(function (ui) { + Object.keys(MOCHA_EXPORTS[ui]).forEach(function (key) { + window[key] = function wrappedMochaFunction() { + _setupMocha(ui, key, MOCHA_EXPORTS[ui][key]); + if (!window[key] || window[key] === wrappedMochaFunction) { + throw new Error('Expected mocha.setup to define ' + key); + } + window[key].apply(window, arguments); + }; + }); + }); +} +// Whether we've called `mocha.setup` +var _mochaIsSetup = false; +/** + * @param {string} ui Sets up mocha to run `ui`-style tests. + * @param {string} key The method called that triggered this. + * @param {string} alternate The matching method in the opposite interface. + */ +function _setupMocha(ui, key, alternate) { + var mochaOptions = config.get('mochaOptions'); + if (mochaOptions.ui && mochaOptions.ui !== ui) { + var message = 'Mixing ' + mochaOptions.ui + ' and ' + ui + + ' Mocha styles is not supported. ' + + 'You called "' + key + '". Did you mean ' + alternate + '?'; + throw new Error(message); + } + if (_mochaIsSetup) { + return; + } + applyExtensions(); + mochaOptions.ui = ui; + mocha.setup(mochaOptions); // Note that the reporter is configured in run.js. +} diff --git a/browser/mocha/extend.js b/browser/mocha/extend.js new file mode 100644 index 0000000..17ebbf6 --- /dev/null +++ b/browser/mocha/extend.js @@ -0,0 +1,50 @@ +var interfaceExtensions = []; +/** + * Registers an extension that extends the global `Mocha` implementation + * with new helper methods. These helper methods will be added to the `window` + * when tests run for both BDD and TDD interfaces. + */ +export function extendInterfaces(helperName, helperFactory) { + interfaceExtensions.push(function () { + var Mocha = window.Mocha; + // For all Mocha interfaces (probably just TDD and BDD): + Object.keys(Mocha.interfaces) + .forEach(function (interfaceName) { + // This is the original callback that defines the interface (TDD or + // BDD): + var originalInterface = Mocha.interfaces[interfaceName]; + // This is the name of the "teardown" or "afterEach" property for the + // current interface: + var teardownProperty = interfaceName === 'tdd' ? 'teardown' : 'afterEach'; + // The original callback is monkey patched with a new one that appends + // to the global context however we want it to: + Mocha.interfaces[interfaceName] = function (suite) { + // Call back to the original callback so that we get the base + // interface: + originalInterface.apply(this, arguments); + // Register a listener so that we can further extend the base + // interface: + suite.on('pre-require', function (context, _file, _mocha) { + // Capture a bound reference to the teardown function as a + // convenience: + var teardown = context[teardownProperty].bind(context); + // Add our new helper to the testing context. The helper is + // generated by a factory method that receives the context, + // the teardown function and the interface name and returns + // the new method to be added to that context: + context[helperName] = + helperFactory(context, teardown, interfaceName); + }); + }; + }); + }); +} +/** + * Applies any registered interface extensions. The extensions will be applied + * as many times as this function is called, so don't call it more than once. + */ +export function applyExtensions() { + interfaceExtensions.forEach(function (applyExtension) { + applyExtension(); + }); +} diff --git a/browser/mocha/fixture.js b/browser/mocha/fixture.js new file mode 100644 index 0000000..025ce33 --- /dev/null +++ b/browser/mocha/fixture.js @@ -0,0 +1,15 @@ +import { extendInterfaces } from './extend.js'; +extendInterfaces('fixture', function (context, teardown) { + // Return context.fixture if it is already a thing, for backwards + // compatibility with `test-fixture-mocha.js`: + return context.fixture || function fixture(fixtureId, model) { + // Automatically register a teardown callback that will restore the + // test-fixture: + teardown(function () { + document.getElementById(fixtureId).restore(); + }); + // Find the test-fixture with the provided ID and create it, returning + // the results: + return document.getElementById(fixtureId).create(model); + }; +}); diff --git a/browser/mocha/replace.js b/browser/mocha/replace.js new file mode 100644 index 0000000..1950c01 --- /dev/null +++ b/browser/mocha/replace.js @@ -0,0 +1,91 @@ +import { extendInterfaces } from './extend.js'; +// replacement map stores what should be +var replacements = {}; +var replaceTeardownAttached = false; +/** + * replace + * + * The replace addon allows the tester to replace all usages of one element with + * another element within all Polymer elements created within the time span of + * the test. Usage example: + * + * beforeEach(function() { + * replace('x-foo').with('x-fake-foo'); + * }); + * + * All annotations and attributes will be set on the placement element the way + * they were set for the original element. + */ +extendInterfaces('replace', function (_context, teardown) { + return function replace(oldTagName) { + return { + with: function (tagName) { + // Standardizes our replacements map + oldTagName = oldTagName.toLowerCase(); + tagName = tagName.toLowerCase(); + replacements[oldTagName] = tagName; + // If the function is already a stub, restore it to original + if (document.importNode.isSinonProxy) { + return; + } + if (window.Polymer && !window.Polymer.Element) { + window.Polymer.Element = function () { }; + window.Polymer.Element.prototype._stampTemplate = function () { }; + } + // Keep a reference to the original `document.importNode` + // implementation for later: + var originalImportNode = document.importNode; + // Use Sinon to stub `document.ImportNode`: + sinon.stub(document, 'importNode', function (origContent, deep) { + var templateClone = document.createElement('template'); + var content = templateClone.content; + var inertDoc = content.ownerDocument; + // imports node from inertDoc which holds inert nodes. + templateClone.content.appendChild(inertDoc.importNode(origContent, true)); + // optional arguments are not optional on IE. + var nodeIterator = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT, null, true); + var node; + // Traverses the tree. A recently-replaced node will be put next, + // so if a node is replaced, it will be checked if it needs to be + // replaced again. + while (node = nodeIterator.nextNode()) { + if (!node.tagName) { + continue; + } + var currentTagName = node.tagName.toLowerCase(); + if (replacements.hasOwnProperty(currentTagName)) { + currentTagName = replacements[currentTagName]; + // find the final tag name. + while (replacements[currentTagName]) { + currentTagName = replacements[currentTagName]; + } + // Create a replacement: + var replacement = document.createElement(currentTagName); + // For all attributes in the original node.. + for (var index = 0; index < node.attributes.length; ++index) { + // Set that attribute on the replacement: + replacement.setAttribute(node.attributes[index].name, node.attributes[index].value); + } + // Replace the original node with the replacement node: + node.parentNode.replaceChild(replacement, node); + } + } + return originalImportNode.call(this, content, deep); + }); + if (!replaceTeardownAttached) { + // After each test... + teardown(function () { + replaceTeardownAttached = true; + // Restore the stubbed version of `document.importNode`: + var documentImportNode = document.importNode; + if (documentImportNode.isSinonProxy) { + documentImportNode.restore(); + } + // Empty the replacement map + replacements = {}; + }); + } + } + }; + }; +}); diff --git a/browser/mocha/stub.js b/browser/mocha/stub.js new file mode 100644 index 0000000..1193e0c --- /dev/null +++ b/browser/mocha/stub.js @@ -0,0 +1,44 @@ +import { extendInterfaces } from './extend.js'; +/** + * stub + * + * The stub addon allows the tester to partially replace the implementation of + * an element with some custom implementation. Usage example: + * + * beforeEach(function() { + * stub('x-foo', { + * attached: function() { + * // Custom implementation of the `attached` method of element `x-foo`.. + * }, + * otherMethod: function() { + * // More custom implementation.. + * }, + * getterSetterProperty: { + * get: function() { + * // Custom getter implementation.. + * }, + * set: function() { + * // Custom setter implementation.. + * } + * }, + * // etc.. + * }); + * }); + */ +extendInterfaces('stub', function (_context, teardown) { + return function stub(tagName, implementation) { + // Find the prototype of the element being stubbed: + var proto = document.createElement(tagName).constructor.prototype; + // For all keys in the implementation to stub with.. + var stubs = Object.keys(implementation).map(function (key) { + // Stub the method on the element prototype with Sinon: + return sinon.stub(proto, key, implementation[key]); + }); + // After all tests.. + teardown(function () { + stubs.forEach(function (stub) { + stub.restore(); + }); + }); + }; +}); diff --git a/browser/more-declarations.js b/browser/more-declarations.js new file mode 100644 index 0000000..e69de29 diff --git a/browser/reporters.js b/browser/reporters.js new file mode 100644 index 0000000..2667d36 --- /dev/null +++ b/browser/reporters.js @@ -0,0 +1,46 @@ +import ConsoleReporter from './reporters/console.js'; +import HTMLReporter from './reporters/html.js'; +import MultiReporter from './reporters/multi.js'; +import TitleReporter from './reporters/title.js'; +import * as suites from './suites.js'; +export var htmlSuites = []; +export var jsSuites = []; +/** + * @param {CLISocket} socket The CLI socket, if present. + * @param {MultiReporter} parent The parent reporter, if present. + * @return {!Array. 0 || suites.jsSuites.length > 0) { + reporters.push(HTMLReporter); + } + return reporters; +} +/** + * Yeah, hideous, but this allows us to be loaded before Mocha, which is handy. + */ +export function injectMocha(Mocha) { + _injectPrototype(ConsoleReporter, Mocha.reporters.Base.prototype); + _injectPrototype(HTMLReporter, Mocha.reporters.HTML.prototype); + // Mocha doesn't expose its `EventEmitter` shim directly, so: + _injectPrototype(MultiReporter, Object.getPrototypeOf(Mocha.Runner.prototype)); +} +function _injectPrototype(klass, prototype) { + var newPrototype = Object.create(prototype); + // Only support + Object.keys(klass.prototype).forEach(function (key) { + newPrototype[key] = klass.prototype[key]; + }); + klass.prototype = newPrototype; +} diff --git a/browser/reporters/console.js b/browser/reporters/console.js new file mode 100644 index 0000000..60fedb9 --- /dev/null +++ b/browser/reporters/console.js @@ -0,0 +1,122 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import * as util from '../util.js'; +// We capture console events when running tests; so make sure we have a +// reference to the original one. +var console = window.console; +var FONT = ';font: normal 13px "Roboto", "Helvetica Neue", "Helvetica", sans-serif;'; +var STYLES = { + plain: FONT, + suite: 'color: #5c6bc0' + FONT, + test: FONT, + passing: 'color: #259b24' + FONT, + pending: 'color: #e65100' + FONT, + failing: 'color: #c41411' + FONT, + stack: 'color: #c41411', + results: FONT + 'font-size: 16px', +}; +// I don't think we can feature detect this one... +var userAgent = navigator.userAgent.toLowerCase(); +var CAN_STYLE_LOG = userAgent.match('firefox') || userAgent.match('webkit'); +var CAN_STYLE_GROUP = userAgent.match('webkit'); +// Track the indent for faked `console.group` +var logIndent = ''; +function log(text, style) { + text = text.split('\n') + .map(function (l) { + return logIndent + l; + }) + .join('\n'); + if (CAN_STYLE_LOG) { + console.log('%c' + text, STYLES[style] || STYLES.plain); + } + else { + console.log(text); + } +} +function logGroup(text, style) { + if (CAN_STYLE_GROUP) { + console.group('%c' + text, STYLES[style] || STYLES.plain); + } + else if (console.group) { + console.group(text); + } + else { + logIndent = logIndent + ' '; + log(text, style); + } +} +function logGroupEnd() { + if (console.groupEnd) { + console.groupEnd(); + } + else { + logIndent = logIndent.substr(0, logIndent.length - 2); + } +} +function logException(error) { + log(error.stack || error.message || (error + ''), 'stack'); +} +/** + * A Mocha reporter that logs results out to the web `console`. + */ +var Console = /** @class */ (function () { + /** + * @param runner The runner that is being reported on. + */ + function Console(runner) { + Mocha.reporters.Base.call(this, runner); + runner.on('suite', function (suite) { + if (suite.root) { + return; + } + logGroup(suite.title, 'suite'); + }.bind(this)); + runner.on('suite end', function (suite) { + if (suite.root) { + return; + } + logGroupEnd(); + }.bind(this)); + runner.on('test', function (test) { + logGroup(test.title, 'test'); + }.bind(this)); + runner.on('pending', function (test) { + logGroup(test.title, 'pending'); + }.bind(this)); + runner.on('fail', function (_test, error) { + logException(error); + }.bind(this)); + runner.on('test end', function (_test) { + logGroupEnd(); + }.bind(this)); + runner.on('end', this.logSummary.bind(this)); + } + /** Prints out a final summary of test results. */ + Console.prototype.logSummary = function () { + logGroup('Test Results', 'results'); + if (this.stats.failures > 0) { + log(util.pluralizedStat(this.stats.failures, 'failing'), 'failing'); + } + if (this.stats.pending > 0) { + log(util.pluralizedStat(this.stats.pending, 'pending'), 'pending'); + } + log(util.pluralizedStat(this.stats.passes, 'passing')); + if (!this.stats.failures) { + log('test suite passed', 'passing'); + } + log('Evaluated ' + this.stats.tests + ' tests in ' + + this.stats.duration + 'ms.'); + logGroupEnd(); + }; + return Console; +}()); +export default Console; diff --git a/browser/reporters/html.js b/browser/reporters/html.js new file mode 100644 index 0000000..77e0f1d --- /dev/null +++ b/browser/reporters/html.js @@ -0,0 +1,29 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +/** + * WCT-specific behavior on top of Mocha's default HTML reporter. + * + * @param {!Mocha.Runner} runner The runner that is being reported on. + */ +export default function HTML(runner) { + var output = document.createElement('div'); + output.id = 'mocha'; + document.body.appendChild(output); + runner.on('suite', function (_test) { + this.total = runner.total; + }.bind(this)); + Mocha.reporters.HTML.call(this, runner); +} +// Woo! What a hack. This just saves us from adding a bunch of complexity around +// style loading. +var style = document.createElement('style'); +style.textContent = "\n html, body {\n position: relative;\n height: 100%;\n width: 100%;\n min-width: 900px;\n }\n #mocha, #subsuites {\n height: 100%;\n position: absolute;\n top: 0;\n }\n #mocha {\n box-sizing: border-box;\n margin: 0 !important;\n padding: 60px 20px;\n right: 0;\n left: 500px;\n }\n #subsuites {\n -ms-flex-direction: column;\n -webkit-flex-direction: column;\n display: -ms-flexbox;\n display: -webkit-flex;\n display: flex;\n flex-direction: column;\n left: 0;\n width: 500px;\n }\n #subsuites .subsuite {\n border: 0;\n width: 100%;\n height: 100%;\n }\n #mocha .test.pass .duration {\n color: #555 !important;\n }\n"; +document.head.appendChild(style); diff --git a/browser/reporters/multi.js b/browser/reporters/multi.js new file mode 100644 index 0000000..f4a9cab --- /dev/null +++ b/browser/reporters/multi.js @@ -0,0 +1,249 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import * as util from '../util.js'; +var STACKY_CONFIG = { + indent: ' ', + locationStrip: [ + /^https?:\/\/[^\/]+/, + /\?.*$/, + ], + filter: function (line) { + return !!line.location.match(/\/web-component-tester\/[^\/]+(\?.*)?$/); + }, +}; +// https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36-46 +var MOCHA_EVENTS = [ + 'start', + 'end', + 'suite', + 'suite end', + 'test', + 'test end', + 'hook', + 'hook end', + 'pass', + 'fail', + 'pending', + 'childRunner end' +]; +// Until a suite has loaded, we assume this many tests in it. +var ESTIMATED_TESTS_PER_SUITE = 3; +/** + * A Mocha-like reporter that combines the output of multiple Mocha suites. + */ +var MultiReporter = /** @class */ (function () { + /** + * @param numSuites The number of suites that will be run, in order to + * estimate the total number of tests that will be performed. + * @param reporters The set of reporters that + * should receive the unified event stream. + * @param parent The parent reporter, if present. + */ + function MultiReporter(numSuites, reporters, parent) { + var _this = this; + this.reporters = reporters.map(function (reporter) { + return new reporter(_this); + }); + this.parent = parent; + this.basePath = parent && parent.basePath || util.basePath(window.location); + this.total = numSuites * ESTIMATED_TESTS_PER_SUITE; + // Mocha reporters assume a stream of events, so we have to be careful to + // only report on one runner at a time... + this.currentRunner = null; + // ...while we buffer events for any other active runners. + this.pendingEvents = []; + this.emit('start'); + } + /** + * @param location The location this reporter represents. + * @return A reporter-like "class" for each child suite + * that should be passed to `mocha.run`. + */ + MultiReporter.prototype.childReporter = function (location) { + var _a; + var name = this.suiteTitle(location); + // The reporter is used as a constructor, so we can't depend on `this` being + // properly bound. + var self = this; + return _a = /** @class */ (function () { + function ChildReporter(runner) { + runner.name = window.name; + self.bindChildRunner(runner); + } + return ChildReporter; + }()), + _a.title = window.name, + _a; + }; + /** Must be called once all runners have finished. */ + MultiReporter.prototype.done = function () { + this.complete = true; + this.flushPendingEvents(); + this.emit('end'); + }; + /** + * Emit a top level test that is not part of any suite managed by this + * reporter. + * + * Helpful for reporting on global errors, loading issues, etc. + * + * @param title The title of the test. + * @param error An error associated with this test. If falsy, test is + * considered to be passing. + * @param suiteTitle Title for the suite that's wrapping the test. + * @param estimated If this test was included in the original + * estimate of `numSuites`. + */ + MultiReporter.prototype.emitOutOfBandTest = function (title, error, suiteTitle, estimated) { + util.debug('MultiReporter#emitOutOfBandTest(', arguments, ')'); + var root = new Mocha.Suite(suiteTitle || ''); + var test = new Mocha.Test(title, function () { }); + test.parent = root; + test.state = error ? 'failed' : 'passed'; + test.err = error; + if (!estimated) { + this.total = this.total + ESTIMATED_TESTS_PER_SUITE; + } + var runner = { total: 1 }; + this.proxyEvent('start', runner); + this.proxyEvent('suite', runner, root); + this.proxyEvent('test', runner, test); + if (error) { + this.proxyEvent('fail', runner, test, error); + } + else { + this.proxyEvent('pass', runner, test); + } + this.proxyEvent('test end', runner, test); + this.proxyEvent('suite end', runner, root); + this.proxyEvent('end', runner); + }; + /** + * @param {!Location|string} location + * @return {string} + */ + MultiReporter.prototype.suiteTitle = function (location) { + var path = util.relativeLocation(location, this.basePath); + path = util.cleanLocation(path); + return path; + }; + // Internal Interface + /** @param {!Mocha.runners.Base} runner The runner to listen to events for. */ + MultiReporter.prototype.bindChildRunner = function (runner) { + var _this = this; + MOCHA_EVENTS.forEach(function (eventName) { + runner.on(eventName, _this.proxyEvent.bind(_this, eventName, runner)); + }); + }; + /** + * Evaluates an event fired by `runner`, proxying it forward or buffering it. + * + * @param {string} eventName + * @param {!Mocha.runners.Base} runner The runner that emitted this event. + * @param {...*} var_args Any additional data passed as part of the event. + */ + MultiReporter.prototype.proxyEvent = function (eventName, runner) { + var _args = []; + for (var _i = 2; _i < arguments.length; _i++) { + _args[_i - 2] = arguments[_i]; + } + var extraArgs = Array.prototype.slice.call(arguments, 2); + if (this.complete) { + console.warn('out of order Mocha event for ' + runner.name + ':', eventName, extraArgs); + return; + } + if (this.currentRunner && runner !== this.currentRunner) { + this.pendingEvents.push(Array.prototype.slice.call(arguments)); + return; + } + util.debug('MultiReporter#proxyEvent(', arguments, ')'); + // This appears to be a Mocha bug: Tests failed by passing an error to their + // done function don't set `err` properly. + // + // TODO(nevir): Track down. + if (eventName === 'fail' && !extraArgs[0].err) { + extraArgs[0].err = extraArgs[1]; + } + if (eventName === 'start') { + this.onRunnerStart(runner); + } + else if (eventName === 'end') { + this.onRunnerEnd(runner); + } + else { + this.cleanEvent(eventName, runner, extraArgs); + this.emit.apply(this, [eventName].concat(extraArgs)); + } + }; + /** + * Cleans or modifies an event if needed. + * + * @param eventName + * @param runner The runner that emitted this event. + * @param extraArgs + */ + MultiReporter.prototype.cleanEvent = function (eventName, _runner, extraArgs) { + // Suite hierarchy + if (extraArgs[0]) { + extraArgs[0] = this.showRootSuite(extraArgs[0]); + } + // Normalize errors + if (eventName === 'fail') { + extraArgs[1] = Stacky.normalize(extraArgs[1], STACKY_CONFIG); + } + if (extraArgs[0] && extraArgs[0].err) { + extraArgs[0].err = Stacky.normalize(extraArgs[0].err, STACKY_CONFIG); + } + }; + /** + * We like to show the root suite's title, which requires a little bit of + * trickery in the suite hierarchy. + * + * @param {!Mocha.Runnable} node + */ + MultiReporter.prototype.showRootSuite = function (node) { + var leaf = node = Object.create(node); + while (node && node.parent) { + var wrappedParent = Object.create(node.parent); + node.parent = wrappedParent; + node = wrappedParent; + } + node.root = false; + return leaf; + }; + /** @param {!Mocha.runners.Base} runner */ + MultiReporter.prototype.onRunnerStart = function (runner) { + util.debug('MultiReporter#onRunnerStart:', runner.name); + this.total = this.total - ESTIMATED_TESTS_PER_SUITE + runner.total; + this.currentRunner = runner; + }; + /** @param {!Mocha.runners.Base} runner */ + MultiReporter.prototype.onRunnerEnd = function (runner) { + util.debug('MultiReporter#onRunnerEnd:', runner.name); + this.currentRunner = null; + this.flushPendingEvents(); + }; + /** + * Flushes any buffered events and runs them through `proxyEvent`. This will + * loop until all buffered runners are complete, or we have run out of + * buffered events. + */ + MultiReporter.prototype.flushPendingEvents = function () { + var _this = this; + var events = this.pendingEvents; + this.pendingEvents = []; + events.forEach(function (eventArgs) { + _this.proxyEvent.apply(_this, eventArgs); + }); + }; + return MultiReporter; +}()); +export default MultiReporter; diff --git a/browser/reporters/title.js b/browser/reporters/title.js new file mode 100644 index 0000000..fc4cc05 --- /dev/null +++ b/browser/reporters/title.js @@ -0,0 +1,80 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import * as util from '../util.js'; +var ARC_OFFSET = 0; // start at the right. +var ARC_WIDTH = 6; +/** + * A Mocha reporter that updates the document's title and favicon with + * at-a-glance stats. + * + * @param {!Mocha.Runner} runner The runner that is being reported on. + */ +var Title = /** @class */ (function () { + function Title(runner) { + Mocha.reporters.Base.call(this, runner); + runner.on('test end', this.report.bind(this)); + } + /** Reports current stats via the page title and favicon. */ + Title.prototype.report = function () { + this.updateTitle(); + this.updateFavicon(); + }; + /** Updates the document title with a summary of current stats. */ + Title.prototype.updateTitle = function () { + if (this.stats.failures > 0) { + document.title = util.pluralizedStat(this.stats.failures, 'failing'); + } + else { + document.title = util.pluralizedStat(this.stats.passes, 'passing'); + } + }; + /** Updates the document's favicon w/ a summary of current stats. */ + Title.prototype.updateFavicon = function () { + var canvas = document.createElement('canvas'); + canvas.height = canvas.width = 32; + var context = canvas.getContext('2d'); + var passing = this.stats.passes; + var pending = this.stats.pending; + var failing = this.stats.failures; + var total = Math.max(this.runner.total, passing + pending + failing); + drawFaviconArc(context, total, 0, passing, '#0e9c57'); + drawFaviconArc(context, total, passing, pending, '#f3b300'); + drawFaviconArc(context, total, pending + passing, failing, '#ff5621'); + this.setFavicon(canvas.toDataURL()); + }; + /** Sets the current favicon by URL. */ + Title.prototype.setFavicon = function (url) { + var current = document.head.querySelector('link[rel="icon"]'); + if (current) { + document.head.removeChild(current); + } + var link = document.createElement('link'); + link.rel = 'icon'; + link.type = 'image/x-icon'; + link.href = url; + link.setAttribute('sizes', '32x32'); + document.head.appendChild(link); + }; + return Title; +}()); +export default Title; +/** + * Draws an arc for the favicon status, relative to the total number of tests. + */ +function drawFaviconArc(context, total, start, length, color) { + var arcStart = ARC_OFFSET + Math.PI * 2 * (start / total); + var arcEnd = ARC_OFFSET + Math.PI * 2 * ((start + length) / total); + context.beginPath(); + context.strokeStyle = color; + context.lineWidth = ARC_WIDTH; + context.arc(16, 16, 16 - ARC_WIDTH / 2, arcStart, arcEnd); + context.stroke(); +} diff --git a/browser/suites.js b/browser/suites.js new file mode 100644 index 0000000..33ed9e4 --- /dev/null +++ b/browser/suites.js @@ -0,0 +1,146 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +import ChildRunner from './childrunner.js'; +import * as config from './config.js'; +import * as util from './util.js'; +export var htmlSuites = []; +export var jsSuites = []; +// We process grep ourselves to avoid loading suites that will be filtered. +var GREP = util.getParam('grep'); +// work around mocha bug (https://github.com/mochajs/mocha/issues/2070) +if (GREP) { + GREP = GREP.replace(/\\\./g, '.'); +} +/** + * Loads suites of tests, supporting both `.js` and `.html` files. + * + * @param files The files to load. + */ +export function loadSuites(files) { + files.forEach(function (file) { + if (/\.js(\?.*)?$/.test(file)) { + jsSuites.push(file); + } + else if (/\.html(\?.*)?$/.test(file)) { + htmlSuites.push(file); + } + else { + throw new Error('Unknown resource type: ' + file); + } + }); +} +/** + * @return The child suites that should be loaded, ignoring + * those that would not match `GREP`. + */ +export function activeChildSuites() { + var subsuites = htmlSuites; + if (GREP) { + var cleanSubsuites = []; + for (var i = 0, subsuite = void 0; subsuite = subsuites[i]; i++) { + if (GREP.indexOf(util.cleanLocation(subsuite)) !== -1) { + cleanSubsuites.push(subsuite); + } + } + subsuites = cleanSubsuites; + } + return subsuites; +} +/** + * Loads all `.js` sources requested by the current suite. + */ +export function loadJsSuites(_reporter, done) { + util.debug('loadJsSuites', jsSuites); + var loaders = jsSuites.map(function (file) { + // We only support `.js` dependencies for now. + return util.loadScript.bind(util, file); + }); + util.parallel(loaders, done); +} +export function runSuites(reporter, childSuites, done) { + util.debug('runSuites'); + var suiteRunners = [ + // Run the local tests (if any) first, not stopping on error; + _runMocha.bind(null, reporter), + ]; + // As well as any sub suites. Again, don't stop on error. + childSuites.forEach(function (file) { + suiteRunners.push(function (next) { + var childRunner = new ChildRunner(file, window); + reporter.emit('childRunner start', childRunner); + childRunner.run(function (error) { + reporter.emit('childRunner end', childRunner); + if (error) + reporter.emitOutOfBandTest(file, error); + next(); + }); + }); + }); + util.parallel(suiteRunners, config.get('numConcurrentSuites'), function (error) { + reporter.done(); + done(error); + }); +} +/** + * Kicks off a mocha run, waiting for frameworks to load if necessary. + * + * @param {!MultiReporter} reporter Where to send Mocha's events. + * @param {function} done A callback fired, _no error is passed_. + */ +function _runMocha(reporter, done, waited) { + if (config.get('waitForFrameworks') && !waited) { + var waitFor = (config.get('waitFor') || util.whenFrameworksReady).bind(window); + waitFor(_runMocha.bind(null, reporter, done, true)); + return; + } + util.debug('_runMocha'); + var mocha = window.mocha; + var Mocha = window.Mocha; + mocha.reporter(reporter.childReporter(window.location)); + mocha.suite.title = reporter.suiteTitle(window.location); + mocha.grep(GREP); + // We can't use `mocha.run` because it bashes over grep, invert, and friends. + // See https://github.com/visionmedia/mocha/blob/master/support/tail.js#L137 + var runner = Mocha.prototype.run.call(mocha, function (_error) { + if (document.getElementById('mocha')) { + Mocha.utils.highlightTags('code'); + } + done(); // We ignore the Mocha failure count. + }); + // Mocha's default `onerror` handling strips the stack (to support really old + // browsers). We upgrade this to get better stacks for async errors. + // + // TODO(nevir): Can we expand support to other browsers? + if (navigator.userAgent.match(/chrome/i)) { + window.onerror = null; + window.addEventListener('error', function (event) { + if (!event.error) + return; + if (event.error.ignore) + return; + if (window.uncaughtErrorFilter && window.uncaughtErrorFilter(event)) { + event.preventDefault(); + return; + } + runner.uncaught(event.error); + }); + } + else { + window.onerror = null; + window.addEventListener('error', function (event) { + if (window.uncaughtErrorFilter && window.uncaughtErrorFilter(event)) { + event.preventDefault(); + return; + } + runner.uncaught(event.error); + }); + } +} diff --git a/browser/util.js b/browser/util.js new file mode 100644 index 0000000..452d022 --- /dev/null +++ b/browser/util.js @@ -0,0 +1,265 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; +import * as config from './config.js'; +/** + * @param {function()} callback A function to call when the active web component + * frameworks have loaded. + */ +export function whenFrameworksReady(callback) { + debug('whenFrameworksReady'); + var done = function () { + debug('whenFrameworksReady done'); + callback(); + }; + // If webcomponents script is in the document, wait for WebComponentsReady. + if (window.WebComponents && !window.WebComponents.ready) { + debug('WebComponentsReady?'); + window.addEventListener('WebComponentsReady', function wcReady() { + window.removeEventListener('WebComponentsReady', wcReady); + debug('WebComponentsReady'); + done(); + }); + } + else { + done(); + } +} +/** + * @return {string} ' tests' or ' test'. + */ +export function pluralizedStat(count, kind) { + if (count === 1) { + return count + ' ' + kind + ' test'; + } + else { + return count + ' ' + kind + ' tests'; + } +} +/** + * @param {string} path The URI of the script to load. + * @param {function} done + */ +export function loadScript(path, done) { + var script = document.createElement('script'); + script.src = path; + if (done) { + script.onload = done.bind(null, null); + script.onerror = done.bind(null, 'Failed to load script ' + script.src); + } + document.head.appendChild(script); +} +/** + * @param {string} path The URI of the stylesheet to load. + * @param {function} done + */ +export function loadStyle(path, done) { + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = path; + if (done) { + link.onload = done.bind(null, null); + link.onerror = done.bind(null, 'Failed to load stylesheet ' + link.href); + } + document.head.appendChild(link); +} +/** + * @param {...*} var_args Logs values to the console when the `debug` + * configuration option is true. + */ +export function debug() { + var var_args = []; + for (var _i = 0; _i < arguments.length; _i++) { + var_args[_i] = arguments[_i]; + } + if (!config.get('verbose')) { + return; + } + var args = __spreadArrays([window.location.pathname], var_args); + (console.debug || console.log).apply(console, args); +} +// URL Processing +/** + * @param {string} url + * @return {{base: string, params: string}} + */ +export function parseUrl(url) { + var parts = url.match(/^(.*?)(?:\?(.*))?$/); + return { + base: parts[1], + params: getParams(parts[2] || ''), + }; +} +/** + * Expands a URL that may or may not be relative to `base`. + * + * @param {string} url + * @param {string} base + * @return {string} + */ +export function expandUrl(url, base) { + if (!base) + return url; + if (url.match(/^(\/|https?:\/\/)/)) + return url; + if (base.substr(base.length - 1) !== '/') { + base = base + '/'; + } + return base + url; +} +/** + * @param {string=} opt_query A query string to parse. + * @return {!Object>} All params on the URL's query. + */ +export function getParams(query) { + query = typeof query === 'string' ? query : window.location.search; + if (query.substring(0, 1) === '?') { + query = query.substring(1); + } + // python's SimpleHTTPServer tacks a `/` on the end of query strings :( + if (query.slice(-1) === '/') { + query = query.substring(0, query.length - 1); + } + if (query === '') + return {}; + var result = {}; + query.split('&').forEach(function (part) { + var pair = part.split('='); + if (pair.length !== 2) { + console.warn('Invalid URL query part:', part); + return; + } + var key = decodeURIComponent(pair[0]); + var value = decodeURIComponent(pair[1]); + if (!result[key]) { + result[key] = []; + } + result[key].push(value); + }); + return result; +} +/** + * Merges params from `source` into `target` (mutating `target`). + * + * @param {!Object>} target + * @param {!Object>} source + */ +export function mergeParams(target, source) { + Object.keys(source).forEach(function (key) { + if (!(key in target)) { + target[key] = []; + } + target[key] = target[key].concat(source[key]); + }); +} +/** + * @param {string} param The param to return a value for. + * @return {?string} The first value for `param`, if found. + */ +export function getParam(param) { + var params = getParams(); + return params[param] ? params[param][0] : null; +} +/** + * @param {!Object>} params + * @return {string} `params` encoded as a URI query. + */ +export function paramsToQuery(params) { + var pairs = []; + Object.keys(params).forEach(function (key) { + params[key].forEach(function (value) { + pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + }); + }); + return (pairs.length > 0) ? ('?' + pairs.join('&')) : ''; +} +function getPathName(location) { + return typeof location === 'string' ? location : location.pathname; +} +export function basePath(location) { + return getPathName(location).match(/^.*\//)[0]; +} +export function relativeLocation(location, basePath) { + var path = getPathName(location); + if (path.indexOf(basePath) === 0) { + path = path.substring(basePath.length); + } + return path; +} +export function cleanLocation(location) { + var path = getPathName(location); + if (path.slice(-11) === '/index.html') { + path = path.slice(0, path.length - 10); + } + return path; +} +export function parallel(runners, maybeLimit, done) { + var limit; + if (typeof maybeLimit !== 'number') { + done = maybeLimit; + limit = 0; + } + else { + limit = maybeLimit; + } + if (!runners.length) { + return done(); + } + var called = false; + var total = runners.length; + var numActive = 0; + var numDone = 0; + function runnerDone(error) { + if (called) { + return; + } + numDone = numDone + 1; + numActive = numActive - 1; + if (error || numDone >= total) { + called = true; + done(error); + } + else { + runOne(); + } + } + function runOne() { + if (limit && numActive >= limit) { + return; + } + if (!runners.length) { + return; + } + numActive = numActive + 1; + runners.shift()(runnerDone); + } + runners.forEach(runOne); +} +/** + * Finds the directory that a loaded script is hosted on. + * + * @param {string} filename + * @return {string?} + */ +export function scriptPrefix(filename) { + var scripts = document.querySelectorAll('script[src*="' + filename + '"]'); + if (scripts.length !== 1) { + return null; + } + var script = scripts[0].src; + return script.substring(0, script.indexOf(filename)); +} diff --git a/runner/browserrunner.js b/runner/browserrunner.js new file mode 100644 index 0000000..27fc53e --- /dev/null +++ b/runner/browserrunner.js @@ -0,0 +1,217 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +exports.__esModule = true; +var chalk = require("chalk"); +var cleankill = require("cleankill"); +var _ = require("lodash"); +var wd = require("wd"); +// Browser abstraction, responsible for spinning up a browser instance via wd.js +// and executing runner.html test files passed in options.files +var BrowserRunner = /** @class */ (function () { + /** + * @param emitter The emitter to send updates about test progress to. + * @param def A BrowserDef describing and defining the browser to be run. + * Includes both metadata and a method for connecting/launching the + * browser. + * @param options WCT options. + * @param url The url of the generated index.html file that the browser should + * point at. + * @param waitFor Optional. If given, we won't try to start/connect to the + * browser until this promise resolves. Used for serializing access to + * Safari webdriver, which can only have one instance running at once. + */ + function BrowserRunner(emitter, def, options, url, waitFor) { + var _this = this; + this.emitter = emitter; + this.def = def; + this.options = options; + this.timeout = options.testTimeout; + this.emitter = emitter; + this.url = url; + this.stats = { status: 'initializing' }; + this.donePromise = new Promise(function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + }); + waitFor = waitFor || Promise.resolve(); + waitFor.then(function () { + _this.browser = wd.remote(_this.def.url); + // never retry selenium commands + _this.browser.configureHttp({ retries: -1 }); + cleankill.onInterrupt(function () { + return new Promise(function (resolve) { + if (!_this.browser) { + return resolve(); + } + _this.donePromise.then(function () { return resolve(); }, function () { return resolve(); }); + _this.done('Interrupting'); + }); + }); + _this.browser.on('command', function (method, context) { + emitter.emit('log:debug', _this.def, chalk.cyan(method), context); + }); + _this.browser.on('http', function (method, path, data) { + if (data) { + emitter.emit('log:debug', _this.def, chalk.magenta(method), chalk.cyan(path), data); + } + else { + emitter.emit('log:debug', _this.def, chalk.magenta(method), chalk.cyan(path)); + } + }); + _this.browser.on('connection', function (code, message, error) { + emitter.emit('log:warn', _this.def, 'Error code ' + code + ':', message, error); + }); + _this.emitter.emit('browser-init', _this.def, _this.stats); + // Make sure that we are passing a pristine capabilities object to + // webdriver. None of our screwy custom properties! + var webdriverCapabilities = _.clone(_this.def); + delete webdriverCapabilities.id; + delete webdriverCapabilities.url; + delete webdriverCapabilities.sessionId; + // Reusing a session? + if (_this.def.sessionId) { + _this.browser.attach(_this.def.sessionId, function (error) { + _this._init(error, _this.def.sessionId); + }); + } + else { + _this.browser.init(webdriverCapabilities, _this._init.bind(_this)); + } + }); + } + BrowserRunner.prototype._init = function (error, sessionId) { + if (!this.browser) { + return; // When interrupted. + } + if (error) { + // TODO(nevir): BEGIN TEMPORARY CHECK. + // https://github.com/Polymer/web-component-tester/issues/51 + if (this.def.browserName === 'safari' && error.data) { + // debugger; + try { + var data = JSON.parse(error.data); + if (data.value && data.value.message && + /Failed to connect to SafariDriver/i.test(data.value.message)) { + error = 'Until Selenium\'s SafariDriver supports ' + + 'Safari 6.2+, 7.1+, & 8.0+, you must\n' + + 'manually install it. Follow the steps at:\n' + + 'https://github.com/SeleniumHQ/selenium/' + + 'wiki/SafariDriver#getting-started'; + } + } + catch (error) { + // Show the original error. + } + } + // END TEMPORARY CHECK + this.done(error.data || error); + } + else { + this.sessionId = sessionId; + this.startTest(); + this.extendTimeout(); + } + }; + BrowserRunner.prototype.startTest = function () { + var _this = this; + var paramDelim = (this.url.indexOf('?') === -1 ? '?' : '&'); + var extra = paramDelim + "cli_browser_id=" + this.def.id; + this.browser.get(this.url + extra, function (error) { + if (error) { + _this.done(error.data || error); + } + else { + _this.extendTimeout(); + } + }); + }; + BrowserRunner.prototype.onEvent = function (event, data) { + this.extendTimeout(); + if (event === 'browser-start') { + // Always assign, to handle re-runs (no browser-init). + this.stats = { + status: 'running', + passing: 0, + pending: 0, + failing: 0 + }; + } + else if (event === 'test-end') { + this.stats[data.state] = this.stats[data.state] + 1; + } + if (event === 'browser-end' || event === 'browser-fail') { + this.done(data); + } + else { + this.emitter.emit(event, this.def, data, this.stats, this.browser); + } + }; + BrowserRunner.prototype.done = function (error) { + var _this = this; + // No quitting for you! + if (this.options.persistent) { + return; + } + if (this.timeoutId) { + clearTimeout(this.timeoutId); + } + // Don't double-quit. + if (!this.browser) { + return; + } + var browser = this.browser; + this.browser = null; + this.stats.status = error ? 'error' : 'complete'; + if (!error && this.stats.failing > 0) { + error = this.stats.failing + ' failed tests'; + } + this.emitter.emit('browser-end', this.def, error, this.stats, this.sessionId, browser); + // Nothing to quit. + if (!this.sessionId) { + error ? this._reject(error) : this._resolve(); + } + browser.quit(function (quitError) { + if (quitError) { + _this.emitter.emit('log:warn', _this.def, 'Failed to quit:', quitError.data || quitError); + } + if (error) { + _this._reject(error); + } + else { + _this._resolve(); + } + }); + }; + BrowserRunner.prototype.extendTimeout = function () { + var _this = this; + if (this.options.persistent) { + return; + } + if (this.timeoutId) { + clearTimeout(this.timeoutId); + } + this.timeoutId = setTimeout(function () { + _this.done('Timed out'); + }, this.timeout); + }; + BrowserRunner.prototype.quit = function () { + this.done('quit was called'); + }; + // HACK + BrowserRunner.BrowserRunner = BrowserRunner; + return BrowserRunner; +}()); +exports.BrowserRunner = BrowserRunner; +module.exports = BrowserRunner; diff --git a/runner/cli.js b/runner/cli.js new file mode 100644 index 0000000..e4be2d8 --- /dev/null +++ b/runner/cli.js @@ -0,0 +1,206 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var chalk = require("chalk"); +var events = require("events"); +var _ = require("lodash"); +var clireporter_1 = require("./clireporter"); +var config = require("./config"); +var context_1 = require("./context"); +var plugin_1 = require("./plugin"); +var test_1 = require("./test"); +var PACKAGE_INFO = require('../package.json'); +var noopNotifier = { + notify: function () { } +}; +var updateNotifier = noopNotifier; +(function () { + try { + updateNotifier = require('update-notifier')({ pkg: PACKAGE_INFO }); + } + catch (error) { + // S'ok if we don't have update-notifier. It's optional. + } +})(); +function run(_env, args, output) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, wrapResult(output, _run(args, output))]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.run = run; +function _run(args, output) { + return __awaiter(this, void 0, void 0, function () { + var options, context; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // If the "--version" or "-V" flag is ever present, just print + // the current version. Useful for globally installed CLIs. + if (args.includes('--version') || args.includes('-V')) { + output.write(PACKAGE_INFO.version + "\n"); + return [2 /*return*/, Promise.resolve()]; + } + options = config.preparseArgs(args); + // Depends on values from the initial merge: + options = config.merge(options, { + output: output, + ttyOutput: !process.env.CI && output['isTTY'] && !options.simpleOutput + }); + context = new context_1.Context(options); + if (options.skipUpdateCheck) { + updateNotifier = noopNotifier; + } + // `parseArgs` merges any new configuration into `context.options`. + return [4 /*yield*/, config.parseArgs(context, args)]; + case 1: + // `parseArgs` merges any new configuration into `context.options`. + _a.sent(); + return [4 /*yield*/, test_1.test(context)]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +// Note that we're cheating horribly here. Ideally all of this logic is within +// wct-sauce. The trouble is that we also want WCT's configuration lookup logic, +// and that's not (yet) cleanly exposed. +function runSauceTunnel(_env, args, output) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, wrapResult(output, _runSauceTunnel(args, output))]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.runSauceTunnel = runSauceTunnel; +function _runSauceTunnel(args, output) { + return __awaiter(this, void 0, void 0, function () { + var cmdOptions, context, diskOptions, baseOptions, plugin, parser, options, wctSauce, emitter, tunnelId; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + cmdOptions = config.preparseArgs(args); + context = new context_1.Context(cmdOptions); + diskOptions = context.options; + baseOptions = (diskOptions.plugins && diskOptions.plugins['sauce']) || + diskOptions.sauce || {}; + return [4 /*yield*/, plugin_1.Plugin.get('sauce')]; + case 1: + plugin = _a.sent(); + parser = require('nomnom'); + parser.script('wct-st'); + parser.options(_.omit(plugin.cliConfig, 'browsers', 'tunnelId')); + options = _.merge(baseOptions, parser.parse(args)); + wctSauce = require('wct-sauce'); + wctSauce.expandOptions(options); + emitter = new events.EventEmitter(); + new clireporter_1.CliReporter(emitter, output, {}); + return [4 /*yield*/, new Promise(function (resolve, reject) { + wctSauce.startTunnel(options, emitter, function (error, tunnelId) { + return error ? reject(error) : resolve(tunnelId); + }); + })]; + case 2: + tunnelId = _a.sent(); + output.write('\n'); + output.write('The tunnel will remain active while this process is running.\n'); + output.write('To use this tunnel for other WCT runs, export the following:\n'); + output.write('\n'); + output.write(chalk.cyan('export SAUCE_TUNNEL_ID=' + tunnelId) + '\n'); + output.write('Press CTRL+C to close the sauce tunnel\n'); + return [2 /*return*/]; + } + }); + }); +} +function wrapResult(output, promise) { + return __awaiter(this, void 0, void 0, function () { + var error, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, promise]; + case 1: + _a.sent(); + return [3 /*break*/, 3]; + case 2: + e_1 = _a.sent(); + error = e_1; + return [3 /*break*/, 3]; + case 3: + if (!process.env.CI) { + updateNotifier.notify(); + } + if (error) { + output.write('\n'); + output.write(chalk.red(error) + '\n'); + output.write('\n'); + throw error; + } + return [2 /*return*/]; + } + }); + }); +} diff --git a/runner/clireporter.js b/runner/clireporter.js new file mode 100644 index 0000000..dd38ad1 --- /dev/null +++ b/runner/clireporter.js @@ -0,0 +1,290 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +exports.__esModule = true; +var chalk = require("chalk"); +var cleankill = require("cleankill"); +var _ = require("lodash"); +var stacky = require("stacky"); +var util = require("util"); +var STACKY_CONFIG = { + indent: ' ', + locationStrip: [ + /^https?:\/\/[^\/]+/, + /\?[\d\.]+$/, + ], + unimportantLocation: [ + /^\/web-component-tester\//, + ] +}; +var STATE_ICONS = { + passing: '✓', + pending: '✖', + failing: '✖', + unknown: '?' +}; +var STATE_COLORS = { + passing: chalk.green, + pending: chalk.yellow, + failing: chalk.red, + unknown: chalk.red, + error: chalk.red +}; +var SHORT = { + 'internet explorer': 'IE' +}; +var BROWSER_PAD = 24; +var STATUS_PAD = 38; +var CliReporter = /** @class */ (function () { + function CliReporter(emitter, stream, options) { + var _this = this; + this.prettyBrowsers = {}; + this.browserStats = {}; + this.emitter = emitter; + this.stream = stream; + this.options = options; + var testEndEventExpectedNext = false; + cleankill.onInterrupt(function () { + return new Promise(function (resolve) { + _this.flush(); + resolve(); + }); + }); + emitter.on('log:error', this.log.bind(this, chalk.red)); + if (!this.options.quiet) { + emitter.on('log:warn', this.log.bind(this, chalk.yellow)); + emitter.on('log:info', this.log.bind(this)); + if (this.options.verbose) { + emitter.on('log:debug', this.log.bind(this, chalk.dim)); + } + } + emitter.on('browser-init', function (browser, stats) { + _this.browserStats[browser.id] = stats; + _this.prettyBrowsers[browser.id] = _this.prettyBrowser(browser); + _this.updateStatus(); + }); + emitter.on('browser-start', function (browser, data, stats) { + _this.browserStats[browser.id] = stats; + _this.log(browser, 'Beginning tests via', chalk.magenta(data.url)); + _this.updateStatus(); + }); + emitter.on('test-start', function (browser, data, stats) { + testEndEventExpectedNext = true; + }); + emitter.on('test-end', function (browser, data, stats) { + testEndEventExpectedNext = false; + _this.browserStats[browser.id] = stats; + if (data.state === 'failing') { + _this.writeTestError(browser, data); + } + else if (_this.options.expanded || _this.options.verbose) { + _this.log(browser, _this.stateIcon(data.state), _this.prettyTest(data)); + } + _this.updateStatus(); + }); + emitter.on('browser-end', function (browser, error, stats) { + _this.browserStats[browser.id] = stats; + if (error) { + _this.log(chalk.red, browser, 'Tests failed:', error); + } + else { + if (testEndEventExpectedNext) { + _this.log(chalk.red, browser, 'A test setup failed!'); + } + else { + _this.log(chalk.green, browser, 'Tests passed'); + } + } + }); + emitter.on('run-end', function (error) { + if (testEndEventExpectedNext) { + error = 'A test setup failed!'; + } + if (error) { + _this.log(chalk.red, 'Test run ended in failure:', error); + } + else { + _this.log(chalk.green, 'Test run ended with great success'); + } + if (!_this.options.ttyOutput) { + _this.updateStatus(true); + } + }); + } + // Specialized Reporting + CliReporter.prototype.updateStatus = function (force) { + var _this = this; + if (!this.options.ttyOutput && !force) { + return; + } + // EXTREME TERMINOLOGY FAIL, but here's a glossary: + // + // stats: An object containing test stats (total, passing, failing, etc). + // state: The state that the run is in (running, etc). + // status: A string representation of above. + var statuses = Object.keys(this.browserStats).map(function (browserIdStr) { + var browserId = parseInt(browserIdStr, 10); + var pretty = _this.prettyBrowsers[browserId]; + var stats = _this.browserStats[browserId]; + var status = ''; + var counts = [stats.passing, stats.pending, stats.failing]; + if (counts[0] > 0 || counts[1] > 0 || counts[2] > 0) { + if (counts[0] > 0) { + counts[0] = chalk.green(counts[0].toString()); + } + if (counts[1] > 0) { + counts[1] = chalk.yellow(counts[1].toString()); + } + if (counts[2] > 0) { + counts[2] = chalk.red(counts[2].toString()); + } + status = counts.join('/'); + } + if (stats.status === 'error') { + status = status + (status === '' ? '' : ' ') + chalk.red('error'); + } + return padRight(pretty + ' (' + status + ')', STATUS_PAD); + }); + this.writeWrapped(statuses, ' '); + }; + CliReporter.prototype.writeTestError = function (browser, data) { + this.log(browser, this.stateIcon(data.state), this.prettyTest(data)); + var error = data.error || {}; + this.write('\n'); + var prettyMessage = error.message || error; + if (typeof prettyMessage !== 'string') { + prettyMessage = util.inspect(prettyMessage); + } + this.write(chalk.red(' ' + prettyMessage)); + if (error.stack) { + try { + this.write(stacky.pretty(data.error.stack, STACKY_CONFIG)); + } + catch (err) { + // If we couldn't extract a stack (i.e. there was no stack), the message + // is enough. + } + } + this.write('\n'); + }; + // Object Formatting + CliReporter.prototype.stateIcon = function (state) { + var color = STATE_COLORS[state] || STATE_COLORS['unknown']; + return color(STATE_ICONS[state] || STATE_ICONS.unknown); + }; + CliReporter.prototype.prettyTest = function (data) { + var color = STATE_COLORS[data.state] || STATE_COLORS['unknown']; + return color(data.test.join(' » ') || ''); + }; + CliReporter.prototype.prettyBrowser = function (browser) { + var parts = []; + if (browser.platform && !browser.deviceName) { + parts.push(browser.platform); + } + var name = browser.deviceName || browser.browserName; + parts.push(SHORT[name] || name); + if (browser.version) { + parts.push(browser.version); + } + if (browser.variant) { + parts.push("[" + browser.variant + "]"); + } + return chalk.blue(parts.join(' ')); + }; + CliReporter.prototype.log = function () { + var values = Array.from(arguments); + var format; + if (_.isFunction(values[0])) { + format = values[0]; + values = values.slice(1); + } + if (values[0] && values[0].browserName) { + values[0] = padRight(this.prettyBrowser(values[0]), BROWSER_PAD); + } + var line = _.toArray(values) + .map(function (value) { return _.isString(value) ? value : util.inspect(value); }) + .join(' '); + line = line.replace(/[\s\n\r]+$/, ''); + if (format) { + line = format(line); + } + this.write(line); + }; + CliReporter.prototype.writeWrapped = function (blocks, separator) { + if (blocks.length === 0) { + return; + } + var lines = ['']; + var width = this.stream.columns || 0; + for (var _i = 0, blocks_1 = blocks; _i < blocks_1.length; _i++) { + var block = blocks_1[_i]; + var line = lines[lines.length - 1]; + var combined = line + separator + block; + if (line === '') { + lines[lines.length - 1] = block; + } + else if (chalk.stripColor(combined).length <= width) { + lines[lines.length - 1] = combined; + } + else { + lines.push(block); + } + } + this.writeLines(['\n'].concat(lines)); + if (this.options.ttyOutput) { + this.stream.write('\r'); + this.stream.write('\u001b[' + (lines.length + 1) + 'A'); + } + }; + CliReporter.prototype.write = function (line) { + this.writeLines([line]); + this.updateStatus(); + }; + CliReporter.prototype.writeLines = function (lines) { + for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) { + var line = lines_1[_i]; + if (line[line.length - 1] !== '\n') { + line = line + '\n'; + } + if (this.options.ttyOutput) { + line = '\u001b[J' + line; + } + this.stream.write(line); + } + this.linesWritten = lines.length; + }; + CliReporter.prototype.flush = function () { + if (!this.options.ttyOutput) { + return; + } + // Add an extra line for padding. + for (var i = 0; i <= this.linesWritten; i++) { + this.stream.write('\n'); + } + }; + // HACK + CliReporter.CliReporter = CliReporter; + return CliReporter; +}()); +exports.CliReporter = CliReporter; +// Yeah, yeah. +function padRight(str, length) { + var currLength = chalk.stripColor(str).length; + while (currLength < length) { + currLength = currLength + 1; + str = str + ' '; + } + return str; +} +module.exports = CliReporter; diff --git a/runner/config.js b/runner/config.js new file mode 100644 index 0000000..3b484af --- /dev/null +++ b/runner/config.js @@ -0,0 +1,591 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; +exports.__esModule = true; +var findup = require("findup-sync"); +var fs = require("fs"); +var _ = require("lodash"); +var nomnom = require("nomnom"); +var path = require("path"); +var resolve = require("resolve"); +var paths = require("./paths"); +var HOME_DIR = path.resolve(process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE); +var JSON_MATCHER = 'wct.conf.json'; +var CONFIG_MATCHER = 'wct.conf.*'; +/** + * config helper: A basic function to synchronously read JSON, + * log any errors, and return null if no file or invalid JSON + * was found. + */ +function readJsonSync(filename, dir) { + var configPath = path.resolve(dir || '', filename); + var config; + try { + config = fs.readFileSync(configPath, 'utf-8'); + } + catch (e) { + return null; + } + try { + return JSON.parse(config); + } + catch (e) { + console.error("Could not parse " + configPath + " as JSON"); + console.error(e); + } + return null; +} +/** + * Determines the package name by reading from the following sources: + * + * 1. `options.packageName` + * 2. bower.json or package.json, depending on options.npm + */ +function getPackageName(options) { + if (options.packageName) { + return options.packageName; + } + var manifestName = (options.npm ? 'package.json' : 'bower.json'); + var manifest = readJsonSync(manifestName, options.root); + if (manifest !== null) { + return manifest.name; + } + var basename = path.basename(options.root); + console.warn("no " + manifestName + " found, defaulting to packageName=" + basename); + return basename; +} +exports.getPackageName = getPackageName; +/** + * Return the root package directory of the given NPM package. + */ +function resolvePackageDir(packageName, opts) { + // package.json files are always in the root directory of a package, so we can + // resolve that and then drop the filename. + return path.dirname(resolve.sync(path.join(packageName, 'package.json'), opts)); +} +// The full set of options, as a reference. +function defaults() { + return { + // The test suites that should be run. + suites: ['test/'], + // Output stream to write log messages to. + output: process.stdout, + // Whether the output stream should be treated as a TTY (and be given more + // complex output formatting). Defaults to `output.isTTY`. + ttyOutput: undefined, + // Spew all sorts of debugging messages. + verbose: false, + // Silence output + quiet: false, + // Display test results in expanded form. Verbose implies expanded. + expanded: false, + // The on-disk path where tests & static files should be served from. Paths + // (such as `suites`) are evaluated relative to this. + // + // Defaults to the project directory. + root: undefined, + // Idle timeout for tests. + testTimeout: 90 * 1000, + // Whether the browser should be closed after the tests run. + persistent: false, + // Additional .js files to include in *generated* test indexes. + extraScripts: [], + // Configuration options passed to the browser client. + clientOptions: { + root: '/components/' + }, + compile: 'auto', + // Webdriver capabilities objects for each browser that should be run. + // + // Capabilities can also contain a `url` value which is either a string URL + // for the webdriver endpoint, or {hostname:, port:, user:, pwd:}. + // + // Most of the time you will want to rely on the WCT browser plugins to fill + // this in for you (e.g. via `--local`, `--sauce`, etc). + activeBrowsers: [], + // Default capabilities to use when constructing webdriver connections (for + // each browser specified in `activeBrowsers`). A handy place to hang common + // configuration. + // + // Selenium: https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities + // Sauce: https://docs.saucelabs.com/reference/test-configuration/ + browserOptions: {}, + // The plugins that should be loaded, and their configuration. + // + // When an array, the named plugins will be loaded with their default + // configuration. When an object, each key maps to a plugin, and values are + // configuration values to be merged. + // + // plugins: { + // local: {browsers: ['firefox', 'chrome']}, + // } + // + plugins: ['local', 'sauce'], + // Callback that allows you to perform advanced configuration of the WCT + // runner. + // + // The hook is given the WCT context, and can generally be written like a + // plugin. For example, to serve custom content via the internal webserver: + // + // registerHooks: function(wct) { + // wct.hook('prepare:webserver', function(app) { + // app.use(...); + // return Promise.resolve(); + // }); + // } + // + registerHooks: function (_wct) { }, + // Whether `wct.conf.*` is allowed, or only `wct.conf.json`. + // + // Handy for CI suites that want to be locked down. + enforceJsonConf: false, + // Configuration options for the webserver that serves up your test files + // and dependencies. + // + // Typically, you will not need to modify these values. + webserver: { + // The port that the webserver should run on. A port will be determined at + // runtime if none is provided. + port: undefined, + hostname: 'localhost' + }, + // The name of the NPM package that is vending wct's browser.js will be + // determined automatically if no name is specified. + wctPackageName: undefined, + moduleResolution: 'node' + }; +} +exports.defaults = defaults; +/** + * nomnom configuration for command line arguments. + * + * This might feel like duplication with `defaults()`, and out of place (why not + * in `cli.js`?). But, not every option matches a configurable value, and it is + * best to keep the configuration for these together to help keep them in sync. + */ +var ARG_CONFIG = { + persistent: { + help: 'Keep browsers active (refresh to rerun tests).', + abbr: 'p', + flag: true + }, + root: { + help: 'The root directory to serve tests from.', + transform: path.resolve + }, + plugins: { + help: 'Plugins that should be loaded.', + metavar: 'NAME', + full: 'plugin', + list: true + }, + skipPlugins: { + help: 'Configured plugins that should _not_ be loaded.', + metavar: 'NAME', + full: 'skip-plugin', + list: true + }, + expanded: { + help: 'Log a status line for each test run.', + flag: true + }, + verbose: { + help: 'Turn on debugging output.', + flag: true + }, + quiet: { + help: 'Silence output.', + flag: true + }, + simpleOutput: { + help: 'Avoid fancy terminal output.', + full: 'simple-output', + flag: true + }, + skipUpdateCheck: { + help: 'Don\'t check for updates.', + full: 'skip-update-check', + flag: true + }, + configFile: { + help: 'Config file that needs to be used by wct. ie: wct.config-sauce.js', + full: 'config-file' + }, + npm: { + help: 'Use node_modules instead of bower_components for all browser ' + + 'components and packages. Uses polyserve with `--npm` flag.', + flag: true + }, + moduleResolution: { + // kebab case to match the polyserve flag + full: 'module-resolution', + help: 'Algorithm to use for resolving module specifiers in import ' + + 'and export statements when rewriting them to be web-compatible. ' + + 'Valid values are "none" and "node". "none" disables module ' + + 'specifier rewriting. "node" uses Node.js resolution to find modules.', + // type: 'string', + choices: ['none', 'node'] + }, + version: { + help: 'Display the current version of web-component-tester. Ends ' + + 'execution immediately (not useable with other options.)', + abbr: 'V', + flag: true + }, + 'webserver.port': { + help: 'A port to use for the test webserver.', + full: 'webserver-port' + }, + 'webserver.hostname': { + full: 'webserver-hostname', + hidden: true + }, + // Managed by supports-color; let's not freak out if we see it. + color: { flag: true }, + compile: { + help: 'Whether to compile ES2015 down to ES5. ' + + 'Options: "always", "never", "auto". Auto means that we will ' + + 'selectively compile based on the requesting user agent.' + }, + wctPackageName: { + full: 'wct-package-name', + help: 'NPM package name that contains web-component-tester\'s browser ' + + 'code. By default, WCT will detect the installed package, but ' + + 'this flag allows explicitly naming the package. ' + + 'This is only to be used with --npm option.' + }, + // Deprecated + browsers: { + abbr: 'b', + hidden: true, + list: true + }, + remote: { + abbr: 'r', + hidden: true, + flag: true + } +}; +// Values that should be extracted when pre-parsing args. +var PREPARSE_ARGS = ['plugins', 'skipPlugins', 'simpleOutput', 'skipUpdateCheck', 'configFile']; +/** + * Discovers appropriate config files (global, and for the project), merging + * them, and returning them. + * + * @param {string} matcher + * @param {string} root + * @return {!Object} The merged configuration. + */ +function fromDisk(matcher, root) { + var globalFile = path.join(HOME_DIR, matcher); + var projectFile = findup(matcher, { nocase: true, cwd: root }); + // Load a shared config from the user's home dir, if they have one, and then + // try the project-specific path (starting at the current working directory). + var paths = _.union([globalFile, projectFile]); + var configs = _.filter(paths, fs.existsSync).map(function (f) { return loadProjectFile(f); }); + var options = merge.apply(null, configs); + if (!options.root && projectFile && projectFile !== globalFile) { + options.root = path.dirname(projectFile); + } + return options; +} +exports.fromDisk = fromDisk; +/** + * @param {string} file + * @return {Object?} + */ +function loadProjectFile(file) { + // If there are _multiple_ configs at this path, prefer `json` + if (path.extname(file) === '.js' && fs.existsSync(file + 'on')) { + file = file + 'on'; + } + try { + if (path.extname(file) === '.json') { + return JSON.parse(fs.readFileSync(file, 'utf-8')); + } + else { + return require(file); + } + } + catch (error) { + throw new Error("Failed to load WCT config \"" + file + "\": " + error.message); + } +} +/** + * Runs a simplified options parse over the command line arguments, extracting + * any values that are necessary for a full parse. + * + * See const: PREPARSE_ARGS for the values that are extracted. + * + * @param {!Array} args + * @return {!Object} + */ +function preparseArgs(args) { + // Don't let it short circuit on help. + args = _.difference(args, ['--help', '-h']); + var parser = nomnom(); + parser.options(ARG_CONFIG); + parser.printer(function () { }); // No-op output & errors. + var options = parser.parse(args); + return _expandOptionPaths(_.pick(options, PREPARSE_ARGS)); +} +exports.preparseArgs = preparseArgs; +/** + * Runs a complete options parse over the args, respecting plugin options. + * + * @param {!Context} context The context, containing plugin state and any base + * options to merge into. + * @param {!Array} args The args to parse. + */ +function parseArgs(context, args) { + return __awaiter(this, void 0, void 0, function () { + var parser, plugins, options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + parser = nomnom(); + parser.script('wct'); + parser.options(ARG_CONFIG); + return [4 /*yield*/, context.plugins()]; + case 1: + plugins = _a.sent(); + plugins.forEach(_configurePluginOptions.bind(null, parser)); + options = _expandOptionPaths(normalize(parser.parse(args))); + if (options._ && options._.length > 0) { + options.suites = options._; + } + context.options = merge(context.options, options); + return [2 /*return*/]; + } + }); + }); +} +exports.parseArgs = parseArgs; +function _configurePluginOptions(parser, plugin) { + /** HACK(rictic): this looks wrong, cliConfig shouldn't have a length. */ + if (!plugin.cliConfig || plugin.cliConfig.length === 0) { + return; + } + // Group options per plugin. It'd be nice to also have a header, but that ends + // up shifting all the options over. + parser.option('plugins.' + plugin.name + '.', { string: ' ' }); + _.each(plugin.cliConfig, function (config, key) { + // Make sure that we don't expose the name prefixes. + if (!config['full']) { + config['full'] = key; + } + parser.option('plugins.' + plugin.name + '.' + key, config); + }); +} +function _expandOptionPaths(options) { + var result = {}; + _.each(options, function (value, key) { + var target = result; + var parts = key.split('.'); + for (var _i = 0, _a = parts.slice(0, -1); _i < _a.length; _i++) { + var part = _a[_i]; + target = target[part] = target[part] || {}; + } + target[_.last(parts)] = value; + }); + return result; +} +function merge() { + var configs = Array.prototype.slice.call(arguments); + var result = {}; + configs = configs.map(normalize); + _.merge.apply(_, __spreadArrays([result], configs)); + // false plugin configs are preserved. + configs.forEach(function (config) { + _.each(config.plugins, function (value, key) { + if (typeof value === 'boolean' && value === false) { + result.plugins[key] = false; + } + }); + }); + return result; +} +exports.merge = merge; +function normalize(config) { + if (_.isArray(config.plugins)) { + var pluginConfigs = {}; + for (var i = 0, name_1; name_1 = config.plugins[i]; i++) { + // A named plugin is explicitly enabled (e.g. --plugin foo). + pluginConfigs[name_1] = { disabled: false }; + } + config.plugins = pluginConfigs; + } + // Always wins. + if (config.skipPlugins) { + config.plugins = config.plugins || {}; + for (var i = 0, name_2; name_2 = config.skipPlugins[i]; i++) { + config.plugins[name_2] = false; + } + } + return config; +} +exports.normalize = normalize; +/** + * Expands values within the configuration based on the current environment. + * + * @param {!Context} context The context for the current run. + */ +function expand(context) { + return __awaiter(this, void 0, void 0, function () { + var options, root, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + options = context.options; + root = context.options.root || process.cwd(); + context.options.root = root = path.resolve(root); + options.origSuites = _.clone(options.suites); + expandDeprecated(context); + _a = options; + return [4 /*yield*/, paths.expand(root, options.suites)]; + case 1: + _a.suites = _b.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.expand = expand; +/** + * Expands any options that have been deprecated, and warns about it. + * + * @param {!Context} context The context for the current run. + */ +function expandDeprecated(context) { + var options = context.options; + // We collect configuration fragments to be merged into the options object. + var fragments = []; + var browsers = (_.isArray(options.browsers) ? options.browsers : [options.browsers]); + browsers = _.compact(browsers); + if (browsers.length > 0) { + context.emit('log:warn', 'The --browsers flag/option is deprecated. Please use ' + + '--local and --sauce instead, or configure via plugins.' + + '[local|sauce].browsers.'); + var fragment = { plugins: { sauce: {}, local: {} } }; + fragments.push(fragment); + for (var _i = 0, browsers_1 = browsers; _i < browsers_1.length; _i++) { + var browser = browsers_1[_i]; + var name_3 = browser.browserName || browser; + var plugin = browser.platform || name_3.indexOf('/') !== -1 ? + 'sauce' : + 'local'; + fragment.plugins[plugin].browsers = + fragment.plugins[plugin].browsers || []; + fragment.plugins[plugin].browsers.push(browser); + } + delete options.browsers; + } + if (options.sauce) { + context.emit('log:warn', 'The sauce configuration key is deprecated. Please use ' + + 'plugins.sauce instead.'); + fragments.push({ + plugins: { sauce: options.sauce } + }); + delete options.sauce; + } + if (options.remote) { + context.emit('log:warn', 'The --remote flag is deprecated. Please use ' + + '--sauce default instead.'); + fragments.push({ + plugins: { sauce: { browsers: ['default'] } } + }); + delete options.remote; + } + if (fragments.length > 0) { + // We are careful to modify context.options in place. + _.merge(context.options, merge.apply(null, fragments)); + } +} +/** + * @param {!Object} options The configuration to validate. + */ +function validate(options) { + return __awaiter(this, void 0, void 0, function () { + var root, globs; + return __generator(this, function (_a) { + if (options['webRunner']) { + throw new Error('webRunner is no longer a supported configuration option. ' + + 'Please list the files you wish to test as arguments, ' + + 'or as `suites` in a configuration object.'); + } + if (options['component']) { + throw new Error('component is no longer a supported configuration option. ' + + 'Please list the files you wish to test as arguments, ' + + 'or as `suites` in a configuration object.'); + } + if (options.activeBrowsers.length === 0) { + throw new Error('No browsers configured to run'); + } + if (options.suites.length === 0) { + root = options.root || process.cwd(); + globs = options.origSuites.join(', '); + throw new Error('No test suites were found matching your configuration\n' + + '\n' + + ' WCT searched for .js and .html files matching: ' + globs + '\n' + + '\n' + + ' Relative paths were resolved against: ' + root); + } + return [2 /*return*/]; + }); + }); +} +exports.validate = validate; diff --git a/runner/context.js b/runner/context.js new file mode 100644 index 0000000..e2ecd09 --- /dev/null +++ b/runner/context.js @@ -0,0 +1,254 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var events = require("events"); +var _ = require("lodash"); +var config = require("./config"); +var plugin_1 = require("./plugin"); +var JSON_MATCHER = 'wct.conf.json'; +var CONFIG_MATCHER = 'wct.conf.*'; +/** + * Exposes the current state of a WCT run, and emits events/hooks for anyone + * downstream to listen to. + * + * TODO(rictic): break back-compat with plugins by moving hooks entirely away + * from callbacks to promises. Easiest way to do this would be to rename + * the hook-related methods on this object, so that downstream callers would + * break in obvious ways. + * + * @param {Object} options Any initially specified options. + */ +var Context = /** @class */ (function (_super) { + __extends(Context, _super); + function Context(options) { + var _this = _super.call(this) || this; + _this._hookHandlers = {}; + options = options || {}; + var matcher; + if (options.configFile) { + matcher = options.configFile; + } + else if (options.enforceJsonConf) { + matcher = JSON_MATCHER; + } + else { + matcher = CONFIG_MATCHER; + } + /** + * The configuration for the current WCT run. + * + * We guarantee that this object is never replaced (e.g. you are free to + * hold a reference to it, and make changes to it). + */ + _this.options = config.merge(config.defaults(), config.fromDisk(matcher, options.root), options); + return _this; + } + // Hooks + // + // In addition to emitting events, a context also exposes "hooks" that + // interested parties can use to inject behavior. + /** + * Registers a handler for a particular hook. Hooks are typically configured + * to run _before_ a particular behavior. + */ + Context.prototype.hook = function (name, handler) { + this._hookHandlers[name] = this._hookHandlers[name] || []; + this._hookHandlers[name].unshift(handler); + }; + /** + * Registers a handler that will run after any handlers registered so far. + * + * @param {string} name + * @param {function(!Object, function(*))} handler + */ + Context.prototype.hookLate = function (name, handler) { + this._hookHandlers[name] = this._hookHandlers[name] || []; + this._hookHandlers[name].push(handler); + }; + Context.prototype.emitHook = function (name) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return __awaiter(this, void 0, void 0, function () { + var hooks, boundHooks, done, argsEnd, hookArgs, hookToPromise, _a, boundHooks_1, hook, err_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + this.emit('log:debug', 'hook:', name); + hooks = (this._hookHandlers[name] || []); + done = function (_err) { }; + argsEnd = args.length - 1; + if (args[argsEnd] instanceof Function) { + done = args[argsEnd]; + argsEnd = argsEnd--; + } + hookArgs = args.slice(0, argsEnd + 1); + // Not really sure what's going on with typings here. + boundHooks = hooks.map(function (hook) { return hook.bind.apply(hook, [null].concat(hookArgs)); }); + if (!boundHooks) { + boundHooks = hooks; + } + hookToPromise = function (hook) { + return new Promise(function (resolve, reject) { + var maybePromise = hook(function (err) { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + if (maybePromise) { + maybePromise.then(resolve, reject); + } + }); + }; + _b.label = 1; + case 1: + _b.trys.push([1, 6, , 7]); + _a = 0, boundHooks_1 = boundHooks; + _b.label = 2; + case 2: + if (!(_a < boundHooks_1.length)) return [3 /*break*/, 5]; + hook = boundHooks_1[_a]; + return [4 /*yield*/, hookToPromise(hook)]; + case 3: + _b.sent(); + _b.label = 4; + case 4: + _a++; + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 7]; + case 6: + err_1 = _b.sent(); + // TODO(rictic): stop silently swallowing the error here and just below. + // Looks like we'll need to track down some error being thrown from + // deep inside the express router. + try { + done(err_1); + } + catch (_) { + } + throw err_1; + case 7: + try { + done(); + } + catch (_) { + } + return [2 /*return*/]; + } + }); + }); + }; + /** + * @param {function(*, Array)} done Asynchronously loads the plugins + * requested by `options.plugins`. + */ + Context.prototype.plugins = function () { + return __awaiter(this, void 0, void 0, function () { + var plugins, _i, _a, name_1, _b, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + plugins = []; + _i = 0, _a = this.enabledPlugins(); + _d.label = 1; + case 1: + if (!(_i < _a.length)) return [3 /*break*/, 4]; + name_1 = _a[_i]; + _c = (_b = plugins).push; + return [4 /*yield*/, plugin_1.Plugin.get(name_1)]; + case 2: + _c.apply(_b, [_d.sent()]); + _d.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/, plugins]; + } + }); + }); + }; + /** + * @return {!Array} The names of enabled plugins. + */ + Context.prototype.enabledPlugins = function () { + // Plugins with falsy configuration or disabled: true are _not_ loaded. + var pairs = _.reject(_.pairs(this.options.plugins), function (p) { return !p[1] || p[1].disabled; }); + return _.map(pairs, function (p) { return p[0]; }); + }; + /** + * @param {string} name + * @return {!Object} + */ + Context.prototype.pluginOptions = function (name) { + return this.options.plugins[plugin_1.Plugin.shortName(name)]; + }; + Context.Context = Context; + return Context; +}(events.EventEmitter)); +exports.Context = Context; +module.exports = Context; diff --git a/runner/gulp.js b/runner/gulp.js new file mode 100644 index 0000000..6e94caa --- /dev/null +++ b/runner/gulp.js @@ -0,0 +1,48 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; +exports.__esModule = true; +var chalk = require("chalk"); +var test_1 = require("./test"); +function init(gulp, dependencies) { + if (!dependencies) { + dependencies = []; + } + gulp.task('wct:local', gulp.series(__spreadArrays(dependencies, [ + function () { return test_1.test({ plugins: { local: {}, sauce: false } })["catch"](cleanError); } + ]))); + gulp.task('wct:sauce', gulp.series(__spreadArrays(dependencies, [ + function () { return test_1.test({ plugins: { local: false, sauce: {} } })["catch"](cleanError); } + ]))); + // TODO(nevir): Migrate fully to wct:local/etc. + gulp.task('test', gulp.series(['wct:local'])); + gulp.task('test:local', gulp.series(['wct:local'])); + gulp.task('test:remote', gulp.series(['wct:sauce'])); + gulp.task('wct', gulp.series(['wct:local'])); +} +exports.init = init; +// Utility +function cleanError(error) { + // Pretty error for gulp. + error = new Error(chalk.red(error.message || error)); + error.showStack = false; + throw error; +} diff --git a/runner/httpbin.js b/runner/httpbin.js new file mode 100644 index 0000000..124f164 --- /dev/null +++ b/runner/httpbin.js @@ -0,0 +1,143 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +'use strict'; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var bodyParser = require("body-parser"); +var cleankill = require("cleankill"); +var express = require("express"); +var http = require("http"); +var multer = require("multer"); +var serverDestroy = require("server-destroy"); +var port_scanner_1 = require("./port-scanner"); +var express_1 = require("express"); +exports.Router = express_1.Router; +exports.httpbin = express.Router(); +function capWords(s) { + return s.split('-') + .map(function (word) { return word[0].toUpperCase() + word.slice(1); }) + .join('-'); +} +function formatRequest(req) { + var headers = {}; + for (var key in req.headers) { + headers[capWords(key)] = req.headers[key]; + } + var formatted = { + headers: headers, + url: req.originalUrl, + data: req.body, + files: req.files, + form: {}, + json: {} + }; + var contentType = (headers['Content-Type'] || '').toLowerCase().split(';')[0]; + var field = { + 'application/json': 'json', + 'application/x-www-form-urlencoded': 'form', + 'multipart/form-data': 'form' + }[contentType]; + if (field) { + formatted[field] = req.body; + } + return formatted; +} +exports.httpbin.use(bodyParser.urlencoded({ extended: false })); +exports.httpbin.use(bodyParser.json()); +var storage = multer.memoryStorage(); +var upload = multer({ storage: storage }); +exports.httpbin.use(upload.any()); +exports.httpbin.use(bodyParser.text()); +exports.httpbin.use(bodyParser.text({ type: 'html' })); +exports.httpbin.use(bodyParser.text({ type: 'xml' })); +exports.httpbin.get('/delay/:seconds', function (req, res) { + setTimeout(function () { + res.json(formatRequest(req)); + }, (req.params.seconds || 0) * 1000); +}); +exports.httpbin.post('/post', function (req, res) { + res.json(formatRequest(req)); +}); +// Running this script directly with `node httpbin.js` will start up a server +// that just serves out /httpbin/... +// Useful for debugging only the httpbin functionality without the rest of +// wct. +function main() { + return __awaiter(this, void 0, void 0, function () { + var app, server, port; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + app = express(); + server = http.createServer(app); + app.use('/httpbin', exports.httpbin); + return [4 /*yield*/, port_scanner_1.findPort([7777, 7000, 8000, 8080, 8888])]; + case 1: + port = _a.sent(); + server.listen(port); + server.port = port; + serverDestroy(server); + cleankill.onInterrupt(function () { + return new Promise(function (resolve) { + server.destroy(); + server.on('close', resolve); + }); + }); + console.log('Server running at http://localhost:' + port + '/httpbin/'); + return [2 /*return*/]; + } + }); + }); +} +if (require.main === module) { + main()["catch"](function (err) { + console.error(err); + process.exit(1); + }); +} diff --git a/runner/paths.js b/runner/paths.js new file mode 100644 index 0000000..99b78fc --- /dev/null +++ b/runner/paths.js @@ -0,0 +1,171 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var fs = require("fs"); +var glob = require("glob"); +var _ = require("lodash"); +var path = require("path"); +var util_1 = require("util"); +/** + * Expands a series of path patterns (globs, files, directories) into a set of + * files that represent those patterns. + * + * @param baseDir The directory that patterns are relative to. + * @param patterns The patterns to expand. + * @returns The expanded paths. + */ +function expand(baseDir, patterns) { + return __awaiter(this, void 0, void 0, function () { + var _a, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _a = expandDirectories; + _b = [baseDir]; + return [4 /*yield*/, unglob(baseDir, patterns)]; + case 1: return [2 /*return*/, _a.apply(void 0, _b.concat([_c.sent()]))]; + } + }); + }); +} +exports.expand = expand; +/** + * Expands any glob expressions in `patterns`. + */ +function unglob(baseDir, patterns) { + return __awaiter(this, void 0, void 0, function () { + var strs, pGlob, _i, patterns_1, pattern, _a, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + strs = []; + pGlob = util_1.promisify(glob); + _i = 0, patterns_1 = patterns; + _c.label = 1; + case 1: + if (!(_i < patterns_1.length)) return [3 /*break*/, 4]; + pattern = patterns_1[_i]; + _b = (_a = strs).push; + return [4 /*yield*/, pGlob(String(pattern), { cwd: baseDir, root: baseDir })]; + case 2: + _b.apply(_a, [_c.sent()]); + _c.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: + // for non-POSIX support, replacing path separators + return [2 /*return*/, _.union(_.flatten(strs)).map(function (str) { return str.replace(/\//g, path.sep); })]; + } + }); + }); +} +/** + * Expands any directories in `patterns`, following logic similar to a web + * server. + * + * If a pattern resolves to a directory, that directory is expanded. If the + * directory contains an `index.html`, it is expanded to that. Otheriwse, the + * it expands into its children (recursively). + */ +function expandDirectories(baseDir, paths) { + return __awaiter(this, void 0, void 0, function () { + var listsOfPaths, _i, paths_1, aPath, _a, _b, files; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + listsOfPaths = []; + _i = 0, paths_1 = paths; + _c.label = 1; + case 1: + if (!(_i < paths_1.length)) return [3 /*break*/, 4]; + aPath = paths_1[_i]; + _b = (_a = listsOfPaths).push; + return [4 /*yield*/, expandDirectory(baseDir, aPath)]; + case 2: + _b.apply(_a, [_c.sent()]); + _c.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: + files = _.union(_.flatten(listsOfPaths)); + return [2 /*return*/, files.filter(function (file) { return /\.(js|html)$/.test(file); })]; + } + }); + }); +} +function expandDirectory(baseDir, aPath) { + return __awaiter(this, void 0, void 0, function () { + var stat, files, children; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, util_1.promisify(fs.stat)(path.resolve(baseDir, aPath))]; + case 1: + stat = _a.sent(); + if (!stat.isDirectory()) { + return [2 /*return*/, [aPath]]; + } + return [4 /*yield*/, util_1.promisify(fs.readdir)(path.resolve(baseDir, aPath))]; + case 2: + files = _a.sent(); + // We have an index; defer to that. + if (_.includes(files, 'index.html')) { + return [2 /*return*/, [path.join(aPath, 'index.html')]]; + } + return [4 /*yield*/, expandDirectories(path.join(baseDir, aPath), files)]; + case 3: + children = _a.sent(); + return [2 /*return*/, children.map(function (child) { return path.join(aPath, child); })]; + } + }); + }); +} diff --git a/runner/plugin.js b/runner/plugin.js new file mode 100644 index 0000000..7a749fe --- /dev/null +++ b/runner/plugin.js @@ -0,0 +1,160 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var _ = require("lodash"); +var path = require("path"); +// Plugin module names can be prefixed by the following: +var PREFIXES = [ + 'web-component-tester-', + 'wct-', +]; +/** + * A WCT plugin. This constructor is private. Plugins can be retrieved via + * `Plugin.get`. + */ +var Plugin = /** @class */ (function () { + function Plugin(packageName, metadata) { + this.packageName = packageName; + this.metadata = metadata; + this.name = Plugin.shortName(packageName); + this.cliConfig = this.metadata['cli-options'] || {}; + } + /** + * @param {!Context} context The context that this plugin should be evaluated + * within. + */ + Plugin.prototype.execute = function (context) { + return __awaiter(this, void 0, void 0, function () { + var plugin; + return __generator(this, function (_a) { + try { + plugin = require(this.packageName); + plugin(context, context.pluginOptions(this.name), this); + } + catch (error) { + throw "Failed to load plugin \"" + this.name + "\": " + error; + } + return [2 /*return*/]; + }); + }); + }; + /** + * Retrieves a plugin by shorthand or module name (loading it as necessary). + * + * @param {string} name + */ + Plugin.get = function (name) { + return __awaiter(this, void 0, void 0, function () { + var shortName, names, loaded, prettyNames; + return __generator(this, function (_a) { + shortName = Plugin.shortName(name); + if (_loadedPlugins[shortName]) { + return [2 /*return*/, _loadedPlugins[shortName]]; + } + names = [shortName].concat(PREFIXES.map(function (p) { return p + shortName; })); + loaded = _.compact(names.map(_tryLoadPluginPackage)); + if (loaded.length > 1) { + prettyNames = loaded.map(function (p) { return p.packageName; }).join(' '); + throw "Loaded conflicting WCT plugin packages: " + prettyNames; + } + if (loaded.length < 1) { + throw "Could not find WCT plugin named \"" + name + "\""; + } + return [2 /*return*/, loaded[0]]; + }); + }); + }; + /** + * @param {string} name + * @return {string} The short form of `name`. + */ + Plugin.shortName = function (name) { + for (var _i = 0, PREFIXES_1 = PREFIXES; _i < PREFIXES_1.length; _i++) { + var prefix = PREFIXES_1[_i]; + if (name.indexOf(prefix) === 0) { + return name.substr(prefix.length); + } + } + return name; + }; + // HACK(rictic): Makes es6 style imports happy, so that we can do, e.g. + // import {Plugin} from './plugin'; + Plugin.Plugin = Plugin; + return Plugin; +}()); +exports.Plugin = Plugin; +// Plugin Loading +// We maintain an identity map of plugins, keyed by short name. +var _loadedPlugins = {}; +/** + * @param {string} packageName Attempts to load a package as a WCT plugin. + * @return {Plugin} + */ +function _tryLoadPluginPackage(packageName) { + var packageInfo; + try { + packageInfo = require(path.join(packageName, 'package.json')); + } + catch (error) { + if (error.code !== 'MODULE_NOT_FOUND') { + console.log(error); + } + return null; + } + // Plugins must have a (truthy) wct-plugin field. + if (!packageInfo['wct-plugin']) { + return null; + } + // Allow {"wct-plugin": true} as a shorthand. + var metadata = _.isObject(packageInfo['wct-plugin']) ? packageInfo['wct-plugin'] : {}; + return new Plugin(packageName, metadata); +} +module.exports = Plugin; diff --git a/runner/port-scanner.js b/runner/port-scanner.js new file mode 100644 index 0000000..493a73d --- /dev/null +++ b/runner/port-scanner.js @@ -0,0 +1,116 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var net = require("net"); +function checkPort(port) { + return new Promise(function (resolve) { + var server = net.createServer(); + var hasPort = false; + // if server is listening, we have the port! + server.on('listening', function (_err) { + hasPort = true; + server.close(); + }); + // callback on server close to free up the port before report it can be used + server.on('close', function (_err) { + resolve(hasPort); + }); + // our port is busy, ignore it + server.on('error', function (_err) { + // docs say the server should close, this doesn't seem to be the case :( + server.close(); + }); + server.listen(port); + }); +} +function detectSeries(values, promiseGetter) { + return __awaiter(this, void 0, void 0, function () { + var _i, values_1, value; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _i = 0, values_1 = values; + _a.label = 1; + case 1: + if (!(_i < values_1.length)) return [3 /*break*/, 4]; + value = values_1[_i]; + return [4 /*yield*/, promiseGetter(value)]; + case 2: + if (_a.sent()) { + return [2 /*return*/, value]; + } + _a.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: throw new Error('Couldn\'t find a good value in detectSeries'); + } + }); + }); +} +function findPort(ports) { + return __awaiter(this, void 0, void 0, function () { + var error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, detectSeries(ports, checkPort)]; + case 1: return [2 /*return*/, _a.sent()]; + case 2: + error_1 = _a.sent(); + throw new Error('no port found!'); + case 3: return [2 /*return*/]; + } + }); + }); +} +exports.findPort = findPort; diff --git a/runner/steps.js b/runner/steps.js new file mode 100644 index 0000000..50a7c7e --- /dev/null +++ b/runner/steps.js @@ -0,0 +1,267 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var http = require("http"); +var _ = require("lodash"); +var socketIO = require("socket.io"); +var browserrunner_1 = require("./browserrunner"); +var config = require("./config"); +var webserver_1 = require("./webserver"); +// Steps (& Hooks) +function setupOverrides(context) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (context.options.registerHooks) { + context.options.registerHooks(context); + } + return [2 /*return*/]; + }); + }); +} +exports.setupOverrides = setupOverrides; +function loadPlugins(context) { + return __awaiter(this, void 0, void 0, function () { + var plugins; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context.emit('log:debug', 'step: loadPlugins'); + return [4 /*yield*/, context.plugins()]; + case 1: + plugins = _a.sent(); + // built in quasi-plugin. + webserver_1.webserver(context); + // Actual plugins. + return [4 /*yield*/, Promise.all(plugins.map(function (plugin) { return plugin.execute(context); }))]; + case 2: + // Actual plugins. + _a.sent(); + return [2 /*return*/, plugins]; + } + }); + }); +} +exports.loadPlugins = loadPlugins; +function configure(context) { + return __awaiter(this, void 0, void 0, function () { + var options, cleanOptions; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context.emit('log:debug', 'step: configure'); + options = context.options; + return [4 /*yield*/, config.expand(context)]; + case 1: + _a.sent(); + // Note that we trigger the configure hook _after_ filling in the `options` + // object. + // + // If you want to modify options prior to this; do it during plugin init. + return [4 /*yield*/, context.emitHook('configure')]; + case 2: + // Note that we trigger the configure hook _after_ filling in the `options` + // object. + // + // If you want to modify options prior to this; do it during plugin init. + _a.sent(); + cleanOptions = _.omit(options, 'output'); + context.emit('log:debug', 'configuration:', cleanOptions); + return [4 /*yield*/, config.validate(options)]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.configure = configure; +/** + * The prepare step is where a lot of the runner's initialization occurs. This + * is also typically where a plugin will want to spin up any long-running + * process it requires. + * + * Note that some "plugins" are also built directly into WCT (webserver). + */ +function prepare(context) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, context.emitHook('prepare')]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.prepare = prepare; +function runTests(context) { + return __awaiter(this, void 0, void 0, function () { + var suites, result, runners; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context.emit('log:debug', 'step: runTests'); + suites = context.options.suites; + context.emit('log:info', 'Running Suite: ' + suites[0]); + result = runBrowsers(context); + runners = result.runners; + context._testRunners = runners; + context._socketIOServers = context._httpServers.map(function (httpServer) { + var socketIOServer = socketIO(httpServer); + socketIOServer.on('connection', function (socket) { + context.emit('log:debug', 'Test client opened sideband socket'); + socket.on('client-event', function (data) { + var runner = runners[data.browserId]; + if (!runner) { + throw new Error("Unable to find browser runner for " + + ("browser with id: " + data.browserId)); + } + runner.onEvent(data.event, data.data); + }); + }); + return socketIOServer; + }); + return [4 /*yield*/, result.completionPromise]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.runTests = runTests; +function cancelTests(context) { + if (!context._testRunners) { + return; + } + context._testRunners.forEach(function (tr) { + tr.quit(); + }); +} +exports.cancelTests = cancelTests; +// Helpers +function runBrowsers(context) { + var options = context.options; + var numActiveBrowsers = options.activeBrowsers.length; + if (numActiveBrowsers === 0) { + throw new Error('No browsers configured to run'); + } + // TODO(nevir): validate browser definitions. + // Up the socket limit so that we can maintain more active requests. + // TODO(nevir): We should be queueing the browsers above some limit too. + http.globalAgent.maxSockets = + Math.max(http.globalAgent.maxSockets, numActiveBrowsers * 2); + context.emit('run-start', options); + var errors = []; + var promises = []; + var runners = []; + var id = 0; + for (var _i = 0, _a = options.activeBrowsers; _i < _a.length; _i++) { + var originalBrowserDef = _a[_i]; + var waitFor = undefined; + var _loop_1 = function (server) { + // Needed by both `BrowserRunner` and `CliReporter`. + var browserDef = _.clone(originalBrowserDef); + browserDef.id = id++; + browserDef.variant = server.variant; + _.defaultsDeep(browserDef, options.browserOptions); + var runner = new browserrunner_1.BrowserRunner(context, browserDef, options, server.url, waitFor); + promises.push(runner.donePromise.then(function () { + context.emit('log:debug', browserDef, 'BrowserRunner complete'); + }, function (error) { + context.emit('log:debug', browserDef, 'BrowserRunner complete'); + errors.push(error); + })); + runners.push(runner); + if (browserDef.browserName === 'safari') { + // Control to Safari must be serialized. We can't launch two instances + // simultaneously, because security lol. + // https://webkit.org/blog/6900/webdriver-support-in-safari-10/ + waitFor = runner.donePromise["catch"](function () { + // The next runner doesn't care about errors, just wants to know when + // it can start. + return undefined; + }); + } + }; + for (var _b = 0, _c = options.webserver._servers; _b < _c.length; _b++) { + var server = _c[_b]; + _loop_1(server); + } + } + return { + runners: runners, + completionPromise: (function () { + return __awaiter(this, void 0, void 0, function () { + var error; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, Promise.all(promises)]; + case 1: + _a.sent(); + error = errors.length > 0 ? _.union(errors).join(', ') : null; + context.emit('run-end', error); + // TODO(nevir): Better rationalize run-end and hook. + return [4 /*yield*/, context.emitHook('cleanup')]; + case 2: + // TODO(nevir): Better rationalize run-end and hook. + _a.sent(); + if (error) { + throw new Error(error); + } + return [2 /*return*/]; + } + }); + }); + }()) + }; +} diff --git a/runner/test.js b/runner/test.js new file mode 100644 index 0000000..e0d338e --- /dev/null +++ b/runner/test.js @@ -0,0 +1,148 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var cleankill = require("cleankill"); +var clireporter_1 = require("./clireporter"); +var context_1 = require("./context"); +var steps = require("./steps"); +/** + * Runs a suite of web component tests. + * + * The returned Context (a kind of EventEmitter) fires various events to allow + * you to track the progress of the tests: + * + * Lifecycle Events: + * + * `run-start` + * WCT is ready to begin spinning up browsers. + * + * `browser-init` {browser} {stats} + * WCT is ready to begin spinning up browsers. + * + * `browser-start` {browser} {metadata} {stats} + * The browser has begun running tests. May fire multiple times (i.e. when + * manually refreshing the tests). + * + * `sub-suite-start` {browser} {sharedState} {stats} + * A suite file has begun running. + * + * `test-start` {browser} {test} {stats} + * A test has begun. + * + * `test-end` {browser} {test} {stats} + * A test has ended. + * + * `sub-suite-end` {browser} {sharedState} {stats} + * A suite file has finished running all of its tests. + * + * `browser-end` {browser} {error} {stats} + * The browser has completed, and it shutting down. + * + * `run-end` {error} + * WCT has run all browsers, and is shutting down. + * + * Generic Events: + * + * * log:debug + * * log:info + * * log:warn + * * log:error + * + * @param {!Config|!Context} options The configuration or an already formed + * `Context` object. + */ +function test(options) { + return __awaiter(this, void 0, void 0, function () { + var context; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context = (options instanceof context_1.Context) ? options : new context_1.Context(options); + // We assume that any options related to logging are passed in via the initial + // `options`. + if (context.options.output) { + new clireporter_1.CliReporter(context, context.options.output, context.options); + } + _a.label = 1; + case 1: + _a.trys.push([1, , 7, 10]); + return [4 /*yield*/, steps.setupOverrides(context)]; + case 2: + _a.sent(); + return [4 /*yield*/, steps.loadPlugins(context)]; + case 3: + _a.sent(); + return [4 /*yield*/, steps.configure(context)]; + case 4: + _a.sent(); + return [4 /*yield*/, steps.prepare(context)]; + case 5: + _a.sent(); + return [4 /*yield*/, steps.runTests(context)]; + case 6: + _a.sent(); + return [3 /*break*/, 10]; + case 7: + if (!!context.options.skipCleanup) return [3 /*break*/, 9]; + return [4 /*yield*/, cleankill.close()]; + case 8: + _a.sent(); + _a.label = 9; + case 9: return [7 /*endfinally*/]; + case 10: return [2 /*return*/]; + } + }); + }); +} +exports.test = test; +// HACK +test['test'] = test; +module.exports = test; diff --git a/runner/webserver.js b/runner/webserver.js new file mode 100644 index 0000000..eb9e36a --- /dev/null +++ b/runner/webserver.js @@ -0,0 +1,376 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var bowerConfig = require("bower-config"); +var cleankill = require("cleankill"); +var fs = require("fs"); +var _ = require("lodash"); +var path = require("path"); +var polyserve_1 = require("polyserve"); +var resolve = require("resolve"); +var semver = require("semver"); +var send = require("send"); +var serverDestroy = require("server-destroy"); +var config_1 = require("./config"); +// Template for generated indexes. +var INDEX_TEMPLATE = _.template(fs.readFileSync(path.resolve(__dirname, '../data/index.html'), { encoding: 'utf-8' })); +var DEFAULT_HEADERS = { + 'Cache-Control': 'no-cache, no-store, must-revalidate', + 'Pragma': 'no-cache', + 'Expires': '0' +}; +function relativeFrom(fromPath, toPath) { + return path.relative(fromPath, toPath).replace(/\\/g, '/'); +} +function resolveFrom(fromPath, moduleId) { + try { + return resolve.sync(moduleId, { basedir: fromPath, preserveSymlinks: true }); + } + catch (e) { + return ''; + } +} +/** + * The webserver module is a quasi-plugin. This ensures that it is hooked in a + * sane way (for other plugins), and just follows the same flow. + * + * It provides a static HTTP server for serving the desired tests and WCT's + * `browser.js`/`environment.js`. + */ +function webserver(wct) { + var options = wct.options; + wct.hook('configure', function () { + return __awaiter(this, void 0, void 0, function () { + var browserScript, scripts, extraScripts, modules, extraModules, fromPath_1, npmPackageRootPath_1, wctPackageScriptName, packageName, isPackageScoped, rootNodeModules_1, legacyNpmSupportPackageScripts, resolvedLegacyNpmSupportPackageScripts, resolvedMochaScript; + var _a; + return __generator(this, function (_b) { + // For now, you should treat all these options as an implementation detail + // of WCT. They may be opened up for public configuration, but we need to + // spend some time rationalizing interactions with external webservers. + options.webserver = _.merge(options.webserver, {}); + if (options.verbose) { + options.clientOptions.verbose = true; + } + // Hacky workaround for Firefox + Windows issue where FF screws up pathing. + // Bug: https://github.com/Polymer/web-component-tester/issues/194 + options.suites = options.suites.map(function (cv) { return cv.replace(/\\/g, '/'); }); + browserScript = 'web-component-tester/browser.js'; + scripts = [], extraScripts = []; + modules = [], extraModules = []; + if (options.npm) { + options.clientOptions = options.clientOptions || {}; + options.clientOptions.environmentScripts = + options.clientOptions.environmentScripts || []; + browserScript = ''; + fromPath_1 = path.resolve(options.root || process.cwd()); + options.wctPackageName = options.wctPackageName || + ['wct-mocha', 'wct-browser-legacy', 'web-component-tester'].find(function (p) { return !!resolveFrom(fromPath_1, p); }); + npmPackageRootPath_1 = path.dirname(resolveFrom(fromPath_1, options.wctPackageName + '/package.json')); + if (npmPackageRootPath_1) { + wctPackageScriptName = ['web-component-tester', 'wct-browser-legacy'].includes(options.wctPackageName) ? + 'browser.js' : + options.wctPackageName + ".js"; + browserScript = (npmPackageRootPath_1 + "/" + wctPackageScriptName).slice(npmPackageRootPath_1.length - options.wctPackageName.length); + } + packageName = config_1.getPackageName(options); + isPackageScoped = packageName && packageName[0] === '@'; + rootNodeModules_1 = path.resolve(path.join(options.root, 'node_modules')); + // WCT used to try to bundle a lot of packages for end-users, but + // because of `node_modules` layout, these need to actually be resolved + // from the package as installed, to ensure the desired version is + // loaded. Here we list the legacy packages and attempt to resolve them + // from the WCT package. + if (['web-component-tester', 'wct-browser-legacy'].includes(options.wctPackageName)) { + legacyNpmSupportPackageScripts = [ + 'stacky/browser.js', + 'async/lib/async.js', + 'lodash/index.js', + 'mocha/mocha.js', + 'chai/chai.js', + '@polymer/sinonjs/sinon.js', + 'sinon-chai/lib/sinon-chai.js', + 'accessibility-developer-tools/dist/js/axs_testing.js', + '@polymer/test-fixture/test-fixture.js', + ]; + resolvedLegacyNpmSupportPackageScripts = legacyNpmSupportPackageScripts + .map(function (script) { return resolveFrom(npmPackageRootPath_1, script); }) + .filter(function (script) { return script !== ''; }); + (_a = options.clientOptions.environmentScripts).push.apply(_a, resolvedLegacyNpmSupportPackageScripts.map(function (script) { return relativeFrom(rootNodeModules_1, script); })); + } + else { + resolvedMochaScript = resolveFrom(npmPackageRootPath_1, 'mocha/mocha.js'); + if (resolvedMochaScript) { + options.clientOptions.environmentScripts.push(relativeFrom(rootNodeModules_1, resolvedMochaScript)); + } + } + if (browserScript && isPackageScoped) { + browserScript = "../" + browserScript; + } + } + if (browserScript) { + scripts.push("../" + browserScript); + } + if (!options.npm) { + scripts.push('web-component-tester/data/a11ysuite.js'); + } + options.webserver._generatedIndexContent = + INDEX_TEMPLATE(__assign({ scripts: scripts, extraScripts: [], modules: modules }, options)); + return [2 /*return*/]; + }); + }); + }); + wct.hook('prepare', function () { + return __awaiter(this, void 0, void 0, function () { + // TODO(rictic): re-enable this stuff. need to either move this code + // into polyserve or let the polyserve API expose this stuff. + // app.use('/httpbin', httpbin.httpbin); + // app.get('/favicon.ico', function(request, response) { + // response.end(); + // }); + // app.use(function(request, response, next) { + // wct.emit('log:warn', '404', chalk.magenta(request.method), + // request.url); + // next(); + // }); + function interruptHandler() { + return __awaiter(this, void 0, void 0, function () { + var _i, _a, io; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + // close the socket IO server directly if it is spun up + for (_i = 0, _a = (wct._socketIOServers || []); _i < _a.length; _i++) { + io = _a[_i]; + // we will close the underlying server ourselves + io.httpServer = null; + io.close(); + } + return [4 /*yield*/, Promise.all(onDestroyHandlers.map(function (f) { return f(); }))]; + case 1: + _b.sent(); + return [2 /*return*/]; + } + }); + }); + } + var wsOptions, additionalRoutes, packageName, componentDir, pathToLocalWct_1, version, mdFilenames, _i, mdFilenames_1, mdFilename, pathToMetadata, allowedRange, hasWarnedBrowserJs_1, pathToGeneratedIndex, appMapper, polyserveResult, servers, onDestroyHandlers, registerServerTeardown, address, address, _a, _b, server, never, _c, servers_1, server; + var _this = this; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + wsOptions = options.webserver; + additionalRoutes = new Map(); + packageName = config_1.getPackageName(options); + // Check for client-side compatibility. + // Non-npm case. + if (!options.npm) { + componentDir = bowerConfig.read(options.root).directory; + pathToLocalWct_1 = path.join(options.root, componentDir, 'web-component-tester'); + version = undefined; + mdFilenames = ['package.json', 'bower.json', '.bower.json']; + for (_i = 0, mdFilenames_1 = mdFilenames; _i < mdFilenames_1.length; _i++) { + mdFilename = mdFilenames_1[_i]; + pathToMetadata = path.join(pathToLocalWct_1, mdFilename); + try { + if (!version) { + version = require(pathToMetadata).version; + } + } + catch (e) { + // Handled below, where we check if we found a version. + } + } + if (!version) { + throw new Error("\nThe web-component-tester Bower package is not installed as a dependency of this project (" + packageName + ").\n\nPlease run this command to install:\n bower install --save-dev web-component-tester\n\nWeb Component Tester >=6.0 requires that support files needed in the browser are installed as part of the project's dependencies or dev-dependencies. This is to give projects greater control over the versions that are served, while also making Web Component Tester's behavior easier to understand.\n\nExpected to find a " + mdFilenames.join(' or ') + " at: " + pathToLocalWct_1 + "/\n"); + } + allowedRange = require(path.join(__dirname, '..', 'package.json'))['--private-wct--']['client-side-version-range']; + if (!semver.satisfies(version, allowedRange)) { + throw new Error("\n The web-component-tester Bower package installed is incompatible with the\n wct node package you're using.\n\n The test runner expects a version that satisfies " + allowedRange + " but the\n bower package you have installed is " + version + ".\n"); + } + hasWarnedBrowserJs_1 = false; + additionalRoutes.set('/browser.js', function (request, response) { + if (!hasWarnedBrowserJs_1) { + console.warn("\n\n WARNING:\n Loading WCT's browser.js from /browser.js is deprecated.\n\n Instead load it from ../web-component-tester/browser.js\n (or with the absolute url /components/web-component-tester/browser.js)\n "); + hasWarnedBrowserJs_1 = true; + } + var browserJsPath = path.join(pathToLocalWct_1, 'browser.js'); + send(request, browserJsPath).pipe(response); + }); + } + pathToGeneratedIndex = "/components/" + packageName + "/generated-index.html"; + additionalRoutes.set(pathToGeneratedIndex, function (_request, response) { + response.set(DEFAULT_HEADERS); + response.send(options.webserver._generatedIndexContent); + }); + appMapper = function (app, options) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Using the define:webserver hook to provide a mapper function that + // allows user to substitute their own app for the generated polyserve + // app. + return [4 /*yield*/, wct.emitHook('define:webserver', app, function (substitution) { + app = substitution; + }, options)]; + case 1: + // Using the define:webserver hook to provide a mapper function that + // allows user to substitute their own app for the generated polyserve + // app. + _a.sent(); + return [2 /*return*/, app]; + } + }); + }); }; + return [4 /*yield*/, polyserve_1.startServers({ + root: options.root, + componentDir: componentDir, + compile: options.compile, + hostname: options.webserver.hostname, + port: options.webserver.port, + headers: DEFAULT_HEADERS, + packageName: packageName, + additionalRoutes: additionalRoutes, + npm: !!options.npm, + moduleResolution: options.moduleResolution, + proxy: options.proxy + }, appMapper)]; + case 1: + polyserveResult = _d.sent(); + onDestroyHandlers = []; + registerServerTeardown = function (serverInfo) { + var destroyableServer = serverInfo.server; + serverDestroy(destroyableServer); + onDestroyHandlers.push(function () { + destroyableServer.destroy(); + return new Promise(function (resolve) { return serverInfo.server.on('close', function () { return resolve(); }); }); + }); + }; + if (polyserveResult.kind === 'mainline') { + servers = [polyserveResult]; + registerServerTeardown(polyserveResult); + address = polyserveResult.server.address(); + if (typeof address !== 'string') { + wsOptions.port = address.port; + } + } + else if (polyserveResult.kind === 'MultipleServers') { + servers = [polyserveResult.mainline]; + servers = servers.concat(polyserveResult.variants); + address = polyserveResult.mainline.server.address(); + if (typeof address !== 'string') { + wsOptions.port = address.port; + } + for (_a = 0, _b = polyserveResult.servers; _a < _b.length; _a++) { + server = _b[_a]; + registerServerTeardown(server); + } + } + else { + never = polyserveResult; + throw new Error('Internal error: Got unknown response from polyserve.startServers: ' + + ("" + never)); + } + wct._httpServers = servers.map(function (s) { return s.server; }); + _c = 0, servers_1 = servers; + _d.label = 2; + case 2: + if (!(_c < servers_1.length)) return [3 /*break*/, 5]; + server = servers_1[_c]; + return [4 /*yield*/, wct.emitHook('prepare:webserver', server.app)]; + case 3: + _d.sent(); + _d.label = 4; + case 4: + _c++; + return [3 /*break*/, 2]; + case 5: + options.webserver._servers = servers.map(function (s) { + var address = s.server.address(); + var port = typeof address === 'string' ? '' : ":" + address.port; + var hostname = s.options.hostname; + var url = "http://" + hostname + port + pathToGeneratedIndex; + return { url: url, variant: s.kind === 'mainline' ? '' : s.variantName }; + }); + cleankill.onInterrupt(function () { + return new Promise(function (resolve) { + interruptHandler().then(function () { return resolve(); }, resolve); + }); + }); + return [2 /*return*/]; + } + }); + }); + }); +} +exports.webserver = webserver; +function exists(path) { + try { + fs.statSync(path); + return true; + } + catch (_err) { + return false; + } +} +// HACK(rictic): remove this ES6-compat hack and export webserver itself +webserver['webserver'] = webserver; +module.exports = webserver; diff --git a/test/integration/browser.js b/test/integration/browser.js new file mode 100644 index 0000000..23efb48 --- /dev/null +++ b/test/integration/browser.js @@ -0,0 +1,550 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var chai_1 = require("chai"); +var express = require("express"); +var fs = require("fs"); +var lodash = require("lodash"); +var path = require("path"); +var context_1 = require("../../runner/context"); +var test_1 = require("../../runner/test"); +var setup_test_dir_1 = require("./setup_test_dir"); +function parseList(stringList) { + return (stringList || '') + .split(',') + .map(function (item) { return item.trim(); }) + .filter(function (item) { return !!item; }); +} +function loadOptionsFile(dir) { + var filename = path.join(dir, 'wct.conf.json'); + try { + var jsonOptions = fs.readFileSync(filename, 'utf-8').toString(); + var parsedOptions = JSON.parse(jsonOptions); + if (parsedOptions !== null && typeof parsedOptions === 'object') { + return parsedOptions; + } + else { + return {}; + } + } + catch (e) { + return {}; + } +} +var testLocalBrowsers = !process.env.SKIP_LOCAL_BROWSERS; +var testLocalBrowsersList = parseList(process.env.TEST_LOCAL_BROWSERS); +var testRemoteBrowsers = process.env.WCT_SAUCE === 'true'; +if (testRemoteBrowsers && + !(process.env.SAUCE_USERNAME && process.env.SAUCE_ACCESS_KEY)) { + throw new Error('Must set SAUCE_USERNAME and SAUCE_ACCESS_KEY when WCT_SAUCE is set.'); +} +var testRemoteBrowsersList = parseList(process.env.TEST_REMOTE_BROWSERS); +if (testRemoteBrowsersList.length === 0) { + testRemoteBrowsersList.push('default'); +} +function isVariantsGolden(golden) { + return !!golden['variants']; +} +var TestResults = /** @class */ (function () { + function TestResults() { + this.variants = {}; + this.runError = null; + this.testRunnerError = null; + } + TestResults.prototype.getVariantResults = function (variantName) { + this.variants[variantName] = + this.variants[variantName] || new VariantResults(); + return this.variants[variantName]; + }; + return TestResults; +}()); +var VariantResults = /** @class */ (function () { + function VariantResults() { + this.tests = {}; + this.testErrors = {}; + this.stats = {}; + this.errors = {}; + } + return VariantResults; +}()); +// Tests +/** Describes all suites, mixed into the environments being run. */ +function runsAllIntegrationSuites(options) { + if (options === void 0) { options = {}; } + var integrationDirnames = fs.readdirSync(integrationDir).filter(function (fn) { return fn !== 'temp'; }); + var suitesToOnly = new Set([]); + // TODO(#421): `missing` correctly fails, but currently it times out which + // takes ~2 minutes. + var suitesToSkip = new Set([ + 'missing', + // https://github.com/Polymer/tools/issues/289 + 'multiple-component_dirs', + ]); + for (var _i = 0, integrationDirnames_1 = integrationDirnames; _i < integrationDirnames_1.length; _i++) { + var fn = integrationDirnames_1[_i]; + var config_1 = suitesToOnly.has(fn) ? + 'only' : + suitesToSkip.has(fn) ? 'skip' : 'normal'; + runIntegrationSuiteForDir(fn, options, config_1); + } +} +function runIntegrationSuiteForDir(dirname, options, howToRun) { + runsIntegrationSuite(dirname, options, howToRun, function (testResults) { + var golden = JSON.parse(fs.readFileSync(path.join(integrationDir, dirname, 'golden.json'), 'utf-8')); + var variantsGolden; + if (isVariantsGolden(golden)) { + variantsGolden = golden; + } + else { + variantsGolden = { variants: { '': golden } }; + } + it('ran the correct variants', function () { + chai_1.expect(Object.keys(testResults.variants).sort()) + .to.deep.equal(Object.keys(variantsGolden.variants).sort()); + }); + var _loop_1 = function (variantName) { + var run = function () { return assertVariantResultsConformToGolden(variantsGolden.variants[variantName], testResults.getVariantResults(variantName)); }; + if (variantName !== '') { + describe("the variant with bower_components-" + variantName, run); + } + else { + run(); + } + }; + for (var variantName in variantsGolden.variants) { + _loop_1(variantName); + } + }); +} +var integrationDir = path.resolve(__dirname, '../fixtures/integration'); +/** + * Creates a mocha context that runs an integration suite (once), and hangs onto + * the output for tests. + */ +function runsIntegrationSuite(dirName, options, howToRun, contextFunction) { + var suiteName = "integration fixture dir '" + dirName + "'"; + var describer = describe; + if (howToRun === 'skip') { + describer = describe.skip; + } + else if (howToRun === 'only') { + describer = describe.only; + } + describer(suiteName, function () { + var log = []; + var testResults = new TestResults(); + before(function () { + return __awaiter(this, void 0, void 0, function () { + var suiteRoot, suiteOptions, allOptions, context, addEventHandler, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, setup_test_dir_1.makeProperTestDir(dirName)]; + case 1: + suiteRoot = _a.sent(); + suiteOptions = loadOptionsFile(path.join('test', 'fixtures', 'integration', dirName)); + // Filter the list of browsers within the suite's options by the + // global overrides if they are present. + if (suiteOptions.plugins !== undefined) { + if (suiteOptions.plugins.local && !testLocalBrowsers) { + delete suiteOptions.plugins.local; + } + else if (testLocalBrowsersList.length > 0 && + !testLocalBrowsersList.includes('default') && + suiteOptions.plugins.local !== undefined && + suiteOptions.plugins.local.browsers !== undefined) { + suiteOptions.plugins.local.browsers = + suiteOptions.plugins.local.browsers.filter(function (b) { return testLocalBrowsersList.includes(b); }); + } + if (suiteOptions.plugins.sauce && !testRemoteBrowsers) { + delete suiteOptions.plugins.sauce; + } + else if (testRemoteBrowsersList.length > 0 && + suiteOptions.plugins.sauce !== undefined && + suiteOptions.plugins.sauce.browsers !== undefined) { + suiteOptions.plugins.sauce.browsers = + suiteOptions.plugins.sauce.browsers.filter(function (b) { return testRemoteBrowsersList.includes(b); }); + } + } + allOptions = Object.assign({ + output: { write: log.push.bind(log) }, + ttyOutput: false, + root: suiteRoot, + browserOptions: { + name: 'web-component-tester', + tags: ['org:Polymer', 'repo:web-component-tester'] + } + }, options, suiteOptions); + context = new context_1.Context(allOptions); + addEventHandler = function (name, handler) { + context.on(name, function () { + try { + handler.apply(null, arguments); + } + catch (error) { + console.error("Error inside " + name + " handler in integration tests:"); + console.error(error.stack); + } + }); + }; + addEventHandler('test-end', function (browserDef, data, stats) { + var variantResults = testResults.getVariantResults(browserDef.variant || ''); + var browserName = getBrowserName(browserDef); + variantResults.stats[browserName] = stats; + var testNode = (variantResults.tests[browserName] = + variantResults.tests[browserName] || {}); + var errorNode = variantResults.testErrors[browserName] = + variantResults.testErrors[browserName] || {}; + for (var i = 0; i < data.test.length; i++) { + var name_1 = data.test[i]; + testNode = (testNode[name_1] = testNode[name_1] || {}); + if (i < data.test.length - 1) { + errorNode = errorNode[name_1] = errorNode[name_1] || {}; + } + else if (data.error) { + errorNode[name_1] = data.error; + } + } + testNode.state = data.state; + }); + addEventHandler('browser-end', function (browserDef, error, stats) { + var variantResults = testResults.getVariantResults(browserDef.variant || ''); + var browserName = getBrowserName(browserDef); + variantResults.stats[browserName] = stats; + variantResults.errors[browserName] = error || null; + }); + addEventHandler('run-end', function (error) { + testResults.runError = error; + }); + _a.label = 2; + case 2: + _a.trys.push([2, 4, , 5]); + return [4 /*yield*/, test_1.test(context)]; + case 3: + _a.sent(); + return [3 /*break*/, 5]; + case 4: + error_1 = _a.sent(); + testResults.testRunnerError = error_1.message; + return [3 /*break*/, 5]; + case 5: return [2 /*return*/]; + } + }); + }); + }); + afterEach(function () { + if (this.currentTest.state === 'failed') { + process.stderr.write("\n Output of wct for integration suite named `" + dirName + "`" + + "\n" + + " ======================================================\n\n"); + for (var _i = 0, _a = log.join('').split('\n'); _i < _a.length; _i++) { + var line = _a[_i]; + process.stderr.write(" " + line + "\n"); + } + process.stderr.write("\n ======================================================\n\n"); + } + }); + contextFunction(testResults); + }); +} +if (testLocalBrowsers) { + describe('Local Browser Tests', function () { + runsAllIntegrationSuites({ + plugins: { + local: { + browsers: testLocalBrowsersList, + skipSeleniumInstall: true + } + } + }); + }); +} +if (testRemoteBrowsers) { + describe('Remote Browser Tests', function () { + runsAllIntegrationSuites({ + plugins: { + sauce: { + browsers: testRemoteBrowsersList + } + } + }); + }); +} +/** Assert that all browsers passed. */ +function assertPassed(context) { + if (context.runError) { + console.error(context.runError.stack || context.runError.message || context.runError); + } + if (context.testRunnerError) { + console.error(context.testRunnerError.stack || context.testRunnerError.message || + context.testRunnerError); + } + chai_1.expect(context.runError).to.not.be.ok; + chai_1.expect(context.testRunnerError).to.not.be.ok; + // expect(context.errors).to.deep.equal(repeatBrowsers(context, null)); +} +function assertFailed(context, expectedError) { + // expect(context.runError).to.eq(expectedError); + // expect(context.testRunnerError).to.be.eq(expectedError); + chai_1.expect(context.errors).to.deep.equal(repeatBrowsers(context, expectedError)); +} +/** Asserts that all browsers match the given stats. */ +function assertStats(context, passing, pending, failing, status) { + var expected = { passing: passing, pending: pending, failing: failing, status: status }; + chai_1.expect(context.stats).to.deep.equal(repeatBrowsers(context, expected)); +} +/** Asserts that all browsers match the given test layout. */ +function assertTests(context, expected) { + chai_1.expect(context.tests).to.deep.equal(repeatBrowsers(context, expected)); +} +/** Asserts that all browsers emitted the given errors. */ +function assertTestErrors(context, expected) { + lodash.each(context.testErrors, function (actual, browser) { + chai_1.expect(Object.keys(expected)) + .to.have.members(Object.keys(actual), 'Test file mismatch for ' + browser + + (": expected " + JSON.stringify(Object.keys(expected)) + " - got " + JSON.stringify(Object.keys(actual)))); + lodash.each(actual, function (errors, file) { + var expectedErrors = expected[file]; + // Currently very dumb for simplicity: We don't support suites. + chai_1.expect(Object.keys(expectedErrors)) + .to.have.members(Object.keys(errors), "Test failure mismatch for " + file + " on " + browser); + lodash.each(errors, function (error, test) { + var locationInfo = "for " + file + " - \"" + test + "\" on " + browser; + var expectedError = expectedErrors[test]; + var stackLines = error.stack.split('\n'); + chai_1.expect(error.message) + .to.eq(expectedError[0], "Error message mismatch " + locationInfo); + // Chai fails to emit stacks for Firefox. + // https://github.com/chaijs/chai/issues/100 + if (browser.match(/firefox|internet explorer 11/)) { + return; + } + var expectedErrorText = expectedError[0]; + var stackTraceMatcher = expectedError[1]; + chai_1.expect(stackLines[0]).to.eq(expectedErrorText); + chai_1.expect(stackLines[stackLines.length - 1]) + .to.match(new RegExp(stackTraceMatcher), "error.stack=\"" + error.stack + "\""); + }); + }); + }); +} +function assertVariantResultsConformToGolden(golden, variantResults) { + // const variantResults = testResults.getVariantResults(''); + it('records the correct result stats', function () { + try { + assertStats(variantResults, golden.passing, golden.pending, golden.failing, golden.status); + } + catch (_) { + // mocha reports twice the failures because reasons + // https://github.com/mochajs/mocha/issues/2083 + assertStats(variantResults, golden.passing, golden.pending, golden.failing * 2, golden.status); + } + }); + if (golden.passing + golden.pending + golden.failing === 0 && !golden.tests) { + return; + } + it('runs the correct tests', function () { + assertTests(variantResults, golden.tests); + }); + if (golden.errors || golden.failing > 0) { + it('emits well formed errors', function () { + assertTestErrors(variantResults, golden.errors); + }); + } + // it('passed the test', function() { + // assertPassed(testResults); + // }); +} +function getBrowserName(browser) { + var parts = []; + if (browser.platform && !browser.deviceName) { + parts.push(browser.platform); + } + parts.push(browser.deviceName || browser.browserName); + if (browser.version) { + parts.push(browser.version); + } + if (browser.variant) { + parts.push("[" + browser.variant + "]"); + } + return parts.join(' '); +} +function repeatBrowsers(context, data) { + chai_1.expect(Object.keys(context.stats).length) + .to.be.greaterThan(0, 'No browsers were run. Bad environment?'); + return lodash.mapValues(context.stats, function () { return data; }); +} +if (testLocalBrowsers) { + describe('define:webserver hook', function () { + it('supports substituting given app', function () { + return __awaiter(this, void 0, void 0, function () { + var suiteRoot, log, requestedUrls, options, context; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, setup_test_dir_1.makeProperTestDir('define-webserver-hook')]; + case 1: + suiteRoot = _a.sent(); + log = []; + requestedUrls = []; + options = { + output: { write: log.push.bind(log) }, + ttyOutput: false, + root: suiteRoot, + browserOptions: { + name: 'web-component-tester', + tags: ['org:Polymer', 'repo:web-component-tester'] + }, + plugins: { + local: { + browsers: testLocalBrowsersList, + skipSeleniumInstall: true + } + } + }; + context = new context_1.Context(options); + context.hook('define:webserver', function (app, assign, _options, done) { + var newApp = express(); + newApp.get('*', function (request, _response, next) { + requestedUrls.push(request.url); + next(); + }); + newApp.use(app); + assign(newApp); + done(); + }); + return [4 /*yield*/, test_1.test(context)]; + case 2: + _a.sent(); + // Our middleware records all the requested urls into this requestedUrls + // array, so we can test that the middleware works by inspecting it for + // expected tests.html file which should be loaded by index.html + chai_1.expect(requestedUrls) + .to.include('/components/define-webserver-hook/test/tests.html'); + return [2 /*return*/, true]; + } + }); + }); + }); + }); + describe('early failures', function () { + it("wct doesn't start testing if it's not bower installed locally", function () { + return __awaiter(this, void 0, void 0, function () { + var log, options, context, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + log = []; + options = { + output: { write: log.push.bind(log) }, + ttyOutput: false, + root: path.join(__dirname, '..', 'fixtures', 'integration', 'components_dir'), + browserOptions: { + name: 'web-component-tester', + tags: ['org:Polymer', 'repo:web-component-tester'] + }, + plugins: { + local: { browsers: testLocalBrowsersList, skipSeleniumInstall: true } + } + }; + context = new context_1.Context(options); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, test_1.test(context)]; + case 2: + _a.sent(); + throw new Error('Expected test() to fail!'); + case 3: + e_1 = _a.sent(); + chai_1.expect(e_1.message).to.match(/The web-component-tester Bower package is not installed as a dependency of this project/); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); + }); + it('fails if the client side library is out of allowed version range', function () { + return __awaiter(this, void 0, void 0, function () { + var log, options, context, e_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + log = []; + options = { + output: { write: log.push.bind(log) }, + ttyOutput: false, + root: path.join(__dirname, '..', 'fixtures', 'early-failure'), + browserOptions: { + name: 'web-component-tester', + tags: ['org:Polymer', 'repo:web-component-tester'] + }, + plugins: { + local: { browsers: testLocalBrowsersList, skipSeleniumInstall: true } + } + }; + context = new context_1.Context(options); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, test_1.test(context)]; + case 2: + _a.sent(); + throw new Error('Expected test() to fail!'); + case 3: + e_2 = _a.sent(); + chai_1.expect(e_2.message).to.match(/The web-component-tester Bower package installed is incompatible with the\n\s*wct node package you're using/); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); + }); + }); +} diff --git a/test/integration/setup_test_dir.js b/test/integration/setup_test_dir.js new file mode 100644 index 0000000..879ec4a --- /dev/null +++ b/test/integration/setup_test_dir.js @@ -0,0 +1,158 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var bowerConfig = require("bower-config"); +var fs = require("fs"); +var path = require("path"); +var rimraf = require("rimraf"); +var baseDir = path.join(__dirname, '..', 'fixtures', 'integration'); +/** + * Sets up the given integration fixture with proper bower components. + * + * For wct to work it needs to be installed in the bower_components directory + * (or, with variants, in each variant directory). So this copies the given + * integration test fixture, then sets up symlinks from + * bower_components/web-component-tester/browser.js to the browser.js of this + * repo. It also makes symlinks for each of wct's bower dependencies into the + * integration tests' bower_components dir. + * + * @param dirname The basename of an integration fixture directory. + * @return A fully resolved path to a copy of the fixture directory with + * a proper bower_components directory. + */ +function makeProperTestDir(dirname) { + return __awaiter(this, void 0, void 0, function () { + var startingDir, tempDir, pathToTestDir, bowerDir, componentsDirs, _i, _a, baseFile, _b, componentsDirs_1, baseComponentsDir, componentsDir, bowerDeps, _c, bowerDeps_1, baseFile, wctDir; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + startingDir = path.join(baseDir, dirname); + tempDir = path.join(baseDir, 'temp'); + return [4 /*yield*/, exists(tempDir)]; + case 1: + if (!_d.sent()) return [3 /*break*/, 3]; + return [4 /*yield*/, new Promise(function (resolve, reject) { + rimraf(tempDir, function (err) { return err ? reject(err) : resolve(); }); + })]; + case 2: + _d.sent(); + _d.label = 3; + case 3: + fs.mkdirSync(tempDir); + return [4 /*yield*/, copyDir(startingDir, tempDir)]; + case 4: + pathToTestDir = _d.sent(); + bowerDir = bowerConfig.read(pathToTestDir).directory; + fs.mkdirSync(path.join(pathToTestDir, 'node_modules')); + fs.mkdirSync(path.join(pathToTestDir, 'node_modules', 'web-component-tester')); + componentsDirs = new Set([bowerDir]); + for (_i = 0, _a = fs.readdirSync(startingDir); _i < _a.length; _i++) { + baseFile = _a[_i]; + if (new RegExp(bowerDir + "(-|$)").test(baseFile)) { + componentsDirs.add(baseFile); + } + } + _b = 0, componentsDirs_1 = componentsDirs; + _d.label = 5; + case 5: + if (!(_b < componentsDirs_1.length)) return [3 /*break*/, 8]; + baseComponentsDir = componentsDirs_1[_b]; + componentsDir = path.join(pathToTestDir, baseComponentsDir); + return [4 /*yield*/, exists(componentsDir)]; + case 6: + if (!(_d.sent())) { + fs.mkdirSync(componentsDir); + } + bowerDeps = fs.readdirSync(path.join(__dirname, '../../bower_components')); + for (_c = 0, bowerDeps_1 = bowerDeps; _c < bowerDeps_1.length; _c++) { + baseFile = bowerDeps_1[_c]; + fs.symlinkSync(path.join('../../../../../../bower_components', baseFile), path.join(componentsDir, baseFile)); + } + wctDir = path.join(componentsDir, 'web-component-tester'); + fs.mkdirSync(wctDir); + fs.symlinkSync('../../../../../../../browser.js', path.join(wctDir, 'browser.js'), 'file'); + fs.symlinkSync('../../../../../../../package.json', path.join(wctDir, 'package.json'), 'file'); + fs.symlinkSync('../../../../../../../data', path.join(wctDir, 'data'), 'dir'); + _d.label = 7; + case 7: + _b++; + return [3 /*break*/, 5]; + case 8: return [2 /*return*/, pathToTestDir]; + } + }); + }); +} +exports.makeProperTestDir = makeProperTestDir; +function copyDir(from, to) { + return __awaiter(this, void 0, void 0, function () { + var newDir, _i, _a, baseFile, file, newFile; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + newDir = path.join(to, path.basename(from)); + fs.mkdirSync(newDir); + _i = 0, _a = fs.readdirSync(from); + _b.label = 1; + case 1: + if (!(_i < _a.length)) return [3 /*break*/, 5]; + baseFile = _a[_i]; + file = path.join(from, baseFile); + if (!fs.statSync(file).isDirectory()) return [3 /*break*/, 3]; + return [4 /*yield*/, copyDir(file, newDir)]; + case 2: + _b.sent(); + return [3 /*break*/, 4]; + case 3: + newFile = path.join(newDir, baseFile); + fs.writeFileSync(newFile, fs.readFileSync(file)); + _b.label = 4; + case 4: + _i++; + return [3 /*break*/, 1]; + case 5: return [2 /*return*/, newDir]; + } + }); + }); +} +function exists(fn) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve) { return fs.stat(fn, function (err) { return resolve(!err); }); })]; + }); + }); +} diff --git a/test/retry-failures-reporter.js b/test/retry-failures-reporter.js new file mode 100644 index 0000000..006e521 --- /dev/null +++ b/test/retry-failures-reporter.js @@ -0,0 +1,184 @@ +"use strict"; +/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; +exports.__esModule = true; +var chalk = require("chalk"); +var child_process_1 = require("child_process"); +var Mocha = require("mocha"); +var retryTargets = parseJSONArray(process.env['TEST_RETRY_TARGETS']); +var retryTargetMax = parseInt(process.env['TEST_RETRY_TARGET_MAX'], 10) || 0; +var retryCount = parseInt(process.env['TEST_RETRY_COUNT'], 10) || 0; +var retryMax = parseInt(process.env['TEST_RETRY_MAX'], 10) || 3; +var initialCurrentWorkingDirectory = process.cwd(); +/** + * The `mocha` command-line *requires* the reporter module to export via: + * `module.exports =`. + */ +module.exports = /** @class */ (function (_super) { + __extends(RetryFailuresReporter, _super); + function RetryFailuresReporter(runner) { + var _this = _super.call(this, runner) || this; + var passed = []; + var fails = []; + runner.on('pass', function (test) { return passed.push(getFullTitle(test)); }); + runner.on('fail', function (test, _) { return fails.push(getFullTitle(test)); }); + runner.on('end', function () { + if (retryTargets.length > 0) { + var missedTargets = getMissedTargets(passed.concat(fails), retryTargets); + if (missedTargets.length > 0) { + runner.abort(); + console.error(banner("Failed to run intented test target(s):\n" + + missedTargets.map(function (t) { return " - " + t; }).join('\n'))); + process.exit(Math.min(missedTargets.length, 255)); + return; + } + } + if (fails.length === 0) { + return; + } + if (retryCount >= retryMax) { + console.error(banner(retryMax + " retries attempted, but still " + + ("have " + fails.length + " failure(s)."))); + return; + } + if (retryTargetMax > 0 && fails.length > retryTargetMax) { + console.error(banner("Number of failures (" + fails.length + ") exceeds the specified " + + ("maximum number of test targets to retry(" + retryTargetMax + ")."))); + return; + } + var args = stripGrepArgs(process.argv.slice(1).concat(process.execArgv)) + .concat(['--grep', __spreadArrays(fails).map(grepEscape).join('|')]); + runner.abort(); + console.error(banner("Test run produced " + fails.length + " failure(s).\n" + + "Attempting rerun of failed test targets:\n" + + fails.map(function (t) { return ' - ' + t; }).join('\n'))); + var retryResults = child_process_1.spawnSync(process.argv0, args, { + cwd: initialCurrentWorkingDirectory, + env: Object.assign({}, process.env, { + 'TEST_RETRY_TARGETS': JSON.stringify(fails), + 'TEST_RETRY_COUNT': "" + (retryCount + 1) + }), + stdio: 'inherit' + }); + process.exit(retryResults.status); + }); + return _this; + } + return RetryFailuresReporter; +}(Mocha.reporters.Spec)); +/** + * Standard output block to help call out these interstitial messages amidst + * large test suite outputs. + */ +function banner(text) { + return chalk.white.bgRed("*************************\n\n" + text + "\n\n*************************"); +} +/** + * When failures happen inside of hooks like "before each" etc, they include the + * mention of the hook, but since the hook is not a target, we have to strip out + * those mentions before we can make use of them for `mocha --grep` purposes. + */ +function getFullTitle(test) { + return test.fullTitle() + .replace(/^".+" hook for "(.+)"/, '$1') + .replace(/^(.+) "[^"]+" hook$/, '$1'); +} +/** + * Returns an array of all the expected test targets to retry which do not + * match any of the actual test targets that were run. + */ +function getMissedTargets(actual, expected) { + var missedTargets = []; + var matchedTargets = new Set(); + var _loop_1 = function (a) { + var match = expected.find(function (e) { return a.startsWith(e); }); + if (match) { + matchedTargets.add(match); + } + }; + for (var _i = 0, actual_1 = actual; _i < actual_1.length; _i++) { + var a = actual_1[_i]; + _loop_1(a); + } + for (var _a = 0, expected_1 = expected; _a < expected_1.length; _a++) { + var e = expected_1[_a]; + if (!matchedTargets.has(e)) { + missedTargets.push(e); + } + } + return missedTargets; +} +/** + * Why is this not a standard function in JavaScript? Sigh. Escapes a string + * to be a literal string for use in a RegExp. + */ +function grepEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} +/** + * Returns an Array parsed from json string, or an empty array if parse fails. + */ +function parseJSONArray(json) { + try { + var array = JSON.parse(json); + if (Array.isArray(array)) { + return array; + } + } + catch (e) { + } + return []; +} +/** + * Given an array of args from argv, return an array without any grep/fgrep + * arguments and their values. + */ +function stripGrepArgs(args) { + var filteredArgs = []; + var _loop_2 = function (a) { + var arg = args[a]; + if (['--grep', '-g', '--fgrep', '-f'].includes(arg)) { + ++a; + return out_a_1 = a, "continue"; + } + if (['--grep=', '-g=', 'fgrep=', '-f='].some(function (p) { return arg.startsWith(p); })) { + return out_a_1 = a, "continue"; + } + filteredArgs.push(arg); + out_a_1 = a; + }; + var out_a_1; + for (var a = 0; a < args.length; ++a) { + _loop_2(a); + a = out_a_1; + } + return filteredArgs; +} diff --git a/test/unit/cli.js b/test/unit/cli.js new file mode 100644 index 0000000..199cdb0 --- /dev/null +++ b/test/unit/cli.js @@ -0,0 +1,438 @@ +"use strict"; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var chai = require("chai"); +var _ = require("lodash"); +var path = require("path"); +var sinon = require("sinon"); +var cli = require("../../runner/cli"); +var steps = require("../../runner/steps"); +var expect = chai.expect; +var wctLocalBrowsers = require('wct-local/lib/browsers'); +var FIXTURES = path.resolve(__dirname, '../fixtures/cli'); +var LOCAL_BROWSERS = { + aurora: { browserName: 'aurora', version: '1' }, + canary: { browserName: 'canary', version: '2' }, + chrome: { browserName: 'chrome', version: '3' }, + firefox: { browserName: 'firefox', version: '4' } +}; +describe('cli', function () { + var sandbox; + beforeEach(function () { + sandbox = sinon.sandbox.create(); + sandbox.stub(steps, 'prepare') + .callsFake(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, undefined]; + }); }); }); + sandbox.stub(steps, 'runTests') + .callsFake(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, undefined]; + }); }); }); + sandbox.stub(wctLocalBrowsers, 'detect') + .callsFake(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, _.omit(LOCAL_BROWSERS, 'aurora')]; + }); }); }); + sandbox.stub(wctLocalBrowsers, 'supported') + .callsFake(function () { return _.keys(LOCAL_BROWSERS); }); + }); + afterEach(function () { + sandbox.restore(); + }); + describe('.run', function () { + var expectRun = function (args, logInput) { return __awaiter(void 0, void 0, void 0, function () { + var log, stream, error_1, call; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + log = logInput || []; + stream = { write: log.push.bind(log) }; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, cli.run({}, args, stream)]; + case 2: + _a.sent(); + return [3 /*break*/, 4]; + case 3: + error_1 = _a.sent(); + log.forEach(function (line) { return process.stderr.write(line); }); + throw error_1; + case 4: + call = steps.runTests['getCall'](0); + return [2 /*return*/, call.args[0]]; + } + }); + }); }; + it('honors --version flags', function () { return __awaiter(void 0, void 0, void 0, function () { + var version, output; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + version = require('../../package.json').version; + return [4 /*yield*/, cli.run({}, ['--version'], { write: function (o) { return output = o; } })]; + case 1: + _a.sent(); + expect(output).to.eq(version + "\n"); + return [4 /*yield*/, cli.run({}, ['-V'], { write: function (o) { return output = o; } })]; + case 2: + _a.sent(); + expect(output).to.eq(version + "\n"); + return [2 /*return*/]; + } + }); + }); }); + it('expands test/ by default, ' + + 'and serves from /components/', function () { return __awaiter(void 0, void 0, void 0, function () { + var options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(FIXTURES, 'standard')); + return [4 /*yield*/, expectRun([])]; + case 1: + options = (_a.sent()).options; + expect(options.suites).to.have.members([ + 'test/a.html', + 'test/b.js', + ]); + expect(options.root).to.equal(path.join(FIXTURES, 'standard')); + return [2 /*return*/]; + } + }); + }); }); + it('honors globs', function () { return __awaiter(void 0, void 0, void 0, function () { + var options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(FIXTURES, 'standard')); + return [4 /*yield*/, expectRun(['**/*.html'])]; + case 1: + options = (_a.sent()).options; + expect(options.suites).to.have.members([ + 'test/a.html', + 'x-foo.html', + ]); + return [2 /*return*/]; + } + }); + }); }); + it('honors expanded files', function () { return __awaiter(void 0, void 0, void 0, function () { + var options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(FIXTURES, 'standard')); + return [4 /*yield*/, expectRun(['test/b.js', 'x-foo.html'])]; + case 1: + options = (_a.sent()).options; + expect(options.suites).to.have.members([ + 'test/b.js', + 'x-foo.html', + ]); + return [2 /*return*/]; + } + }); + }); }); + it('honors --root with no specified suites', function () { return __awaiter(void 0, void 0, void 0, function () { + var root, options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(__dirname); + root = path.join(FIXTURES, 'standard'); + return [4 /*yield*/, expectRun(['--root', root])]; + case 1: + options = (_a.sent()).options; + expect(options.suites).to.have.members([ + 'test/a.html', + 'test/b.js', + ]); + expect(options.root).to.equal(root); + return [2 /*return*/]; + } + }); + }); }); + it('honors --root with specified suites', function () { return __awaiter(void 0, void 0, void 0, function () { + var root, options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(__dirname); + root = path.join(FIXTURES, 'standard'); + return [4 /*yield*/, expectRun(['--root', root, '**/*.html'])]; + case 1: + options = (_a.sent()).options; + expect(options.suites).to.have.members([ + 'test/a.html', + 'x-foo.html', + ]); + expect(options.root).to.equal(root); + return [2 /*return*/]; + } + }); + }); }); + it('throws an error if no suites could be found', function () { return __awaiter(void 0, void 0, void 0, function () { + var error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, cli.run({}, ['404'], { write: function () { } })]; + case 1: + _a.sent(); + return [3 /*break*/, 3]; + case 2: + error_2 = _a.sent(); + expect(error_2).to.match(/no.*suites.*found/i); + return [2 /*return*/]; + case 3: throw new Error('cli.run should have failed'); + } + }); + }); }); + it('loads the local and sauce plugins by default', function () { return __awaiter(void 0, void 0, void 0, function () { + var context; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(FIXTURES, 'standard')); + return [4 /*yield*/, expectRun([])]; + case 1: + context = _a.sent(); + expect(context.enabledPlugins()).to.have.members(['local', 'sauce']); + return [2 /*return*/]; + } + }); + }); }); + it('allows plugins to be diabled via --skip-plugin', function () { return __awaiter(void 0, void 0, void 0, function () { + var context; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(FIXTURES, 'standard')); + return [4 /*yield*/, expectRun(['--skip-plugin', 'sauce'])]; + case 1: + context = _a.sent(); + expect(context.enabledPlugins()).to.have.members(['local']); + return [2 /*return*/]; + } + }); + }); }); + // TODO(nevir): Remove after deprecation period. + it('throws an error when --webRunner is set', function () { + return cli.run({}, ['--webRunner', 'foo'], { write: function () { } }) + .then(function () { + throw new Error('cli.run should have failed'); + }, function (error) { + expect(error.message).to.include('webRunner'); + expect(error.message).to.include('suites'); + }); + }); + describe('with wct.conf.js', function () { + var ROOT = path.join(FIXTURES, 'conf'); + it('serves from /components/', function () { return __awaiter(void 0, void 0, void 0, function () { + var options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(ROOT); + return [4 /*yield*/, expectRun([])]; + case 1: + options = (_a.sent()).options; + expect(options.suites).to.have.members([ + 'test/foo.js', + ]); + expect(options.root).to.equal(ROOT); + return [2 /*return*/]; + } + }); + }); }); + it('walks the ancestry', function () { return __awaiter(void 0, void 0, void 0, function () { + var options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(ROOT, 'branch/leaf')); + return [4 /*yield*/, expectRun([])]; + case 1: + options = (_a.sent()).options; + expect(options.suites).to.have.members([ + 'test/foo.js', + ]); + expect(options.root).to.equal(ROOT); + return [2 /*return*/]; + } + }); + }); }); + it('honors specified values', function () { return __awaiter(void 0, void 0, void 0, function () { + var options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(ROOT); + return [4 /*yield*/, expectRun([])]; + case 1: + options = (_a.sent()).options; + expect(options.plugins['sauce'].username).to.eq('abc123'); + return [2 /*return*/]; + } + }); + }); }); + it('honors root', function () { return __awaiter(void 0, void 0, void 0, function () { + var options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(ROOT, 'rooted')); + return [4 /*yield*/, expectRun([])]; + case 1: + options = (_a.sent()).options; + expect(options.suites).to.have.members([ + 'cli/conf/test/foo.js', + ]); + expect(options.root).to.equal(path.dirname(FIXTURES)); + return [2 /*return*/]; + } + }); + }); }); + }); + describe('deprecated flags', function () { + beforeEach(function () { + process.chdir(path.join(FIXTURES, 'standard')); + }); + describe('--browsers', function () { + it('warns when used', function () { return __awaiter(void 0, void 0, void 0, function () { + var log, hasWarning; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + log = []; + return [4 /*yield*/, expectRun(['--browsers', 'firefox'], log)]; + case 1: + _a.sent(); + hasWarning = _.some(log, function (l) { return /--browsers.*deprecated/i.test(l); }); + expect(hasWarning) + .to.eq(true, 'Expected a warning that --browsers is deprecated'); + return [2 /*return*/]; + } + }); + }); }); + // Semi-integration test. + // This also checks that wct-local (mostly) works. + it('supports local browsers', function () { return __awaiter(void 0, void 0, void 0, function () { + var args, options, names; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + args = ['--browsers', 'firefox', '-b', 'chrome']; + return [4 /*yield*/, expectRun(args)]; + case 1: + options = (_a.sent()).options; + names = options.activeBrowsers.map(function (browser) { return browser.browserName; }); + expect(names).to.have.members(['firefox', 'chrome']); + return [2 /*return*/]; + } + }); + }); }); + // Semi-integration test. + // This also checks that wct-sauce (mostly) works. + it('supports sauce browsers', function () { return __awaiter(void 0, void 0, void 0, function () { + var args, options, names; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + args = ['--browsers', 'linux/firefox', '-b', 'linux/chrome']; + return [4 /*yield*/, expectRun(args)]; + case 1: + options = (_a.sent()).options; + names = options.activeBrowsers.map(function (browser) { return browser.browserName; }); + expect(names).to.have.members(['firefox', 'chrome']); + return [2 /*return*/]; + } + }); + }); }); + }); + describe('--remote', function () { + it('warns when used', function () { return __awaiter(void 0, void 0, void 0, function () { + var log, hasWarning; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + log = []; + return [4 /*yield*/, expectRun(['--remote'], log)]; + case 1: + _a.sent(); + hasWarning = _.some(log, function (l) { return /--remote.*--sauce/.test(l); }); + expect(hasWarning) + .to.eq(true, 'Expected a warning that --remote is deprecated'); + return [2 /*return*/]; + } + }); + }); }); + // Semi-integration test. + // This also checks that wct-sauce (mostly) works. + it('sets up default sauce browsers', function () { return __awaiter(void 0, void 0, void 0, function () { + var options, platforms; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectRun(['--remote'])]; + case 1: + options = (_a.sent()).options; + platforms = options.activeBrowsers.map(function (browser) { return browser.platform; }); + expect(_.compact(platforms).length).to.be.gt(0); + return [2 /*return*/]; + } + }); + }); }); + }); + }); + }); +}); diff --git a/test/unit/config.js b/test/unit/config.js new file mode 100644 index 0000000..995136f --- /dev/null +++ b/test/unit/config.js @@ -0,0 +1,72 @@ +"use strict"; +exports.__esModule = true; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var chai = require("chai"); +var config = require("../../runner/config"); +var context_1 = require("../../runner/context"); +var expect = chai.expect; +describe('config', function () { + describe('.merge', function () { + it('avoids modifying the input', function () { + var one = { foo: 1 }; + var two = { foo: 2 }; + var merged = config.merge(one, two); + expect(one.foo).to.eq(1); + expect(two.foo).to.eq(2); + expect(merged.foo).to.eq(2); + expect(merged).to.not.equal(two); + }); + it('honors false as an explicit blacklisting', function () { + var merged = config.merge({ plugins: { foo: {} } }, { plugins: { foo: false } }, { plugins: { foo: {}, bar: {} } }); + expect(merged).to.deep.equal({ plugins: { foo: false, bar: {} } }); + }); + }); + describe('.expand', function () { + describe('deprecated options', function () { + it('expands local string browsers', function () { + var context = new context_1.Context({ browsers: ['chrome'] }); + return config.expand(context).then(function () { + expect(context.options.plugins['local'].browsers).to.have.members([ + 'chrome' + ]); + }); + }); + it('expands sauce string browsers', function () { + var context = new context_1.Context({ browsers: ['linux/firefox'] }); + return config.expand(context).then(function () { + expect(context.options.plugins['sauce'].browsers).to.have.members([ + 'linux/firefox' + ]); + }); + }); + it('expands local object browsers', function () { + var context = new context_1.Context({ browsers: [{ browserName: 'firefox' }] }); + return config.expand(context).then(function () { + expect(context.options.plugins['local'].browsers) + .to.deep['have'] + .members([{ browserName: 'firefox' }]); + }); + }); + it('expands sauce object browsers', function () { + var context = new context_1.Context({ browsers: [{ browserName: 'safari', platform: 'OS X' }] }); + return config.expand(context).then(function () { + expect(context.options.plugins['sauce'].browsers) + .to.deep['have'] + .members([{ browserName: 'safari', platform: 'OS X' }]); + }); + }); + }); + }); +}); diff --git a/test/unit/context.js b/test/unit/context.js new file mode 100644 index 0000000..9dc9295 --- /dev/null +++ b/test/unit/context.js @@ -0,0 +1,249 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var chai = require("chai"); +var sinon = require("sinon"); +var sinonChai = require("sinon-chai"); +var context_1 = require("../../runner/context"); +var plugin_1 = require("../../runner/plugin"); +var expect = chai.expect; +chai.use(sinonChai); +describe('Context', function () { + var sandbox; + beforeEach(function () { + sandbox = sinon.sandbox.create(); + }); + afterEach(function () { + sandbox.restore(); + }); + describe('.plugins', function () { + it('excludes plugins with a falsy config', function () { return __awaiter(void 0, void 0, void 0, function () { + var context, stub, plugins; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context = new context_1.Context({ plugins: { local: false, sauce: {} } }); + stub = sandbox.stub(plugin_1.Plugin, 'get').callsFake(function (name) { + return Promise.resolve(name); + }); + return [4 /*yield*/, context.plugins()]; + case 1: + plugins = _a.sent(); + expect(stub).to.have.been.calledOnce; + expect(stub).to.have.been.calledWith('sauce'); + expect(plugins).to.have.members(['sauce']); + return [2 /*return*/]; + } + }); + }); }); + it('excludes plugins disabled: true', function () { return __awaiter(void 0, void 0, void 0, function () { + var context, stub, plugins; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context = new context_1.Context({ plugins: { local: {}, sauce: { disabled: true } } }); + stub = sandbox.stub(plugin_1.Plugin, 'get').callsFake(function (name) { + return Promise.resolve(name); + }); + return [4 /*yield*/, context.plugins()]; + case 1: + plugins = _a.sent(); + expect(stub).to.have.been.calledOnce; + expect(stub).to.have.been.calledWith('local'); + expect(plugins).to.have.members(['local']); + return [2 /*return*/]; + } + }); + }); }); + describe('hook handlers with non-callback second argument', function () { return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + it('are passed the "done" callback function instead of the argument passed to emitHook', function () { return __awaiter(void 0, void 0, void 0, function () { + var context; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context = new context_1.Context(); + context.hook('foo', function (arg1, done) { + expect(arg1).to.eq('hookArg'); + done(); + }); + return [4 /*yield*/, context.emitHook('foo', 'hookArg')]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + return [2 /*return*/]; + }); + }); }); + describe('hook handlers written to call callbacks', function () { + it('passes additional arguments through', function () { return __awaiter(void 0, void 0, void 0, function () { + var context, error; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context = new context_1.Context(); + context.hook('foo', function (arg1, arg2, hookDone) { + expect(arg1).to.eq('one'); + expect(arg2).to.eq(2); + hookDone(); + }); + // Tests the promise form of emitHook. + return [4 /*yield*/, context.emitHook('foo', 'one', 2)]; + case 1: + // Tests the promise form of emitHook. + _a.sent(); + return [4 /*yield*/, new Promise(function (resolve) { + context.emitHook('foo', 'one', 2, resolve); + })]; + case 2: + error = _a.sent(); + expect(error).to.not.be.ok; + return [2 /*return*/]; + } + }); + }); }); + it('halts on error', function () { return __awaiter(void 0, void 0, void 0, function () { + var context, error_1, error; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context = new context_1.Context(); + context.hook('bar', function (hookDone) { + hookDone('nope'); + }); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, context.emitHook('bar')]; + case 2: + _a.sent(); + throw new Error('emitHook should have thrown'); + case 3: + error_1 = _a.sent(); + expect(error_1).to.eq('nope'); + return [3 /*break*/, 4]; + case 4: return [4 /*yield*/, new Promise(function (resolve) { + context.emitHook('bar', resolve); + })]; + case 5: + error = _a.sent(); + expect(error).to.eq('nope'); + return [2 /*return*/]; + } + }); + }); }); + }); + describe('hooks handlers written to return promises', function () { + it('passes additional arguments through', function () { return __awaiter(void 0, void 0, void 0, function () { + var context, error; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context = new context_1.Context(); + context.hook('foo', function (arg1, arg2) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + expect(arg1).to.eq('one'); + expect(arg2).to.eq(2); + return [2 /*return*/]; + }); + }); + }); + return [4 /*yield*/, context.emitHook('foo', 'one', 2)]; + case 1: + _a.sent(); + return [4 /*yield*/, new Promise(function (resolve) { + context.emitHook('foo', 'one', 2, resolve); + })]; + case 2: + error = _a.sent(); + expect(error).to.not.be.ok; + return [2 /*return*/]; + } + }); + }); }); + it('halts on error', function () { return __awaiter(void 0, void 0, void 0, function () { + var context, error_2, error; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + context = new context_1.Context(); + context.hook('bar', function () { return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + throw 'nope'; + }); + }); }); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, context.emitHook('bar')]; + case 2: + _a.sent(); + throw new Error('emitHook should have thrown'); + case 3: + error_2 = _a.sent(); + expect(error_2).to.eq('nope'); + return [3 /*break*/, 4]; + case 4: return [4 /*yield*/, new Promise(function (resolve) { + context.emitHook('bar', resolve); + })]; + case 5: + error = _a.sent(); + expect(error).to.eq('nope'); + return [2 /*return*/]; + } + }); + }); }); + }); + }); +}); diff --git a/test/unit/grunt.js b/test/unit/grunt.js new file mode 100644 index 0000000..21f5a40 --- /dev/null +++ b/test/unit/grunt.js @@ -0,0 +1,182 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var chai = require("chai"); +var grunt = require("grunt"); +var _ = require("lodash"); +var path = require("path"); +var sinon = require("sinon"); +var steps = require("../../runner/steps"); +var wctLocalBrowsers = require('wct-local/lib/browsers'); +var expect = chai.expect; +chai.use(require('sinon-chai')); +var LOCAL_BROWSERS = { + aurora: { browserName: 'aurora', version: '1' }, + canary: { browserName: 'canary', version: '2' }, + chrome: { browserName: 'chrome', version: '3' }, + firefox: { browserName: 'firefox', version: '4' } +}; +describe('grunt', function () { + // Sinon doesn't stub process.env very well. + var origEnv, origArgv; + beforeEach(function () { + origEnv = _.clone(process.env); + origArgv = process.argv; + }); + afterEach(function () { + _.assign(process.env, origEnv); + _.difference(_.keys(process.env), _.keys(origEnv)).forEach(function (key) { + delete process.env[key]; + }); + process.argv = origArgv; + }); + before(function () { + grunt.initConfig({ + 'wct-test': { + 'passthrough': { + options: { foo: 1, bar: 'asdf' } + }, + 'override': { + options: { sauce: { username: '--real-sauce--' } } + } + } + }); + grunt.loadTasks(path.resolve(__dirname, '../../tasks')); + }); + function runTask(task) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, new Promise(function (resolve, reject) { + grunt.task['options']({ error: reject, done: resolve }); + grunt.task.run('wct-test:' + task)['start'](); + })]; + case 1: + _a.sent(); + // We shouldn't error before hitting it. + expect(steps.runTests).to.have.been.calledOnce; + return [2 /*return*/, steps.runTests['getCall'](0)]; + } + }); + }); + } + describe('wct-test', function () { + var sandbox; + beforeEach(function () { + var _this = this; + sandbox = sinon.sandbox.create(); + sandbox.stub(steps, 'prepare') + .callsFake(function (_context) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, undefined]; + }); }); }); + sandbox.stub(wctLocalBrowsers, 'detect') + .callsFake(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, LOCAL_BROWSERS]; + }); }); }); + sandbox.stub(wctLocalBrowsers, 'supported') + .callsFake(function () { return _.keys(LOCAL_BROWSERS); }); + process.chdir(path.resolve(__dirname, '../fixtures/cli/standard')); + }); + afterEach(function () { + sandbox.restore(); + }); + describe('with a passing suite', function () { + var _this = this; + beforeEach(function () { + var _this = this; + sandbox.stub(steps, 'runTests') + .callsFake(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, undefined]; + }); }); }); + }); + it('passes configuration through', function () { return __awaiter(_this, void 0, void 0, function () { + var call; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, runTask('passthrough')]; + case 1: + call = _a.sent(); + expect(call.args[0].options).to.include({ foo: 1, bar: 'asdf' }); + return [2 /*return*/]; + } + }); + }); }); + }); + describe('with a failing suite', function () { + var _this = this; + beforeEach(function () { + var _this = this; + sandbox.stub(steps, 'runTests').callsFake(function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + throw 'failures'; + }); + }); }); + }); + it('passes errors out', function () { return __awaiter(_this, void 0, void 0, function () { + var error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, runTask('passthrough')]; + case 1: + _a.sent(); + return [3 /*break*/, 3]; + case 2: + error_1 = _a.sent(); + return [2 /*return*/]; // All's well! + case 3: throw new Error('Expected runTask to fail!'); + } + }); + }); }); + }); + }); +}); diff --git a/test/unit/gulp.js b/test/unit/gulp.js new file mode 100644 index 0000000..14ab436 --- /dev/null +++ b/test/unit/gulp.js @@ -0,0 +1,168 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var chai = require("chai"); +var gulp = require("gulp"); +var path = require("path"); +var sinon = require("sinon"); +var wctGulp = require("../../runner/gulp"); +var plugin_1 = require("../../runner/plugin"); +var steps = require("../../runner/steps"); +var expect = chai.expect; +chai.use(require('sinon-chai')); +var FIXTURES = path.resolve(__dirname, '../fixtures/cli'); +describe('gulp', function () { + var _this = this; + var pluginsCalled; + var sandbox; + var orch; + var options; + beforeEach(function () { + var _this = this; + orch = new gulp['Gulp'](); + wctGulp.init(orch); + sandbox = sinon.sandbox.create(); + sandbox.stub(steps, 'prepare') + .callsFake(function (_context) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, undefined]; + }); }); }); + sandbox.stub(steps, 'runTests').callsFake(function (context) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + options = context.options; + return [2 /*return*/]; + }); + }); }); + pluginsCalled = []; + sandbox.stub(plugin_1.Plugin.prototype, 'execute') + .callsFake(function (context) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + pluginsCalled.push(this.name); + context.options.activeBrowsers.push({ browserName: 'fake for ' + this.name }); + return [2 /*return*/]; + }); + }); + }); + }); + afterEach(function () { + sandbox.restore(); + }); + function runGulpTask(name) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, new Promise(function (resolve, reject) { + orch.task(name)(function (error) { return error ? reject(error) : resolve(); }); + })]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + } + it('honors wcf.conf.js', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(FIXTURES, 'conf')); + return [4 /*yield*/, runGulpTask('wct:sauce')]; + case 1: + _a.sent(); + expect(options.plugins['sauce'].username).to.eq('abc123'); + return [2 /*return*/]; + } + }); + }); }); + it('prefers wcf.conf.json', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + process.chdir(path.join(FIXTURES, 'conf', 'json')); + return [4 /*yield*/, runGulpTask('wct:sauce')]; + case 1: + _a.sent(); + expect(options.plugins['sauce'].username).to.eq('jsonconf'); + return [2 /*return*/]; + } + }); + }); }); + describe('wct:local', function () { + var _this = this; + it('kicks off local tests', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, runGulpTask('wct:local')]; + case 1: + _a.sent(); + expect(steps.runTests).to.have.been.calledOnce; + expect(pluginsCalled).to.have.members(['local']); + return [2 /*return*/]; + } + }); + }); }); + }); + describe('wct:sauce', function () { + var _this = this; + it('kicks off sauce tests', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, runGulpTask('wct:sauce')]; + case 1: + _a.sent(); + expect(steps.runTests).to.have.been.calledOnce; + expect(pluginsCalled).to.have.members(['sauce']); + return [2 /*return*/]; + } + }); + }); }); + }); +}); diff --git a/test/unit/paths.js b/test/unit/paths.js new file mode 100644 index 0000000..e1221de --- /dev/null +++ b/test/unit/paths.js @@ -0,0 +1,227 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ +var chai_1 = require("chai"); +var path = require("path"); +var paths = require("../../runner/paths"); +describe('paths', function () { + describe('.expand', function () { + var _this = this; + var baseDir = path.resolve(__dirname, '../fixtures/paths'); + function expectExpands(patterns, expected) { + return __awaiter(this, void 0, void 0, function () { + var actual; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, paths.expand(baseDir, patterns)]; + case 1: + actual = _a.sent(); + // for non-POSIX support + expected = expected.map(function (str) { return str.replace(/\//g, path.sep); }); + chai_1.expect(actual).to.have.members(expected); + return [2 /*return*/]; + } + }); + }); + } + it('is ok with an empty list', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands([], [])]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + it('ignores explicit files that are missing', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands(['404.js'], [])]; + case 1: + _a.sent(); + return [4 /*yield*/, expectExpands(['404.js', 'foo.html'], ['foo.html'])]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + it('does not expand explicit files', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands(['foo.js'], ['foo.js'])]; + case 1: + _a.sent(); + return [4 /*yield*/, expectExpands(['foo.html'], ['foo.html'])]; + case 2: + _a.sent(); + return [4 /*yield*/, expectExpands(['foo.js', 'foo.html'], ['foo.js', 'foo.html'])]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + it('expands directories into their files', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands(['foo'], ['foo/one.js', 'foo/two.html'])]; + case 1: + _a.sent(); + return [4 /*yield*/, expectExpands(['foo/'], ['foo/one.js', 'foo/two.html'])]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + it('expands directories into index.html when present', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands(['bar'], ['bar/index.html'])]; + case 1: + _a.sent(); + return [4 /*yield*/, expectExpands(['bar/'], ['bar/index.html'])]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + it('expands directories recursively, honoring all rules', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands(['baz'], [ + 'baz/a/fizz.html', + 'baz/b/index.html', + 'baz/a.html', + 'baz/b.js', + ])]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + it('accepts globs for explicit file matches', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands(['baz/*.js'], ['baz/b.js'])]; + case 1: + _a.sent(); + return [4 /*yield*/, expectExpands(['baz/*.html'], ['baz/a.html'])]; + case 2: + _a.sent(); + return [4 /*yield*/, expectExpands(['baz/**/*.js'], [ + 'baz/b/deep/stuff.js', + 'baz/b/one.js', + 'baz/b.js', + ])]; + case 3: + _a.sent(); + return [4 /*yield*/, expectExpands(['baz/**/*.html'], [ + 'baz/a/fizz.html', + 'baz/b/deep/index.html', + 'baz/b/deep/stuff.html', + 'baz/b/index.html', + 'baz/a.html', + ])]; + case 4: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + it('accepts globs for directories, honoring directory behavior', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands(['*'], [ + 'bar/index.html', + 'baz/a/fizz.html', + 'baz/b/index.html', + 'baz/a.html', + 'baz/b.js', + 'foo/one.js', + 'foo/two.html', + 'foo.html', + 'foo.js', + ])]; + case 1: + _a.sent(); + return [4 /*yield*/, expectExpands(['baz/*'], [ + 'baz/a/fizz.html', + 'baz/b/index.html', + 'baz/a.html', + 'baz/b.js', + ])]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + it('deduplicates', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, expectExpands(['bar/a.js', 'bar/*.js', 'bar', 'bar/*.html'], [ + 'bar/a.js', + 'bar/index.html', + 'bar/index.js', + ])]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + }); +}); From 57aa56471d4ab6d23e0530b4b3a47894525fa1ac Mon Sep 17 00:00:00 2001 From: Bharath Chadarajupalli Date: Sun, 22 Mar 2020 18:32:30 -0700 Subject: [PATCH 5/7] Built file --- .gitignore | 19 - browser.js | 19 +- browser.js.map | 2 +- package-lock.json | 14194 +++++++++++++++++++++++++++++--------------- package.json | 45 +- 5 files changed, 9391 insertions(+), 4888 deletions(-) diff --git a/.gitignore b/.gitignore index 43c5cb8..b5b9a90 100644 --- a/.gitignore +++ b/.gitignore @@ -4,23 +4,4 @@ /bower_components /node_modules npm-debug.log -typings/ -runner/*.js -runner/*.d.ts -runner/*.js.map -test/*.js -test/*.d.ts -test/*.js.map -test/unit/*.js -test/unit/*.d.ts -test/unit/*.js.map -test/integration/*.js -test/integration/*.d.ts -test/integration/*.js.map test/fixtures/integration/temp - -browser/*.js -browser/*.js.map -browser/environment/*.js* -browser/mocha/*.js* -browser/reporters/*.js* diff --git a/browser.js b/browser.js index df9e552..86e3842 100644 --- a/browser.js +++ b/browser.js @@ -286,6 +286,23 @@ function _deepMerge(target, source) { }); } +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; /** * @param {function()} callback A function to call when the active web component * frameworks have loaded. @@ -359,7 +376,7 @@ function debug() { if (!get('verbose')) { return; } - var args = [window.location.pathname].concat(var_args); + var args = __spreadArrays([window.location.pathname], var_args); (console.debug || console.log).apply(console, args); } // URL Processing diff --git a/browser.js.map b/browser.js.map index 4f1fb41..1fce23f 100644 --- a/browser.js.map +++ b/browser.js.map @@ -1 +1 @@ -{"version":3,"file":"browser.js.map","sources":["browser/environment/helpers.js","browser/config.js","browser/util.js","browser/childrunner.js","browser/clisocket.js","browser/reporters/console.js","browser/reporters/html.js","browser/reporters/multi.js","browser/reporters/title.js","browser/suites.js","browser/reporters.js","browser/environment.js","browser/environment/errors.js","browser/mocha/extend.js","browser/mocha/fixture.js","browser/mocha/stub.js","browser/mocha/replace.js","browser/mocha.js","browser/index.js"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n// Make sure that we use native timers, in case they're being stubbed out.\nvar nativeSetInterval = window.setInterval;\nvar nativeSetTimeout = window.setTimeout;\nvar nativeRequestAnimationFrame = window.requestAnimationFrame;\n/**\n * Runs `stepFn`, catching any error and passing it to `callback` (Node-style).\n * Otherwise, calls `callback` with no arguments on success.\n *\n * @param {function()} callback\n * @param {function()} stepFn\n */\nfunction safeStep(callback, stepFn) {\n var err;\n try {\n stepFn();\n }\n catch (error) {\n err = error;\n }\n callback(err);\n}\n/**\n * Runs your test at declaration time (before Mocha has begun tests). Handy for\n * when you need to test document initialization.\n *\n * Be aware that any errors thrown asynchronously cannot be tied to your test.\n * You may want to catch them and pass them to the done event, instead. See\n * `safeStep`.\n *\n * @param {string} name The name of the test.\n * @param {function(?function())} testFn The test function. If an argument is\n * accepted, the test will be treated as async, just like Mocha tests.\n */\nfunction testImmediate(name, testFn) {\n if (testFn.length > 0) {\n return testImmediateAsync(name, testFn);\n }\n var err;\n try {\n testFn();\n }\n catch (error) {\n err = error;\n }\n test(name, function (done) {\n done(err);\n });\n}\n/**\n * An async-only variant of `testImmediate`.\n *\n * @param {string} name\n * @param {function(?function())} testFn\n */\nfunction testImmediateAsync(name, testFn) {\n var testComplete = false;\n var err;\n test(name, function (done) {\n var intervalId = nativeSetInterval(function () {\n if (!testComplete)\n return;\n clearInterval(intervalId);\n done(err);\n }, 10);\n });\n try {\n testFn(function (error) {\n if (error)\n err = error;\n testComplete = true;\n });\n }\n catch (error) {\n err = error;\n testComplete = true;\n }\n}\n/**\n * Triggers a flush of any pending events, observations, etc and calls you back\n * after they have been processed.\n *\n * @param {function()} callback\n */\nfunction flush(callback) {\n // Ideally, this function would be a call to Polymer.dom.flush, but that\n // doesn't support a callback yet\n // (https://github.com/Polymer/polymer-dev/issues/851),\n // ...and there's cross-browser flakiness to deal with.\n // Make sure that we're invoking the callback with no arguments so that the\n // caller can pass Mocha callbacks, etc.\n var done = function done() {\n callback();\n };\n // Because endOfMicrotask is flaky for IE, we perform microtask checkpoints\n // ourselves (https://github.com/Polymer/polymer-dev/issues/114):\n var isIE = navigator.appName === 'Microsoft Internet Explorer';\n if (isIE && window.Platform && window.Platform.performMicrotaskCheckpoint) {\n var reallyDone_1 = done;\n done = function doneIE() {\n Platform.performMicrotaskCheckpoint();\n nativeSetTimeout(reallyDone_1, 0);\n };\n }\n // Everyone else gets a regular flush.\n var scope;\n if (window.Polymer && window.Polymer.dom && window.Polymer.dom.flush) {\n scope = window.Polymer.dom;\n }\n else if (window.Polymer && window.Polymer.flush) {\n scope = window.Polymer;\n }\n else if (window.WebComponents && window.WebComponents.flush) {\n scope = window.WebComponents;\n }\n if (scope) {\n scope.flush();\n }\n // Ensure that we are creating a new _task_ to allow all active microtasks to\n // finish (the code you're testing may be using endOfMicrotask, too).\n nativeSetTimeout(done, 0);\n}\n/**\n * Advances a single animation frame.\n *\n * Calls `flush`, `requestAnimationFrame`, `flush`, and `callback` sequentially\n * @param {function()} callback\n */\nfunction animationFrameFlush(callback) {\n flush(function () {\n nativeRequestAnimationFrame(function () {\n flush(callback);\n });\n });\n}\n/**\n * DEPRECATED: Use `flush`.\n * @param {function} callback\n */\nfunction asyncPlatformFlush(callback) {\n console.warn('asyncPlatformFlush is deprecated in favor of the more terse flush()');\n return window.flush(callback);\n}\n/**\n *\n */\nfunction waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime) {\n timeoutTime = timeoutTime || Date.now() + (timeout || 1000);\n intervalOrMutationEl = intervalOrMutationEl || 32;\n try {\n fn();\n }\n catch (e) {\n if (Date.now() > timeoutTime) {\n throw e;\n }\n else {\n if (typeof intervalOrMutationEl !== 'number') {\n intervalOrMutationEl.onMutation(intervalOrMutationEl, function () {\n waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);\n });\n }\n else {\n nativeSetTimeout(function () {\n waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);\n }, intervalOrMutationEl);\n }\n return;\n }\n }\n next();\n}\nwindow.safeStep = safeStep;\nwindow.testImmediate = testImmediate;\nwindow.testImmediateAsync = testImmediateAsync;\nwindow.flush = flush;\nwindow.animationFrameFlush = animationFrameFlush;\nwindow.asyncPlatformFlush = asyncPlatformFlush;\nwindow.waitFor = waitFor;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as util from './util.js';\n/**\n * The global configuration state for WCT's browser client.\n */\nexport var _config = {\n environmentScripts: !!window.__wctUseNpm ?\n [\n 'stacky/browser.js',\n 'async/lib/async.js',\n 'lodash/index.js',\n 'mocha/mocha.js',\n 'chai/chai.js',\n '@polymer/sinonjs/sinon.js',\n 'sinon-chai/lib/sinon-chai.js',\n 'accessibility-developer-tools/dist/js/axs_testing.js',\n '@polymer/test-fixture/test-fixture.js'\n ] :\n [\n 'stacky/browser.js',\n 'async/lib/async.js',\n 'lodash/lodash.js',\n 'mocha/mocha.js',\n 'chai/chai.js',\n 'sinonjs/sinon.js',\n 'sinon-chai/lib/sinon-chai.js',\n 'accessibility-developer-tools/dist/js/axs_testing.js'\n ],\n environmentImports: !!window.__wctUseNpm ? [] :\n ['test-fixture/test-fixture.html'],\n root: null,\n waitForFrameworks: true,\n waitFor: null,\n numConcurrentSuites: 1,\n trackConsoleError: true,\n mochaOptions: { timeout: 10 * 1000 },\n verbose: false,\n};\n/**\n * Merges initial `options` into WCT's global configuration.\n *\n * @param {Object} options The options to merge. See `browser/config.ts` for a\n * reference.\n */\nexport function setup(options) {\n var childRunner = ChildRunner.current();\n if (childRunner) {\n _deepMerge(_config, childRunner.parentScope.WCT._config);\n // But do not force the mocha UI\n delete _config.mochaOptions.ui;\n }\n if (options && typeof options === 'object') {\n _deepMerge(_config, options);\n }\n if (!_config.root) {\n // Sibling dependencies.\n var root = util.scriptPrefix('browser.js');\n _config.root = util.basePath(root.substr(0, root.length - 1));\n if (!_config.root) {\n throw new Error('Unable to detect root URL for WCT sources. Please set WCT.root before including browser.js');\n }\n }\n}\n/**\n * Retrieves a configuration value.\n */\nexport function get(key) {\n return _config[key];\n}\n// Internal\nfunction _deepMerge(target, source) {\n Object.keys(source).forEach(function (key) {\n if (target[key] !== null && typeof target[key] === 'object' &&\n !Array.isArray(target[key])) {\n _deepMerge(target[key], source[key]);\n }\n else {\n target[key] = source[key];\n }\n });\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from './config.js';\n/**\n * @param {function()} callback A function to call when the active web component\n * frameworks have loaded.\n */\nexport function whenFrameworksReady(callback) {\n debug('whenFrameworksReady');\n var done = function () {\n debug('whenFrameworksReady done');\n callback();\n };\n // If webcomponents script is in the document, wait for WebComponentsReady.\n if (window.WebComponents && !window.WebComponents.ready) {\n debug('WebComponentsReady?');\n window.addEventListener('WebComponentsReady', function wcReady() {\n window.removeEventListener('WebComponentsReady', wcReady);\n debug('WebComponentsReady');\n done();\n });\n }\n else {\n done();\n }\n}\n/**\n * @return {string} ' tests' or ' test'.\n */\nexport function pluralizedStat(count, kind) {\n if (count === 1) {\n return count + ' ' + kind + ' test';\n }\n else {\n return count + ' ' + kind + ' tests';\n }\n}\n/**\n * @param {string} path The URI of the script to load.\n * @param {function} done\n */\nexport function loadScript(path, done) {\n var script = document.createElement('script');\n script.src = path;\n if (done) {\n script.onload = done.bind(null, null);\n script.onerror = done.bind(null, 'Failed to load script ' + script.src);\n }\n document.head.appendChild(script);\n}\n/**\n * @param {string} path The URI of the stylesheet to load.\n * @param {function} done\n */\nexport function loadStyle(path, done) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = path;\n if (done) {\n link.onload = done.bind(null, null);\n link.onerror = done.bind(null, 'Failed to load stylesheet ' + link.href);\n }\n document.head.appendChild(link);\n}\n/**\n * @param {...*} var_args Logs values to the console when the `debug`\n * configuration option is true.\n */\nexport function debug() {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n if (!config.get('verbose')) {\n return;\n }\n var args = [window.location.pathname].concat(var_args);\n (console.debug || console.log).apply(console, args);\n}\n// URL Processing\n/**\n * @param {string} url\n * @return {{base: string, params: string}}\n */\nexport function parseUrl(url) {\n var parts = url.match(/^(.*?)(?:\\?(.*))?$/);\n return {\n base: parts[1],\n params: getParams(parts[2] || ''),\n };\n}\n/**\n * Expands a URL that may or may not be relative to `base`.\n *\n * @param {string} url\n * @param {string} base\n * @return {string}\n */\nexport function expandUrl(url, base) {\n if (!base)\n return url;\n if (url.match(/^(\\/|https?:\\/\\/)/))\n return url;\n if (base.substr(base.length - 1) !== '/') {\n base = base + '/';\n }\n return base + url;\n}\n/**\n * @param {string=} opt_query A query string to parse.\n * @return {!Object>} All params on the URL's query.\n */\nexport function getParams(query) {\n query = typeof query === 'string' ? query : window.location.search;\n if (query.substring(0, 1) === '?') {\n query = query.substring(1);\n }\n // python's SimpleHTTPServer tacks a `/` on the end of query strings :(\n if (query.slice(-1) === '/') {\n query = query.substring(0, query.length - 1);\n }\n if (query === '')\n return {};\n var result = {};\n query.split('&').forEach(function (part) {\n var pair = part.split('=');\n if (pair.length !== 2) {\n console.warn('Invalid URL query part:', part);\n return;\n }\n var key = decodeURIComponent(pair[0]);\n var value = decodeURIComponent(pair[1]);\n if (!result[key]) {\n result[key] = [];\n }\n result[key].push(value);\n });\n return result;\n}\n/**\n * Merges params from `source` into `target` (mutating `target`).\n *\n * @param {!Object>} target\n * @param {!Object>} source\n */\nexport function mergeParams(target, source) {\n Object.keys(source).forEach(function (key) {\n if (!(key in target)) {\n target[key] = [];\n }\n target[key] = target[key].concat(source[key]);\n });\n}\n/**\n * @param {string} param The param to return a value for.\n * @return {?string} The first value for `param`, if found.\n */\nexport function getParam(param) {\n var params = getParams();\n return params[param] ? params[param][0] : null;\n}\n/**\n * @param {!Object>} params\n * @return {string} `params` encoded as a URI query.\n */\nexport function paramsToQuery(params) {\n var pairs = [];\n Object.keys(params).forEach(function (key) {\n params[key].forEach(function (value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n });\n return (pairs.length > 0) ? ('?' + pairs.join('&')) : '';\n}\nfunction getPathName(location) {\n return typeof location === 'string' ? location : location.pathname;\n}\nexport function basePath(location) {\n return getPathName(location).match(/^.*\\//)[0];\n}\nexport function relativeLocation(location, basePath) {\n var path = getPathName(location);\n if (path.indexOf(basePath) === 0) {\n path = path.substring(basePath.length);\n }\n return path;\n}\nexport function cleanLocation(location) {\n var path = getPathName(location);\n if (path.slice(-11) === '/index.html') {\n path = path.slice(0, path.length - 10);\n }\n return path;\n}\nexport function parallel(runners, maybeLimit, done) {\n var limit;\n if (typeof maybeLimit !== 'number') {\n done = maybeLimit;\n limit = 0;\n }\n else {\n limit = maybeLimit;\n }\n if (!runners.length) {\n return done();\n }\n var called = false;\n var total = runners.length;\n var numActive = 0;\n var numDone = 0;\n function runnerDone(error) {\n if (called) {\n return;\n }\n numDone = numDone + 1;\n numActive = numActive - 1;\n if (error || numDone >= total) {\n called = true;\n done(error);\n }\n else {\n runOne();\n }\n }\n function runOne() {\n if (limit && numActive >= limit) {\n return;\n }\n if (!runners.length) {\n return;\n }\n numActive = numActive + 1;\n runners.shift()(runnerDone);\n }\n runners.forEach(runOne);\n}\n/**\n * Finds the directory that a loaded script is hosted on.\n *\n * @param {string} filename\n * @return {string?}\n */\nexport function scriptPrefix(filename) {\n var scripts = document.querySelectorAll('script[src*=\"' + filename + '\"]');\n if (scripts.length !== 1) {\n return null;\n }\n var script = scripts[0].src;\n return script.substring(0, script.indexOf(filename));\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from './util.js';\n/**\n * A Mocha suite (or suites) run within a child iframe, but reported as if they\n * are part of the current context.\n */\nvar ChildRunner = /** @class */ (function () {\n function ChildRunner(url, parentScope) {\n this.eventListenersToRemoveOnClean = [];\n this.parentScope = parentScope;\n var urlBits = util.parseUrl(url);\n util.mergeParams(urlBits.params, util.getParams(parentScope.location.search));\n delete urlBits.params.cli_browser_id;\n this.url = \"\" + urlBits.base + util.paramsToQuery(urlBits.params);\n this.state = 'initializing';\n }\n /**\n * Listeners added using this method will be removed on done()\n *\n * @param type event type\n * @param listener object which receives a notification\n * @param target event target\n */\n ChildRunner.prototype.addEventListener = function (type, listener, target) {\n target.addEventListener(type, listener);\n var descriptor = { target: target, type: type, listener: listener };\n this.eventListenersToRemoveOnClean.push(descriptor);\n };\n /**\n * Removes all event listeners added by a method addEventListener defined\n * on an instance of ChildRunner.\n */\n ChildRunner.prototype.removeAllEventListeners = function () {\n this.eventListenersToRemoveOnClean.forEach(function (_a) {\n var target = _a.target, type = _a.type, listener = _a.listener;\n return target.removeEventListener(type, listener);\n });\n };\n /**\n * @return {ChildRunner} The `ChildRunner` that was registered for this\n * window.\n */\n ChildRunner.current = function () {\n return ChildRunner.get(window);\n };\n /**\n * @param {!Window} target A window to find the ChildRunner of.\n * @param {boolean} traversal Whether this is a traversal from a child window.\n * @return {ChildRunner} The `ChildRunner` that was registered for `target`.\n */\n ChildRunner.get = function (target, traversal) {\n var childRunner = ChildRunner.byUrl[target.location.href];\n if (childRunner) {\n return childRunner;\n }\n if (window.parent === window) {\n // Top window.\n if (traversal) {\n console.warn('Subsuite loaded but was never registered. This most likely is due to wonky history behavior. Reloading...');\n window.location.reload();\n }\n return null;\n }\n // Otherwise, traverse.\n return window.parent.WCT._ChildRunner.get(target, true);\n };\n /**\n * Loads and runs the subsuite.\n *\n * @param {function} done Node-style callback.\n */\n ChildRunner.prototype.run = function (done) {\n var _this = this;\n util.debug('ChildRunner#run', this.url);\n this.state = 'loading';\n this.onRunComplete = done;\n this.container = document.getElementById('subsuites');\n if (!this.container) {\n var container_1 = (this.container = document.createElement('div'));\n container_1.id = 'subsuites';\n document.body.appendChild(container_1);\n }\n var container = this.container;\n var iframe = (this.iframe = document.createElement('iframe'));\n iframe.classList.add('subsuite');\n iframe.src = this.url;\n // Let the iframe expand the URL for us.\n var url = (this.url = iframe.src);\n container.appendChild(iframe);\n ChildRunner.byUrl[url] = this;\n this.timeoutId = setTimeout(function () { return _this.loaded(new Error('Timed out loading ' + url)); }, ChildRunner.loadTimeout);\n this.addEventListener('error', function () { return _this.loaded(new Error('Failed to load document ' + _this.url)); }, iframe);\n this.addEventListener('DOMContentLoaded', function () { return _this.loaded(); }, iframe.contentWindow);\n };\n /**\n * Called when the sub suite's iframe has loaded (or errored during load).\n *\n * @param {*} error The error that occured, if any.\n */\n ChildRunner.prototype.loaded = function (error) {\n util.debug('ChildRunner#loaded', this.url, error);\n if (this.iframe.contentWindow == null && error) {\n this.signalRunComplete(error);\n this.done();\n return;\n }\n // Not all targets have WCT loaded (compatiblity mode)\n if (this.iframe.contentWindow.WCT) {\n this.share = this.iframe.contentWindow.WCT.share;\n }\n if (error) {\n this.signalRunComplete(error);\n this.done();\n }\n };\n /**\n * Called in mocha/run.js when all dependencies have loaded, and the child is\n * ready to start running tests\n *\n * @param {*} error The error that occured, if any.\n */\n ChildRunner.prototype.ready = function (error) {\n util.debug('ChildRunner#ready', this.url, error);\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n if (error) {\n this.signalRunComplete(error);\n this.done();\n }\n };\n /**\n * Called when the sub suite's tests are complete, so that it can clean up.\n */\n ChildRunner.prototype.done = function () {\n var _this = this;\n util.debug('ChildRunner#done', this.url, arguments);\n // Make sure to clear that timeout.\n this.ready();\n this.signalRunComplete();\n if (this.iframe) {\n // Be safe and avoid potential browser crashes when logic attempts to\n // interact with the removed iframe.\n setTimeout(function () {\n _this.removeAllEventListeners();\n _this.container.removeChild(_this.iframe);\n _this.iframe = undefined;\n _this.share = null;\n }, 0);\n }\n };\n ChildRunner.prototype.signalRunComplete = function (error) {\n if (this.onRunComplete) {\n this.state = 'complete';\n this.onRunComplete(error);\n this.onRunComplete = null;\n }\n };\n // ChildRunners get a pretty generous load timeout by default.\n ChildRunner.loadTimeout = 60000;\n // We can't maintain properties on iframe elements in Firefox/Safari/???, so\n // we track childRunners by URL.\n ChildRunner.byUrl = {};\n return ChildRunner;\n}());\nexport default ChildRunner;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as util from './util.js';\nvar SOCKETIO_ENDPOINT = window.location.protocol + '//' + window.location.host;\nvar SOCKETIO_LIBRARY = SOCKETIO_ENDPOINT + '/socket.io/socket.io.js';\n/**\n * A socket for communication between the CLI and browser runners.\n *\n * @param {string} browserId An ID generated by the CLI runner.\n * @param {!io.Socket} socket The socket.io `Socket` to communicate over.\n */\nvar CLISocket = /** @class */ (function () {\n function CLISocket(browserId, socket) {\n this.browserId = browserId;\n this.socket = socket;\n }\n /**\n * @param {!Mocha.Runner} runner The Mocha `Runner` to observe, reporting\n * interesting events back to the CLI runner.\n */\n CLISocket.prototype.observe = function (runner) {\n var _this = this;\n this.emitEvent('browser-start', {\n url: window.location.toString(),\n });\n // We only emit a subset of events that we care about, and follow a more\n // general event format that is hopefully applicable to test runners beyond\n // mocha.\n //\n // For all possible mocha events, see:\n // https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36\n runner.on('test', function (test) {\n _this.emitEvent('test-start', { test: getTitles(test) });\n });\n runner.on('test end', function (test) {\n _this.emitEvent('test-end', {\n state: getState(test),\n test: getTitles(test),\n duration: test.duration,\n error: test.err,\n });\n });\n runner.on('fail', function (test, err) {\n // fail the test run if we catch errors outside of a test function\n if (test.type !== 'test') {\n _this.emitEvent('browser-fail', 'Error thrown outside of test function: ' + err.stack);\n }\n });\n runner.on('childRunner start', function (childRunner) {\n _this.emitEvent('sub-suite-start', childRunner.share);\n });\n runner.on('childRunner end', function (childRunner) {\n _this.emitEvent('sub-suite-end', childRunner.share);\n });\n runner.on('end', function () {\n _this.emitEvent('browser-end');\n });\n };\n /**\n * @param {string} event The name of the event to fire.\n * @param {*} data Additional data to pass with the event.\n */\n CLISocket.prototype.emitEvent = function (event, data) {\n this.socket.emit('client-event', {\n browserId: this.browserId,\n event: event,\n data: data,\n });\n };\n /**\n * Builds a `CLISocket` if we are within a CLI-run environment; short-circuits\n * otherwise.\n *\n * @param {function(*, CLISocket)} done Node-style callback.\n */\n CLISocket.init = function (done) {\n var browserId = util.getParam('cli_browser_id');\n if (!browserId)\n return done();\n // Only fire up the socket for root runners.\n if (ChildRunner.current())\n return done();\n util.loadScript(SOCKETIO_LIBRARY, function (error) {\n if (error)\n return done(error);\n var socket = io(SOCKETIO_ENDPOINT);\n socket.on('error', function (error) {\n socket.off();\n done(error);\n });\n socket.on('connect', function () {\n socket.off();\n done(null, new CLISocket(browserId, socket));\n });\n });\n };\n return CLISocket;\n}());\nexport default CLISocket;\n// Misc Utility\n/**\n * @param {!Mocha.Runnable} runnable The test or suite to extract titles from.\n * @return {!Array.} The titles of the runnable and its parents.\n */\nfunction getTitles(runnable) {\n var titles = [];\n while (runnable && !runnable.root && runnable.title) {\n titles.unshift(runnable.title);\n runnable = runnable.parent;\n }\n return titles;\n}\n/**\n * @param {!Mocha.Runnable} runnable\n * @return {string}\n */\nfunction getState(runnable) {\n if (runnable.state === 'passed') {\n return 'passing';\n }\n else if (runnable.state === 'failed') {\n return 'failing';\n }\n else if (runnable.pending) {\n return 'pending';\n }\n else {\n return 'unknown';\n }\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\n// We capture console events when running tests; so make sure we have a\n// reference to the original one.\nvar console = window.console;\nvar FONT = ';font: normal 13px \"Roboto\", \"Helvetica Neue\", \"Helvetica\", sans-serif;';\nvar STYLES = {\n plain: FONT,\n suite: 'color: #5c6bc0' + FONT,\n test: FONT,\n passing: 'color: #259b24' + FONT,\n pending: 'color: #e65100' + FONT,\n failing: 'color: #c41411' + FONT,\n stack: 'color: #c41411',\n results: FONT + 'font-size: 16px',\n};\n// I don't think we can feature detect this one...\nvar userAgent = navigator.userAgent.toLowerCase();\nvar CAN_STYLE_LOG = userAgent.match('firefox') || userAgent.match('webkit');\nvar CAN_STYLE_GROUP = userAgent.match('webkit');\n// Track the indent for faked `console.group`\nvar logIndent = '';\nfunction log(text, style) {\n text = text.split('\\n')\n .map(function (l) {\n return logIndent + l;\n })\n .join('\\n');\n if (CAN_STYLE_LOG) {\n console.log('%c' + text, STYLES[style] || STYLES.plain);\n }\n else {\n console.log(text);\n }\n}\nfunction logGroup(text, style) {\n if (CAN_STYLE_GROUP) {\n console.group('%c' + text, STYLES[style] || STYLES.plain);\n }\n else if (console.group) {\n console.group(text);\n }\n else {\n logIndent = logIndent + ' ';\n log(text, style);\n }\n}\nfunction logGroupEnd() {\n if (console.groupEnd) {\n console.groupEnd();\n }\n else {\n logIndent = logIndent.substr(0, logIndent.length - 2);\n }\n}\nfunction logException(error) {\n log(error.stack || error.message || (error + ''), 'stack');\n}\n/**\n * A Mocha reporter that logs results out to the web `console`.\n */\nvar Console = /** @class */ (function () {\n /**\n * @param runner The runner that is being reported on.\n */\n function Console(runner) {\n Mocha.reporters.Base.call(this, runner);\n runner.on('suite', function (suite) {\n if (suite.root) {\n return;\n }\n logGroup(suite.title, 'suite');\n }.bind(this));\n runner.on('suite end', function (suite) {\n if (suite.root) {\n return;\n }\n logGroupEnd();\n }.bind(this));\n runner.on('test', function (test) {\n logGroup(test.title, 'test');\n }.bind(this));\n runner.on('pending', function (test) {\n logGroup(test.title, 'pending');\n }.bind(this));\n runner.on('fail', function (_test, error) {\n logException(error);\n }.bind(this));\n runner.on('test end', function (_test) {\n logGroupEnd();\n }.bind(this));\n runner.on('end', this.logSummary.bind(this));\n }\n /** Prints out a final summary of test results. */\n Console.prototype.logSummary = function () {\n logGroup('Test Results', 'results');\n if (this.stats.failures > 0) {\n log(util.pluralizedStat(this.stats.failures, 'failing'), 'failing');\n }\n if (this.stats.pending > 0) {\n log(util.pluralizedStat(this.stats.pending, 'pending'), 'pending');\n }\n log(util.pluralizedStat(this.stats.passes, 'passing'));\n if (!this.stats.failures) {\n log('test suite passed', 'passing');\n }\n log('Evaluated ' + this.stats.tests + ' tests in ' +\n this.stats.duration + 'ms.');\n logGroupEnd();\n };\n return Console;\n}());\nexport default Console;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * WCT-specific behavior on top of Mocha's default HTML reporter.\n *\n * @param {!Mocha.Runner} runner The runner that is being reported on.\n */\nexport default function HTML(runner) {\n var output = document.createElement('div');\n output.id = 'mocha';\n document.body.appendChild(output);\n runner.on('suite', function (_test) {\n this.total = runner.total;\n }.bind(this));\n Mocha.reporters.HTML.call(this, runner);\n}\n// Woo! What a hack. This just saves us from adding a bunch of complexity around\n// style loading.\nvar style = document.createElement('style');\nstyle.textContent = \"\\n html, body {\\n position: relative;\\n height: 100%;\\n width: 100%;\\n min-width: 900px;\\n }\\n #mocha, #subsuites {\\n height: 100%;\\n position: absolute;\\n top: 0;\\n }\\n #mocha {\\n box-sizing: border-box;\\n margin: 0 !important;\\n padding: 60px 20px;\\n right: 0;\\n left: 500px;\\n }\\n #subsuites {\\n -ms-flex-direction: column;\\n -webkit-flex-direction: column;\\n display: -ms-flexbox;\\n display: -webkit-flex;\\n display: flex;\\n flex-direction: column;\\n left: 0;\\n width: 500px;\\n }\\n #subsuites .subsuite {\\n border: 0;\\n width: 100%;\\n height: 100%;\\n }\\n #mocha .test.pass .duration {\\n color: #555 !important;\\n }\\n\";\ndocument.head.appendChild(style);\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\nvar STACKY_CONFIG = {\n indent: ' ',\n locationStrip: [\n /^https?:\\/\\/[^\\/]+/,\n /\\?.*$/,\n ],\n filter: function (line) {\n return !!line.location.match(/\\/web-component-tester\\/[^\\/]+(\\?.*)?$/);\n },\n};\n// https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36-46\nvar MOCHA_EVENTS = [\n 'start',\n 'end',\n 'suite',\n 'suite end',\n 'test',\n 'test end',\n 'hook',\n 'hook end',\n 'pass',\n 'fail',\n 'pending',\n 'childRunner end'\n];\n// Until a suite has loaded, we assume this many tests in it.\nvar ESTIMATED_TESTS_PER_SUITE = 3;\n/**\n * A Mocha-like reporter that combines the output of multiple Mocha suites.\n */\nvar MultiReporter = /** @class */ (function () {\n /**\n * @param numSuites The number of suites that will be run, in order to\n * estimate the total number of tests that will be performed.\n * @param reporters The set of reporters that\n * should receive the unified event stream.\n * @param parent The parent reporter, if present.\n */\n function MultiReporter(numSuites, reporters, parent) {\n var _this = this;\n this.reporters = reporters.map(function (reporter) {\n return new reporter(_this);\n });\n this.parent = parent;\n this.basePath = parent && parent.basePath || util.basePath(window.location);\n this.total = numSuites * ESTIMATED_TESTS_PER_SUITE;\n // Mocha reporters assume a stream of events, so we have to be careful to\n // only report on one runner at a time...\n this.currentRunner = null;\n // ...while we buffer events for any other active runners.\n this.pendingEvents = [];\n this.emit('start');\n }\n /**\n * @param location The location this reporter represents.\n * @return A reporter-like \"class\" for each child suite\n * that should be passed to `mocha.run`.\n */\n MultiReporter.prototype.childReporter = function (location) {\n var _a;\n var name = this.suiteTitle(location);\n // The reporter is used as a constructor, so we can't depend on `this` being\n // properly bound.\n var self = this;\n return _a = /** @class */ (function () {\n function ChildReporter(runner) {\n runner.name = window.name;\n self.bindChildRunner(runner);\n }\n return ChildReporter;\n }()),\n _a.title = window.name,\n _a;\n };\n /** Must be called once all runners have finished. */\n MultiReporter.prototype.done = function () {\n this.complete = true;\n this.flushPendingEvents();\n this.emit('end');\n };\n /**\n * Emit a top level test that is not part of any suite managed by this\n * reporter.\n *\n * Helpful for reporting on global errors, loading issues, etc.\n *\n * @param title The title of the test.\n * @param error An error associated with this test. If falsy, test is\n * considered to be passing.\n * @param suiteTitle Title for the suite that's wrapping the test.\n * @param estimated If this test was included in the original\n * estimate of `numSuites`.\n */\n MultiReporter.prototype.emitOutOfBandTest = function (title, error, suiteTitle, estimated) {\n util.debug('MultiReporter#emitOutOfBandTest(', arguments, ')');\n var root = new Mocha.Suite(suiteTitle || '');\n var test = new Mocha.Test(title, function () { });\n test.parent = root;\n test.state = error ? 'failed' : 'passed';\n test.err = error;\n if (!estimated) {\n this.total = this.total + ESTIMATED_TESTS_PER_SUITE;\n }\n var runner = { total: 1 };\n this.proxyEvent('start', runner);\n this.proxyEvent('suite', runner, root);\n this.proxyEvent('test', runner, test);\n if (error) {\n this.proxyEvent('fail', runner, test, error);\n }\n else {\n this.proxyEvent('pass', runner, test);\n }\n this.proxyEvent('test end', runner, test);\n this.proxyEvent('suite end', runner, root);\n this.proxyEvent('end', runner);\n };\n /**\n * @param {!Location|string} location\n * @return {string}\n */\n MultiReporter.prototype.suiteTitle = function (location) {\n var path = util.relativeLocation(location, this.basePath);\n path = util.cleanLocation(path);\n return path;\n };\n // Internal Interface\n /** @param {!Mocha.runners.Base} runner The runner to listen to events for. */\n MultiReporter.prototype.bindChildRunner = function (runner) {\n var _this = this;\n MOCHA_EVENTS.forEach(function (eventName) {\n runner.on(eventName, _this.proxyEvent.bind(_this, eventName, runner));\n });\n };\n /**\n * Evaluates an event fired by `runner`, proxying it forward or buffering it.\n *\n * @param {string} eventName\n * @param {!Mocha.runners.Base} runner The runner that emitted this event.\n * @param {...*} var_args Any additional data passed as part of the event.\n */\n MultiReporter.prototype.proxyEvent = function (eventName, runner) {\n var _args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _args[_i - 2] = arguments[_i];\n }\n var extraArgs = Array.prototype.slice.call(arguments, 2);\n if (this.complete) {\n console.warn('out of order Mocha event for ' + runner.name + ':', eventName, extraArgs);\n return;\n }\n if (this.currentRunner && runner !== this.currentRunner) {\n this.pendingEvents.push(Array.prototype.slice.call(arguments));\n return;\n }\n util.debug('MultiReporter#proxyEvent(', arguments, ')');\n // This appears to be a Mocha bug: Tests failed by passing an error to their\n // done function don't set `err` properly.\n //\n // TODO(nevir): Track down.\n if (eventName === 'fail' && !extraArgs[0].err) {\n extraArgs[0].err = extraArgs[1];\n }\n if (eventName === 'start') {\n this.onRunnerStart(runner);\n }\n else if (eventName === 'end') {\n this.onRunnerEnd(runner);\n }\n else {\n this.cleanEvent(eventName, runner, extraArgs);\n this.emit.apply(this, [eventName].concat(extraArgs));\n }\n };\n /**\n * Cleans or modifies an event if needed.\n *\n * @param eventName\n * @param runner The runner that emitted this event.\n * @param extraArgs\n */\n MultiReporter.prototype.cleanEvent = function (eventName, _runner, extraArgs) {\n // Suite hierarchy\n if (extraArgs[0]) {\n extraArgs[0] = this.showRootSuite(extraArgs[0]);\n }\n // Normalize errors\n if (eventName === 'fail') {\n extraArgs[1] = Stacky.normalize(extraArgs[1], STACKY_CONFIG);\n }\n if (extraArgs[0] && extraArgs[0].err) {\n extraArgs[0].err = Stacky.normalize(extraArgs[0].err, STACKY_CONFIG);\n }\n };\n /**\n * We like to show the root suite's title, which requires a little bit of\n * trickery in the suite hierarchy.\n *\n * @param {!Mocha.Runnable} node\n */\n MultiReporter.prototype.showRootSuite = function (node) {\n var leaf = node = Object.create(node);\n while (node && node.parent) {\n var wrappedParent = Object.create(node.parent);\n node.parent = wrappedParent;\n node = wrappedParent;\n }\n node.root = false;\n return leaf;\n };\n /** @param {!Mocha.runners.Base} runner */\n MultiReporter.prototype.onRunnerStart = function (runner) {\n util.debug('MultiReporter#onRunnerStart:', runner.name);\n this.total = this.total - ESTIMATED_TESTS_PER_SUITE + runner.total;\n this.currentRunner = runner;\n };\n /** @param {!Mocha.runners.Base} runner */\n MultiReporter.prototype.onRunnerEnd = function (runner) {\n util.debug('MultiReporter#onRunnerEnd:', runner.name);\n this.currentRunner = null;\n this.flushPendingEvents();\n };\n /**\n * Flushes any buffered events and runs them through `proxyEvent`. This will\n * loop until all buffered runners are complete, or we have run out of\n * buffered events.\n */\n MultiReporter.prototype.flushPendingEvents = function () {\n var _this = this;\n var events = this.pendingEvents;\n this.pendingEvents = [];\n events.forEach(function (eventArgs) {\n _this.proxyEvent.apply(_this, eventArgs);\n });\n };\n return MultiReporter;\n}());\nexport default MultiReporter;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\nvar ARC_OFFSET = 0; // start at the right.\nvar ARC_WIDTH = 6;\n/**\n * A Mocha reporter that updates the document's title and favicon with\n * at-a-glance stats.\n *\n * @param {!Mocha.Runner} runner The runner that is being reported on.\n */\nvar Title = /** @class */ (function () {\n function Title(runner) {\n Mocha.reporters.Base.call(this, runner);\n runner.on('test end', this.report.bind(this));\n }\n /** Reports current stats via the page title and favicon. */\n Title.prototype.report = function () {\n this.updateTitle();\n this.updateFavicon();\n };\n /** Updates the document title with a summary of current stats. */\n Title.prototype.updateTitle = function () {\n if (this.stats.failures > 0) {\n document.title = util.pluralizedStat(this.stats.failures, 'failing');\n }\n else {\n document.title = util.pluralizedStat(this.stats.passes, 'passing');\n }\n };\n /** Updates the document's favicon w/ a summary of current stats. */\n Title.prototype.updateFavicon = function () {\n var canvas = document.createElement('canvas');\n canvas.height = canvas.width = 32;\n var context = canvas.getContext('2d');\n var passing = this.stats.passes;\n var pending = this.stats.pending;\n var failing = this.stats.failures;\n var total = Math.max(this.runner.total, passing + pending + failing);\n drawFaviconArc(context, total, 0, passing, '#0e9c57');\n drawFaviconArc(context, total, passing, pending, '#f3b300');\n drawFaviconArc(context, total, pending + passing, failing, '#ff5621');\n this.setFavicon(canvas.toDataURL());\n };\n /** Sets the current favicon by URL. */\n Title.prototype.setFavicon = function (url) {\n var current = document.head.querySelector('link[rel=\"icon\"]');\n if (current) {\n document.head.removeChild(current);\n }\n var link = document.createElement('link');\n link.rel = 'icon';\n link.type = 'image/x-icon';\n link.href = url;\n link.setAttribute('sizes', '32x32');\n document.head.appendChild(link);\n };\n return Title;\n}());\nexport default Title;\n/**\n * Draws an arc for the favicon status, relative to the total number of tests.\n */\nfunction drawFaviconArc(context, total, start, length, color) {\n var arcStart = ARC_OFFSET + Math.PI * 2 * (start / total);\n var arcEnd = ARC_OFFSET + Math.PI * 2 * ((start + length) / total);\n context.beginPath();\n context.strokeStyle = color;\n context.lineWidth = ARC_WIDTH;\n context.arc(16, 16, 16 - ARC_WIDTH / 2, arcStart, arcEnd);\n context.stroke();\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as config from './config.js';\nimport * as util from './util.js';\nexport var htmlSuites = [];\nexport var jsSuites = [];\n// We process grep ourselves to avoid loading suites that will be filtered.\nvar GREP = util.getParam('grep');\n// work around mocha bug (https://github.com/mochajs/mocha/issues/2070)\nif (GREP) {\n GREP = GREP.replace(/\\\\\\./g, '.');\n}\n/**\n * Loads suites of tests, supporting both `.js` and `.html` files.\n *\n * @param files The files to load.\n */\nexport function loadSuites(files) {\n files.forEach(function (file) {\n if (/\\.js(\\?.*)?$/.test(file)) {\n jsSuites.push(file);\n }\n else if (/\\.html(\\?.*)?$/.test(file)) {\n htmlSuites.push(file);\n }\n else {\n throw new Error('Unknown resource type: ' + file);\n }\n });\n}\n/**\n * @return The child suites that should be loaded, ignoring\n * those that would not match `GREP`.\n */\nexport function activeChildSuites() {\n var subsuites = htmlSuites;\n if (GREP) {\n var cleanSubsuites = [];\n for (var i = 0, subsuite = void 0; subsuite = subsuites[i]; i++) {\n if (GREP.indexOf(util.cleanLocation(subsuite)) !== -1) {\n cleanSubsuites.push(subsuite);\n }\n }\n subsuites = cleanSubsuites;\n }\n return subsuites;\n}\n/**\n * Loads all `.js` sources requested by the current suite.\n */\nexport function loadJsSuites(_reporter, done) {\n util.debug('loadJsSuites', jsSuites);\n var loaders = jsSuites.map(function (file) {\n // We only support `.js` dependencies for now.\n return util.loadScript.bind(util, file);\n });\n util.parallel(loaders, done);\n}\nexport function runSuites(reporter, childSuites, done) {\n util.debug('runSuites');\n var suiteRunners = [\n // Run the local tests (if any) first, not stopping on error;\n _runMocha.bind(null, reporter),\n ];\n // As well as any sub suites. Again, don't stop on error.\n childSuites.forEach(function (file) {\n suiteRunners.push(function (next) {\n var childRunner = new ChildRunner(file, window);\n reporter.emit('childRunner start', childRunner);\n childRunner.run(function (error) {\n reporter.emit('childRunner end', childRunner);\n if (error)\n reporter.emitOutOfBandTest(file, error);\n next();\n });\n });\n });\n util.parallel(suiteRunners, config.get('numConcurrentSuites'), function (error) {\n reporter.done();\n done(error);\n });\n}\n/**\n * Kicks off a mocha run, waiting for frameworks to load if necessary.\n *\n * @param {!MultiReporter} reporter Where to send Mocha's events.\n * @param {function} done A callback fired, _no error is passed_.\n */\nfunction _runMocha(reporter, done, waited) {\n if (config.get('waitForFrameworks') && !waited) {\n var waitFor = (config.get('waitFor') || util.whenFrameworksReady).bind(window);\n waitFor(_runMocha.bind(null, reporter, done, true));\n return;\n }\n util.debug('_runMocha');\n var mocha = window.mocha;\n var Mocha = window.Mocha;\n mocha.reporter(reporter.childReporter(window.location));\n mocha.suite.title = reporter.suiteTitle(window.location);\n mocha.grep(GREP);\n // We can't use `mocha.run` because it bashes over grep, invert, and friends.\n // See https://github.com/visionmedia/mocha/blob/master/support/tail.js#L137\n var runner = Mocha.prototype.run.call(mocha, function (_error) {\n if (document.getElementById('mocha')) {\n Mocha.utils.highlightTags('code');\n }\n done(); // We ignore the Mocha failure count.\n });\n // Mocha's default `onerror` handling strips the stack (to support really old\n // browsers). We upgrade this to get better stacks for async errors.\n //\n // TODO(nevir): Can we expand support to other browsers?\n if (navigator.userAgent.match(/chrome/i)) {\n window.onerror = null;\n window.addEventListener('error', function (event) {\n if (!event.error)\n return;\n if (event.error.ignore)\n return;\n if (window.uncaughtErrorFilter && window.uncaughtErrorFilter(event)) {\n event.preventDefault();\n return;\n }\n runner.uncaught(event.error);\n });\n }\n else {\n window.onerror = null;\n window.addEventListener('error', function (event) {\n if (window.uncaughtErrorFilter && window.uncaughtErrorFilter(event)) {\n event.preventDefault();\n return;\n }\n runner.uncaught(event.error);\n });\n }\n}\n","import ConsoleReporter from './reporters/console.js';\nimport HTMLReporter from './reporters/html.js';\nimport MultiReporter from './reporters/multi.js';\nimport TitleReporter from './reporters/title.js';\nimport * as suites from './suites.js';\nexport var htmlSuites = [];\nexport var jsSuites = [];\n/**\n * @param {CLISocket} socket The CLI socket, if present.\n * @param {MultiReporter} parent The parent reporter, if present.\n * @return {!Array. 0 || suites.jsSuites.length > 0) {\n reporters.push(HTMLReporter);\n }\n return reporters;\n}\n/**\n * Yeah, hideous, but this allows us to be loaded before Mocha, which is handy.\n */\nexport function injectMocha(Mocha) {\n _injectPrototype(ConsoleReporter, Mocha.reporters.Base.prototype);\n _injectPrototype(HTMLReporter, Mocha.reporters.HTML.prototype);\n // Mocha doesn't expose its `EventEmitter` shim directly, so:\n _injectPrototype(MultiReporter, Object.getPrototypeOf(Mocha.Runner.prototype));\n}\nfunction _injectPrototype(klass, prototype) {\n var newPrototype = Object.create(prototype);\n // Only support\n Object.keys(klass.prototype).forEach(function (key) {\n newPrototype[key] = klass.prototype[key];\n });\n klass.prototype = newPrototype;\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from './config.js';\nimport * as reporters from './reporters.js';\nimport * as util from './util.js';\n/**\n * Loads all environment scripts ...synchronously ...after us.\n */\nexport function loadSync() {\n util.debug('Loading environment scripts:');\n var a11ySuiteScriptPath = 'web-component-tester/data/a11ySuite.js';\n var scripts = config.get('environmentScripts');\n var a11ySuiteWillBeLoaded = window.__generatedByWct || scripts.indexOf(a11ySuiteScriptPath) > -1;\n // We can't inject a11ySuite when running the npm version because it is a\n // module-based script that needs `'); // jshint ignore:line\n });\n util.debug('Environment scripts loaded');\n var imports = config.get('environmentImports');\n imports.forEach(function (path) {\n var url = util.expandUrl(path, config.get('root'));\n util.debug('Loading environment import:', url);\n // Synchronous load.\n document.write(''); // jshint ignore:line\n });\n util.debug('Environment imports loaded');\n}\n/**\n * We have some hard dependencies on things that should be loaded via\n * `environmentScripts`, so we assert that they're present here; and do any\n * post-facto setup.\n */\nexport function ensureDependenciesPresent() {\n _ensureMocha();\n _checkChai();\n}\nfunction _ensureMocha() {\n var Mocha = window.Mocha;\n if (!Mocha) {\n throw new Error('WCT requires Mocha. Please ensure that it is present in WCT.environmentScripts, or that you load it before loading web-component-tester/browser.js');\n }\n reporters.injectMocha(Mocha);\n // Magic loading of mocha's stylesheet\n var mochaPrefix = util.scriptPrefix('mocha.js');\n // only load mocha stylesheet for the test runner output\n // Not the end of the world, if it doesn't load.\n if (mochaPrefix && window.top === window.self) {\n util.loadStyle(mochaPrefix + 'mocha.css');\n }\n}\nfunction _checkChai() {\n if (!window.chai) {\n util.debug('Chai not present; not registering shorthands');\n return;\n }\n window.assert = window.chai.assert;\n window.expect = window.chai.expect;\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from '../config.js';\n// We may encounter errors during initialization (for example, syntax errors in\n// a test file). Hang onto those (and more) until we are ready to report them.\nexport var globalErrors = [];\n/**\n * Hook the environment to pick up on global errors.\n */\nexport function listenForErrors() {\n window.addEventListener('error', function (event) {\n globalErrors.push(event.error);\n });\n // Also, we treat `console.error` as a test failure. Unless you prefer not.\n var origConsole = console;\n var origError = console.error;\n console.error = function wctShimmedError() {\n origError.apply(origConsole, arguments);\n if (config.get('trackConsoleError')) {\n throw 'console.error: ' + Array.prototype.join.call(arguments, ' ');\n }\n };\n}\n","var interfaceExtensions = [];\n/**\n * Registers an extension that extends the global `Mocha` implementation\n * with new helper methods. These helper methods will be added to the `window`\n * when tests run for both BDD and TDD interfaces.\n */\nexport function extendInterfaces(helperName, helperFactory) {\n interfaceExtensions.push(function () {\n var Mocha = window.Mocha;\n // For all Mocha interfaces (probably just TDD and BDD):\n Object.keys(Mocha.interfaces)\n .forEach(function (interfaceName) {\n // This is the original callback that defines the interface (TDD or\n // BDD):\n var originalInterface = Mocha.interfaces[interfaceName];\n // This is the name of the \"teardown\" or \"afterEach\" property for the\n // current interface:\n var teardownProperty = interfaceName === 'tdd' ? 'teardown' : 'afterEach';\n // The original callback is monkey patched with a new one that appends\n // to the global context however we want it to:\n Mocha.interfaces[interfaceName] = function (suite) {\n // Call back to the original callback so that we get the base\n // interface:\n originalInterface.apply(this, arguments);\n // Register a listener so that we can further extend the base\n // interface:\n suite.on('pre-require', function (context, _file, _mocha) {\n // Capture a bound reference to the teardown function as a\n // convenience:\n var teardown = context[teardownProperty].bind(context);\n // Add our new helper to the testing context. The helper is\n // generated by a factory method that receives the context,\n // the teardown function and the interface name and returns\n // the new method to be added to that context:\n context[helperName] =\n helperFactory(context, teardown, interfaceName);\n });\n };\n });\n });\n}\n/**\n * Applies any registered interface extensions. The extensions will be applied\n * as many times as this function is called, so don't call it more than once.\n */\nexport function applyExtensions() {\n interfaceExtensions.forEach(function (applyExtension) {\n applyExtension();\n });\n}\n","import { extendInterfaces } from './extend.js';\nextendInterfaces('fixture', function (context, teardown) {\n // Return context.fixture if it is already a thing, for backwards\n // compatibility with `test-fixture-mocha.js`:\n return context.fixture || function fixture(fixtureId, model) {\n // Automatically register a teardown callback that will restore the\n // test-fixture:\n teardown(function () {\n document.getElementById(fixtureId).restore();\n });\n // Find the test-fixture with the provided ID and create it, returning\n // the results:\n return document.getElementById(fixtureId).create(model);\n };\n});\n","import { extendInterfaces } from './extend.js';\n/**\n * stub\n *\n * The stub addon allows the tester to partially replace the implementation of\n * an element with some custom implementation. Usage example:\n *\n * beforeEach(function() {\n * stub('x-foo', {\n * attached: function() {\n * // Custom implementation of the `attached` method of element `x-foo`..\n * },\n * otherMethod: function() {\n * // More custom implementation..\n * },\n * getterSetterProperty: {\n * get: function() {\n * // Custom getter implementation..\n * },\n * set: function() {\n * // Custom setter implementation..\n * }\n * },\n * // etc..\n * });\n * });\n */\nextendInterfaces('stub', function (_context, teardown) {\n return function stub(tagName, implementation) {\n // Find the prototype of the element being stubbed:\n var proto = document.createElement(tagName).constructor.prototype;\n // For all keys in the implementation to stub with..\n var stubs = Object.keys(implementation).map(function (key) {\n // Stub the method on the element prototype with Sinon:\n return sinon.stub(proto, key, implementation[key]);\n });\n // After all tests..\n teardown(function () {\n stubs.forEach(function (stub) {\n stub.restore();\n });\n });\n };\n});\n","import { extendInterfaces } from './extend.js';\n// replacement map stores what should be\nvar replacements = {};\nvar replaceTeardownAttached = false;\n/**\n * replace\n *\n * The replace addon allows the tester to replace all usages of one element with\n * another element within all Polymer elements created within the time span of\n * the test. Usage example:\n *\n * beforeEach(function() {\n * replace('x-foo').with('x-fake-foo');\n * });\n *\n * All annotations and attributes will be set on the placement element the way\n * they were set for the original element.\n */\nextendInterfaces('replace', function (_context, teardown) {\n return function replace(oldTagName) {\n return {\n with: function (tagName) {\n // Standardizes our replacements map\n oldTagName = oldTagName.toLowerCase();\n tagName = tagName.toLowerCase();\n replacements[oldTagName] = tagName;\n // If the function is already a stub, restore it to original\n if (document.importNode.isSinonProxy) {\n return;\n }\n if (window.Polymer && !window.Polymer.Element) {\n window.Polymer.Element = function () { };\n window.Polymer.Element.prototype._stampTemplate = function () { };\n }\n // Keep a reference to the original `document.importNode`\n // implementation for later:\n var originalImportNode = document.importNode;\n // Use Sinon to stub `document.ImportNode`:\n sinon.stub(document, 'importNode', function (origContent, deep) {\n var templateClone = document.createElement('template');\n var content = templateClone.content;\n var inertDoc = content.ownerDocument;\n // imports node from inertDoc which holds inert nodes.\n templateClone.content.appendChild(inertDoc.importNode(origContent, true));\n // optional arguments are not optional on IE.\n var nodeIterator = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT, null, true);\n var node;\n // Traverses the tree. A recently-replaced node will be put next,\n // so if a node is replaced, it will be checked if it needs to be\n // replaced again.\n while (node = nodeIterator.nextNode()) {\n if (!node.tagName) {\n continue;\n }\n var currentTagName = node.tagName.toLowerCase();\n if (replacements.hasOwnProperty(currentTagName)) {\n currentTagName = replacements[currentTagName];\n // find the final tag name.\n while (replacements[currentTagName]) {\n currentTagName = replacements[currentTagName];\n }\n // Create a replacement:\n var replacement = document.createElement(currentTagName);\n // For all attributes in the original node..\n for (var index = 0; index < node.attributes.length; ++index) {\n // Set that attribute on the replacement:\n replacement.setAttribute(node.attributes[index].name, node.attributes[index].value);\n }\n // Replace the original node with the replacement node:\n node.parentNode.replaceChild(replacement, node);\n }\n }\n return originalImportNode.call(this, content, deep);\n });\n if (!replaceTeardownAttached) {\n // After each test...\n teardown(function () {\n replaceTeardownAttached = true;\n // Restore the stubbed version of `document.importNode`:\n var documentImportNode = document.importNode;\n if (documentImportNode.isSinonProxy) {\n documentImportNode.restore();\n }\n // Empty the replacement map\n replacements = {};\n });\n }\n }\n };\n };\n});\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport './mocha/fixture.js';\nimport './mocha/stub.js';\nimport './mocha/replace.js';\nimport * as config from './config.js';\nimport { applyExtensions } from './mocha/extend.js';\n// Mocha global helpers, broken out by testing method.\n//\n// Keys are the method for a particular interface; values are their analog in\n// the opposite interface.\nvar MOCHA_EXPORTS = {\n // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/tdd.js\n tdd: {\n 'setup': '\"before\"',\n 'teardown': '\"after\"',\n 'suiteSetup': '\"beforeEach\"',\n 'suiteTeardown': '\"afterEach\"',\n 'suite': '\"describe\" or \"context\"',\n 'test': '\"it\" or \"specify\"',\n },\n // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/bdd.js\n bdd: {\n 'before': '\"setup\"',\n 'after': '\"teardown\"',\n 'beforeEach': '\"suiteSetup\"',\n 'afterEach': '\"suiteTeardown\"',\n 'describe': '\"suite\"',\n 'context': '\"suite\"',\n 'xdescribe': '\"suite.skip\"',\n 'xcontext': '\"suite.skip\"',\n 'it': '\"test\"',\n 'xit': '\"test.skip\"',\n 'specify': '\"test\"',\n 'xspecify': '\"test.skip\"',\n },\n};\n/**\n * Exposes all Mocha methods up front, configuring and running mocha\n * automatically when you call them.\n *\n * The assumption is that it is a one-off (sub-)suite of tests being run.\n */\nexport function stubInterfaces() {\n var keys = Object.keys(MOCHA_EXPORTS);\n keys.forEach(function (ui) {\n Object.keys(MOCHA_EXPORTS[ui]).forEach(function (key) {\n window[key] = function wrappedMochaFunction() {\n _setupMocha(ui, key, MOCHA_EXPORTS[ui][key]);\n if (!window[key] || window[key] === wrappedMochaFunction) {\n throw new Error('Expected mocha.setup to define ' + key);\n }\n window[key].apply(window, arguments);\n };\n });\n });\n}\n// Whether we've called `mocha.setup`\nvar _mochaIsSetup = false;\n/**\n * @param {string} ui Sets up mocha to run `ui`-style tests.\n * @param {string} key The method called that triggered this.\n * @param {string} alternate The matching method in the opposite interface.\n */\nfunction _setupMocha(ui, key, alternate) {\n var mochaOptions = config.get('mochaOptions');\n if (mochaOptions.ui && mochaOptions.ui !== ui) {\n var message = 'Mixing ' + mochaOptions.ui + ' and ' + ui +\n ' Mocha styles is not supported. ' +\n 'You called \"' + key + '\". Did you mean ' + alternate + '?';\n throw new Error(message);\n }\n if (_mochaIsSetup) {\n return;\n }\n applyExtensions();\n mochaOptions.ui = ui;\n mocha.setup(mochaOptions); // Note that the reporter is configured in run.js.\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * This file is the entry point into `web-component-tester`'s browser client.\n */\n// Registers a bunch of globals:\nimport './environment/helpers.js';\nimport ChildRunner from './childrunner.js';\nimport CLISocket from './clisocket.js';\nimport * as config from './config.js';\nimport * as environment from './environment.js';\nimport * as errors from './environment/errors.js';\nimport * as mocha from './mocha.js';\nimport * as reporters from './reporters.js';\nimport MultiReporter from './reporters/multi.js';\nimport * as suites from './suites.js';\nimport * as util from './util.js';\n// You can configure WCT before it has loaded by assigning your custom\n// configuration to the global `WCT`.\nconfig.setup(window.WCT);\n// Maybe some day we'll expose WCT as a module to whatever module registry you\n// are using (aka the UMD approach), or as an es6 module.\nvar WCT = window.WCT = {\n // A generic place to hang data about the current suite. This object is\n // reported\n // back via the `sub-suite-start` and `sub-suite-end` events.\n share: {},\n // Until then, we get to rely on it to expose parent runners to their\n // children.\n _ChildRunner: ChildRunner,\n _reporter: undefined,\n _config: config._config,\n // Public API\n /**\n * Loads suites of tests, supporting both `.js` and `.html` files.\n *\n * @param {!Array.} files The files to load.\n */\n loadSuites: suites.loadSuites,\n};\n// Load Process\nerrors.listenForErrors();\nmocha.stubInterfaces();\nenvironment.loadSync();\n// Give any scripts on the page a chance to declare tests and muck with things.\ndocument.addEventListener('DOMContentLoaded', function () {\n util.debug('DOMContentLoaded');\n environment.ensureDependenciesPresent();\n // We need the socket built prior to building its reporter.\n CLISocket.init(function (error, socket) {\n if (error)\n throw error;\n // Are we a child of another run?\n var current = ChildRunner.current();\n var parent = current && current.parentScope.WCT._reporter;\n util.debug('parentReporter:', parent);\n var childSuites = suites.activeChildSuites();\n var reportersToUse = reporters.determineReporters(socket, parent);\n // +1 for any local tests.\n var reporter = new MultiReporter(childSuites.length + 1, reportersToUse, parent);\n WCT._reporter = reporter; // For environment/compatibility.js\n // We need the reporter so that we can report errors during load.\n suites.loadJsSuites(reporter, function (error) {\n // Let our parent know that we're about to start the tests.\n if (current)\n current.ready(error);\n if (error)\n throw error;\n // Emit any errors we've encountered up til now\n errors.globalErrors.forEach(function onError(error) {\n reporter.emitOutOfBandTest('Test Suite Initialization', error);\n });\n suites.runSuites(reporter, childSuites, function (error) {\n // Make sure to let our parent know that we're done.\n if (current)\n current.done();\n if (error)\n throw error;\n });\n });\n });\n});\n"],"names":["util.basePath","util.scriptPrefix","config.get","util.debug","util.paramsToQuery","util.getParams","util.mergeParams","util.parseUrl","util.loadScript","util.getParam","console","util.pluralizedStat","util.cleanLocation","util.relativeLocation","htmlSuites","jsSuites","util.parallel","util.whenFrameworksReady","HTMLReporter","suites.jsSuites","suites.htmlSuites","ConsoleReporter","TitleReporter","util.expandUrl","util.loadStyle","reporters.injectMocha","config.setup","suites.loadSuites","config._config","errors.listenForErrors","mocha.stubInterfaces","environment.loadSync","suites.runSuites","errors.globalErrors","suites.loadJsSuites","reporters.determineReporters","suites.activeChildSuites","environment.ensureDependenciesPresent"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser.js.map","sources":["browser/environment/helpers.js","browser/config.js","browser/util.js","browser/childrunner.js","browser/clisocket.js","browser/reporters/console.js","browser/reporters/html.js","browser/reporters/multi.js","browser/reporters/title.js","browser/suites.js","browser/reporters.js","browser/environment.js","browser/environment/errors.js","browser/mocha/extend.js","browser/mocha/fixture.js","browser/mocha/stub.js","browser/mocha/replace.js","browser/mocha.js","browser/index.js"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n// Make sure that we use native timers, in case they're being stubbed out.\nvar nativeSetInterval = window.setInterval;\nvar nativeSetTimeout = window.setTimeout;\nvar nativeRequestAnimationFrame = window.requestAnimationFrame;\n/**\n * Runs `stepFn`, catching any error and passing it to `callback` (Node-style).\n * Otherwise, calls `callback` with no arguments on success.\n *\n * @param {function()} callback\n * @param {function()} stepFn\n */\nfunction safeStep(callback, stepFn) {\n var err;\n try {\n stepFn();\n }\n catch (error) {\n err = error;\n }\n callback(err);\n}\n/**\n * Runs your test at declaration time (before Mocha has begun tests). Handy for\n * when you need to test document initialization.\n *\n * Be aware that any errors thrown asynchronously cannot be tied to your test.\n * You may want to catch them and pass them to the done event, instead. See\n * `safeStep`.\n *\n * @param {string} name The name of the test.\n * @param {function(?function())} testFn The test function. If an argument is\n * accepted, the test will be treated as async, just like Mocha tests.\n */\nfunction testImmediate(name, testFn) {\n if (testFn.length > 0) {\n return testImmediateAsync(name, testFn);\n }\n var err;\n try {\n testFn();\n }\n catch (error) {\n err = error;\n }\n test(name, function (done) {\n done(err);\n });\n}\n/**\n * An async-only variant of `testImmediate`.\n *\n * @param {string} name\n * @param {function(?function())} testFn\n */\nfunction testImmediateAsync(name, testFn) {\n var testComplete = false;\n var err;\n test(name, function (done) {\n var intervalId = nativeSetInterval(function () {\n if (!testComplete)\n return;\n clearInterval(intervalId);\n done(err);\n }, 10);\n });\n try {\n testFn(function (error) {\n if (error)\n err = error;\n testComplete = true;\n });\n }\n catch (error) {\n err = error;\n testComplete = true;\n }\n}\n/**\n * Triggers a flush of any pending events, observations, etc and calls you back\n * after they have been processed.\n *\n * @param {function()} callback\n */\nfunction flush(callback) {\n // Ideally, this function would be a call to Polymer.dom.flush, but that\n // doesn't support a callback yet\n // (https://github.com/Polymer/polymer-dev/issues/851),\n // ...and there's cross-browser flakiness to deal with.\n // Make sure that we're invoking the callback with no arguments so that the\n // caller can pass Mocha callbacks, etc.\n var done = function done() {\n callback();\n };\n // Because endOfMicrotask is flaky for IE, we perform microtask checkpoints\n // ourselves (https://github.com/Polymer/polymer-dev/issues/114):\n var isIE = navigator.appName === 'Microsoft Internet Explorer';\n if (isIE && window.Platform && window.Platform.performMicrotaskCheckpoint) {\n var reallyDone_1 = done;\n done = function doneIE() {\n Platform.performMicrotaskCheckpoint();\n nativeSetTimeout(reallyDone_1, 0);\n };\n }\n // Everyone else gets a regular flush.\n var scope;\n if (window.Polymer && window.Polymer.dom && window.Polymer.dom.flush) {\n scope = window.Polymer.dom;\n }\n else if (window.Polymer && window.Polymer.flush) {\n scope = window.Polymer;\n }\n else if (window.WebComponents && window.WebComponents.flush) {\n scope = window.WebComponents;\n }\n if (scope) {\n scope.flush();\n }\n // Ensure that we are creating a new _task_ to allow all active microtasks to\n // finish (the code you're testing may be using endOfMicrotask, too).\n nativeSetTimeout(done, 0);\n}\n/**\n * Advances a single animation frame.\n *\n * Calls `flush`, `requestAnimationFrame`, `flush`, and `callback` sequentially\n * @param {function()} callback\n */\nfunction animationFrameFlush(callback) {\n flush(function () {\n nativeRequestAnimationFrame(function () {\n flush(callback);\n });\n });\n}\n/**\n * DEPRECATED: Use `flush`.\n * @param {function} callback\n */\nfunction asyncPlatformFlush(callback) {\n console.warn('asyncPlatformFlush is deprecated in favor of the more terse flush()');\n return window.flush(callback);\n}\n/**\n *\n */\nfunction waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime) {\n timeoutTime = timeoutTime || Date.now() + (timeout || 1000);\n intervalOrMutationEl = intervalOrMutationEl || 32;\n try {\n fn();\n }\n catch (e) {\n if (Date.now() > timeoutTime) {\n throw e;\n }\n else {\n if (typeof intervalOrMutationEl !== 'number') {\n intervalOrMutationEl.onMutation(intervalOrMutationEl, function () {\n waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);\n });\n }\n else {\n nativeSetTimeout(function () {\n waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);\n }, intervalOrMutationEl);\n }\n return;\n }\n }\n next();\n}\nwindow.safeStep = safeStep;\nwindow.testImmediate = testImmediate;\nwindow.testImmediateAsync = testImmediateAsync;\nwindow.flush = flush;\nwindow.animationFrameFlush = animationFrameFlush;\nwindow.asyncPlatformFlush = asyncPlatformFlush;\nwindow.waitFor = waitFor;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as util from './util.js';\n/**\n * The global configuration state for WCT's browser client.\n */\nexport var _config = {\n environmentScripts: !!window.__wctUseNpm ?\n [\n 'stacky/browser.js',\n 'async/lib/async.js',\n 'lodash/index.js',\n 'mocha/mocha.js',\n 'chai/chai.js',\n '@polymer/sinonjs/sinon.js',\n 'sinon-chai/lib/sinon-chai.js',\n 'accessibility-developer-tools/dist/js/axs_testing.js',\n '@polymer/test-fixture/test-fixture.js'\n ] :\n [\n 'stacky/browser.js',\n 'async/lib/async.js',\n 'lodash/lodash.js',\n 'mocha/mocha.js',\n 'chai/chai.js',\n 'sinonjs/sinon.js',\n 'sinon-chai/lib/sinon-chai.js',\n 'accessibility-developer-tools/dist/js/axs_testing.js'\n ],\n environmentImports: !!window.__wctUseNpm ? [] :\n ['test-fixture/test-fixture.html'],\n root: null,\n waitForFrameworks: true,\n waitFor: null,\n numConcurrentSuites: 1,\n trackConsoleError: true,\n mochaOptions: { timeout: 10 * 1000 },\n verbose: false,\n};\n/**\n * Merges initial `options` into WCT's global configuration.\n *\n * @param {Object} options The options to merge. See `browser/config.ts` for a\n * reference.\n */\nexport function setup(options) {\n var childRunner = ChildRunner.current();\n if (childRunner) {\n _deepMerge(_config, childRunner.parentScope.WCT._config);\n // But do not force the mocha UI\n delete _config.mochaOptions.ui;\n }\n if (options && typeof options === 'object') {\n _deepMerge(_config, options);\n }\n if (!_config.root) {\n // Sibling dependencies.\n var root = util.scriptPrefix('browser.js');\n _config.root = util.basePath(root.substr(0, root.length - 1));\n if (!_config.root) {\n throw new Error('Unable to detect root URL for WCT sources. Please set WCT.root before including browser.js');\n }\n }\n}\n/**\n * Retrieves a configuration value.\n */\nexport function get(key) {\n return _config[key];\n}\n// Internal\nfunction _deepMerge(target, source) {\n Object.keys(source).forEach(function (key) {\n if (target[key] !== null && typeof target[key] === 'object' &&\n !Array.isArray(target[key])) {\n _deepMerge(target[key], source[key]);\n }\n else {\n target[key] = source[key];\n }\n });\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport * as config from './config.js';\n/**\n * @param {function()} callback A function to call when the active web component\n * frameworks have loaded.\n */\nexport function whenFrameworksReady(callback) {\n debug('whenFrameworksReady');\n var done = function () {\n debug('whenFrameworksReady done');\n callback();\n };\n // If webcomponents script is in the document, wait for WebComponentsReady.\n if (window.WebComponents && !window.WebComponents.ready) {\n debug('WebComponentsReady?');\n window.addEventListener('WebComponentsReady', function wcReady() {\n window.removeEventListener('WebComponentsReady', wcReady);\n debug('WebComponentsReady');\n done();\n });\n }\n else {\n done();\n }\n}\n/**\n * @return {string} ' tests' or ' test'.\n */\nexport function pluralizedStat(count, kind) {\n if (count === 1) {\n return count + ' ' + kind + ' test';\n }\n else {\n return count + ' ' + kind + ' tests';\n }\n}\n/**\n * @param {string} path The URI of the script to load.\n * @param {function} done\n */\nexport function loadScript(path, done) {\n var script = document.createElement('script');\n script.src = path;\n if (done) {\n script.onload = done.bind(null, null);\n script.onerror = done.bind(null, 'Failed to load script ' + script.src);\n }\n document.head.appendChild(script);\n}\n/**\n * @param {string} path The URI of the stylesheet to load.\n * @param {function} done\n */\nexport function loadStyle(path, done) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = path;\n if (done) {\n link.onload = done.bind(null, null);\n link.onerror = done.bind(null, 'Failed to load stylesheet ' + link.href);\n }\n document.head.appendChild(link);\n}\n/**\n * @param {...*} var_args Logs values to the console when the `debug`\n * configuration option is true.\n */\nexport function debug() {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n if (!config.get('verbose')) {\n return;\n }\n var args = __spreadArrays([window.location.pathname], var_args);\n (console.debug || console.log).apply(console, args);\n}\n// URL Processing\n/**\n * @param {string} url\n * @return {{base: string, params: string}}\n */\nexport function parseUrl(url) {\n var parts = url.match(/^(.*?)(?:\\?(.*))?$/);\n return {\n base: parts[1],\n params: getParams(parts[2] || ''),\n };\n}\n/**\n * Expands a URL that may or may not be relative to `base`.\n *\n * @param {string} url\n * @param {string} base\n * @return {string}\n */\nexport function expandUrl(url, base) {\n if (!base)\n return url;\n if (url.match(/^(\\/|https?:\\/\\/)/))\n return url;\n if (base.substr(base.length - 1) !== '/') {\n base = base + '/';\n }\n return base + url;\n}\n/**\n * @param {string=} opt_query A query string to parse.\n * @return {!Object>} All params on the URL's query.\n */\nexport function getParams(query) {\n query = typeof query === 'string' ? query : window.location.search;\n if (query.substring(0, 1) === '?') {\n query = query.substring(1);\n }\n // python's SimpleHTTPServer tacks a `/` on the end of query strings :(\n if (query.slice(-1) === '/') {\n query = query.substring(0, query.length - 1);\n }\n if (query === '')\n return {};\n var result = {};\n query.split('&').forEach(function (part) {\n var pair = part.split('=');\n if (pair.length !== 2) {\n console.warn('Invalid URL query part:', part);\n return;\n }\n var key = decodeURIComponent(pair[0]);\n var value = decodeURIComponent(pair[1]);\n if (!result[key]) {\n result[key] = [];\n }\n result[key].push(value);\n });\n return result;\n}\n/**\n * Merges params from `source` into `target` (mutating `target`).\n *\n * @param {!Object>} target\n * @param {!Object>} source\n */\nexport function mergeParams(target, source) {\n Object.keys(source).forEach(function (key) {\n if (!(key in target)) {\n target[key] = [];\n }\n target[key] = target[key].concat(source[key]);\n });\n}\n/**\n * @param {string} param The param to return a value for.\n * @return {?string} The first value for `param`, if found.\n */\nexport function getParam(param) {\n var params = getParams();\n return params[param] ? params[param][0] : null;\n}\n/**\n * @param {!Object>} params\n * @return {string} `params` encoded as a URI query.\n */\nexport function paramsToQuery(params) {\n var pairs = [];\n Object.keys(params).forEach(function (key) {\n params[key].forEach(function (value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n });\n return (pairs.length > 0) ? ('?' + pairs.join('&')) : '';\n}\nfunction getPathName(location) {\n return typeof location === 'string' ? location : location.pathname;\n}\nexport function basePath(location) {\n return getPathName(location).match(/^.*\\//)[0];\n}\nexport function relativeLocation(location, basePath) {\n var path = getPathName(location);\n if (path.indexOf(basePath) === 0) {\n path = path.substring(basePath.length);\n }\n return path;\n}\nexport function cleanLocation(location) {\n var path = getPathName(location);\n if (path.slice(-11) === '/index.html') {\n path = path.slice(0, path.length - 10);\n }\n return path;\n}\nexport function parallel(runners, maybeLimit, done) {\n var limit;\n if (typeof maybeLimit !== 'number') {\n done = maybeLimit;\n limit = 0;\n }\n else {\n limit = maybeLimit;\n }\n if (!runners.length) {\n return done();\n }\n var called = false;\n var total = runners.length;\n var numActive = 0;\n var numDone = 0;\n function runnerDone(error) {\n if (called) {\n return;\n }\n numDone = numDone + 1;\n numActive = numActive - 1;\n if (error || numDone >= total) {\n called = true;\n done(error);\n }\n else {\n runOne();\n }\n }\n function runOne() {\n if (limit && numActive >= limit) {\n return;\n }\n if (!runners.length) {\n return;\n }\n numActive = numActive + 1;\n runners.shift()(runnerDone);\n }\n runners.forEach(runOne);\n}\n/**\n * Finds the directory that a loaded script is hosted on.\n *\n * @param {string} filename\n * @return {string?}\n */\nexport function scriptPrefix(filename) {\n var scripts = document.querySelectorAll('script[src*=\"' + filename + '\"]');\n if (scripts.length !== 1) {\n return null;\n }\n var script = scripts[0].src;\n return script.substring(0, script.indexOf(filename));\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from './util.js';\n/**\n * A Mocha suite (or suites) run within a child iframe, but reported as if they\n * are part of the current context.\n */\nvar ChildRunner = /** @class */ (function () {\n function ChildRunner(url, parentScope) {\n this.eventListenersToRemoveOnClean = [];\n this.parentScope = parentScope;\n var urlBits = util.parseUrl(url);\n util.mergeParams(urlBits.params, util.getParams(parentScope.location.search));\n delete urlBits.params.cli_browser_id;\n this.url = \"\" + urlBits.base + util.paramsToQuery(urlBits.params);\n this.state = 'initializing';\n }\n /**\n * Listeners added using this method will be removed on done()\n *\n * @param type event type\n * @param listener object which receives a notification\n * @param target event target\n */\n ChildRunner.prototype.addEventListener = function (type, listener, target) {\n target.addEventListener(type, listener);\n var descriptor = { target: target, type: type, listener: listener };\n this.eventListenersToRemoveOnClean.push(descriptor);\n };\n /**\n * Removes all event listeners added by a method addEventListener defined\n * on an instance of ChildRunner.\n */\n ChildRunner.prototype.removeAllEventListeners = function () {\n this.eventListenersToRemoveOnClean.forEach(function (_a) {\n var target = _a.target, type = _a.type, listener = _a.listener;\n return target.removeEventListener(type, listener);\n });\n };\n /**\n * @return {ChildRunner} The `ChildRunner` that was registered for this\n * window.\n */\n ChildRunner.current = function () {\n return ChildRunner.get(window);\n };\n /**\n * @param {!Window} target A window to find the ChildRunner of.\n * @param {boolean} traversal Whether this is a traversal from a child window.\n * @return {ChildRunner} The `ChildRunner` that was registered for `target`.\n */\n ChildRunner.get = function (target, traversal) {\n var childRunner = ChildRunner.byUrl[target.location.href];\n if (childRunner) {\n return childRunner;\n }\n if (window.parent === window) {\n // Top window.\n if (traversal) {\n console.warn('Subsuite loaded but was never registered. This most likely is due to wonky history behavior. Reloading...');\n window.location.reload();\n }\n return null;\n }\n // Otherwise, traverse.\n return window.parent.WCT._ChildRunner.get(target, true);\n };\n /**\n * Loads and runs the subsuite.\n *\n * @param {function} done Node-style callback.\n */\n ChildRunner.prototype.run = function (done) {\n var _this = this;\n util.debug('ChildRunner#run', this.url);\n this.state = 'loading';\n this.onRunComplete = done;\n this.container = document.getElementById('subsuites');\n if (!this.container) {\n var container_1 = (this.container = document.createElement('div'));\n container_1.id = 'subsuites';\n document.body.appendChild(container_1);\n }\n var container = this.container;\n var iframe = (this.iframe = document.createElement('iframe'));\n iframe.classList.add('subsuite');\n iframe.src = this.url;\n // Let the iframe expand the URL for us.\n var url = (this.url = iframe.src);\n container.appendChild(iframe);\n ChildRunner.byUrl[url] = this;\n this.timeoutId = setTimeout(function () { return _this.loaded(new Error('Timed out loading ' + url)); }, ChildRunner.loadTimeout);\n this.addEventListener('error', function () { return _this.loaded(new Error('Failed to load document ' + _this.url)); }, iframe);\n this.addEventListener('DOMContentLoaded', function () { return _this.loaded(); }, iframe.contentWindow);\n };\n /**\n * Called when the sub suite's iframe has loaded (or errored during load).\n *\n * @param {*} error The error that occured, if any.\n */\n ChildRunner.prototype.loaded = function (error) {\n util.debug('ChildRunner#loaded', this.url, error);\n if (this.iframe.contentWindow == null && error) {\n this.signalRunComplete(error);\n this.done();\n return;\n }\n // Not all targets have WCT loaded (compatiblity mode)\n if (this.iframe.contentWindow.WCT) {\n this.share = this.iframe.contentWindow.WCT.share;\n }\n if (error) {\n this.signalRunComplete(error);\n this.done();\n }\n };\n /**\n * Called in mocha/run.js when all dependencies have loaded, and the child is\n * ready to start running tests\n *\n * @param {*} error The error that occured, if any.\n */\n ChildRunner.prototype.ready = function (error) {\n util.debug('ChildRunner#ready', this.url, error);\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n if (error) {\n this.signalRunComplete(error);\n this.done();\n }\n };\n /**\n * Called when the sub suite's tests are complete, so that it can clean up.\n */\n ChildRunner.prototype.done = function () {\n var _this = this;\n util.debug('ChildRunner#done', this.url, arguments);\n // Make sure to clear that timeout.\n this.ready();\n this.signalRunComplete();\n if (this.iframe) {\n // Be safe and avoid potential browser crashes when logic attempts to\n // interact with the removed iframe.\n setTimeout(function () {\n _this.removeAllEventListeners();\n _this.container.removeChild(_this.iframe);\n _this.iframe = undefined;\n _this.share = null;\n }, 0);\n }\n };\n ChildRunner.prototype.signalRunComplete = function (error) {\n if (this.onRunComplete) {\n this.state = 'complete';\n this.onRunComplete(error);\n this.onRunComplete = null;\n }\n };\n // ChildRunners get a pretty generous load timeout by default.\n ChildRunner.loadTimeout = 60000;\n // We can't maintain properties on iframe elements in Firefox/Safari/???, so\n // we track childRunners by URL.\n ChildRunner.byUrl = {};\n return ChildRunner;\n}());\nexport default ChildRunner;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as util from './util.js';\nvar SOCKETIO_ENDPOINT = window.location.protocol + '//' + window.location.host;\nvar SOCKETIO_LIBRARY = SOCKETIO_ENDPOINT + '/socket.io/socket.io.js';\n/**\n * A socket for communication between the CLI and browser runners.\n *\n * @param {string} browserId An ID generated by the CLI runner.\n * @param {!io.Socket} socket The socket.io `Socket` to communicate over.\n */\nvar CLISocket = /** @class */ (function () {\n function CLISocket(browserId, socket) {\n this.browserId = browserId;\n this.socket = socket;\n }\n /**\n * @param {!Mocha.Runner} runner The Mocha `Runner` to observe, reporting\n * interesting events back to the CLI runner.\n */\n CLISocket.prototype.observe = function (runner) {\n var _this = this;\n this.emitEvent('browser-start', {\n url: window.location.toString(),\n });\n // We only emit a subset of events that we care about, and follow a more\n // general event format that is hopefully applicable to test runners beyond\n // mocha.\n //\n // For all possible mocha events, see:\n // https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36\n runner.on('test', function (test) {\n _this.emitEvent('test-start', { test: getTitles(test) });\n });\n runner.on('test end', function (test) {\n _this.emitEvent('test-end', {\n state: getState(test),\n test: getTitles(test),\n duration: test.duration,\n error: test.err,\n });\n });\n runner.on('fail', function (test, err) {\n // fail the test run if we catch errors outside of a test function\n if (test.type !== 'test') {\n _this.emitEvent('browser-fail', 'Error thrown outside of test function: ' + err.stack);\n }\n });\n runner.on('childRunner start', function (childRunner) {\n _this.emitEvent('sub-suite-start', childRunner.share);\n });\n runner.on('childRunner end', function (childRunner) {\n _this.emitEvent('sub-suite-end', childRunner.share);\n });\n runner.on('end', function () {\n _this.emitEvent('browser-end');\n });\n };\n /**\n * @param {string} event The name of the event to fire.\n * @param {*} data Additional data to pass with the event.\n */\n CLISocket.prototype.emitEvent = function (event, data) {\n this.socket.emit('client-event', {\n browserId: this.browserId,\n event: event,\n data: data,\n });\n };\n /**\n * Builds a `CLISocket` if we are within a CLI-run environment; short-circuits\n * otherwise.\n *\n * @param {function(*, CLISocket)} done Node-style callback.\n */\n CLISocket.init = function (done) {\n var browserId = util.getParam('cli_browser_id');\n if (!browserId)\n return done();\n // Only fire up the socket for root runners.\n if (ChildRunner.current())\n return done();\n util.loadScript(SOCKETIO_LIBRARY, function (error) {\n if (error)\n return done(error);\n var socket = io(SOCKETIO_ENDPOINT);\n socket.on('error', function (error) {\n socket.off();\n done(error);\n });\n socket.on('connect', function () {\n socket.off();\n done(null, new CLISocket(browserId, socket));\n });\n });\n };\n return CLISocket;\n}());\nexport default CLISocket;\n// Misc Utility\n/**\n * @param {!Mocha.Runnable} runnable The test or suite to extract titles from.\n * @return {!Array.} The titles of the runnable and its parents.\n */\nfunction getTitles(runnable) {\n var titles = [];\n while (runnable && !runnable.root && runnable.title) {\n titles.unshift(runnable.title);\n runnable = runnable.parent;\n }\n return titles;\n}\n/**\n * @param {!Mocha.Runnable} runnable\n * @return {string}\n */\nfunction getState(runnable) {\n if (runnable.state === 'passed') {\n return 'passing';\n }\n else if (runnable.state === 'failed') {\n return 'failing';\n }\n else if (runnable.pending) {\n return 'pending';\n }\n else {\n return 'unknown';\n }\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\n// We capture console events when running tests; so make sure we have a\n// reference to the original one.\nvar console = window.console;\nvar FONT = ';font: normal 13px \"Roboto\", \"Helvetica Neue\", \"Helvetica\", sans-serif;';\nvar STYLES = {\n plain: FONT,\n suite: 'color: #5c6bc0' + FONT,\n test: FONT,\n passing: 'color: #259b24' + FONT,\n pending: 'color: #e65100' + FONT,\n failing: 'color: #c41411' + FONT,\n stack: 'color: #c41411',\n results: FONT + 'font-size: 16px',\n};\n// I don't think we can feature detect this one...\nvar userAgent = navigator.userAgent.toLowerCase();\nvar CAN_STYLE_LOG = userAgent.match('firefox') || userAgent.match('webkit');\nvar CAN_STYLE_GROUP = userAgent.match('webkit');\n// Track the indent for faked `console.group`\nvar logIndent = '';\nfunction log(text, style) {\n text = text.split('\\n')\n .map(function (l) {\n return logIndent + l;\n })\n .join('\\n');\n if (CAN_STYLE_LOG) {\n console.log('%c' + text, STYLES[style] || STYLES.plain);\n }\n else {\n console.log(text);\n }\n}\nfunction logGroup(text, style) {\n if (CAN_STYLE_GROUP) {\n console.group('%c' + text, STYLES[style] || STYLES.plain);\n }\n else if (console.group) {\n console.group(text);\n }\n else {\n logIndent = logIndent + ' ';\n log(text, style);\n }\n}\nfunction logGroupEnd() {\n if (console.groupEnd) {\n console.groupEnd();\n }\n else {\n logIndent = logIndent.substr(0, logIndent.length - 2);\n }\n}\nfunction logException(error) {\n log(error.stack || error.message || (error + ''), 'stack');\n}\n/**\n * A Mocha reporter that logs results out to the web `console`.\n */\nvar Console = /** @class */ (function () {\n /**\n * @param runner The runner that is being reported on.\n */\n function Console(runner) {\n Mocha.reporters.Base.call(this, runner);\n runner.on('suite', function (suite) {\n if (suite.root) {\n return;\n }\n logGroup(suite.title, 'suite');\n }.bind(this));\n runner.on('suite end', function (suite) {\n if (suite.root) {\n return;\n }\n logGroupEnd();\n }.bind(this));\n runner.on('test', function (test) {\n logGroup(test.title, 'test');\n }.bind(this));\n runner.on('pending', function (test) {\n logGroup(test.title, 'pending');\n }.bind(this));\n runner.on('fail', function (_test, error) {\n logException(error);\n }.bind(this));\n runner.on('test end', function (_test) {\n logGroupEnd();\n }.bind(this));\n runner.on('end', this.logSummary.bind(this));\n }\n /** Prints out a final summary of test results. */\n Console.prototype.logSummary = function () {\n logGroup('Test Results', 'results');\n if (this.stats.failures > 0) {\n log(util.pluralizedStat(this.stats.failures, 'failing'), 'failing');\n }\n if (this.stats.pending > 0) {\n log(util.pluralizedStat(this.stats.pending, 'pending'), 'pending');\n }\n log(util.pluralizedStat(this.stats.passes, 'passing'));\n if (!this.stats.failures) {\n log('test suite passed', 'passing');\n }\n log('Evaluated ' + this.stats.tests + ' tests in ' +\n this.stats.duration + 'ms.');\n logGroupEnd();\n };\n return Console;\n}());\nexport default Console;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * WCT-specific behavior on top of Mocha's default HTML reporter.\n *\n * @param {!Mocha.Runner} runner The runner that is being reported on.\n */\nexport default function HTML(runner) {\n var output = document.createElement('div');\n output.id = 'mocha';\n document.body.appendChild(output);\n runner.on('suite', function (_test) {\n this.total = runner.total;\n }.bind(this));\n Mocha.reporters.HTML.call(this, runner);\n}\n// Woo! What a hack. This just saves us from adding a bunch of complexity around\n// style loading.\nvar style = document.createElement('style');\nstyle.textContent = \"\\n html, body {\\n position: relative;\\n height: 100%;\\n width: 100%;\\n min-width: 900px;\\n }\\n #mocha, #subsuites {\\n height: 100%;\\n position: absolute;\\n top: 0;\\n }\\n #mocha {\\n box-sizing: border-box;\\n margin: 0 !important;\\n padding: 60px 20px;\\n right: 0;\\n left: 500px;\\n }\\n #subsuites {\\n -ms-flex-direction: column;\\n -webkit-flex-direction: column;\\n display: -ms-flexbox;\\n display: -webkit-flex;\\n display: flex;\\n flex-direction: column;\\n left: 0;\\n width: 500px;\\n }\\n #subsuites .subsuite {\\n border: 0;\\n width: 100%;\\n height: 100%;\\n }\\n #mocha .test.pass .duration {\\n color: #555 !important;\\n }\\n\";\ndocument.head.appendChild(style);\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\nvar STACKY_CONFIG = {\n indent: ' ',\n locationStrip: [\n /^https?:\\/\\/[^\\/]+/,\n /\\?.*$/,\n ],\n filter: function (line) {\n return !!line.location.match(/\\/web-component-tester\\/[^\\/]+(\\?.*)?$/);\n },\n};\n// https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36-46\nvar MOCHA_EVENTS = [\n 'start',\n 'end',\n 'suite',\n 'suite end',\n 'test',\n 'test end',\n 'hook',\n 'hook end',\n 'pass',\n 'fail',\n 'pending',\n 'childRunner end'\n];\n// Until a suite has loaded, we assume this many tests in it.\nvar ESTIMATED_TESTS_PER_SUITE = 3;\n/**\n * A Mocha-like reporter that combines the output of multiple Mocha suites.\n */\nvar MultiReporter = /** @class */ (function () {\n /**\n * @param numSuites The number of suites that will be run, in order to\n * estimate the total number of tests that will be performed.\n * @param reporters The set of reporters that\n * should receive the unified event stream.\n * @param parent The parent reporter, if present.\n */\n function MultiReporter(numSuites, reporters, parent) {\n var _this = this;\n this.reporters = reporters.map(function (reporter) {\n return new reporter(_this);\n });\n this.parent = parent;\n this.basePath = parent && parent.basePath || util.basePath(window.location);\n this.total = numSuites * ESTIMATED_TESTS_PER_SUITE;\n // Mocha reporters assume a stream of events, so we have to be careful to\n // only report on one runner at a time...\n this.currentRunner = null;\n // ...while we buffer events for any other active runners.\n this.pendingEvents = [];\n this.emit('start');\n }\n /**\n * @param location The location this reporter represents.\n * @return A reporter-like \"class\" for each child suite\n * that should be passed to `mocha.run`.\n */\n MultiReporter.prototype.childReporter = function (location) {\n var _a;\n var name = this.suiteTitle(location);\n // The reporter is used as a constructor, so we can't depend on `this` being\n // properly bound.\n var self = this;\n return _a = /** @class */ (function () {\n function ChildReporter(runner) {\n runner.name = window.name;\n self.bindChildRunner(runner);\n }\n return ChildReporter;\n }()),\n _a.title = window.name,\n _a;\n };\n /** Must be called once all runners have finished. */\n MultiReporter.prototype.done = function () {\n this.complete = true;\n this.flushPendingEvents();\n this.emit('end');\n };\n /**\n * Emit a top level test that is not part of any suite managed by this\n * reporter.\n *\n * Helpful for reporting on global errors, loading issues, etc.\n *\n * @param title The title of the test.\n * @param error An error associated with this test. If falsy, test is\n * considered to be passing.\n * @param suiteTitle Title for the suite that's wrapping the test.\n * @param estimated If this test was included in the original\n * estimate of `numSuites`.\n */\n MultiReporter.prototype.emitOutOfBandTest = function (title, error, suiteTitle, estimated) {\n util.debug('MultiReporter#emitOutOfBandTest(', arguments, ')');\n var root = new Mocha.Suite(suiteTitle || '');\n var test = new Mocha.Test(title, function () { });\n test.parent = root;\n test.state = error ? 'failed' : 'passed';\n test.err = error;\n if (!estimated) {\n this.total = this.total + ESTIMATED_TESTS_PER_SUITE;\n }\n var runner = { total: 1 };\n this.proxyEvent('start', runner);\n this.proxyEvent('suite', runner, root);\n this.proxyEvent('test', runner, test);\n if (error) {\n this.proxyEvent('fail', runner, test, error);\n }\n else {\n this.proxyEvent('pass', runner, test);\n }\n this.proxyEvent('test end', runner, test);\n this.proxyEvent('suite end', runner, root);\n this.proxyEvent('end', runner);\n };\n /**\n * @param {!Location|string} location\n * @return {string}\n */\n MultiReporter.prototype.suiteTitle = function (location) {\n var path = util.relativeLocation(location, this.basePath);\n path = util.cleanLocation(path);\n return path;\n };\n // Internal Interface\n /** @param {!Mocha.runners.Base} runner The runner to listen to events for. */\n MultiReporter.prototype.bindChildRunner = function (runner) {\n var _this = this;\n MOCHA_EVENTS.forEach(function (eventName) {\n runner.on(eventName, _this.proxyEvent.bind(_this, eventName, runner));\n });\n };\n /**\n * Evaluates an event fired by `runner`, proxying it forward or buffering it.\n *\n * @param {string} eventName\n * @param {!Mocha.runners.Base} runner The runner that emitted this event.\n * @param {...*} var_args Any additional data passed as part of the event.\n */\n MultiReporter.prototype.proxyEvent = function (eventName, runner) {\n var _args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _args[_i - 2] = arguments[_i];\n }\n var extraArgs = Array.prototype.slice.call(arguments, 2);\n if (this.complete) {\n console.warn('out of order Mocha event for ' + runner.name + ':', eventName, extraArgs);\n return;\n }\n if (this.currentRunner && runner !== this.currentRunner) {\n this.pendingEvents.push(Array.prototype.slice.call(arguments));\n return;\n }\n util.debug('MultiReporter#proxyEvent(', arguments, ')');\n // This appears to be a Mocha bug: Tests failed by passing an error to their\n // done function don't set `err` properly.\n //\n // TODO(nevir): Track down.\n if (eventName === 'fail' && !extraArgs[0].err) {\n extraArgs[0].err = extraArgs[1];\n }\n if (eventName === 'start') {\n this.onRunnerStart(runner);\n }\n else if (eventName === 'end') {\n this.onRunnerEnd(runner);\n }\n else {\n this.cleanEvent(eventName, runner, extraArgs);\n this.emit.apply(this, [eventName].concat(extraArgs));\n }\n };\n /**\n * Cleans or modifies an event if needed.\n *\n * @param eventName\n * @param runner The runner that emitted this event.\n * @param extraArgs\n */\n MultiReporter.prototype.cleanEvent = function (eventName, _runner, extraArgs) {\n // Suite hierarchy\n if (extraArgs[0]) {\n extraArgs[0] = this.showRootSuite(extraArgs[0]);\n }\n // Normalize errors\n if (eventName === 'fail') {\n extraArgs[1] = Stacky.normalize(extraArgs[1], STACKY_CONFIG);\n }\n if (extraArgs[0] && extraArgs[0].err) {\n extraArgs[0].err = Stacky.normalize(extraArgs[0].err, STACKY_CONFIG);\n }\n };\n /**\n * We like to show the root suite's title, which requires a little bit of\n * trickery in the suite hierarchy.\n *\n * @param {!Mocha.Runnable} node\n */\n MultiReporter.prototype.showRootSuite = function (node) {\n var leaf = node = Object.create(node);\n while (node && node.parent) {\n var wrappedParent = Object.create(node.parent);\n node.parent = wrappedParent;\n node = wrappedParent;\n }\n node.root = false;\n return leaf;\n };\n /** @param {!Mocha.runners.Base} runner */\n MultiReporter.prototype.onRunnerStart = function (runner) {\n util.debug('MultiReporter#onRunnerStart:', runner.name);\n this.total = this.total - ESTIMATED_TESTS_PER_SUITE + runner.total;\n this.currentRunner = runner;\n };\n /** @param {!Mocha.runners.Base} runner */\n MultiReporter.prototype.onRunnerEnd = function (runner) {\n util.debug('MultiReporter#onRunnerEnd:', runner.name);\n this.currentRunner = null;\n this.flushPendingEvents();\n };\n /**\n * Flushes any buffered events and runs them through `proxyEvent`. This will\n * loop until all buffered runners are complete, or we have run out of\n * buffered events.\n */\n MultiReporter.prototype.flushPendingEvents = function () {\n var _this = this;\n var events = this.pendingEvents;\n this.pendingEvents = [];\n events.forEach(function (eventArgs) {\n _this.proxyEvent.apply(_this, eventArgs);\n });\n };\n return MultiReporter;\n}());\nexport default MultiReporter;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\nvar ARC_OFFSET = 0; // start at the right.\nvar ARC_WIDTH = 6;\n/**\n * A Mocha reporter that updates the document's title and favicon with\n * at-a-glance stats.\n *\n * @param {!Mocha.Runner} runner The runner that is being reported on.\n */\nvar Title = /** @class */ (function () {\n function Title(runner) {\n Mocha.reporters.Base.call(this, runner);\n runner.on('test end', this.report.bind(this));\n }\n /** Reports current stats via the page title and favicon. */\n Title.prototype.report = function () {\n this.updateTitle();\n this.updateFavicon();\n };\n /** Updates the document title with a summary of current stats. */\n Title.prototype.updateTitle = function () {\n if (this.stats.failures > 0) {\n document.title = util.pluralizedStat(this.stats.failures, 'failing');\n }\n else {\n document.title = util.pluralizedStat(this.stats.passes, 'passing');\n }\n };\n /** Updates the document's favicon w/ a summary of current stats. */\n Title.prototype.updateFavicon = function () {\n var canvas = document.createElement('canvas');\n canvas.height = canvas.width = 32;\n var context = canvas.getContext('2d');\n var passing = this.stats.passes;\n var pending = this.stats.pending;\n var failing = this.stats.failures;\n var total = Math.max(this.runner.total, passing + pending + failing);\n drawFaviconArc(context, total, 0, passing, '#0e9c57');\n drawFaviconArc(context, total, passing, pending, '#f3b300');\n drawFaviconArc(context, total, pending + passing, failing, '#ff5621');\n this.setFavicon(canvas.toDataURL());\n };\n /** Sets the current favicon by URL. */\n Title.prototype.setFavicon = function (url) {\n var current = document.head.querySelector('link[rel=\"icon\"]');\n if (current) {\n document.head.removeChild(current);\n }\n var link = document.createElement('link');\n link.rel = 'icon';\n link.type = 'image/x-icon';\n link.href = url;\n link.setAttribute('sizes', '32x32');\n document.head.appendChild(link);\n };\n return Title;\n}());\nexport default Title;\n/**\n * Draws an arc for the favicon status, relative to the total number of tests.\n */\nfunction drawFaviconArc(context, total, start, length, color) {\n var arcStart = ARC_OFFSET + Math.PI * 2 * (start / total);\n var arcEnd = ARC_OFFSET + Math.PI * 2 * ((start + length) / total);\n context.beginPath();\n context.strokeStyle = color;\n context.lineWidth = ARC_WIDTH;\n context.arc(16, 16, 16 - ARC_WIDTH / 2, arcStart, arcEnd);\n context.stroke();\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as config from './config.js';\nimport * as util from './util.js';\nexport var htmlSuites = [];\nexport var jsSuites = [];\n// We process grep ourselves to avoid loading suites that will be filtered.\nvar GREP = util.getParam('grep');\n// work around mocha bug (https://github.com/mochajs/mocha/issues/2070)\nif (GREP) {\n GREP = GREP.replace(/\\\\\\./g, '.');\n}\n/**\n * Loads suites of tests, supporting both `.js` and `.html` files.\n *\n * @param files The files to load.\n */\nexport function loadSuites(files) {\n files.forEach(function (file) {\n if (/\\.js(\\?.*)?$/.test(file)) {\n jsSuites.push(file);\n }\n else if (/\\.html(\\?.*)?$/.test(file)) {\n htmlSuites.push(file);\n }\n else {\n throw new Error('Unknown resource type: ' + file);\n }\n });\n}\n/**\n * @return The child suites that should be loaded, ignoring\n * those that would not match `GREP`.\n */\nexport function activeChildSuites() {\n var subsuites = htmlSuites;\n if (GREP) {\n var cleanSubsuites = [];\n for (var i = 0, subsuite = void 0; subsuite = subsuites[i]; i++) {\n if (GREP.indexOf(util.cleanLocation(subsuite)) !== -1) {\n cleanSubsuites.push(subsuite);\n }\n }\n subsuites = cleanSubsuites;\n }\n return subsuites;\n}\n/**\n * Loads all `.js` sources requested by the current suite.\n */\nexport function loadJsSuites(_reporter, done) {\n util.debug('loadJsSuites', jsSuites);\n var loaders = jsSuites.map(function (file) {\n // We only support `.js` dependencies for now.\n return util.loadScript.bind(util, file);\n });\n util.parallel(loaders, done);\n}\nexport function runSuites(reporter, childSuites, done) {\n util.debug('runSuites');\n var suiteRunners = [\n // Run the local tests (if any) first, not stopping on error;\n _runMocha.bind(null, reporter),\n ];\n // As well as any sub suites. Again, don't stop on error.\n childSuites.forEach(function (file) {\n suiteRunners.push(function (next) {\n var childRunner = new ChildRunner(file, window);\n reporter.emit('childRunner start', childRunner);\n childRunner.run(function (error) {\n reporter.emit('childRunner end', childRunner);\n if (error)\n reporter.emitOutOfBandTest(file, error);\n next();\n });\n });\n });\n util.parallel(suiteRunners, config.get('numConcurrentSuites'), function (error) {\n reporter.done();\n done(error);\n });\n}\n/**\n * Kicks off a mocha run, waiting for frameworks to load if necessary.\n *\n * @param {!MultiReporter} reporter Where to send Mocha's events.\n * @param {function} done A callback fired, _no error is passed_.\n */\nfunction _runMocha(reporter, done, waited) {\n if (config.get('waitForFrameworks') && !waited) {\n var waitFor = (config.get('waitFor') || util.whenFrameworksReady).bind(window);\n waitFor(_runMocha.bind(null, reporter, done, true));\n return;\n }\n util.debug('_runMocha');\n var mocha = window.mocha;\n var Mocha = window.Mocha;\n mocha.reporter(reporter.childReporter(window.location));\n mocha.suite.title = reporter.suiteTitle(window.location);\n mocha.grep(GREP);\n // We can't use `mocha.run` because it bashes over grep, invert, and friends.\n // See https://github.com/visionmedia/mocha/blob/master/support/tail.js#L137\n var runner = Mocha.prototype.run.call(mocha, function (_error) {\n if (document.getElementById('mocha')) {\n Mocha.utils.highlightTags('code');\n }\n done(); // We ignore the Mocha failure count.\n });\n // Mocha's default `onerror` handling strips the stack (to support really old\n // browsers). We upgrade this to get better stacks for async errors.\n //\n // TODO(nevir): Can we expand support to other browsers?\n if (navigator.userAgent.match(/chrome/i)) {\n window.onerror = null;\n window.addEventListener('error', function (event) {\n if (!event.error)\n return;\n if (event.error.ignore)\n return;\n if (window.uncaughtErrorFilter && window.uncaughtErrorFilter(event)) {\n event.preventDefault();\n return;\n }\n runner.uncaught(event.error);\n });\n }\n else {\n window.onerror = null;\n window.addEventListener('error', function (event) {\n if (window.uncaughtErrorFilter && window.uncaughtErrorFilter(event)) {\n event.preventDefault();\n return;\n }\n runner.uncaught(event.error);\n });\n }\n}\n","import ConsoleReporter from './reporters/console.js';\nimport HTMLReporter from './reporters/html.js';\nimport MultiReporter from './reporters/multi.js';\nimport TitleReporter from './reporters/title.js';\nimport * as suites from './suites.js';\nexport var htmlSuites = [];\nexport var jsSuites = [];\n/**\n * @param {CLISocket} socket The CLI socket, if present.\n * @param {MultiReporter} parent The parent reporter, if present.\n * @return {!Array. 0 || suites.jsSuites.length > 0) {\n reporters.push(HTMLReporter);\n }\n return reporters;\n}\n/**\n * Yeah, hideous, but this allows us to be loaded before Mocha, which is handy.\n */\nexport function injectMocha(Mocha) {\n _injectPrototype(ConsoleReporter, Mocha.reporters.Base.prototype);\n _injectPrototype(HTMLReporter, Mocha.reporters.HTML.prototype);\n // Mocha doesn't expose its `EventEmitter` shim directly, so:\n _injectPrototype(MultiReporter, Object.getPrototypeOf(Mocha.Runner.prototype));\n}\nfunction _injectPrototype(klass, prototype) {\n var newPrototype = Object.create(prototype);\n // Only support\n Object.keys(klass.prototype).forEach(function (key) {\n newPrototype[key] = klass.prototype[key];\n });\n klass.prototype = newPrototype;\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from './config.js';\nimport * as reporters from './reporters.js';\nimport * as util from './util.js';\n/**\n * Loads all environment scripts ...synchronously ...after us.\n */\nexport function loadSync() {\n util.debug('Loading environment scripts:');\n var a11ySuiteScriptPath = 'web-component-tester/data/a11ySuite.js';\n var scripts = config.get('environmentScripts');\n var a11ySuiteWillBeLoaded = window.__generatedByWct || scripts.indexOf(a11ySuiteScriptPath) > -1;\n // We can't inject a11ySuite when running the npm version because it is a\n // module-based script that needs `'); // jshint ignore:line\n });\n util.debug('Environment scripts loaded');\n var imports = config.get('environmentImports');\n imports.forEach(function (path) {\n var url = util.expandUrl(path, config.get('root'));\n util.debug('Loading environment import:', url);\n // Synchronous load.\n document.write(''); // jshint ignore:line\n });\n util.debug('Environment imports loaded');\n}\n/**\n * We have some hard dependencies on things that should be loaded via\n * `environmentScripts`, so we assert that they're present here; and do any\n * post-facto setup.\n */\nexport function ensureDependenciesPresent() {\n _ensureMocha();\n _checkChai();\n}\nfunction _ensureMocha() {\n var Mocha = window.Mocha;\n if (!Mocha) {\n throw new Error('WCT requires Mocha. Please ensure that it is present in WCT.environmentScripts, or that you load it before loading web-component-tester/browser.js');\n }\n reporters.injectMocha(Mocha);\n // Magic loading of mocha's stylesheet\n var mochaPrefix = util.scriptPrefix('mocha.js');\n // only load mocha stylesheet for the test runner output\n // Not the end of the world, if it doesn't load.\n if (mochaPrefix && window.top === window.self) {\n util.loadStyle(mochaPrefix + 'mocha.css');\n }\n}\nfunction _checkChai() {\n if (!window.chai) {\n util.debug('Chai not present; not registering shorthands');\n return;\n }\n window.assert = window.chai.assert;\n window.expect = window.chai.expect;\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from '../config.js';\n// We may encounter errors during initialization (for example, syntax errors in\n// a test file). Hang onto those (and more) until we are ready to report them.\nexport var globalErrors = [];\n/**\n * Hook the environment to pick up on global errors.\n */\nexport function listenForErrors() {\n window.addEventListener('error', function (event) {\n globalErrors.push(event.error);\n });\n // Also, we treat `console.error` as a test failure. Unless you prefer not.\n var origConsole = console;\n var origError = console.error;\n console.error = function wctShimmedError() {\n origError.apply(origConsole, arguments);\n if (config.get('trackConsoleError')) {\n throw 'console.error: ' + Array.prototype.join.call(arguments, ' ');\n }\n };\n}\n","var interfaceExtensions = [];\n/**\n * Registers an extension that extends the global `Mocha` implementation\n * with new helper methods. These helper methods will be added to the `window`\n * when tests run for both BDD and TDD interfaces.\n */\nexport function extendInterfaces(helperName, helperFactory) {\n interfaceExtensions.push(function () {\n var Mocha = window.Mocha;\n // For all Mocha interfaces (probably just TDD and BDD):\n Object.keys(Mocha.interfaces)\n .forEach(function (interfaceName) {\n // This is the original callback that defines the interface (TDD or\n // BDD):\n var originalInterface = Mocha.interfaces[interfaceName];\n // This is the name of the \"teardown\" or \"afterEach\" property for the\n // current interface:\n var teardownProperty = interfaceName === 'tdd' ? 'teardown' : 'afterEach';\n // The original callback is monkey patched with a new one that appends\n // to the global context however we want it to:\n Mocha.interfaces[interfaceName] = function (suite) {\n // Call back to the original callback so that we get the base\n // interface:\n originalInterface.apply(this, arguments);\n // Register a listener so that we can further extend the base\n // interface:\n suite.on('pre-require', function (context, _file, _mocha) {\n // Capture a bound reference to the teardown function as a\n // convenience:\n var teardown = context[teardownProperty].bind(context);\n // Add our new helper to the testing context. The helper is\n // generated by a factory method that receives the context,\n // the teardown function and the interface name and returns\n // the new method to be added to that context:\n context[helperName] =\n helperFactory(context, teardown, interfaceName);\n });\n };\n });\n });\n}\n/**\n * Applies any registered interface extensions. The extensions will be applied\n * as many times as this function is called, so don't call it more than once.\n */\nexport function applyExtensions() {\n interfaceExtensions.forEach(function (applyExtension) {\n applyExtension();\n });\n}\n","import { extendInterfaces } from './extend.js';\nextendInterfaces('fixture', function (context, teardown) {\n // Return context.fixture if it is already a thing, for backwards\n // compatibility with `test-fixture-mocha.js`:\n return context.fixture || function fixture(fixtureId, model) {\n // Automatically register a teardown callback that will restore the\n // test-fixture:\n teardown(function () {\n document.getElementById(fixtureId).restore();\n });\n // Find the test-fixture with the provided ID and create it, returning\n // the results:\n return document.getElementById(fixtureId).create(model);\n };\n});\n","import { extendInterfaces } from './extend.js';\n/**\n * stub\n *\n * The stub addon allows the tester to partially replace the implementation of\n * an element with some custom implementation. Usage example:\n *\n * beforeEach(function() {\n * stub('x-foo', {\n * attached: function() {\n * // Custom implementation of the `attached` method of element `x-foo`..\n * },\n * otherMethod: function() {\n * // More custom implementation..\n * },\n * getterSetterProperty: {\n * get: function() {\n * // Custom getter implementation..\n * },\n * set: function() {\n * // Custom setter implementation..\n * }\n * },\n * // etc..\n * });\n * });\n */\nextendInterfaces('stub', function (_context, teardown) {\n return function stub(tagName, implementation) {\n // Find the prototype of the element being stubbed:\n var proto = document.createElement(tagName).constructor.prototype;\n // For all keys in the implementation to stub with..\n var stubs = Object.keys(implementation).map(function (key) {\n // Stub the method on the element prototype with Sinon:\n return sinon.stub(proto, key, implementation[key]);\n });\n // After all tests..\n teardown(function () {\n stubs.forEach(function (stub) {\n stub.restore();\n });\n });\n };\n});\n","import { extendInterfaces } from './extend.js';\n// replacement map stores what should be\nvar replacements = {};\nvar replaceTeardownAttached = false;\n/**\n * replace\n *\n * The replace addon allows the tester to replace all usages of one element with\n * another element within all Polymer elements created within the time span of\n * the test. Usage example:\n *\n * beforeEach(function() {\n * replace('x-foo').with('x-fake-foo');\n * });\n *\n * All annotations and attributes will be set on the placement element the way\n * they were set for the original element.\n */\nextendInterfaces('replace', function (_context, teardown) {\n return function replace(oldTagName) {\n return {\n with: function (tagName) {\n // Standardizes our replacements map\n oldTagName = oldTagName.toLowerCase();\n tagName = tagName.toLowerCase();\n replacements[oldTagName] = tagName;\n // If the function is already a stub, restore it to original\n if (document.importNode.isSinonProxy) {\n return;\n }\n if (window.Polymer && !window.Polymer.Element) {\n window.Polymer.Element = function () { };\n window.Polymer.Element.prototype._stampTemplate = function () { };\n }\n // Keep a reference to the original `document.importNode`\n // implementation for later:\n var originalImportNode = document.importNode;\n // Use Sinon to stub `document.ImportNode`:\n sinon.stub(document, 'importNode', function (origContent, deep) {\n var templateClone = document.createElement('template');\n var content = templateClone.content;\n var inertDoc = content.ownerDocument;\n // imports node from inertDoc which holds inert nodes.\n templateClone.content.appendChild(inertDoc.importNode(origContent, true));\n // optional arguments are not optional on IE.\n var nodeIterator = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT, null, true);\n var node;\n // Traverses the tree. A recently-replaced node will be put next,\n // so if a node is replaced, it will be checked if it needs to be\n // replaced again.\n while (node = nodeIterator.nextNode()) {\n if (!node.tagName) {\n continue;\n }\n var currentTagName = node.tagName.toLowerCase();\n if (replacements.hasOwnProperty(currentTagName)) {\n currentTagName = replacements[currentTagName];\n // find the final tag name.\n while (replacements[currentTagName]) {\n currentTagName = replacements[currentTagName];\n }\n // Create a replacement:\n var replacement = document.createElement(currentTagName);\n // For all attributes in the original node..\n for (var index = 0; index < node.attributes.length; ++index) {\n // Set that attribute on the replacement:\n replacement.setAttribute(node.attributes[index].name, node.attributes[index].value);\n }\n // Replace the original node with the replacement node:\n node.parentNode.replaceChild(replacement, node);\n }\n }\n return originalImportNode.call(this, content, deep);\n });\n if (!replaceTeardownAttached) {\n // After each test...\n teardown(function () {\n replaceTeardownAttached = true;\n // Restore the stubbed version of `document.importNode`:\n var documentImportNode = document.importNode;\n if (documentImportNode.isSinonProxy) {\n documentImportNode.restore();\n }\n // Empty the replacement map\n replacements = {};\n });\n }\n }\n };\n };\n});\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport './mocha/fixture.js';\nimport './mocha/stub.js';\nimport './mocha/replace.js';\nimport * as config from './config.js';\nimport { applyExtensions } from './mocha/extend.js';\n// Mocha global helpers, broken out by testing method.\n//\n// Keys are the method for a particular interface; values are their analog in\n// the opposite interface.\nvar MOCHA_EXPORTS = {\n // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/tdd.js\n tdd: {\n 'setup': '\"before\"',\n 'teardown': '\"after\"',\n 'suiteSetup': '\"beforeEach\"',\n 'suiteTeardown': '\"afterEach\"',\n 'suite': '\"describe\" or \"context\"',\n 'test': '\"it\" or \"specify\"',\n },\n // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/bdd.js\n bdd: {\n 'before': '\"setup\"',\n 'after': '\"teardown\"',\n 'beforeEach': '\"suiteSetup\"',\n 'afterEach': '\"suiteTeardown\"',\n 'describe': '\"suite\"',\n 'context': '\"suite\"',\n 'xdescribe': '\"suite.skip\"',\n 'xcontext': '\"suite.skip\"',\n 'it': '\"test\"',\n 'xit': '\"test.skip\"',\n 'specify': '\"test\"',\n 'xspecify': '\"test.skip\"',\n },\n};\n/**\n * Exposes all Mocha methods up front, configuring and running mocha\n * automatically when you call them.\n *\n * The assumption is that it is a one-off (sub-)suite of tests being run.\n */\nexport function stubInterfaces() {\n var keys = Object.keys(MOCHA_EXPORTS);\n keys.forEach(function (ui) {\n Object.keys(MOCHA_EXPORTS[ui]).forEach(function (key) {\n window[key] = function wrappedMochaFunction() {\n _setupMocha(ui, key, MOCHA_EXPORTS[ui][key]);\n if (!window[key] || window[key] === wrappedMochaFunction) {\n throw new Error('Expected mocha.setup to define ' + key);\n }\n window[key].apply(window, arguments);\n };\n });\n });\n}\n// Whether we've called `mocha.setup`\nvar _mochaIsSetup = false;\n/**\n * @param {string} ui Sets up mocha to run `ui`-style tests.\n * @param {string} key The method called that triggered this.\n * @param {string} alternate The matching method in the opposite interface.\n */\nfunction _setupMocha(ui, key, alternate) {\n var mochaOptions = config.get('mochaOptions');\n if (mochaOptions.ui && mochaOptions.ui !== ui) {\n var message = 'Mixing ' + mochaOptions.ui + ' and ' + ui +\n ' Mocha styles is not supported. ' +\n 'You called \"' + key + '\". Did you mean ' + alternate + '?';\n throw new Error(message);\n }\n if (_mochaIsSetup) {\n return;\n }\n applyExtensions();\n mochaOptions.ui = ui;\n mocha.setup(mochaOptions); // Note that the reporter is configured in run.js.\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * This file is the entry point into `web-component-tester`'s browser client.\n */\n// Registers a bunch of globals:\nimport './environment/helpers.js';\nimport ChildRunner from './childrunner.js';\nimport CLISocket from './clisocket.js';\nimport * as config from './config.js';\nimport * as environment from './environment.js';\nimport * as errors from './environment/errors.js';\nimport * as mocha from './mocha.js';\nimport * as reporters from './reporters.js';\nimport MultiReporter from './reporters/multi.js';\nimport * as suites from './suites.js';\nimport * as util from './util.js';\n// You can configure WCT before it has loaded by assigning your custom\n// configuration to the global `WCT`.\nconfig.setup(window.WCT);\n// Maybe some day we'll expose WCT as a module to whatever module registry you\n// are using (aka the UMD approach), or as an es6 module.\nvar WCT = window.WCT = {\n // A generic place to hang data about the current suite. This object is\n // reported\n // back via the `sub-suite-start` and `sub-suite-end` events.\n share: {},\n // Until then, we get to rely on it to expose parent runners to their\n // children.\n _ChildRunner: ChildRunner,\n _reporter: undefined,\n _config: config._config,\n // Public API\n /**\n * Loads suites of tests, supporting both `.js` and `.html` files.\n *\n * @param {!Array.} files The files to load.\n */\n loadSuites: suites.loadSuites,\n};\n// Load Process\nerrors.listenForErrors();\nmocha.stubInterfaces();\nenvironment.loadSync();\n// Give any scripts on the page a chance to declare tests and muck with things.\ndocument.addEventListener('DOMContentLoaded', function () {\n util.debug('DOMContentLoaded');\n environment.ensureDependenciesPresent();\n // We need the socket built prior to building its reporter.\n CLISocket.init(function (error, socket) {\n if (error)\n throw error;\n // Are we a child of another run?\n var current = ChildRunner.current();\n var parent = current && current.parentScope.WCT._reporter;\n util.debug('parentReporter:', parent);\n var childSuites = suites.activeChildSuites();\n var reportersToUse = reporters.determineReporters(socket, parent);\n // +1 for any local tests.\n var reporter = new MultiReporter(childSuites.length + 1, reportersToUse, parent);\n WCT._reporter = reporter; // For environment/compatibility.js\n // We need the reporter so that we can report errors during load.\n suites.loadJsSuites(reporter, function (error) {\n // Let our parent know that we're about to start the tests.\n if (current)\n current.ready(error);\n if (error)\n throw error;\n // Emit any errors we've encountered up til now\n errors.globalErrors.forEach(function onError(error) {\n reporter.emitOutOfBandTest('Test Suite Initialization', error);\n });\n suites.runSuites(reporter, childSuites, function (error) {\n // Make sure to let our parent know that we're done.\n if (current)\n current.done();\n if (error)\n throw error;\n });\n });\n });\n});\n"],"names":["util.basePath","util.scriptPrefix","config.get","util.debug","util.paramsToQuery","util.getParams","util.mergeParams","util.parseUrl","util.loadScript","util.getParam","console","util.pluralizedStat","util.cleanLocation","util.relativeLocation","htmlSuites","jsSuites","util.parallel","util.whenFrameworksReady","HTMLReporter","suites.jsSuites","suites.htmlSuites","ConsoleReporter","TitleReporter","util.expandUrl","util.loadStyle","reporters.injectMocha","config.setup","suites.loadSuites","config._config","errors.listenForErrors","mocha.stubInterfaces","environment.loadSync","suites.runSuites","errors.globalErrors","suites.loadJsSuites","reporters.determineReporters","suites.activeChildSuites","environment.ensureDependenciesPresent"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0fdbb04..2db3698 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,1312 +4,1392 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@polymer/sinonjs": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@polymer/sinonjs/-/sinonjs-1.17.1.tgz", - "integrity": "sha512-/U8F/cOTrbF2iVVYgINYmvKbtbexs+89Q3v8AaHADRYabTg7aOZGOb0RyWpOI+sUJt04kj63U4FwMhzW5r4wZA==" + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/core": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "debug": { + "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" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } }, - "@polymer/test-fixture": { - "version": "0.0.3", - "resolved": "http://registry.npmjs.org/@polymer/test-fixture/-/test-fixture-0.0.3.tgz", - "integrity": "sha1-REN1JpfU2Sk7vEEuoLXk00HxSdk=" + "@babel/generator": { + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.3.tgz", + "integrity": "sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ==", + "requires": { + "@babel/types": "^7.9.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } + } }, - "@types/body-parser": { - "version": "0.0.33", - "resolved": "http://registry.npmjs.org/@types/body-parser/-/body-parser-0.0.33.tgz", - "integrity": "sha1-M8oUmPw35Rxd8MgcrjRWnnBB4CU=", - "dev": true, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", "requires": { - "@types/express": "*" + "@babel/types": "^7.8.3" } }, - "@types/chalk": { - "version": "0.4.31", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", - "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", - "dev": true + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + } }, - "@types/chokidar": { - "version": "1.7.5", - "resolved": "http://registry.npmjs.org/@types/chokidar/-/chokidar-1.7.5.tgz", - "integrity": "sha512-PDkSRY7KltW3M60hSBlerxI8SFPXsO3AL/aRVsO4Kh9IHRW74Ih75gUuTd/aE4LSSFqypb10UIX3QzOJwBQMGQ==", - "dev": true, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", "requires": { - "@types/events": "*", - "@types/node": "*" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.7.0" } }, - "@types/events": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", - "dev": true + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } + } }, - "@types/express": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", - "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", - "dev": true, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, - "@types/express-serve-static-core": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", - "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", - "dev": true, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/range-parser": "*" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, - "@types/fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw==", - "dev": true + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "requires": { + "@babel/types": "^7.8.3" + } }, - "@types/glob": { - "version": "5.0.36", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.36.tgz", - "integrity": "sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg==", - "dev": true, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" + "@babel/types": "^7.8.3" } }, - "@types/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==", - "dev": true, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", "requires": { - "@types/glob": "*", - "@types/node": "*" + "@babel/types": "^7.8.3" } }, - "@types/grunt": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/@types/grunt/-/grunt-0.4.24.tgz", - "integrity": "sha512-iincPcK0ZIM73RfOoAwSgHV3mOeZ0aBUnJLSYLa8OAW9KFEygoy1SaxCc+jmMafb5QMT1G1lvmjVQ2cElM1h/A==", - "dev": true, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { - "@types/node": "*" + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } } }, - "@types/gulp": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.5.tgz", - "integrity": "sha512-nx1QjPTiRpvLfYsZ7MBu7bT6Cm7tAXyLbY0xbdx2IEMxCK2v2urIhJMQZHW0iV1TskM71Xl6p2uRRuWDbk+/7g==", - "dev": true, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", "requires": { - "@types/chokidar": "*", - "@types/undertaker": "*", - "@types/vinyl-fs": "*" + "@babel/types": "^7.8.3" } }, - "@types/lodash": { - "version": "4.14.119", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz", - "integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw==", - "dev": true + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" }, - "@types/mime": { - "version": "0.0.29", - "resolved": "http://registry.npmjs.org/@types/mime/-/mime-0.0.29.tgz", - "integrity": "sha1-+8/TMFc7kS71nu7hRgK/rOYwdUs=", - "dev": true + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "requires": { + "lodash": "^4.17.13" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } + } }, - "@types/minimatch": { - "version": "2.0.29", - "resolved": "http://registry.npmjs.org/@types/minimatch/-/minimatch-2.0.29.tgz", - "integrity": "sha1-UALhT3Xi1x5WQoHfBDHIwbSio2o=", - "dev": true + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } }, - "@types/multer": { - "version": "0.0.32", - "resolved": "http://registry.npmjs.org/@types/multer/-/multer-0.0.32.tgz", - "integrity": "sha1-+Jx1EifcILfJM8MJo+dGfEmfzew=", - "dev": true, + "@babel/helper-replace-supers": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", "requires": { - "@types/express": "*" + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" } }, - "@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==", - "dev": true + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } }, - "@types/nomnom": { - "version": "0.0.28", - "resolved": "http://registry.npmjs.org/@types/nomnom/-/nomnom-0.0.28.tgz", - "integrity": "sha1-LYloUorXqXON0Kaj3+XN/biseXQ=", - "dev": true + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "requires": { + "@babel/types": "^7.8.3" + } }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==" }, - "@types/resolve": { - "version": "0.0.7", - "resolved": "http://registry.npmjs.org/@types/resolve/-/resolve-0.0.7.tgz", - "integrity": "sha512-GPewdjkb0Q76o459qgp6pBLzJj/bD3oveS2kfLhIkZ9U3t3AFKtl5DlFB6lGTw0iZmcmxoGC8lpLW3NNJKrN9A==", - "dev": true, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", "requires": { - "@types/node": "*" + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, - "@types/rimraf": { - "version": "0.0.28", - "resolved": "http://registry.npmjs.org/@types/rimraf/-/rimraf-0.0.28.tgz", - "integrity": "sha1-VWJRm8eWPKyoq/fxKMrjtZTUHQY=", - "dev": true - }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", - "dev": true + "@babel/helpers": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" + } }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "dev": true, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "@types/sinon": { - "version": "1.16.36", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-1.16.36.tgz", - "integrity": "sha1-dLtu15KFl8Gz+xsAkAXpTcbq41c=", - "dev": true + "@babel/parser": { + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.3.tgz", + "integrity": "sha512-E6SpIDJZ0cZAKoCNk+qSDd0ChfTnpiJN9FfNf3RZ20dzwA2vL2oq5IX1XTVT+4vDmRlta2nGk5HGMMskJAR+4A==" }, - "@types/socket.io": { - "version": "1.4.40", - "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-1.4.40.tgz", - "integrity": "sha512-B9luG4IRhql12JGoYeTlCTlizRAtaWmxu9dSyY+AOWO2pEMFFajZnzqF65GH8GVFsyJzfmXqnfdvPlS+mAM/Xw==", - "dev": true, + "@babel/plugin-external-helpers": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.8.3.tgz", + "integrity": "sha512-mx0WXDDiIl5DwzMtzWGRSPugXi9BxROS05GQrhLNbEamhBiicgn994ibwkyiBH+6png7bm/yA7AUsvHyCXi4Vw==", "requires": { - "@types/node": "*" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "@types/spdy": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@types/spdy/-/spdy-3.4.4.tgz", - "integrity": "sha512-N9LBlbVRRYq6HgYpPkqQc3a9HJ/iEtVZToW6xlTtJiMhmRJ7jJdV7TaZQJw/Ve/1ePUsQiCTDc4JMuzzag94GA==", - "dev": true, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", "requires": { - "@types/node": "*" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, - "@types/undertaker": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.0.tgz", - "integrity": "sha512-bx/5nZCGkasXs6qaA3B6SVDjBZqdyk04UO12e0uEPSzjt5H8jEJw0DKe7O7IM0hM2bVHRh70pmOH7PEHqXwzOw==", - "dev": true, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "requires": { - "@types/events": "*", - "@types/undertaker-registry": "*" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" } }, - "@types/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", - "dev": true - }, - "@types/vinyl": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz", - "integrity": "sha512-2iYpNuOl98SrLPBZfEN9Mh2JCJ2EI9HU35SfgBEb51DcmaHkhp8cKMblYeBqMQiwXMgAD3W60DbQ4i/UdLiXhw==", - "dev": true, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "requires": { - "@types/node": "*" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@types/vinyl-fs": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.9.tgz", - "integrity": "sha512-Q0EXd6c1fORjiOuK4ZaKdfFcMyFzJlTi56dqktwaWVLIDAzE49wUs3bKnYbZwzyMWoH+NcMWnRuR73S9A0jnRA==", - "dev": true, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "requires": { - "@types/events": "*", - "@types/glob-stream": "*", - "@types/node": "*", - "@types/vinyl": "*" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@webcomponents/webcomponentsjs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.3.0.tgz", - "integrity": "sha512-x7x4rfXfX+xlg0Cdy752IVC8SjjOuMfjSNi1Vy7GKfWCm/MKSc42wGubngPl6/nO7w+nHM/MvfhTD/aEngA7/w==" + "@babel/plugin-syntax-import-meta": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.8.3.tgz", + "integrity": "sha512-vYiGd4wQ9gx0Lngb7+bPCwQXGK/PR6FeTIJ+TIOlq+OfOKG/kCAOO2+IBac3oMM9qV7/fU76hfcqxUaLKZf1hQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "accessibility-developer-tools": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz", - "integrity": "sha1-PaDM6dbsY3OWS4TzXbfPw996tRQ=" + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } }, - "ajv": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", - "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "@babel/plugin-transform-classes": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", + "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + } + } }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "optional": true, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", "requires": { - "string-width": "^2.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, + "@babel/plugin-transform-destructuring": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz", + "integrity": "sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ==", "requires": { - "ansi-wrap": "^0.1.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", "requires": { - "ansi-wrap": "0.1.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "@babel/plugin-transform-for-of": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, + "@babel/plugin-transform-instanceof": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.8.3.tgz", + "integrity": "sha512-c/jB6Ebe2u17hxo+rce6PDgbkuHyfcJOleqgHYttnvMrCsxVwUnYsMq7GhxXekzUQsv9IImhv6YICKihpen+Ag==", "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", "requires": { - "buffer-equal": "^1.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + "@babel/plugin-transform-modules-amd": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } }, - "archiver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "zip-stream": "^1.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", + "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/runtime": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", + "requires": { + "regenerator-runtime": "^0.13.4" }, "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + } + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "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" + "ms": "^2.1.1" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "@babel/types": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" + "@babel/helper-validator-identifier": "^7.9.0", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" }, "dependencies": { "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" } } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true + "@polymer/esm-amd-loader": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@polymer/esm-amd-loader/-/esm-amd-loader-1.0.4.tgz", + "integrity": "sha512-h+hqYkL+tQV/y2ESD5gFXMl5z4cC+XY1jTlBeGSBaTcj3VbB5OBEScbvRXm63NcEbBneQQYbHfBAXAkF9i9wIA==" }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "@polymer/sinonjs": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@polymer/sinonjs/-/sinonjs-1.17.1.tgz", + "integrity": "sha512-/U8F/cOTrbF2iVVYgINYmvKbtbexs+89Q3v8AaHADRYabTg7aOZGOb0RyWpOI+sUJt04kj63U4FwMhzW5r4wZA==" + }, + "@polymer/test-fixture": { + "version": "0.0.3", + "resolved": "http://registry.npmjs.org/@polymer/test-fixture/-/test-fixture-0.0.3.tgz", + "integrity": "sha1-REN1JpfU2Sk7vEEuoLXk00HxSdk=" + }, + "@types/babel-generator": { + "version": "6.25.3", + "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.3.tgz", + "integrity": "sha512-pGgnuxVddKcYIc+VJkRDop7gxLhqclNKBdlsm/5Vp8d+37pQkkDK7fef8d9YYImRzw9xcojEPc18pUYnbxmjqA==", "requires": { - "sprintf-js": "~1.0.2" + "@types/babel-types": "*" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "@types/babel-traverse": { + "version": "6.25.5", + "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.5.tgz", + "integrity": "sha512-WrMbwmu+MWf8FiUMbmVOGkc7bHPzndUafn1CivMaBHthBBoo0VNIcYk1KV71UovYguhsNOwf3UF5oRmkkGOU3w==", + "requires": { + "@types/babel-types": "*" + } }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, + "@types/babel-types": { + "version": "6.25.2", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz", + "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==" + }, + "@types/babylon": { + "version": "6.16.5", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", + "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", "requires": { - "make-iterator": "^1.0.0" + "@types/babel-types": "*" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "@types/bluebird": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.30.tgz", + "integrity": "sha512-8LhzvcjIoqoi1TghEkRMkbbmM+jhHnBokPGkJWjclMK+Ks0MxEBow3/p2/iFTZ+OIbJHQDSfpgdZEb+af3gfVw==" }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, + "@types/body-parser": { + "version": "0.0.33", + "resolved": "http://registry.npmjs.org/@types/body-parser/-/body-parser-0.0.33.tgz", + "integrity": "sha1-M8oUmPw35Rxd8MgcrjRWnnBB4CU=", "requires": { - "make-iterator": "^1.0.0" + "@types/express": "*" } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "@types/chai": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", + "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==" }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true + "@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "requires": { + "@types/chai": "*" + } }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true + "@types/chalk": { + "version": "0.4.31", + "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", + "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=" }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "@types/clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-A1HQhQ0hkvqqByJMgg+Wiv9p9XdoYEzuwm11SVo1mX2/4PSdhjcrUlilJQoqLscIheC51t1D5g+EFWCXZ2VTQQ==", + "requires": { + "@types/node": "*" + } }, - "array-flatten": { + "@types/clone": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz", + "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=" + }, + "@types/color-name": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, + "@types/compression": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-0.0.33.tgz", + "integrity": "sha1-ldxzOiM5qoRjgdfxN3eS0lU9wn0=", "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "@types/express": "*" } }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, + "@types/content-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/content-type/-/content-type-1.1.3.tgz", + "integrity": "sha512-pv8VcFrZ3fN93L4rTNIbbUzdkzjEyVMp5mPVjsFfOYTDOZMZiZ8P1dhu+kEv3faYyKzZgLlSvnyQNFg+p/v5ug==" + }, + "@types/cssbeautify": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz", + "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=" + }, + "@types/doctrine": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz", + "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=" + }, + "@types/escape-html": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-0.0.20.tgz", + "integrity": "sha512-6dhZJLbA7aOwkYB2GDGdIqJ20wmHnkDzaxV9PJXe7O02I2dSFTERzRB6JrX6cWKaS+VqhhY7cQUMCbO5kloFUw==" + }, + "@types/estree": { + "version": "0.0.44", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.44.tgz", + "integrity": "sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g==" + }, + "@types/events": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" + }, + "@types/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz", + "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==", "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" } }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, + "@types/express-serve-static-core": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.2.tgz", + "integrity": "sha512-El9yMpctM6tORDAiBwZVLMcxoTMcqqRO9dVyYcn7ycLWbvR8klrDn8CAOwRfZujZtWD7yS/mshTdz43jMOejbg==", "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "@types/node": "*", + "@types/range-parser": "*" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "@types/fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw==", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "@types/freeport": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@types/freeport/-/freeport-1.0.21.tgz", + "integrity": "sha1-c/ZUPtZ9PKP/+XuYVZFZi3CSBm8=", + "dev": true, + "optional": true }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + "@types/glob": { + "version": "5.0.36", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.36.tgz", + "integrity": "sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg==", + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "@types/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==", "requires": { - "safer-buffer": "~2.1.0" + "@types/glob": "*", + "@types/node": "*" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "@types/grunt": { + "version": "0.4.25", + "resolved": "https://registry.npmjs.org/@types/grunt/-/grunt-0.4.25.tgz", + "integrity": "sha512-nDlnSBxyDEEVYM+1Ls/rfnQBUnseDFsU7kdrsAXAogyma90udiwnByYg8y8Pu0TGq68YCy2FjYNb1S7zSoumCg==", + "dev": true, + "requires": { + "@types/node": "*" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "@types/gulp": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.6.tgz", + "integrity": "sha512-0E8/iV/7FKWyQWSmi7jnUvgXXgaw+pfAzEB06Xu+l0iXVJppLbpOye5z7E2klw5akXd+8kPtYuk65YBcZPM4ow==", + "dev": true, + "requires": { + "@types/undertaker": "*", + "@types/vinyl-fs": "*", + "chokidar": "^2.1.2" + } }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "@types/gulp-if": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/gulp-if/-/gulp-if-0.0.33.tgz", + "integrity": "sha512-J5lzff21X7r1x/4hSzn02GgIUEyjCqYIXZ9GgGBLhbsD3RiBdqwnkFWgF16/0jO5rcVZ52Zp+6MQMQdvIsWuKg==", "requires": { - "lodash": "^4.17.10" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } + "@types/node": "*", + "@types/vinyl": "*" } }, - "async-done": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz", - "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==", - "dev": true, + "@types/html-minifier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-3.5.3.tgz", + "integrity": "sha512-j1P/4PcWVVCPEy5lofcHnQ6BtXz9tHGiFPWzqm7TtGuWZEfCHEP446HlkSNc9fQgNJaJZ6ewPtp2aaFla/Uerg==", "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^1.0.7", - "stream-exhaust": "^1.0.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - } + "@types/clean-css": "*", + "@types/relateurl": "*", + "@types/uglify-js": "*" } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "@types/is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=" + }, + "@types/launchpad": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/launchpad/-/launchpad-0.6.0.tgz", + "integrity": "sha1-NylhCbfyd/bmxf1+DAcGvJGPu1E=", + "dev": true, + "optional": true + }, + "@types/lodash": { + "version": "4.14.149", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", + "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", "dev": true }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "@types/mime": { + "version": "0.0.29", + "resolved": "http://registry.npmjs.org/@types/mime/-/mime-0.0.29.tgz", + "integrity": "sha1-+8/TMFc7kS71nu7hRgK/rOYwdUs=" }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "@types/minimatch": { + "version": "2.0.29", + "resolved": "http://registry.npmjs.org/@types/minimatch/-/minimatch-2.0.29.tgz", + "integrity": "sha1-UALhT3Xi1x5WQoHfBDHIwbSio2o=" + }, + "@types/multer": { + "version": "0.0.32", + "resolved": "http://registry.npmjs.org/@types/multer/-/multer-0.0.32.tgz", + "integrity": "sha1-+Jx1EifcILfJM8MJo+dGfEmfzew=", "dev": true, "requires": { - "async-done": "^1.2.2" + "@types/express": "*" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "@types/mz": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.29.tgz", + "integrity": "sha1-vCRyjGSZc/HHhR6QM/nOUlZowns=", + "requires": { + "@types/bluebird": "*", + "@types/node": "*" + } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "@types/nomnom": { + "version": "0.0.28", + "resolved": "http://registry.npmjs.org/@types/nomnom/-/nomnom-0.0.28.tgz", + "integrity": "sha1-LYloUorXqXON0Kaj3+XN/biseXQ=", + "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, + "@types/opn": { + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/@types/opn/-/opn-3.0.28.tgz", + "integrity": "sha1-CX0NHJtXSVc6XZbfEyOHu20CEYo=", "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "@types/node": "*" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, + "@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", "requires": { - "babel-runtime": "^6.22.0" + "@types/node": "*" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, + "@types/path-is-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", + "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==" + }, + "@types/pem": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@types/pem/-/pem-1.9.5.tgz", + "integrity": "sha512-C0txxEw8B7DCoD85Ko7SEvzUogNd5VDJ5/YBG8XUcacsOGqxr5Oo4g3OUAfdEDUbhXanwUoVh/ZkMFw77FGPQQ==", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "@types/node": "*" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "@types/relateurl": { + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/@types/relateurl/-/relateurl-0.2.28.tgz", + "integrity": "sha1-a9p9uGU/piZD9e5p6facEaOS46Y=" + }, + "@types/resolve": { + "version": "0.0.7", + "resolved": "http://registry.npmjs.org/@types/resolve/-/resolve-0.0.7.tgz", + "integrity": "sha512-GPewdjkb0Q76o459qgp6pBLzJj/bD3oveS2kfLhIkZ9U3t3AFKtl5DlFB6lGTw0iZmcmxoGC8lpLW3NNJKrN9A==", "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - } + "@types/node": "*" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, + "@types/rimraf": { + "version": "0.0.28", + "resolved": "http://registry.npmjs.org/@types/rimraf/-/rimraf-0.0.28.tgz", + "integrity": "sha1-VWJRm8eWPKyoq/fxKMrjtZTUHQY=", + "dev": true + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - } + "@types/express-serve-static-core": "*", + "@types/mime": "*" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "@types/sinon": { + "version": "1.16.36", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-1.16.36.tgz", + "integrity": "sha1-dLtu15KFl8Gz+xsAkAXpTcbq41c=", "dev": true }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "@types/socket.io": { + "version": "1.4.40", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-1.4.40.tgz", + "integrity": "sha512-B9luG4IRhql12JGoYeTlCTlizRAtaWmxu9dSyY+AOWO2pEMFFajZnzqF65GH8GVFsyJzfmXqnfdvPlS+mAM/Xw==", "dev": true, "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "@types/node": "*" } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + "@types/spdy": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@types/spdy/-/spdy-3.4.4.tgz", + "integrity": "sha512-N9LBlbVRRYq6HgYpPkqQc3a9HJ/iEtVZToW6xlTtJiMhmRJ7jJdV7TaZQJw/Ve/1ePUsQiCTDc4JMuzzag94GA==", + "requires": { + "@types/node": "*" + } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "@types/ua-parser-js": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-ngUKcHnytUodUCL7C6EZ+lVXUjTMQb+9p/e1JjV5tN9TVzS98lHozWEFRPY1QcCdwFeMsmVWfZ3DPPT/udCyIw==" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "@types/uglify-js": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.4.tgz", + "integrity": "sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==", "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "source-map": "^0.6.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + "@types/undertaker": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.2.tgz", + "integrity": "sha512-j4iepCSuY2JGW/hShVtUBagic0klYNFIXP7VweavnYnNC2EjiKxJFeaS9uaJmAT0ty9sQSqTS1aagWMZMV0HyA==", + "dev": true, + "requires": { + "@types/undertaker-registry": "*" + } }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "@types/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", + "dev": true }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + "@types/uuid": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.8.tgz", + "integrity": "sha512-zHWce3allXWSmRx6/AGXKCtSOA7JjeWd2L3t4aHfysNk8mouQnWCocveaT7a4IEIlPVHp81jzlnknqTgCjCLXA==" }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "@types/vinyl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz", + "integrity": "sha512-2iYpNuOl98SrLPBZfEN9Mh2JCJ2EI9HU35SfgBEb51DcmaHkhp8cKMblYeBqMQiwXMgAD3W60DbQ4i/UdLiXhw==", "requires": { - "tweetnacl": "^0.14.3" + "@types/node": "*" } }, - "beeper": { + "@types/vinyl-fs": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.9.tgz", + "integrity": "sha512-Q0EXd6c1fORjiOuK4ZaKdfFcMyFzJlTi56dqktwaWVLIDAzE49wUs3bKnYbZwzyMWoH+NcMWnRuR73S9A0jnRA==", + "requires": { + "@types/events": "*", + "@types/glob-stream": "*", + "@types/node": "*", + "@types/vinyl": "*" + } + }, + "@types/whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "requires": { + "@types/node": "*" + } + }, + "@types/which": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.2.tgz", + "integrity": "sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA==", + "dev": true, + "optional": true + }, + "@webcomponents/webcomponentsjs": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.3.3.tgz", + "integrity": "sha512-eLH04VBMpuZGzBIhOnUjECcQPEPcmfhWEijW9u1B5I+2PPYdWf3vWUExdDxu4Y3GljRSTCOlWnGtS9tpzmXMyQ==" + }, + "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "callsite": "1.0.0" + "mime-types": "~2.1.18", + "negotiator": "0.6.1" } }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true + "accessibility-developer-tools": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz", + "integrity": "sha1-PaDM6dbsY3OWS4TzXbfPw996tRQ=" }, - "bl": { - "version": "1.2.2", - "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "acorn": "^3.0.4" }, "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" } } }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "bower": { - "version": "1.8.4", - "resolved": "http://registry.npmjs.org/bower/-/bower-1.8.4.tgz", - "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=", - "dev": true + "adm-zip": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz", + "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==", + "dev": true, + "optional": true }, - "bower-config": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/bower-config/-/bower-config-1.4.1.tgz", - "integrity": "sha1-hf2d82fCuNu9DKpMXyutQM2Ewsw=", - "requires": { - "graceful-fs": "^4.1.3", - "mout": "^1.0.0", - "optimist": "^0.6.1", - "osenv": "^0.1.3", - "untildify": "^2.1.0" - } + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, "optional": true, "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "es6-promisify": "^5.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "optional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "optional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, "optional": true, "requires": { - "has-flag": "^3.0.0" + "es6-promise": "^4.0.3" } } } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "string-width": "^2.0.0" } }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "ansi-colors": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "ansi-wrap": "^0.1.0" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + } } }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", "dev": true }, - "busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "requires": { - "dicer": "0.2.5", - "readable-stream": "1.1.x" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "buffer-equal": "^1.0.0" } }, - "callsite": { + "append-field": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, + "archiver": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", + "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "tar-stream": "^2.1.0", + "zip-stream": "^2.1.2" }, "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } } } }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "optional": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - }, - "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" - } - } - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "optional": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "optional": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" }, "dependencies": { - "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" - } + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "string-width": { - "version": "1.0.2", - "resolved": "http://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" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - }, - "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1324,421 +1404,632 @@ "version": "1.1.1", "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "coffeescript": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", - "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", - "dev": true + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", "dev": true, "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", "make-iterator": "^1.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, "requires": { - "color-name": "1.1.3" + "make-iterator": "^1.0.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" }, - "colors": { - "version": "1.1.2", - "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", "dev": true }, - "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==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + "array-flatten": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" + "array-slice": "^1.0.0", + "is-number": "^4.0.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true } } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "is-number": "^4.0.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true } } }, - "concat-with-sourcemaps": { + "array-slice": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", "dev": true, "requires": { - "source-map": "^0.6.1" + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "optional": true, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "safer-buffer": "~2.1.0" } }, - "content-disposition": { - "version": "0.5.2", - "resolved": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "requires": { - "safe-buffer": "~5.1.1" + "lodash": "^4.17.14" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } } }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "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==", + "dev": true }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", "dev": true, "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" + "async-done": "^1.2.2" } }, - "core-js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", - "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==", - "dev": true + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "requires": { - "buffer": "^5.1.0" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" }, "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" } } }, - "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=", - "optional": true, + "babel-helper-evaluate-path": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", + "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" + }, + "babel-helper-flip-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", + "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + }, + "babel-helper-is-nodes-equiv": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + }, + "babel-helper-is-void-0": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", + "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + }, + "babel-helper-mark-eval-scopes": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", + "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + }, + "babel-helper-remove-or-void": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", + "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + }, + "babel-helper-to-multiple-sequence-expressions": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", + "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "requires": { - "capture-stack-trace": "^1.0.0" + "babel-runtime": "^6.22.0" } }, - "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=", + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "object.assign": "^4.1.0" } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "optional": true + "babel-plugin-minify-builtins": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", + "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, + "babel-plugin-minify-constant-folding": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", + "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", "requires": { - "array-find-index": "^1.0.1" + "babel-helper-evaluate-path": "^0.5.0" } }, - "d": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, + "babel-plugin-minify-dead-code-elimination": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", "requires": { - "es5-ext": "^0.10.9" + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-mark-eval-scopes": "^0.4.3", + "babel-helper-remove-or-void": "^0.4.3", + "lodash": "^4.17.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "babel-plugin-minify-flip-comparisons": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", + "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", "requires": { - "assert-plus": "^1.0.0" + "babel-helper-is-void-0": "^0.4.3" } }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, + "babel-plugin-minify-guarded-expressions": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", + "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "babel-plugin-minify-infinity": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", + "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + }, + "babel-plugin-minify-mangle-names": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", + "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", "requires": { - "ms": "2.0.0" + "babel-helper-mark-eval-scopes": "^0.4.3" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "babel-plugin-minify-numeric-literals": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", + "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "babel-plugin-minify-replace": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", + "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "babel-plugin-minify-simplify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", + "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", + "requires": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3", + "babel-helper-is-nodes-equiv": "^0.0.1", + "babel-helper-to-multiple-sequence-expressions": "^0.5.0" + } }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, + "babel-plugin-minify-type-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", + "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", "requires": { - "kind-of": "^5.0.2" + "babel-helper-is-void-0": "^0.4.3" + } + }, + "babel-plugin-transform-inline-consecutive-adds": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", + "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + }, + "babel-plugin-transform-member-expression-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", + "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + }, + "babel-plugin-transform-merge-sibling-variables": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", + "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + }, + "babel-plugin-transform-minify-booleans": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", + "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + }, + "babel-plugin-transform-property-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", + "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", + "requires": { + "esutils": "^2.0.2" + } + }, + "babel-plugin-transform-regexp-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", + "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + }, + "babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + }, + "babel-plugin-transform-remove-debugger": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", + "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + }, + "babel-plugin-transform-remove-undefined": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", + "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", + "requires": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "babel-plugin-transform-simplify-comparison-operators": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", + "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + }, + "babel-plugin-transform-undefined-to-void": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", + "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + }, + "babel-preset-minify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", + "requires": { + "babel-plugin-minify-builtins": "^0.5.0", + "babel-plugin-minify-constant-folding": "^0.5.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.1", + "babel-plugin-minify-flip-comparisons": "^0.4.3", + "babel-plugin-minify-guarded-expressions": "^0.4.4", + "babel-plugin-minify-infinity": "^0.4.3", + "babel-plugin-minify-mangle-names": "^0.5.0", + "babel-plugin-minify-numeric-literals": "^0.4.3", + "babel-plugin-minify-replace": "^0.5.0", + "babel-plugin-minify-simplify": "^0.5.1", + "babel-plugin-minify-type-constructors": "^0.4.3", + "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", + "babel-plugin-transform-member-expression-literals": "^6.9.4", + "babel-plugin-transform-merge-sibling-variables": "^6.9.4", + "babel-plugin-transform-minify-booleans": "^6.9.4", + "babel-plugin-transform-property-literals": "^6.9.4", + "babel-plugin-transform-regexp-constructors": "^0.4.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-remove-debugger": "^6.9.4", + "babel-plugin-transform-remove-undefined": "^0.5.0", + "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "lodash": "^4.17.11" }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" } } }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", "dev": true, "requires": { - "object-keys": "^1.0.12" + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -1767,368 +2058,463 @@ } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, - "depcheck": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-0.6.11.tgz", - "integrity": "sha512-wTVJ8cNilB8NfkzoBblcYqsB8LRfbjqKEwAOLD3YXIRigktSM7/lS9xQfVkAVujhjstmiQMZR0hkdHSnQxzb9A==", - "dev": true, - "requires": { - "babel-traverse": "^6.7.3", - "babylon": "^6.1.21", - "builtin-modules": "^1.1.1", - "deprecate": "^1.0.0", - "deps-regex": "^0.1.4", - "js-yaml": "^3.4.2", - "lodash": "^4.5.1", - "minimatch": "^3.0.2", - "require-package-name": "^2.0.1", - "walkdir": "0.0.11", - "yargs": "^8.0.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - } - } + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.1.0.tgz", - "integrity": "sha512-b5dDNQYdy2vW9WXUD8+RQlfoxvqztLLhDE+T7Gd37I5E8My7nJkKu6FmhdDeRWJ8B+yjZKuwjCta8pgi8kgSqA==", - "dev": true - }, - "deps-regex": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.1.4.tgz", - "integrity": "sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" }, - "dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { - "readable-stream": "1.1.x", - "streamsearch": "0.1.2" + "tweetnacl": "^0.14.3" } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "optional": true, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", "requires": { - "is-obj": "^1.0.0" + "callsite": "1.0.0" } }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "optional": true, "requires": { - "readable-stream": "~1.1.9" + "file-uri-to-path": "1.0.0" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "optional": true - }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", - "dev": true, + "bl": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" }, "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "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" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } } } }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "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==" + }, + "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==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + } } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "bower": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz", + "integrity": "sha512-1SrJnXnkP9soITHptSO+ahx3QKp3cVzn8poI6ujqc5SeOkg5iqM1pK9H+DSc2OQ8SnO0jC/NG4Ur/UIwy7574A==", + "dev": true }, - "end-of-stream": { + "bower-config": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "resolved": "https://registry.npmjs.org/bower-config/-/bower-config-1.4.1.tgz", + "integrity": "sha1-hf2d82fCuNu9DKpMXyutQM2Ewsw=", "requires": { - "once": "^1.4.0" + "graceful-fs": "^4.1.3", + "mout": "^1.0.0", + "optimist": "^0.6.1", + "osenv": "^0.1.3", + "untildify": "^2.1.0" } }, - "engine.io": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", - "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~6.1.0" + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "ms": "2.0.0" + "has-flag": "^3.0.0" } } } }, - "engine.io-client": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.1.tgz", - "integrity": "sha512-q66JBFuQcy7CSlfAz9L3jH+v7DTT3i6ZEadYcVj2pOs8/0uJHLxKX3WBkGTvULJMdz0tUCyJag0aKT/dpXL9BQ==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "ms": "2.0.0" + "is-extendable": "^0.1.0" } } } }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "browser-capabilities": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/browser-capabilities/-/browser-capabilities-1.1.4.tgz", + "integrity": "sha512-BezMQhbQklxjRQpZZQ8tnbzEo6AldUwMh8/PeWt5/CTBSwByQRXZEAK2fbnEahQ4poeeaI0suAYRq25A1YGOmw==", "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "@types/ua-parser-js": "^0.7.31", + "ua-parser-js": "^0.7.15" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "browserstack": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", + "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", "dev": true, + "optional": true, "requires": { - "is-arrayish": "^0.2.1" + "https-proxy-agent": "^2.2.1" } }, - "es5-ext": { - "version": "0.10.46", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", - "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "buffer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "dicer": "0.2.5", + "readable-stream": "1.1.x" } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "camelcase-keys": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + } + } }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "cancel-token": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz", + "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=", + "requires": { + "@types/node": "^4.0.30" + }, + "dependencies": { + "@types/node": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-4.9.4.tgz", + "integrity": "sha512-nKoiCZ87x6+fs26bNHjy07AQt6f46nFEitGH0P9JmWbY6tEyum6LLfLf7SIsKFh4DnBWsyUM2gYhaQAt+aA0Sw==" + } + } }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "dev": true, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "merge": "^1.2.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "execa": { + "chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "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" + "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" + }, + "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" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "debug": "^2.3.3", + "arr-union": "^3.1.0", "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -2138,338 +2524,403 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cleankill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cleankill/-/cleankill-2.0.0.tgz", + "integrity": "sha1-WYMN/ItBHVPccq0J1Fp46jMWGpE=" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "fill-range": "^2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" }, "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "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": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "number-is-nan": "^1.0.0" } }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "isarray": "1.0.0" + "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" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "safe-buffer": "~5.1.0" } } } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "coffeescript": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", + "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", + "dev": true + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, "requires": { - "homedir-polyfill": "^1.0.1" + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } + "color-name": "1.1.3" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, + "colors": { + "version": "1.1.2", + "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "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==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-line-args": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", + "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", + "requires": { + "array-back": "^3.0.1", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", + "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", + "requires": { + "array-back": "^2.0.0", + "chalk": "^2.4.1", + "table-layout": "^0.4.3", + "typical": "^2.6.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "is-descriptor": "^1.0.0" + "color-convert": "^1.9.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", "requires": { - "is-extendable": "^0.1.0" + "typical": "^2.6.1" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "kind-of": "^6.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "kind-of": "^6.0.0" + "has-flag": "^3.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, - "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 + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "is-extendable": "^0.1.0" + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" } } } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "mime-db": ">= 1.43.0 < 2" }, "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" } } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz", - "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==", - "dev": true, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" } }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, + "concat-stream": { + "version": "1.6.2", + "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2484,961 +2935,2997 @@ "version": "1.1.1", "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "dev": true, "requires": { - "for-in": "^1.0.1" + "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 + } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { - "samsam": "1.x" + "safe-buffer": "5.1.2" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "requires": { - "map-cache": "^0.2.2" + "safe-buffer": "~5.1.1" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-props": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", + "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "core-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", + "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "crc": "^3.4.4", + "readable-stream": "^3.4.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "safe-buffer": "~5.2.0" } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, + } + } + }, + "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=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "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=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "css-slam": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/css-slam/-/css-slam-2.1.2.tgz", + "integrity": "sha512-cObrY+mhFEmepWpua6EpMrgRNTQ0eeym+kvR0lukI6hDEzK7F8himEDS4cJ9+fPHCoArTzVrrR0d+oAUbTR1NA==", + "requires": { + "command-line-args": "^5.0.2", + "command-line-usage": "^5.0.5", + "dom5": "^3.0.0", + "parse5": "^4.0.0", + "shady-css-parser": "^0.1.0" + } + }, + "cssbeautify": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz", + "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "requires": { + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, + } + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "ms": "2.0.0" + "kind-of": "^6.0.0" } }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { + "is-data-descriptor": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "minipass": "^2.2.1" + "kind-of": "^6.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depcheck": { + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-0.6.11.tgz", + "integrity": "sha512-wTVJ8cNilB8NfkzoBblcYqsB8LRfbjqKEwAOLD3YXIRigktSM7/lS9xQfVkAVujhjstmiQMZR0hkdHSnQxzb9A==", + "dev": true, + "requires": { + "babel-traverse": "^6.7.3", + "babylon": "^6.1.21", + "builtin-modules": "^1.1.1", + "deprecate": "^1.0.0", + "deps-regex": "^0.1.4", + "js-yaml": "^3.4.2", + "lodash": "^4.5.1", + "minimatch": "^3.0.2", + "require-package-name": "^2.0.1", + "walkdir": "0.0.11", + "yargs": "^8.0.2" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "deprecate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.1.0.tgz", + "integrity": "sha512-b5dDNQYdy2vW9WXUD8+RQlfoxvqztLLhDE+T7Gd37I5E8My7nJkKu6FmhdDeRWJ8B+yjZKuwjCta8pgi8kgSqA==", + "dev": true + }, + "deps-regex": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.1.4.tgz", + "integrity": "sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz", + "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=", + "requires": { + "urijs": "^1.16.1" + } + }, + "dom5": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", + "requires": { + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "~1.1.9" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", + "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emitter-component": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.1.tgz", + "integrity": "sha1-Bl4tvtaVm/RwZ57avq95gdEAOrY=" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.x" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.0.tgz", + "integrity": "sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "0.3.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "^7.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "debug": { + "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" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "engine.io-client": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", + "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "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" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", + "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "env-variable": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", + "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.0.tgz", + "integrity": "sha512-jCsk2fpfEFusVv1MDkF4Uf0hAzIKNDMgR6LyOIw6a3jwkN1sCgWzuwgnsHY9YSQ8n8P31HoncvE0LC44cpWTrw==" + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" + }, + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "debug": { + "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" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, + "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==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "strip-ansi": { + "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.1.0" + } + }, + "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==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", + "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "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" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "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=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "requires": { + "mime-db": "1.43.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "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==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "optional": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-port": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-port/-/find-port-1.0.1.tgz", + "integrity": "sha1-2whKbL+ZVk2Zhprnn73s9m6KGFw=", + "requires": { + "async": "~0.2.9" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + } + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "follow-redirects": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz", + "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==", + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "fork-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", + "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formatio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", + "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", + "requires": { + "samsam": "1.x" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "freeport": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/freeport/-/freeport-1.0.5.tgz", + "integrity": "sha1-JV6KuEFwwzuoXZkOghrl9KGpvF0=", + "dev": true, + "optional": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "glob": { - "version": "7.1.2", + "minizlib": { + "version": "1.3.3", "bundled": true, "dev": true, "optional": 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" + "minipass": "^2.9.0" } }, - "has-unicode": { + "mkdirp": { + "version": "0.5.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { "version": "2.0.1", "bundled": true, "dev": true, "optional": true }, - "iconv-lite": { - "version": "0.4.21", + "rc": { + "version": "1.2.8", "bundled": true, "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" } }, - "ignore-walk": { + "readable-stream": { + "version": "2.3.7", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true }, - "inflight": { - "version": "1.0.6", + "wide-align": { + "version": "1.1.3", "bundled": true, "dev": true, "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "string-width": "^1.0.2 || 2" } }, - "inherits": { - "version": "2.0.3", + "wrappy": { + "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, - "ini": { - "version": "1.3.5", + "yallist": { + "version": "3.1.1", "bundled": true, "dev": true, "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + }, + "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-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "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=", + "requires": { + "is-glob": "^2.0.0" + } }, - "is-fullwidth-code-point": { + "is-extglob": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "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", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "glob-watcher": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", + "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "object.defaults": "^1.1.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "grunt": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.1.0.tgz", + "integrity": "sha512-+NGod0grmviZ7Nzdi9am7vuRS/h76PcWDsV635mEXF0PEQMUV6Kb+OjTdsVxbi0PZmfQOjCMKb3w8CVZcqsn1g==", + "dev": true, + "requires": { + "coffeescript": "~1.10.0", + "dateformat": "~1.0.12", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.3.0", + "glob": "~7.0.0", + "grunt-cli": "~1.2.0", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~2.0.0", + "grunt-legacy-util": "~1.1.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.13.1", + "minimatch": "~3.0.2", + "mkdirp": "~1.0.3", + "nopt": "~3.0.6", + "path-is-absolute": "~1.0.0", + "rimraf": "~2.6.2" + }, + "dependencies": { + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "glob": "~5.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, + "grunt-cli": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", "dev": true, "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "findup-sync": "~0.3.0", + "grunt-known-options": "~1.1.0", + "nopt": "~3.0.6", + "resolve": "~1.1.0" } }, - "minizlib": { - "version": "1.1.0", - "bundled": true, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, - "optional": true, "requires": { - "minipass": "^2.2.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.3.tgz", + "integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "resolve": { + "version": "1.1.7", + "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true }, - "rc": { - "version": "1.2.7", - "bundled": true, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, - "optional": true, "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "glob": "^7.1.3" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, - "optional": 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" + } } } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": 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" + } + } + }, + "grunt-known-options": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", + "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", + "dev": true + }, + "grunt-legacy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "dev": true, + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } + } + }, + "grunt-legacy-log-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "dev": true, + "requires": { + "chalk": "~2.4.1", + "lodash": "~4.17.10" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" } }, - "rimraf": { - "version": "2.6.2", - "bundled": true, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "optional": true, "requires": { - "glob": "^7.0.5" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { + "supports-color": { "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "optional": true + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "grunt-legacy-util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "dev": true, + "requires": { + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.10", + "underscore.string": "~3.3.4", + "which": "~1.3.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } + } + }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true }, - "string-width": { - "version": "1.0.2", - "bundled": true, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, + "gulp-cli": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", + "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", "dev": true, - "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.1.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.0.1", + "yargs": "^7.1.0" } }, - "strip-ansi": { - "version": "3.0.1", - "bundled": 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": { - "ansi-regex": "^2.0.0" + "number-is-nan": "^1.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, - "optional": true + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } }, - "tar": { - "version": "4.4.1", - "bundled": true, + "os-locale": { + "version": "1.4.0", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, - "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "lcid": "^1.0.0" } }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, - "optional": true + "requires": { + "pinkie-promise": "^2.0.0" + } }, - "wide-align": { - "version": "1.1.2", - "bundled": true, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, - "optional": true, "requires": { - "string-width": "^1.0.2" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "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-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.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", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "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=", + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "is-glob": "^2.0.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.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 + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^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=", + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.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-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "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" + "is-utf8": "^0.2.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" } } } }, - "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "object.defaults": "^1.1.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "optional": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, + "gulp-if": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", + "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", "requires": { - "sparkles": "^1.0.0" + "gulp-match": "^1.0.3", + "ternary-stream": "^2.0.1", + "through2": "^2.0.1" } }, - "got": { - "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "optional": true, + "gulp-match": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz", + "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==", "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "minimatch": "^3.0.3" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "grunt": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz", - "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==", - "dev": true, + "gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", "requires": { - "coffeescript": "~1.10.0", - "dateformat": "~1.0.12", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", - "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~2.0.0", - "grunt-legacy-util": "~1.1.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.5.2", - "minimatch": "~3.0.2", - "mkdirp": "~0.5.1", - "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.6.2" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" }, - "grunt-cli": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", - "dev": true, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "requires": { - "findup-sync": "~0.3.0", - "grunt-known-options": "~1.1.0", - "nopt": "~3.0.6", - "resolve": "~1.1.0" + "is-utf8": "^0.2.0" } }, - "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", - "dev": true, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" } - }, - "resolve": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true } } }, - "grunt-known-options": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", - "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", - "dev": true - }, - "grunt-legacy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", - "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "gulp-spawn-mocha": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/gulp-spawn-mocha/-/gulp-spawn-mocha-3.3.1.tgz", + "integrity": "sha512-0DoyYQ4+MmARhs6N0Yr5+Sm8K8aN0SwJoxpRl6YfWPP2nZhMLHtDx7grm7Bw5cr0VR2urkG/p36rRAbCqzaP2A==", "dev": true, "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.5" + "gulp-util": "~3.0.7", + "lodash": "^4.11.1", + "through": "~2.3.4" }, "dependencies": { "lodash": { @@ -3449,294 +5936,343 @@ } } }, - "grunt-legacy-log-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", - "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "gulp-tslint": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/gulp-tslint/-/gulp-tslint-8.1.4.tgz", + "integrity": "sha512-wBoZIEMJRz9urHwolsvQpngA9l931p6g/Liwz1b/KrsVP6jEBFZv/o0NS1TFCQZi/l8mXxz8+v3twhf4HOXxPQ==", "dev": true, "requires": { - "chalk": "~2.4.1", - "lodash": "~4.17.10" + "@types/fancy-log": "1.3.0", + "ansi-colors": "^1.0.1", + "fancy-log": "1.3.3", + "map-stream": "~0.0.7", + "plugin-error": "1.0.1", + "through": "~2.3.8" + } + }, + "gulp-typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-3.2.4.tgz", + "integrity": "sha512-bZosNvbUGzFA4bjjWoUPyjU5vfgJSzlYKkU0Jutbsrj+td8yvtqxethhqfzB9MwyamaUODIuidj5gIytZ523Bw==", + "dev": true, + "requires": { + "gulp-util": "~3.0.7", + "source-map": "~0.5.3", + "through2": "~2.0.1", + "vinyl-fs": "~2.4.3" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "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": { - "color-convert": "^1.9.0" + "arr-flatten": "^1.0.1" } }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "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": { - "has-flag": "^3.0.0" + "is-posix-bracket": "^0.1.0" } - } - } - }, - "grunt-legacy-util": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", - "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", - "dev": true, - "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.10", - "underscore.string": "~3.3.4", - "which": "~1.3.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - } - } - }, - "gulp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", - "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=", - "dev": true, - "requires": { - "glob-watcher": "^5.0.0", - "gulp-cli": "^2.0.0", - "undertaker": "^1.0.0", - "vinyl-fs": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "is-extglob": "^1.0.0" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } } }, - "gulp-cli": { + "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/gulp-cli/-/gulp-cli-2.0.1.tgz", - "integrity": "sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.1.0", - "isobject": "^3.0.1", - "liftoff": "^2.5.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", - "yargs": "^7.1.0" + "is-extglob": "^1.0.0" } }, - "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" - } + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "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": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "is-buffer": "^1.1.5" } }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "lcid": "^1.0.0" + "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" } }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" } }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "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" } }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "safe-buffer": "~5.1.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "is-utf8": "^0.2.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "extend-shallow": "^2.0.1" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" } }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", "dev": true, "requires": { - "camelcase": "^3.0.0" + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" } } } - }, - "gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", - "dev": true, - "requires": { - "concat-with-sourcemaps": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.0.0" - } - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "convert-source-map": "^1.1.1", - "graceful-fs": "^4.1.2", - "strip-bom": "^2.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", "through2": "^2.0.0", - "vinyl": "^1.0.0" + "vinyl": "^0.5.0" }, "dependencies": { "clone": { @@ -3751,25 +6287,34 @@ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, "replace-ext": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { "clone": "^1.0.0", @@ -3779,258 +6324,286 @@ } } }, - "gulp-spawn-mocha": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/gulp-spawn-mocha/-/gulp-spawn-mocha-3.3.1.tgz", - "integrity": "sha512-0DoyYQ4+MmARhs6N0Yr5+Sm8K8aN0SwJoxpRl6YfWPP2nZhMLHtDx7grm7Bw5cr0VR2urkG/p36rRAbCqzaP2A==", + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "gulp-util": "~3.0.7", - "lodash": "^4.11.1", - "through": "~2.3.4" + "glogg": "^1.0.0" + } + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" }, "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" } } }, - "gulp-tslint": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/gulp-tslint/-/gulp-tslint-8.1.3.tgz", - "integrity": "sha512-KEP350N5B9Jg6o6jnyCyKVBPemJePYpMsGfIQq0G0ErvY7tw4Lrfb/y3L4WRf7ek0OsaE8nnj86w+lcLXW8ovw==", + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "@types/fancy-log": "1.3.0", - "chalk": "2.3.1", - "fancy-log": "1.3.2", - "map-stream": "~0.0.7", - "plugin-error": "1.0.1", - "through": "~2.3.8" + "sparkles": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "ansi-styles": "^3.2.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.2.0" + "is-buffer": "^1.1.5" } - }, - "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", - "dev": true, + } + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "time-stamp": "^1.0.0" + "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" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "has-flag": "^3.0.0" + "safe-buffer": "~5.1.0" } } } }, - "gulp-typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-3.2.4.tgz", - "integrity": "sha512-bZosNvbUGzFA4bjjWoUPyjU5vfgJSzlYKkU0Jutbsrj+td8yvtqxethhqfzB9MwyamaUODIuidj5gIytZ523Bw==", - "dev": true, + "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==", "requires": { - "gulp-util": "~3.0.7", - "source-map": "~0.5.3", - "through2": "~2.0.1", - "vinyl-fs": "~2.4.3" + "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" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "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=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "requires": { + "http-proxy": "^1.16.2", + "is-glob": "^3.1.0", + "lodash": "^4.17.2", + "micromatch": "^2.3.11" }, "dependencies": { "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 + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" }, "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" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, "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" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, "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" } }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^5.0.3", - "glob-parent": "^3.0.0", - "micromatch": "^2.3.7", - "ordered-read-streams": "^0.3.0", - "through2": "^0.6.0", - "to-absolute-glob": "^0.1.1", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.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" - } - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "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" } }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, "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", @@ -4045,808 +6618,1268 @@ "object.omit": "^2.0.0", "parse-glob": "^3.0.4", "regex-cache": "^0.4.2" + }, + "dependencies": { + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } } - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "^4.3.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, + "optional": true, "requires": { - "is-stream": "^1.0.1", - "readable-stream": "^2.0.1" + "ms": "^2.1.1" } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, + "optional": true + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "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==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz", + "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=" + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "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" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { - "safe-buffer": "~5.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "is-utf8": "^0.2.0" + "color-name": "~1.1.4" } }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", - "dev": true, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "extend-shallow": "^2.0.1" + "ansi-regex": "^5.0.0" } }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" + "has-flag": "^4.0.0" } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, + } + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "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 + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "duplexify": "^3.2.0", - "glob-stream": "^5.3.2", - "graceful-fs": "^4.0.0", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "^0.3.0", - "lazystream": "^1.0.0", - "lodash.isequal": "^4.0.0", - "merge-stream": "^1.0.0", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.0", - "readable-stream": "^2.0.4", - "strip-bom": "^2.0.0", - "strip-bom-stream": "^1.0.0", - "through2": "^2.0.0", - "through2-filter": "^2.0.0", - "vali-date": "^1.0.0", - "vinyl": "^1.0.0" + "is-buffer": "^1.1.5" } } } }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" + "binary-extensions": "^1.0.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==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" }, "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "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=", + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" + "is-buffer": "^1.1.5" } } } }, - "gulplog": { + "is-obj": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "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=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-redirect": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "glogg": "^1.0.0" + "is-unc-path": "^1.0.0" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "unc-path-regex": "^0.1.2" } }, - "has-ansi": { + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.2.tgz", + "integrity": "sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ==", "requires": { - "isarray": "2.0.1" + "minimist": "^1.2.5" }, "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" } } }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" + "jsonschema": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.5.tgz", + "integrity": "sha512-kVTF+08x25PQ0CjuVc0gRM9EUPb0Fe9Ln/utFOgcdxEIOHuU7ooBk/UPTd7t1M91pP35m0MU1T8M5P7vP1bRRw==" }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "just-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", + "dev": true }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "requires": { + "colornames": "^1.1.1" + } + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", "dev": true, "requires": { - "sparkles": "^1.0.0" + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" } }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "requires": { + "package-json": "^4.0.0" + } }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "launchpad": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/launchpad/-/launchpad-0.7.5.tgz", + "integrity": "sha512-gsYFgT8XKL3X2XZHPPPrgwM0JqeQwGpSWnzg7EYadBY3MirbQrTVq6L4fm6l7UE2T+7gnfuhiGkKr/xxuU/fdw==", + "dev": true, + "optional": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "async": "^2.0.1", + "browserstack": "^1.2.0", + "debug": "^2.2.0", + "mkdirp": "^0.5.1", + "plist": "^2.0.1", + "q": "^1.4.1", + "rimraf": "^3.0.0", + "underscore": "^1.8.3" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "underscore": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", + "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", + "dev": true, + "optional": true + } } }, - "has-values": { + "lazystream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "readable-stream": "^2.0.5" }, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "is-buffer": "^1.1.5" + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" } } } }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, "requires": { - "parse-passwd": "^1.0.0" + "invert-kv": "^1.0.0" } }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "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=", + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "flush-write-stream": "^1.0.2" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "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" + } + } } }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "optional": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "optional": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "load-json-file": { + "version": "2.0.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "repeating": "^2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "lodash": { + "version": "3.10.1", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", "dev": true }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "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=", + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", "dev": true }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", "dev": true }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "optional": true, - "requires": { - "ci-info": "^1.5.0" - } + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } + "lodash._root": "^3.0.0" } }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", "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" - } + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, "requires": { - "is-extglob": "^2.1.0" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "optional": true, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "optional": true + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" + "logform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", + "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.2.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "optional": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "optional": true, - "requires": { - "path-is-inside": "^1.0.1" - } + "lolex": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", + "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=" }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "isobject": "^3.0.1" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "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-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "optional": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "requires": { - "is-unc-path": "^1.0.0" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "optional": true + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "requires": { + "vlq": "^0.2.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "requires": { - "unc-path-regex": "^0.1.2" + "kind-of": "^6.0.2" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", + "dev": true }, - "isarray": { + "map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } }, - "isexe": { + "matchdep": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "requires": { + "escape-string-regexp": "^1.0.4" + } }, - "json-stable-stringify-without-jsonify": { + "math-random": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" } }, - "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" + "mimic-fn": "^1.0.0" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + } } }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "optional": true, - "requires": { - "package-json": "^4.0.0" - } + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "requires": { - "readable-stream": "^2.0.5" + "readable-stream": "^2.0.1" }, "dependencies": { "readable-stream": { @@ -4873,449 +7906,525 @@ } } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "invert-kv": "^1.0.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "requires": { - "flush-write-stream": "^1.0.2" + "mime-db": "~1.37.0" } }, - "liftoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", - "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", - "dev": true, + "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 + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "extend": "^3.0.0", - "findup-sync": "^2.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "brace-expansion": "^1.1.7" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, + "minimatch-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz", + "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "minimatch": "^3.0.2" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } } } }, - "locate-path": { + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mout": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mout/-/mout-1.1.0.tgz", + "integrity": "sha512-XsP0vf4As6BfqglxZqbqQ8SR6KQot2AgxvR0gG+WtUkf90vUXchMOZQtPf/Hml1rEffJupqL/tIrU6EYhsUQjw==" + }, + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" } }, - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + "multipipe": { + "version": "0.1.2", + "resolved": "http://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", "dev": true }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "next-tick": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "requires": { + "chalk": "~0.4.0", + "underscore": "~1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=" + }, + "chalk": { + "version": "0.4.0", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=" + } + } }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, "requires": { - "lodash._root": "^3.0.0" + "once": "^1.3.2" } }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" + "isobject": "^3.0.0" } }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "optional": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "^1.0.1" + } + } } }, - "make-dir": { + "object.pick": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "optional": true, + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { - "pify": "^3.0.0" + "isobject": "^3.0.1" } }, - "make-iterator": { + "object.reduce": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", "dev": true, "requires": { - "kind-of": "^6.0.2" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" + "ee-first": "1.1.1" } }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "mimic-fn": "^1.0.0" + "wrappy": "1" } }, - "meow": { - "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "mimic-fn": "^2.1.0" }, "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { + "mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" } } }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true + "opn": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", + "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", + "requires": { + "object-assign": "^4.0.1" + } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } }, - "merge-stream": { + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ordered-read-streams": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "dev": true, "requires": { "readable-stream": "^2.0.1" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -5338,299 +8447,637 @@ } } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "os-homedir": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { - "mime-db": "~1.37.0" + "p-limit": "^1.1.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==", + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { - "brace-expansion": "^1.1.7" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, - "minimist": { - "version": "0.0.10", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "^2.2.0" + } }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "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==", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "callsites": "^3.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "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=", + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "requires": { - "is-plain-object": "^2.0.4" + "is-extglob": "^1.0.0" } } } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "error-ex": "^1.2.0" } }, - "mout": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mout/-/mout-1.1.0.tgz", - "integrity": "sha512-XsP0vf4As6BfqglxZqbqQ8SR6KQot2AgxvR0gG+WtUkf90vUXchMOZQtPf/Hml1rEffJupqL/tIrU6EYhsUQjw==" + "parse-node-version": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.0.tgz", + "integrity": "sha512-02GTVHD1u0nWc20n2G7WX/PgdhNFG04j5fi1OkaJzPWLTcf6vh6229Lta1wTmXG/7Dg42tCssgkccVt7qvd8Kg==", + "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" }, - "multer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.1.tgz", - "integrity": "sha512-zzOLNRxzszwd+61JFuAo0fxdQfvku12aNJgnla0AQ+hHxFmfc/B7jBVuPr5Rmvu46Jze/iJrFpSOsD7afO8SDw==", + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "requires": { - "append-field": "^1.0.0", - "busboy": "^0.2.11", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.1", - "on-finished": "^2.3.0", - "type-is": "^1.6.4", - "xtend": "^4.0.0" + "better-assert": "~1.0.0" } }, - "multipipe": { - "version": "0.1.2", - "resolved": "http://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "requires": { - "duplexer2": "0.0.2" + "better-assert": "~1.0.0" } }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true, - "optional": true + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, - "native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=" + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, - "next-tick": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, "requires": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" + "pify": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=" - }, - "chalk": { - "version": "0.4.0", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=" + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true } } }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, + "pem": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/pem/-/pem-1.14.4.tgz", + "integrity": "sha512-v8lH3NpirgiEmbOqhx0vwQTxwi0ExsiWBGYh0jYNq7K6mQuO4gI6UEFlr6fLAdv9TPXRt6GqiwE37puQdIDS8g==", "requires": { - "abbrev": "1" + "es6-promisify": "^6.0.0", + "md5": "^2.2.1", + "os-tmpdir": "^1.0.1", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } } }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true, + "optional": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "pinkie": "^2.0.0" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "plist": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", + "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", + "dev": true, + "optional": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "base64-js": "1.2.0", + "xmlbuilder": "8.2.2", + "xmldom": "0.1.x" + }, + "dependencies": { + "base64-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", + "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", + "dev": true, + "optional": true + } } }, - "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, "requires": { - "once": "^1.3.2" + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "plylog": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/plylog/-/plylog-1.1.0.tgz", + "integrity": "sha512-/QnY5aSVaP54va6hruzNtAj02HpsLlAt7V5EndMrtq6ZUTZJKUja43rgiUtGXqm95yrSJjbZoPW0yQQQwLpoJA==", "requires": { - "path-key": "^2.0.0" + "logform": "^1.9.1", + "winston": "^3.0.0", + "winston-transport": "^4.2.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + "polymer-analyzer": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.2.4.tgz", + "integrity": "sha512-JmxUhMajTuC18tLXbTtu2+aN2x9bTX+4MvCD4IZKJ0rtAL8jWi1iRLfogpHJB4Ig9Dc8EEEuEYipLuzPFl3vqA==", + "requires": { + "@babel/generator": "^7.0.0-beta.42", + "@babel/traverse": "^7.0.0-beta.42", + "@babel/types": "^7.0.0-beta.42", + "@types/babel-generator": "^6.25.1", + "@types/babel-traverse": "^6.25.2", + "@types/babel-types": "^6.25.1", + "@types/babylon": "^6.16.2", + "@types/chai-subset": "^1.3.0", + "@types/chalk": "^0.4.30", + "@types/clone": "^0.1.30", + "@types/cssbeautify": "^0.3.1", + "@types/doctrine": "^0.0.1", + "@types/is-windows": "^0.2.0", + "@types/minimatch": "^3.0.1", + "@types/parse5": "^2.2.34", + "@types/path-is-inside": "^1.0.0", + "@types/resolve": "0.0.6", + "@types/whatwg-url": "^6.4.0", + "babylon": "^7.0.0-beta.42", + "cancel-token": "^0.1.1", + "chalk": "^1.1.3", + "clone": "^2.0.0", + "cssbeautify": "^0.3.1", + "doctrine": "^2.0.2", + "dom5": "^3.0.0", + "indent": "0.0.2", + "is-windows": "^1.0.2", + "jsonschema": "^1.1.0", + "minimatch": "^3.0.4", + "parse5": "^4.0.0", + "path-is-inside": "^1.0.2", + "resolve": "^1.5.0", + "shady-css-parser": "^0.1.0", + "stable": "^0.1.6", + "strip-indent": "^2.0.0", + "vscode-uri": "=1.0.6", + "whatwg-url": "^6.4.0" + }, + "dependencies": { + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/resolve": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz", + "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==", + "requires": { + "@types/node": "*" + } + }, + "babylon": { + "version": "7.0.0-beta.47", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", + "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==" + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + } + } }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "polymer-build": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/polymer-build/-/polymer-build-3.1.4.tgz", + "integrity": "sha512-OhTOPG5Y/tK2HqGZ5XA/CVDh+TuOaDv7wTZWXDCg6hxeMgNKuljDMn2coyGU5NLM0pLbS+gwFAc2ZJ5cWHCHNg==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-external-helpers": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-async-generators": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-import-meta": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-duplicate-keys": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-instanceof": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-amd": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typeof-symbol": "^7.0.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@polymer/esm-amd-loader": "^1.0.0", + "@types/babel-types": "^6.25.1", + "@types/babylon": "^6.16.2", + "@types/gulp-if": "0.0.33", + "@types/html-minifier": "^3.5.1", + "@types/is-windows": "^0.2.0", + "@types/mz": "0.0.31", + "@types/parse5": "^2.2.34", + "@types/resolve": "0.0.7", + "@types/uuid": "^3.4.3", + "@types/vinyl": "^2.0.0", + "@types/vinyl-fs": "^2.4.8", + "babel-plugin-minify-guarded-expressions": "^0.4.3", + "babel-preset-minify": "^0.5.0", + "babylon": "^7.0.0-beta.42", + "css-slam": "^2.1.2", + "dom5": "^3.0.0", + "gulp-if": "^2.0.2", + "html-minifier": "^3.5.10", + "matcher": "^1.1.0", + "multipipe": "^1.0.2", + "mz": "^2.6.0", + "parse5": "^4.0.0", + "plylog": "^1.0.0", + "polymer-analyzer": "^3.1.3", + "polymer-bundler": "^4.0.9", + "polymer-project-config": "^4.0.3", + "regenerator-runtime": "^0.11.1", + "stream": "0.0.2", + "sw-precache": "^5.1.1", + "uuid": "^3.2.1", + "vinyl": "^1.2.0", + "vinyl-fs": "^2.4.4" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "@types/mz": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.31.tgz", + "integrity": "sha1-pNgMCC/v5x5Ap8DwfR5lVbu8e1I=", + "requires": { + "@types/node": "*" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "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=" + }, + "babylon": { + "version": "7.0.0-beta.47", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", + "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "requires": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.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=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "requires": { - "is-descriptor": "^0.1.0" + "is-extglob": "^1.0.0" } }, + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -5638,135 +9085,49 @@ "requires": { "is-buffer": "^1.1.5" } - } - } - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "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" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "requires": { - "for-in": "^1.0.1" + "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" } - } - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { + }, + "multipipe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", + "integrity": "sha1-zBPv2DPJzamfIk+GhGG44aP9k50=", + "requires": { + "duplexer2": "^0.1.2", + "object-assign": "^4.1.0" + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "requires": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + } + }, "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5777,298 +9138,219 @@ "util-deprecate": "~1.0.1" } }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "requires": { + "extend-shallow": "^2.0.1" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "requires": { + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" + } } } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "optional": true, + "polymer-bundler": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/polymer-bundler/-/polymer-bundler-4.0.10.tgz", + "integrity": "sha512-nwlN3LQlQDqbZ2sUH3394C/dHZUDHq8tpdS5HARvPDb0Q9IXWD+znOR1cr7wSjF0EZN4LiUH5hWyUoV4QSjhpQ==", "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "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" + "@types/babel-generator": "^6.25.1", + "@types/babel-traverse": "^6.25.3", + "babel-generator": "^6.26.1", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "clone": "^2.1.0", + "command-line-args": "^5.0.2", + "command-line-usage": "^5.0.5", + "dom5": "^3.0.0", + "espree": "^3.5.2", + "magic-string": "^0.22.4", + "mkdirp": "^0.5.1", + "parse5": "^4.0.0", + "polymer-analyzer": "^3.2.2", + "rollup": "^1.3.0", + "source-map": "^0.5.6", + "vscode-uri": "=1.0.6" }, "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 + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" }, - "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, + "rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", "requires": { - "is-extglob": "^1.0.0" + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" } } } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-node-version": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.0.tgz", - "integrity": "sha512-02GTVHD1u0nWc20n2G7WX/PgdhNFG04j5fi1OkaJzPWLTcf6vh6229Lta1wTmXG/7Dg42tCssgkccVt7qvd8Kg==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "optional": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" + "polymer-project-config": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-4.0.3.tgz", + "integrity": "sha512-Drr+Imq+znhBC8XSt9pMlmPixoGnIOmleV5SD6mto1zOGC5oCDbSNsQL2v89DWOk+9aSUO79vnWwOmEPDSvYfw==", + "requires": { + "@types/parse5": "^2.2.34", + "browser-capabilities": "^1.0.0", + "jsonschema": "^1.1.1", + "minimatch-all": "^1.1.0", + "plylog": "^1.0.0", + "winston": "^3.0.0" + } + }, + "polyserve": { + "version": "0.27.15", + "resolved": "https://registry.npmjs.org/polyserve/-/polyserve-0.27.15.tgz", + "integrity": "sha512-AaFgANt+tUUVgHLw+BnaVYcn649JiwL1ru0TOZUKj1gGGn/Bq2S16gxql+1muGpRaAsgFu13Zu7k5XkwatwwSg==", + "requires": { + "@types/compression": "^0.0.33", + "@types/content-type": "^1.1.0", + "@types/escape-html": "0.0.20", + "@types/express": "^4.0.36", + "@types/mime": "^2.0.0", + "@types/mz": "0.0.29", + "@types/opn": "^3.0.28", + "@types/parse5": "^2.2.34", + "@types/pem": "^1.8.1", + "@types/resolve": "0.0.6", + "@types/serve-static": "^1.7.31", + "@types/spdy": "^3.4.1", + "bower-config": "^1.4.1", + "browser-capabilities": "^1.0.0", + "command-line-args": "^5.0.2", + "command-line-usage": "^5.0.5", + "compression": "^1.6.2", + "content-type": "^1.0.2", + "cors": "^2.8.4", + "escape-html": "^1.0.3", + "express": "^4.8.5", + "find-port": "^1.0.1", + "http-proxy-middleware": "^0.17.2", + "lru-cache": "^4.0.2", + "mime": "^2.3.1", + "mz": "^2.4.0", + "opn": "^3.0.2", + "pem": "^1.8.3", + "polymer-build": "^3.1.0", + "polymer-project-config": "^4.0.0", + "requirejs": "^2.3.4", + "resolve": "^1.5.0", + "send": "^0.16.2", + "spdy": "^3.3.3" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "@types/mime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", + "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" + }, + "@types/resolve": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz", + "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==", + "requires": { + "@types/node": "*" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" } } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "optional": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - } - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "optional": true + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" }, "pretty-hrtime": { "version": "1.0.3", @@ -6076,18 +9358,28 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.1" } }, "pseudomap": { @@ -6129,7 +9421,9 @@ "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true, + "optional": true }, "qs": { "version": "6.5.2", @@ -6140,7 +9434,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, "requires": { "is-number": "^4.0.0", "kind-of": "^6.0.0", @@ -6150,8 +9443,7 @@ "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" } } }, @@ -6161,14 +9453,38 @@ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "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==", "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": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "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==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + } } }, "rc": { @@ -6240,9 +9556,9 @@ }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -6278,23 +9594,47 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, "requires": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" } }, + "reduce-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", + "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=" + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "^1.4.0" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "requires": { + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" + } }, "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" } @@ -6308,11 +9648,28 @@ "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, "registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "optional": true, "requires": { "rc": "^1.1.6", "safe-buffer": "^5.0.1" @@ -6322,11 +9679,35 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "optional": true, "requires": { "rc": "^1.0.1" } }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -6367,7 +9748,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, "requires": { "is-finite": "^1.0.0" } @@ -6434,10 +9814,20 @@ "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=", "dev": true }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, "resolve": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", - "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "requires": { "path-parse": "^1.0.6" } @@ -6451,6 +9841,11 @@ "global-modules": "^1.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==" + }, "resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", @@ -6465,18 +9860,27 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "rollup": { @@ -6516,6 +9920,22 @@ } } }, + "run-async": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -6539,16 +9959,222 @@ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==" }, + "sauce-connect-launcher": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.3.1.tgz", + "integrity": "sha512-vIf9qDol3q2FlYzrKt0dr3kvec6LSjX2WS+/mVnAJIhqh1evSkPKCR2AzcJrnSmx9Xt9PtV0tLY7jYh0wsQi8A==", + "dev": true, + "optional": true, + "requires": { + "adm-zip": "~0.4.3", + "async": "^2.1.2", + "https-proxy-agent": "^3.0.0", + "lodash": "^4.16.6", + "rimraf": "^2.5.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "optional": true + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selenium-standalone": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.17.0.tgz", + "integrity": "sha512-5PSnDHwMiq+OCiAGlhwQ8BM9xuwFfvBOZ7Tfbw+ifkTnOy0PWbZmI1B9gPGuyGHpbQ/3J3CzIK7BYwrQ7EjtWQ==", + "dev": true, + "optional": true, + "requires": { + "async": "^2.6.2", + "commander": "^2.19.0", + "cross-spawn": "^6.0.5", + "debug": "^4.1.1", + "lodash": "^4.17.11", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "progress": "2.0.3", + "request": "2.88.0", + "tar-stream": "2.0.0", + "urijs": "^1.19.1", + "which": "^1.3.1", + "yauzl": "^2.10.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "optional": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "bl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", + "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": 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" + } + } + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "optional": 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" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true, + "optional": true + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "tar-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.0.0.tgz", + "integrity": "sha512-n2vtsWshZOVr/SY4KtslPoUlyNh06I2SGgAOCZmquCEjlbV/LjY2CY80rDtdQRHFOYXNlgBDo6Fr3ww2CWPOtA==", + "dev": true, + "optional": true, + "requires": { + "bl": "^2.2.0", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + } + } + }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "semver-diff": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "optional": true, "requires": { "semver": "^5.0.3" } @@ -6590,14 +10216,73 @@ } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "dependencies": { + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "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==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + } } }, "server-destroy": { @@ -6605,6 +10290,11 @@ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" }, + "serviceworker-cache-polyfill": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz", + "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=" + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -6637,6 +10327,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "shady-css-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz", + "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==" + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -6655,6 +10350,21 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "sinon": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", @@ -6690,6 +10400,26 @@ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==" }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -6788,16 +10518,16 @@ } }, "socket.io": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", - "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", + "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", "requires": { "debug": "~4.1.0", - "engine.io": "~3.3.1", + "engine.io": "~3.4.0", "has-binary2": "~1.0.2", "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.2.0", - "socket.io-parser": "~3.3.0" + "socket.io-client": "2.3.0", + "socket.io-parser": "~3.4.0" }, "dependencies": { "debug": { @@ -6809,28 +10539,28 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" }, "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", "requires": { "backo2": "1.0.2", "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.3.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", @@ -6842,37 +10572,77 @@ }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "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" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", "requires": { - "ms": "2.0.0" + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } } } }, "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz", + "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==", "requires": { "component-emitter": "1.2.1", - "debug": "~3.1.0", + "debug": "~4.1.0", "isarray": "2.0.1" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -6894,9 +10664,9 @@ } }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -6926,7 +10696,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -6935,14 +10704,12 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -6951,8 +10718,58 @@ "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==", - "dev": true + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "requires": { + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" + } + }, + "spdy-transport": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz", + "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", + "requires": { + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } }, "split-string": { "version": "3.1.0", @@ -6965,8 +10782,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.16.0", @@ -6984,11 +10800,15 @@ "tweetnacl": "~0.14.0" } }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "stacky": { "version": "1.3.1", @@ -7023,6 +10843,14 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "stream": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stream/-/stream-0.0.2.tgz", + "integrity": "sha1-f1Nj8Ff2WSxVlfALyAon9c7B8O8=", + "requires": { + "emitter-component": "^1.1.1" + } + }, "stream-exhaust": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", @@ -7032,8 +10860,7 @@ "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, "streamsearch": { "version": "0.1.2", @@ -7087,7 +10914,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, "requires": { "first-chunk-stream": "^1.0.0", "strip-bom": "^2.0.0" @@ -7097,7 +10923,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, "requires": { "is-utf8": "^0.2.0" } @@ -7113,7 +10938,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, "requires": { "get-stdin": "^4.0.1" } @@ -7138,40 +10962,210 @@ "es6-symbol": "^3.1.1" } }, + "sw-precache": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.1.tgz", + "integrity": "sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==", + "requires": { + "dom-urls": "^1.1.0", + "es6-promise": "^4.0.5", + "glob": "^7.1.1", + "lodash.defaults": "^4.2.0", + "lodash.template": "^4.4.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "pretty-bytes": "^4.0.2", + "sw-toolbox": "^3.4.0", + "update-notifier": "^2.3.0" + }, + "dependencies": { + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + } + } + }, + "sw-toolbox": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz", + "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=", + "requires": { + "path-to-regexp": "^1.0.1", + "serviceworker-cache-polyfill": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "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": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "table-layout": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", + "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", + "requires": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "requires": { + "typical": "^2.6.1" + } + }, + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" + } + } + }, "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "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" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + } + } + } + }, + "temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dev": true, + "optional": true, + "requires": { + "rimraf": "~2.6.2" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" } } } @@ -7180,27 +11174,61 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "optional": true, "requires": { "execa": "^0.7.0" } }, + "ternary-stream": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.1.1.tgz", + "integrity": "sha512-j6ei9hxSoyGlqTmoMjOm+QNvUKDOIY6bNl4Uh1lhBvl6yjPW2iLqxDUYyfDPZknQ4KdRziFl+ec99iT4l7g0cw==", + "requires": { + "duplexify": "^3.5.0", + "fork-stream": "^0.0.4", + "merge-stream": "^1.0.0", + "through2": "^2.0.1" + } + }, "text-encoding": { "version": "0.6.4", "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=" }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through": { "version": "2.3.8", "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -7210,7 +11238,6 @@ "version": "2.3.6", "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", @@ -7225,7 +11252,6 @@ "version": "1.1.1", "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -7236,7 +11262,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, "requires": { "through2": "~2.0.0", "xtend": "~4.0.0" @@ -7251,8 +11276,15 @@ "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "optional": true + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } }, "to-absolute-glob": { "version": "2.0.2", @@ -7269,16 +11301,10 @@ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, "to-object-path": { "version": "0.3.0", @@ -7327,6 +11353,11 @@ "through2": "^2.0.3" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -7343,11 +11374,103 @@ } } }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "^2.1.0" + } + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + }, + "tslint": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.0.tgz", + "integrity": "sha512-fXjYd/61vU6da04E505OZQGb2VCN2Mq3doeWcOIryuG+eqdmFUXTYVwdhnbEu2k46LNLgUYt9bI5icQze/j0bQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.10.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "requires": { + "tslib": "^1.8.1" + } }, "tunnel-agent": { "version": "0.6.0", @@ -7362,18 +11485,52 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, "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==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "requires": { + "mime-db": "1.43.0" + } + } } }, "typedarray": { @@ -7381,6 +11538,42 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typescript": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==" + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -7403,9 +11596,9 @@ } }, "undertaker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz", - "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", + "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", "dev": true, "requires": { "arr-flatten": "^1.0.1", @@ -7425,6 +11618,30 @@ "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", "dev": true }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -7461,7 +11678,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, "requires": { "json-stable-stringify-without-jsonify": "^1.0.1", "through2-filter": "^3.0.0" @@ -7471,7 +11687,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "optional": true, "requires": { "crypto-random-string": "^1.0.0" } @@ -7528,20 +11743,18 @@ "unzip-response": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "optional": true + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, "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.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "update-notifier": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "optional": true, "requires": { "boxen": "^1.2.1", "chalk": "^2.0.1", @@ -7559,7 +11772,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "optional": true, "requires": { "color-convert": "^1.9.0" } @@ -7568,7 +11780,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "optional": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -7579,13 +11790,17 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "optional": true, "requires": { "has-flag": "^3.0.0" } } } }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -7594,6 +11809,11 @@ "punycode": "^2.1.0" } }, + "urijs": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.2.tgz", + "integrity": "sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w==" + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -7603,7 +11823,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "optional": true, "requires": { "prepend-http": "^1.0.1" } @@ -7628,10 +11847,15 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" + }, "v8flags": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz", - "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", "dev": true, "requires": { "homedir-polyfill": "^1.0.1" @@ -7640,14 +11864,12 @@ "vali-date": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -7719,9 +11941,9 @@ }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -7759,6 +11981,16 @@ "vinyl": "^2.0.0" } }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" + }, + "vscode-uri": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.6.tgz", + "integrity": "sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww==" + }, "walkdir": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", @@ -7783,35 +12015,165 @@ } } }, - "wd": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/wd/-/wd-1.11.1.tgz", - "integrity": "sha512-XNK6EbOrXF7cG8f3pbps6mb/+xPGZH2r1AL1zGJluGynA/Xt6ip1Tvqj2AkavyDFworreaGXoe+0AP/r7EX9pg==", + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "requires": { - "archiver": "2.1.1", - "async": "2.0.1", - "lodash": "4.17.11", - "mkdirp": "^0.5.1", - "q": "1.4.1", - "request": "2.88.0", - "vargs": "0.1.0" + "minimalistic-assert": "^1.0.0" + } + }, + "wct-local": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/wct-local/-/wct-local-2.1.5.tgz", + "integrity": "sha512-eqoZhjGy4Xq2tY0uB46Grkw/ztq+/rC0ImbYKl62unFHXtOgal+kkvnxR3SLRFNM8ty9+ItgycPeH0IpTqVL+w==", + "dev": true, + "optional": true, + "requires": { + "@types/express": "^4.0.30", + "@types/freeport": "^1.0.19", + "@types/launchpad": "^0.6.0", + "@types/which": "^1.3.1", + "chalk": "^2.3.0", + "cleankill": "^2.0.0", + "freeport": "^1.0.4", + "launchpad": "^0.7.0", + "selenium-standalone": "^6.7.0", + "which": "^1.0.8" }, "dependencies": { - "async": { - "version": "2.0.1", - "resolved": "http://registry.npmjs.org/async/-/async-2.0.1.tgz", - "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "wct-sauce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wct-sauce/-/wct-sauce-2.1.0.tgz", + "integrity": "sha512-c3R4PJcbpS7Gxv2vZ4HDAqpXV6cT9peslAWMU7hHH9PMhKDPbn8RNa6E4DVL0tOmZznB+3cRmtZ6+vJ/aDwu1A==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^2.4.1", + "cleankill": "^2.0.0", + "lodash": "^4.17.10", + "request": "^2.85.0", + "sauce-connect-launcher": "^1.0.0", + "temp": "^0.8.1", + "uuid": "^3.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "optional": true, "requires": { - "lodash": "^4.8.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true, + "optional": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "wd": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/wd/-/wd-1.12.1.tgz", + "integrity": "sha512-O99X8OnOgkqfmsPyLIRzG9LmZ+rjmdGFBCyhGpnsSL4MB4xzHoeWmSVcumDiQ5QqPZcwGkszTgeJvjk2VjtiNw==", + "requires": { + "archiver": "^3.0.0", + "async": "^2.0.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.1", + "q": "^1.5.1", + "request": "2.88.0", + "vargs": "^0.1.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" } } }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -7830,16 +12192,132 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "optional": true, "requires": { "string-width": "^2.1.1" } }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "dependencies": { + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "requires": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" }, + "wordwrapjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", + "requires": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + }, + "dependencies": { + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" + } + } + }, "wrap-ansi": { "version": "2.1.0", "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -7877,11 +12355,18 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + }, "write-file-atomic": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "optional": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -7889,18 +12374,29 @@ } }, "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", + "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==" }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", + "dev": true, + "optional": true + }, + "xmldom": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", + "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", + "dev": true, + "optional": true + }, "xmlhttprequest-ssl": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", @@ -7952,47 +12448,53 @@ "camelcase": "^4.1.0" } }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "optional": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" }, "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", + "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" + "archiver-utils": "^2.1.0", + "compress-commons": "^2.1.1", + "readable-stream": "^3.4.0" }, "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "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" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } } } diff --git a/package.json b/package.json index a3b3f5e..50b2d06 100644 --- a/package.json +++ b/package.json @@ -55,29 +55,32 @@ "dependencies": { "@polymer/sinonjs": "^1.14.1", "@polymer/test-fixture": "^0.0.3", - "@webcomponents/webcomponentsjs": "^1.0.7", + "@webcomponents/webcomponentsjs": "^1.3.3", "accessibility-developer-tools": "^2.12.0", - "async": "^2.4.1", - "body-parser": "^1.17.2", + "async": "^2.6.3", + "body-parser": "^1.19.0", "bower-config": "^1.4.0", "chalk": "^1.1.3", "cleankill": "^2.0.0", - "express": "^4.15.3", + "eslint": "^6.8.0", + "express": "^4.17.1", "findup-sync": "^2.0.0", - "glob": "^7.1.2", + "glob": "^7.1.6", "lodash": "^3.10.1", - "multer": "^1.3.0", + "multer": "^1.4.2", "nomnom": "^1.8.1", "polyserve": "^0.27.13", - "resolve": "^1.5.0", - "semver": "^5.3.0", + "resolve": "^1.15.1", + "semver": "^5.7.1", "send": "^0.16.1", "server-destroy": "^1.0.1", "sinon": "^2.3.5", "sinon-chai": "^2.10.0", - "socket.io": "^2.0.3", + "socket.io": "^2.3.0", "stacky": "^1.3.1", - "wd": "^1.2.0" + "tslint": "^6.1.0", + "typescript": "^3.8.3", + "wd": "^1.12.1" }, "optionalDependencies": { "update-notifier": "^2.2.0", @@ -87,12 +90,12 @@ "devDependencies": { "@types/body-parser": "0.0.33", "@types/chalk": "^0.4.31", - "@types/express": "^4.0.33", - "@types/express-serve-static-core": "^4.0.39", + "@types/express": "^4.17.3", + "@types/express-serve-static-core": "^4.17.2", "@types/glob": "^5.0.30", - "@types/grunt": "^0.4.20", - "@types/gulp": "^4.0.0", - "@types/lodash": "^4.14.38", + "@types/grunt": "^0.4.25", + "@types/gulp": "^4.0.6", + "@types/lodash": "^4.14.149", "@types/mime": "0.0.29", "@types/minimatch": "^2.0.29", "@types/multer": "0.0.32", @@ -103,17 +106,17 @@ "@types/sinon": "^1.16.31", "@types/socket.io": "^1.4.27", "@types/spdy": "^3.4.4", - "bower": "^1.7.9", + "bower": "^1.8.8", "depcheck": "^0.6.3", - "grunt": "^1.0.3", - "gulp": "^4.0.0", + "grunt": "^1.1.0", + "gulp": "^4.0.2", "gulp-concat": "^2.6.1", "gulp-spawn-mocha": "^3.1.0", - "gulp-tslint": "^8.1.2", + "gulp-tslint": "^8.1.4", "gulp-typescript": "^3.1.2", - "rimraf": "^2.5.4", + "rimraf": "^2.7.1", "rollup": "^0.25.1", - "source-map-support": "^0.5.4", + "source-map-support": "^0.5.16", "watch": "^0.18.0", "wct-local": "^2.1.1", "wct-sauce": "^2.0.2" From 509ed2fa2a870d485f08b9cab35aadf205da34b2 Mon Sep 17 00:00:00 2001 From: vsbharath <34461558+vsbharath@users.noreply.github.com> Date: Sun, 22 Mar 2020 20:17:14 -0700 Subject: [PATCH 6/7] Removing test-start event check. Removing test-start event check moving the logic to browser start. for each browser start the value will be reset testEndEventExpectedNext. --- runner/clireporter.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/runner/clireporter.js b/runner/clireporter.js index dd38ad1..8939ac4 100644 --- a/runner/clireporter.js +++ b/runner/clireporter.js @@ -75,13 +75,11 @@ var CliReporter = /** @class */ (function () { _this.updateStatus(); }); emitter.on('browser-start', function (browser, data, stats) { + testEndEventExpectedNext = true; _this.browserStats[browser.id] = stats; _this.log(browser, 'Beginning tests via', chalk.magenta(data.url)); _this.updateStatus(); }); - emitter.on('test-start', function (browser, data, stats) { - testEndEventExpectedNext = true; - }); emitter.on('test-end', function (browser, data, stats) { testEndEventExpectedNext = false; _this.browserStats[browser.id] = stats; From d6100ead4a5c8e5f620e9d7fdb709e0ca8101a90 Mon Sep 17 00:00:00 2001 From: Bharath Chadarajupalli Date: Mon, 9 Nov 2020 19:22:44 -0800 Subject: [PATCH 7/7] Updating the test count on the cli reporter --- runner/clireporter.js | 2 +- runner/clireporter.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runner/clireporter.js b/runner/clireporter.js index 8939ac4..3f4cf9f 100644 --- a/runner/clireporter.js +++ b/runner/clireporter.js @@ -150,7 +150,7 @@ var CliReporter = /** @class */ (function () { status = counts.join('/'); } if (stats.status === 'error') { - status = status + (status === '' ? '' : ' ') + chalk.red('error'); + status = '1/0/1'; } return padRight(pretty + ' (' + status + ')', STATUS_PAD); }); diff --git a/runner/clireporter.ts b/runner/clireporter.ts index d5e40e7..451ad77 100644 --- a/runner/clireporter.ts +++ b/runner/clireporter.ts @@ -201,7 +201,7 @@ export class CliReporter { status = counts.join('/'); } if (stats.status === 'error') { - status = status + (status === '' ? '' : ' ') + chalk.red('error'); + status = '1/0/1'; } return padRight(pretty + ' (' + status + ')', STATUS_PAD);