diff --git a/CHANGELOG.md b/CHANGELOG.md
index 43738ff94..1556bc8d0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,48 @@
+# [6.0.0](https://github.com/karma-runner/karma/compare/v5.2.3...v6.0.0) (2021-01-13)
+
+
+### Bug Fixes
+
+* **ci:** abandon browserstack tests for Safari and IE ([#3615](https://github.com/karma-runner/karma/issues/3615)) ([04a811d](https://github.com/karma-runner/karma/commit/04a811dc7a4b37aa56c0405880f03cb2493bf820))
+* **client:** do not reset karmaNavigating in unload handler ([#3591](https://github.com/karma-runner/karma/issues/3591)) ([4a8178f](https://github.com/karma-runner/karma/commit/4a8178f3a0504ef007b23ef0fd8f5ca128f0c5c6)), closes [#3482](https://github.com/karma-runner/karma/issues/3482)
+* **context:** do not error when karma is navigating ([#3565](https://github.com/karma-runner/karma/issues/3565)) ([05dc288](https://github.com/karma-runner/karma/commit/05dc28801627e3ce7054ae548046714dc2cf7a5e)), closes [#3560](https://github.com/karma-runner/karma/issues/3560)
+* **cve:** update ua-parser-js to 0.7.23 to fix CVE-2020-7793 ([#3584](https://github.com/karma-runner/karma/issues/3584)) ([f819fa8](https://github.com/karma-runner/karma/commit/f819fa843fa0633edbe2af6ac2889e25ea2cb639))
+* **cve:** update yargs to 16.1.1 to fix cve-2020-7774 in y18n ([#3578](https://github.com/karma-runner/karma/issues/3578)) ([3fed0bc](https://github.com/karma-runner/karma/commit/3fed0bc7dd042a09c8aec55c059654781a4584ec)), closes [#3577](https://github.com/karma-runner/karma/issues/3577)
+* **deps:** bump socket-io to v3 ([#3586](https://github.com/karma-runner/karma/issues/3586)) ([1b9e1de](https://github.com/karma-runner/karma/commit/1b9e1de7d081e1c205debff27c6b5e1fe0585dee)), closes [#3569](https://github.com/karma-runner/karma/issues/3569)
+* **middleware:** catch errors when loading a module ([#3605](https://github.com/karma-runner/karma/issues/3605)) ([fec972f](https://github.com/karma-runner/karma/commit/fec972ff63760f9606a4cef7673a68c55c880722)), closes [#3572](https://github.com/karma-runner/karma/issues/3572)
+* **server:** clean up close-server logic ([#3607](https://github.com/karma-runner/karma/issues/3607)) ([3fca456](https://github.com/karma-runner/karma/commit/3fca456a02a65304d6423d6311fb55f83e73d85e))
+* **test:** clear up clearContext ([#3597](https://github.com/karma-runner/karma/issues/3597)) ([8997b74](https://github.com/karma-runner/karma/commit/8997b7465de3c5f7e436078b57acae98de1ce39a))
+* **test:** mark all second connections reconnects ([#3598](https://github.com/karma-runner/karma/issues/3598)) ([1c9c2de](https://github.com/karma-runner/karma/commit/1c9c2de54fa1abcb2c0edceebb159440b77e4863))
+
+
+### Features
+
+* **cli:** error out on unexpected options or parameters ([#3589](https://github.com/karma-runner/karma/issues/3589)) ([603bbc0](https://github.com/karma-runner/karma/commit/603bbc0db2ef4e6b8474f97a8255587f2a5f924e))
+* **client:** update banner with connection, test status, ping times ([#3611](https://github.com/karma-runner/karma/issues/3611)) ([4bf90f7](https://github.com/karma-runner/karma/commit/4bf90f70f46cddf52a55d8f2b9ce0ccd2d4a4d3b))
+* **server:** print stack of unhandledrejections ([#3593](https://github.com/karma-runner/karma/issues/3593)) ([35a5842](https://github.com/karma-runner/karma/commit/35a584234b00297dc511300bb6e42eeaceac8345))
+* **server:** remove deprecated static methods ([#3595](https://github.com/karma-runner/karma/issues/3595)) ([1a65bf1](https://github.com/karma-runner/karma/commit/1a65bf1181bc9eb5c28ba0130ab7d90e89b21918))
+* remove support for running dart code in the browser ([#3592](https://github.com/karma-runner/karma/issues/3592)) ([7a3bd55](https://github.com/karma-runner/karma/commit/7a3bd5545fa1307c754419252fa35ff0b7572ae4))
+
+
+### BREAKING CHANGES
+
+* **server:** Deprecated `require('karma').server.start()` and `require('karma').Server.start()` variants were removed from the public API. Instead use canonical form:
+
+```
+const { Server } = require('karma');
+const server = new Server();
+server.start();
+```
+* **cli:** Karma is more strict and will error out if unknown option or argument is passed to CLI.
+* Using Karma to run Dart code in the browser is no longer supported. Use your favorite Dart-to-JS compiler instead.
+
+`dart` file type has been removed without a replacement.
+
+`customFileHandlers` DI token has been removed. Use [`middleware`](http://karma-runner.github.io/5.2/config/configuration-file.html#middleware) to achieve similar functionality.
+
+`customScriptTypes` DI token has been removed. It had no effect, so no replacement is provided.
+* **deps:** Some projects have socket.io tests that are version sensitive.
+
## [5.2.3](https://github.com/karma-runner/karma/compare/v5.2.2...v5.2.3) (2020-09-25)
diff --git a/LICENSE b/LICENSE
index d344a801f..2217a0478 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License
-Copyright (C) 2011-2019 Google, Inc.
+Copyright (C) 2011-2020 Google, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff --git a/appveyor.yml b/appveyor.yml
index 7c696c011..c80d3b651 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -24,7 +24,8 @@ install:
- npm run init:windows
test_script:
- - npm run test:appveyor
+ - npm run test:unit
+ - npm run test:client
build: off
diff --git a/client/karma.js b/client/karma.js
index 2bd4f2cf3..0734822ff 100644
--- a/client/karma.js
+++ b/client/karma.js
@@ -2,9 +2,10 @@ var stringify = require('../common/stringify')
var constant = require('./constants')
var util = require('../common/util')
-function Karma (socket, iframe, opener, navigator, location, document) {
+function Karma (updater, socket, iframe, opener, navigator, location, document) {
+ this.updater = updater
var startEmitted = false
- var reloadingContext = false
+ var karmaNavigating = false
var self = this
var queryParams = util.parseQueryParams(location.search)
var browserId = queryParams.id || util.generateId('manual-')
@@ -41,9 +42,11 @@ function Karma (socket, iframe, opener, navigator, location, document) {
}
}
- // This variable will be set to "true" whenever the socket lost connection and was able to
- // reconnect to the Karma server. This will be passed to the Karma server then, so that
- // Karma can differentiate between a socket client reconnect and a full browser reconnect.
+ // To start we will signal the server that we are not reconnecting. If the socket loses
+ // connection and was able to reconnect to the Karma server we will get a
+ // second 'connect' event. There we will pass 'true' and that will be passed to the
+ // Karma server then, so that Karma can differentiate between a socket client
+ // econnect and a full browser reconnect.
var socketReconnect = false
this.VERSION = constant.VERSION
@@ -80,6 +83,7 @@ function Karma (socket, iframe, opener, navigator, location, document) {
var childWindow = null
function navigateContextTo (url) {
+ karmaNavigating = true
if (self.config.useIframe === false) {
// run in new window
if (self.config.runInParent === false) {
@@ -89,9 +93,11 @@ function Karma (socket, iframe, opener, navigator, location, document) {
childWindow.close()
}
childWindow = opener(url)
+ karmaNavigating = false
// run context on parent element (client_with_context)
// using window.__karma__.scriptUrls to get the html element strings and load them dynamically
} else if (url !== 'about:blank') {
+ karmaNavigating = false
var loadScript = function (idx) {
if (idx < window.__karma__.scriptUrls.length) {
var parser = new DOMParser()
@@ -123,21 +129,15 @@ function Karma (socket, iframe, opener, navigator, location, document) {
// run in iframe
} else {
iframe.src = policy.createURL(url)
+ karmaNavigating = false
}
}
this.onbeforeunload = function () {
- if (!reloadingContext) {
+ if (!karmaNavigating) {
// TODO(vojta): show what test (with explanation about jasmine.UPDATE_INTERVAL)
self.error('Some of your tests did a full page reload!')
}
- reloadingContext = false
- }
-
- function clearContext () {
- reloadingContext = true
-
- navigateContextTo('about:blank')
}
this.log = function (type, args) {
@@ -191,6 +191,7 @@ function Karma (socket, iframe, opener, navigator, location, document) {
}
socket.emit('karma_error', message)
+ self.updater.updateTestStatus(`karma_error ${message}`)
this.complete()
return false
}
@@ -213,10 +214,12 @@ function Karma (socket, iframe, opener, navigator, location, document) {
if (!startEmitted) {
socket.emit('start', { total: null })
+ self.updater.updateTestStatus('start')
startEmitted = true
}
if (resultsBufferLimit === 1) {
+ self.updater.updateTestStatus('result')
return socket.emit('result', convertedResult)
}
@@ -224,6 +227,7 @@ function Karma (socket, iframe, opener, navigator, location, document) {
if (resultsBuffer.length === resultsBufferLimit) {
socket.emit('result', resultsBuffer)
+ self.updater.updateTestStatus('result')
resultsBuffer = []
}
}
@@ -234,14 +238,16 @@ function Karma (socket, iframe, opener, navigator, location, document) {
resultsBuffer = []
}
- if (self.config.clearContext) {
- // A test could have incorrectly issued a navigate. To clear the context
- // we will navigate the iframe. Delay ours to ensure the error from an
- // incorrect navigate is processed.
- setTimeout(clearContext)
- }
+ // A test could have incorrectly issued a navigate. Wait one turn
+ // to ensure the error from an incorrect navigate is processed.
+ setTimeout(() => {
+ if (this.config.clearContext) {
+ navigateContextTo('about:blank')
+ }
+
+ socket.emit('complete', result || {})
+ self.updater.updateTestStatus('complete')
- socket.emit('complete', result || {}, function () {
if (returnUrl) {
location.href = returnUrl
}
@@ -259,26 +265,24 @@ function Karma (socket, iframe, opener, navigator, location, document) {
}
socket.on('execute', function (cfg) {
- // Delay our navigation to the next event in case the clearContext has not completed.
- setTimeout(function allowClearContextToComplete () {
- // reset startEmitted and reload the iframe
- startEmitted = false
- self.config = cfg
-
- navigateContextTo(constant.CONTEXT_URL)
-
- if (self.config.clientDisplayNone) {
- [].forEach.call(document.querySelectorAll('#banner, #browsers'), function (el) {
- el.style.display = 'none'
- })
- }
+ self.updater.updateTestStatus('execute')
+ // reset startEmitted and reload the iframe
+ startEmitted = false
+ self.config = cfg
- // clear the console before run
- // works only on FF (Safari, Chrome do not allow to clear console from js source)
- if (window.console && window.console.clear) {
- window.console.clear()
- }
- })
+ navigateContextTo(constant.CONTEXT_URL)
+
+ if (self.config.clientDisplayNone) {
+ [].forEach.call(document.querySelectorAll('#banner, #browsers'), function (el) {
+ el.style.display = 'none'
+ })
+ }
+
+ // clear the console before run
+ // works only on FF (Safari, Chrome do not allow to clear console from js source)
+ if (window.console && window.console.clear) {
+ window.console.clear()
+ }
})
socket.on('stop', function () {
this.complete()
@@ -305,9 +309,6 @@ function Karma (socket, iframe, opener, navigator, location, document) {
info.displayName = displayName
}
socket.emit('register', info)
- })
-
- socket.on('reconnect', function () {
socketReconnect = true
})
}
diff --git a/client/main.js b/client/main.js
index d07aa71af..8780d8768 100644
--- a/client/main.js
+++ b/client/main.js
@@ -20,6 +20,6 @@ var socket = io(location.host, {
})
// instantiate the updater of the view
-new StatusUpdater(socket, util.elm('title'), util.elm('banner'), util.elm('browsers'))
-window.karma = new Karma(socket, util.elm('context'), window.open,
+var updater = new StatusUpdater(socket, util.elm('title'), util.elm('banner'), util.elm('browsers'))
+window.karma = new Karma(updater, socket, util.elm('context'), window.open,
window.navigator, window.location, window.document)
diff --git a/client/updater.js b/client/updater.js
index d8a5cbff0..3365b5253 100644
--- a/client/updater.js
+++ b/client/updater.js
@@ -21,26 +21,60 @@ function StatusUpdater (socket, titleElement, bannerElement, browsersElement) {
}
}
- function updateBanner (status) {
- return function (param) {
- if (!titleElement || !bannerElement) {
- return
- }
- var paramStatus = param ? status.replace('$', param) : status
- titleElement.textContent = 'Karma v' + VERSION + ' - ' + paramStatus
- bannerElement.className = status === 'connected' ? 'online' : 'offline'
+ var connectionText = 'never-connected'
+ var testText = 'loading'
+ var pingText = ''
+
+ function updateBanner () {
+ if (!titleElement || !bannerElement) {
+ return
}
+ titleElement.textContent = `Karma v ${VERSION} - ${connectionText}; test: ${testText}; ${pingText}`
+ bannerElement.className = connectionText === 'connected' ? 'online' : 'offline'
+ }
+
+ function updateConnectionStatus (connectionStatus) {
+ connectionText = connectionStatus || connectionText
+ updateBanner()
}
+ function updateTestStatus (testStatus) {
+ testText = testStatus || testText
+ updateBanner()
+ }
+ function updatePingStatus (pingStatus) {
+ pingText = pingStatus || pingText
+ updateBanner()
+ }
+
+ socket.on('connect', () => {
+ updateConnectionStatus('connected')
+ })
+ socket.on('disconnect', () => {
+ updateConnectionStatus('disconnected')
+ })
+ socket.on('reconnecting', (sec) => {
+ updateConnectionStatus(`reconnecting in ${sec} seconds`)
+ })
+ socket.on('reconnect', () => {
+ updateConnectionStatus('reconnected')
+ })
+ socket.on('reconnect_failed', () => {
+ updateConnectionStatus('reconnect_failed')
+ })
- socket.on('connect', updateBanner('connected'))
- socket.on('disconnect', updateBanner('disconnected'))
- socket.on('reconnecting', updateBanner('reconnecting in $ seconds...'))
- socket.on('reconnect', updateBanner('connected'))
- socket.on('reconnect_failed', updateBanner('failed to reconnect'))
socket.on('info', updateBrowsersInfo)
- socket.on('disconnect', function () {
+ socket.on('disconnect', () => {
updateBrowsersInfo([])
})
+
+ socket.on('ping', () => {
+ updatePingStatus('ping...')
+ })
+ socket.on('pong', (latency) => {
+ updatePingStatus(`ping ${latency}ms`)
+ })
+
+ return { updateTestStatus: updateTestStatus }
}
module.exports = StatusUpdater
diff --git a/docs/config/02-files.md b/docs/config/02-files.md
index 4c7debcb0..f85c4d772 100644
--- a/docs/config/02-files.md
+++ b/docs/config/02-files.md
@@ -31,7 +31,6 @@ Each pattern is either a simple string or an object with the following propertie
* `css` - Include using `` tag.
* `html` - Include using [HTML Imports](https://developer.mozilla.org/en-US/docs/Web/Web_Components/HTML_Imports). Note that this feature is obsolete and does not work in the modern browsers.
* `js` - Include using `` tag.
- * `dart` - Include using `` tag. Note that this does not work in the modern browsers.
* `module` - Include using `` tag.
* `dom` - Inline content of the file in the page. This can be used, for example, to test components combining HTML and JS.
* **Description.** The type determines the mechanism for including the file.
diff --git a/docs/dev/02-making-changes.md b/docs/dev/02-making-changes.md
index 489e978e2..02fa76c06 100644
--- a/docs/dev/02-making-changes.md
+++ b/docs/dev/02-making-changes.md
@@ -49,6 +49,8 @@ Here are some tips on how to set up a Karma workspace and how to send a good pul
- Build the client code via:
```bash
$ npm run build
+ # or use the watch mode
+ $ npm run build:watch
```
## Changing the Code
diff --git a/docs/dev/04-public-api.md b/docs/dev/04-public-api.md
index 783f8e8f5..ff327a41a 100644
--- a/docs/dev/04-public-api.md
+++ b/docs/dev/04-public-api.md
@@ -113,7 +113,7 @@ A test run starts.
* `browsers`: A collection of browser instances
* `results`: A list of results
-A test run was completed.
+This event gets triggered whenever all the browsers, which belong to a test run, finish. For example, on a run that has 3 browsers, one would expect 3 `browser_complete` events before the `run_complete` one.
## karma.runner
diff --git a/docs/dev/05-plugins.md b/docs/dev/05-plugins.md
index d785102fb..d9371e46a 100644
--- a/docs/dev/05-plugins.md
+++ b/docs/dev/05-plugins.md
@@ -34,7 +34,7 @@ A preprocessor is a function that accepts three arguments (`content`, `file`, an
- user NPM keywords `karma-plugin`, `karma-preprocessor`
## Crazier stuff
-Karma is assembled by Dependency Injection and a plugin is just an additional DI module (see [node-di] for more), that can be loaded by Karma. Therefore, it can ask for pretty much any Karma component and interact with it. There are a couple of plugins that do more interesting stuff like this, check out [karma-closure], [karma-intellij], [karma-dart].
+Karma is assembled by Dependency Injection and a plugin is just an additional DI module (see [node-di] for more), that can be loaded by Karma. Therefore, it can ask for pretty much any Karma component and interact with it. There are a couple of plugins that do more interesting stuff like this, check out [karma-closure], [karma-intellij].
[karma-jasmine]: https://github.com/karma-runner/karma-jasmine
@@ -49,7 +49,6 @@ Karma is assembled by Dependency Injection and a plugin is just an additional DI
[karma-ng-html2js-preprocessor]: https://github.com/karma-runner/karma-ng-html2js-preprocessor
[karma-closure]: https://github.com/karma-runner/karma-closure
[karma-intellij]: https://github.com/karma-runner/karma-intellij
-[karma-dart]: https://github.com/karma-runner/karma-dart
[node-di]: https://github.com/vojtajina/node-di
[karma-material-reporter]: https://github.com/ameerthehacker/karma-material-reporter
diff --git a/gruntfile.js b/gruntfile.js
index 7cf595762..40da12beb 100644
--- a/gruntfile.js
+++ b/gruntfile.js
@@ -1,32 +1,5 @@
module.exports = function (grunt) {
grunt.initConfig({
- pkg: grunt.file.readJSON('package.json'),
- pkgFile: 'package.json',
- files: {
- server: ['lib/**/*.js'],
- client: ['client/**/*.js'],
- common: ['common/**/*.js'],
- context: ['context/**/*.js'],
- grunt: ['grunt.js', 'tasks/*.js']
- },
- browserify: {
- client: {
- files: {
- 'static/karma.js': ['client/main.js'],
- 'static/context.js': ['context/main.js']
- }
- }
- },
- test: {
- unit: 'mochaTest:unit',
- client: 'test/client/karma.conf.js'
- },
- watch: {
- client: {
- files: '<%= files.client %>',
- tasks: 'browserify:client'
- }
- },
mochaTest: {
options: {
reporter: 'dot',
@@ -40,73 +13,10 @@ module.exports = function (grunt) {
'test/unit/**/*.spec.js'
]
}
- },
- 'npm-publish': {
- options: {
- requires: ['build'],
- abortIfDirty: true,
- tag: 'latest'
- }
- },
- 'npm-contributors': {
- options: {
- commitMessage: 'chore: update contributors'
- }
- },
- conventionalChangelog: {
- release: {
- options: {
- changelogOpts: {
- preset: 'angular'
- }
- },
- src: 'CHANGELOG.md'
- }
- },
- conventionalGithubReleaser: {
- release: {
- options: {
- auth: {
- type: 'oauth',
- token: process.env.GH_TOKEN
- },
- changelogOpts: {
- preset: 'angular'
- }
- }
- }
- },
- bump: {
- options: {
- updateConfigs: ['pkg'],
- commitFiles: [
- 'package.json',
- 'CHANGELOG.md'
- ],
- commitMessage: 'chore: release v%VERSION%',
- prereleaseName: 'rc'
- }
}
})
- grunt.loadNpmTasks('grunt-check-clean')
- grunt.loadTasks('tasks')
- require('load-grunt-tasks')(grunt)
-
- grunt.registerTask('build', ['browserify:client'])
- grunt.registerTask('default', ['build', 'test'])
- grunt.registerTask('test-appveyor', ['test:unit', 'test:client'])
+ grunt.loadNpmTasks('grunt-mocha-test')
- grunt.registerTask('release', 'Build, bump and publish to NPM.', function (type) {
- grunt.task.run([
- 'check_clean',
- 'npm-contributors',
- 'bump:' + (type || 'patch') + ':bump-only',
- 'build',
- 'conventionalChangelog',
- 'bump-commit',
- 'conventionalGithubReleaser',
- 'npm-publish'
- ])
- })
+ grunt.registerTask('default', ['mochaTest:unit'])
}
diff --git a/lib/browser.js b/lib/browser.js
index c3ab8cc21..aa8795792 100644
--- a/lib/browser.js
+++ b/lib/browser.js
@@ -11,7 +11,8 @@ const EXECUTING_DISCONNECTED = 'EXECUTING_DISCONNECTED' // The browser is execut
const DISCONNECTED = 'DISCONNECTED' // The browser got completely disconnected (e.g. browser crash) and can be only restored with a restart of execution.
class Browser {
- constructor (id, fullName, collection, emitter, socket, timer, disconnectDelay, noActivityTimeout) {
+ constructor (id, fullName, collection, emitter, socket, timer, disconnectDelay,
+ noActivityTimeout, singleRun, clientConfig) {
this.id = id
this.fullName = fullName
this.name = helper.browserFullNameToShort(fullName)
@@ -19,6 +20,8 @@ class Browser {
this.disconnectsCount = 0
this.activeSockets = [socket]
this.noActivityTimeout = noActivityTimeout
+ this.singleRun = singleRun
+ this.clientConfig = clientConfig
this.collection = collection
this.emitter = emitter
this.socket = socket
@@ -94,9 +97,8 @@ class Browser {
}
}
- onDisconnect (reason, disconnectedSocket) {
+ onSocketDisconnect (reason, disconnectedSocket) {
helper.arrayRemove(this.activeSockets, disconnectedSocket)
-
if (this.activeSockets.length) {
this.log.debug(`Disconnected ${disconnectedSocket.id}, still have ${this.getActiveSocketsIds()}`)
return
@@ -119,24 +121,27 @@ class Browser {
}
}
- reconnect (newSocket) {
- if (this.state === EXECUTING_DISCONNECTED) {
+ reconnect (newSocket, clientSaysReconnect) {
+ if (!clientSaysReconnect || this.state === DISCONNECTED) {
+ this.log.info(`Disconnected browser returned on socket ${newSocket.id} with id ${this.id}.`)
+ this.setState(CONNECTED)
+
+ // The disconnected browser is already part of the collection.
+ // Update the collection view in the UI (header on client.html)
+ this.emitter.emit('browsers_change', this.collection)
+ // Notify the launcher
+ this.emitter.emit('browser_register', this)
+ // Execute tests if configured to do so.
+ if (this.singleRun) {
+ this.execute()
+ }
+ } else if (this.state === EXECUTING_DISCONNECTED) {
this.log.debug('Lost socket connection, but browser continued to execute. Reconnected ' +
`on socket ${newSocket.id}.`)
this.setState(EXECUTING)
} else if ([CONNECTED, CONFIGURING, EXECUTING].includes(this.state)) {
this.log.debug(`Rebinding to new socket ${newSocket.id} (already have ` +
`${this.getActiveSocketsIds()})`)
- } else if (this.state === DISCONNECTED) {
- this.log.info(`Disconnected browser returned on socket ${newSocket.id} with id ${this.id}.`)
- this.setState(CONNECTED)
-
- // Since the disconnected browser is already part of the collection and we want to
- // make sure that the server can properly handle the browser like it's the first time
- // connecting this browser (as we want a complete new execution), we need to emit the
- // following events:
- this.emitter.emit('browsers_change', this.collection)
- this.emitter.emit('browser_register', this)
}
if (!this.activeSockets.some((s) => s.id === newSocket.id)) {
@@ -161,8 +166,8 @@ class Browser {
this.refreshNoActivityTimeout()
}
- execute (config) {
- this.activeSockets.forEach((socket) => socket.emit('execute', config))
+ execute () {
+ this.activeSockets.forEach((socket) => socket.emit('execute', this.clientConfig))
this.setState(CONFIGURING)
this.refreshNoActivityTimeout()
}
@@ -172,10 +177,14 @@ class Browser {
}
disconnect (reason) {
- this.log.warn(`Disconnected (${this.disconnectsCount} times)${reason || ''}`)
- this.setState(DISCONNECTED)
+ this.log.warn(`Disconnected (${this.disconnectsCount} times) ${reason || ''}`)
this.disconnectsCount++
- this.emitter.emit('browser_error', this, `Disconnected${reason || ''}`)
+ this.emitter.emit('browser_error', this, `Disconnected ${reason || ''}`)
+ this.remove()
+ }
+
+ remove () {
+ this.setState(DISCONNECTED)
this.collection.remove(this)
}
@@ -201,7 +210,7 @@ class Browser {
bindSocketEvents (socket) {
// TODO: check which of these events are actually emitted by socket
- socket.on('disconnect', (reason) => this.onDisconnect(reason, socket))
+ socket.on('disconnect', (reason) => this.onSocketDisconnect(reason, socket))
socket.on('start', (info) => this.onStart(info))
socket.on('karma_error', (error) => this.onKarmaError(error))
socket.on('complete', (result) => this.onComplete(result))
@@ -246,9 +255,11 @@ class Browser {
Browser.factory = function (
id, fullName, /* capturedBrowsers */ collection, emitter, socket, timer,
/* config.browserDisconnectTimeout */ disconnectDelay,
- /* config.browserNoActivityTimeout */ noActivityTimeout
-) {
- return new Browser(id, fullName, collection, emitter, socket, timer, disconnectDelay, noActivityTimeout)
+ /* config.browserNoActivityTimeout */ noActivityTimeout,
+ /* config.singleRun */ singleRun,
+ /* config.client */ clientConfig) {
+ return new Browser(id, fullName, collection, emitter, socket, timer,
+ disconnectDelay, noActivityTimeout, singleRun, clientConfig)
}
Browser.STATE_CONNECTED = CONNECTED
diff --git a/lib/cli.js b/lib/cli.js
index 448f56eb6..0aac17e9a 100644
--- a/lib/cli.js
+++ b/lib/cli.js
@@ -1,7 +1,6 @@
'use strict'
const path = require('path')
-const assert = require('assert')
const yargs = require('yargs')
const fs = require('graceful-fs')
@@ -10,12 +9,9 @@ const helper = require('./helper')
const constant = require('./constants')
function processArgs (argv, options, fs, path) {
- // TODO(vojta): warn/throw when unknown argument (probably mispelled)
Object.getOwnPropertyNames(argv).forEach(function (name) {
let argumentValue = argv[name]
if (name !== '_' && name !== '$0') {
- assert(!name.includes('_'), `Bad argument: ${name} did you mean ${name.replace('_', '-')}`)
-
if (Array.isArray(argumentValue)) {
argumentValue = argumentValue.pop() // If the same argument is defined multiple times, override.
}
@@ -99,7 +95,7 @@ function processArgs (argv, options, fs, path) {
options.refresh = options.refresh === 'true'
}
- let configFile = argv._.shift()
+ let configFile = argv.configFile
if (!configFile) {
// default config file (if exists)
@@ -151,13 +147,13 @@ function describeRoot () {
'Run --help with particular command to see its description and available options.\n\n' +
'Usage:\n' +
' $0 ')
- .command('init', 'Initialize a config file.', describeInit)
- .command('start', 'Start the server / do a single run.', describeStart)
- .command('run', 'Trigger a test run.', describeRun)
- .command('stop', 'Stop the server.', describeStop)
+ .command('init [configFile]', 'Initialize a config file.', describeInit)
+ .command('start [configFile]', 'Start the server / do a single run.', describeStart)
+ .command('run [configFile]', 'Trigger a test run.', describeRun)
+ .command('stop [configFile]', 'Stop the server.', describeStop)
.command('completion', 'Shell completion for karma.', describeCompletion)
.demandCommand(1, 'Command not specified.')
- .strictCommands()
+ .strict()
.describe('help', 'Print usage and options.')
.describe('version', 'Print current version.')
}
@@ -168,8 +164,11 @@ function describeInit (yargs) {
'INIT - Initialize a config file.\n\n' +
'Usage:\n' +
' $0 init [configFile]')
- .strictCommands(false)
.version(false)
+ .positional('configFile', {
+ describe: 'Name of the generated Karma configuration file',
+ type: 'string'
+ })
.describe('log-level', ' Level of logging.')
.describe('colors', 'Use colors when reporting and printing logs.')
.describe('no-colors', 'Do not use colors when reporting or printing logs.')
@@ -183,6 +182,10 @@ function describeStart (yargs) {
' $0 start [configFile]')
.strictCommands(false)
.version(false)
+ .positional('configFile', {
+ describe: 'Path to the Karma configuration file',
+ type: 'string'
+ })
.describe('port', ' Port where the server is running.')
.describe('auto-watch', 'Auto watch source files and run on change.')
.describe('detached', 'Detach the server.')
@@ -200,6 +203,10 @@ function describeStart (yargs) {
.describe('no-fail-on-empty-test-suite', 'Do not fail on empty test suite.')
.describe('fail-on-failing-test-suite', 'Fail on failing test suite.')
.describe('no-fail-on-failing-test-suite', 'Do not fail on failing test suite.')
+ .option('format-error', {
+ describe: 'A path to a file that exports the format function.',
+ type: 'string'
+ })
}
function describeRun (yargs) {
@@ -208,8 +215,11 @@ function describeRun (yargs) {
'RUN - Run the tests (requires running server).\n\n' +
'Usage:\n' +
' $0 run [configFile] [-- ]')
- .strictCommands(false)
.version(false)
+ .positional('configFile', {
+ describe: 'Path to the Karma configuration file',
+ type: 'string'
+ })
.describe('port', ' Port where the server is listening.')
.describe('no-refresh', 'Do not re-glob all the patterns.')
.describe('fail-on-empty-test-suite', 'Fail on empty test suite.')
@@ -217,6 +227,18 @@ function describeRun (yargs) {
.describe('log-level', ' Level of logging.')
.describe('colors', 'Use colors when reporting and printing logs.')
.describe('no-colors', 'Do not use colors when reporting or printing logs.')
+ .option('removed-files', {
+ describe: 'Comma-separated paths to removed files. Useful when automatic file watching is disabled.',
+ type: 'string'
+ })
+ .option('changed-files', {
+ describe: 'Comma-separated paths to changed files. Useful when automatic file watching is disabled.',
+ type: 'string'
+ })
+ .option('added-files', {
+ describe: 'Comma-separated paths to added files. Useful when automatic file watching is disabled.',
+ type: 'string'
+ })
}
function describeStop (yargs) {
@@ -225,8 +247,11 @@ function describeStop (yargs) {
'STOP - Stop the server (requires running server).\n\n' +
'Usage:\n' +
' $0 stop [configFile]')
- .strictCommands(false)
.version(false)
+ .positional('configFile', {
+ describe: 'Path to the Karma configuration file',
+ type: 'string'
+ })
.describe('port', ' Port where the server is listening.')
.describe('log-level', ' Level of logging.')
}
@@ -237,7 +262,6 @@ function describeCompletion (yargs) {
'COMPLETION - Bash/ZSH completion for karma.\n\n' +
'Installation:\n' +
' $0 completion >> ~/.bashrc')
- .strictCommands(false)
.version(false)
}
diff --git a/lib/index.js b/lib/index.js
index 4d906a437..d07e96ef6 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -7,18 +7,6 @@ const stopper = require('./stopper')
const launcher = require('./launcher')
const cfg = require('./config')
-// TODO: remove in 1.0
-const oldServer = {
- start: function (cliOptions, done) {
- console.error('WARN `start` method is deprecated since 0.13. It will be removed in 0.14. Please use \n' +
- ' server = new Server(config, [done])\n' +
- ' server.start()\n' +
- 'instead.')
- const server = new Server(cliOptions, done)
- server.start()
- }
-}
-
module.exports = {
constants: constants,
VERSION: constants.VERSION,
@@ -26,6 +14,5 @@ module.exports = {
runner: runner,
stopper: stopper,
launcher: launcher,
- config: { parseConfig: cfg.parseConfig }, // lets start with only opening up the `parseConfig` api
- server: oldServer
+ config: { parseConfig: cfg.parseConfig } // lets start with only opening up the `parseConfig` api
}
diff --git a/lib/middleware/karma.js b/lib/middleware/karma.js
index c48332d12..3a34b4e58 100644
--- a/lib/middleware/karma.js
+++ b/lib/middleware/karma.js
@@ -20,14 +20,12 @@ const common = require('./common')
const VERSION = require('../constants').VERSION
const SCRIPT_TYPE = {
js: 'text/javascript',
- dart: 'application/dart',
module: 'module'
}
const FILE_TYPES = [
'css',
'html',
'js',
- 'dart',
'module',
'dom'
]
@@ -193,7 +191,11 @@ function createKarmaMiddleware (
} else {
const scriptType = (SCRIPT_TYPE[fileType] || 'text/javascript')
const crossOriginAttribute = includeCrossOriginAttribute ? 'crossorigin="anonymous"' : ''
- scriptTags.push(``)
+ if (fileType === 'module') {
+ scriptTags.push(``)
+ } else {
+ scriptTags.push(``)
+ }
}
}
diff --git a/lib/server.js b/lib/server.js
index fb07b77b9..ff03553eb 100644
--- a/lib/server.js
+++ b/lib/server.js
@@ -36,13 +36,13 @@ const EmitterWrapper = require('./emitter_wrapper')
const processWrapper = new EmitterWrapper(process)
function createSocketIoServer (webServer, executor, config) {
- const server = new SocketIO(webServer, {
+ const server = new SocketIO.Server(webServer, {
// avoid destroying http upgrades from socket.io to get proxied websockets working
destroyUpgrade: false,
path: config.urlRoot + 'socket.io/',
transports: config.transports,
forceJSONP: config.forceJSONP,
- // Default is 5000 in socket.io v2.x.
+ // Default is 5000 in socket.io v2.x and v3.x.
pingTimeout: config.pingTimeout || 5000
})
@@ -82,10 +82,6 @@ class Server extends KarmaEventEmitter {
filesPromise: ['factory', createFilesPromise],
socketServer: ['factory', createSocketIoServer],
executor: ['factory', Executor.factory],
- // TODO(vojta): remove
- customFileHandlers: ['value', []],
- // TODO(vojta): remove, once karma-dart does not rely on it
- customScriptTypes: ['value', []],
reporter: ['factory', reporter.createReporters],
capturedBrowsers: ['factory', BrowserCollection.factory],
args: ['value', {}],
@@ -106,12 +102,6 @@ class Server extends KarmaEventEmitter {
this._injector = new di.Injector(modules)
}
- dieOnError (error) {
- this.log.error(error)
- process.exitCode = 1
- process.kill(process.pid, 'SIGINT')
- }
-
async start () {
const config = this.get('config')
try {
@@ -126,7 +116,8 @@ class Server extends KarmaEventEmitter {
config.port = this._boundServer.address().port
await this._injector.invoke(this._start, this)
} catch (err) {
- this.dieOnError(`Server start failed on port ${config.port}: ${err}`)
+ this.log.error(`Server start failed on port ${config.port}: ${err}`)
+ this._close(1)
}
}
@@ -191,7 +182,8 @@ class Server extends KarmaEventEmitter {
let singleRunBrowserNotCaptured = false
webServer.on('error', (err) => {
- this.dieOnError(`Webserver fail ${err}`)
+ this.log.error(`Webserver fail ${err}`)
+ this._close(1)
})
const afterPreprocess = () => {
@@ -210,7 +202,8 @@ class Server extends KarmaEventEmitter {
})
}
if (this.loadErrors.length > 0) {
- this.dieOnError(new Error(`Found ${this.loadErrors.length} load error${this.loadErrors.length === 1 ? '' : 's'}`))
+ this.log.error(new Error(`Found ${this.loadErrors.length} load error${this.loadErrors.length === 1 ? '' : 's'}`))
+ this._close(1)
}
})
}
@@ -260,34 +253,17 @@ class Server extends KarmaEventEmitter {
const replySocketEvents = events.bufferEvents(socket, ['start', 'info', 'karma_error', 'result', 'complete'])
- socket.on('complete', (data, ack) => ack())
-
socket.on('error', (err) => {
this.log.debug('karma server socket error: ' + err)
})
socket.on('register', (info) => {
- let newBrowser = info.id ? (capturedBrowsers.getById(info.id) || singleRunBrowsers.getById(info.id)) : null
-
- if (newBrowser) {
- // By default if a browser disconnects while still executing, we assume that the test
- // execution still continues because just the socket connection has been terminated. Now
- // since we know whether this is just a socket reconnect or full client reconnect, we
- // need to update the browser state accordingly. This is necessary because in case a
- // browser crashed and has been restarted, we need to start with a fresh execution.
- if (!info.isSocketReconnect) {
- newBrowser.setState(Browser.STATE_DISCONNECTED)
- }
-
- newBrowser.reconnect(socket)
+ const knownBrowser = info.id ? (capturedBrowsers.getById(info.id) || singleRunBrowsers.getById(info.id)) : null
- // Since not every reconnected browser is able to continue with its previous execution,
- // we need to start a new execution in case a browser has restarted and is now idling.
- if (newBrowser.state === Browser.STATE_CONNECTED && config.singleRun) {
- newBrowser.execute(config.client)
- }
+ if (knownBrowser) {
+ knownBrowser.reconnect(socket, info.isSocketReconnect)
} else {
- newBrowser = this._injector.createChild([{
+ const newBrowser = this._injector.createChild([{
id: ['value', info.id || null],
fullName: ['value', (helper.isDefined(info.displayName) ? info.displayName : info.name)],
socket: ['value', socket]
@@ -296,7 +272,7 @@ class Server extends KarmaEventEmitter {
newBrowser.init()
if (config.singleRun) {
- newBrowser.execute(config.client)
+ newBrowser.execute()
singleRunBrowsers.add(newBrowser)
}
}
@@ -323,9 +299,9 @@ class Server extends KarmaEventEmitter {
}
})
- this.on('stop', function (done) {
+ this.on('stop', (done) => {
this.log.debug('Received stop event, exiting.')
- disconnectBrowsers()
+ this._close()
done()
})
@@ -340,8 +316,7 @@ class Server extends KarmaEventEmitter {
singleRunDoneBrowsers[completedBrowser.id] = true
if (launcher.kill(completedBrowser.id)) {
- // workaround to supress "disconnect" warning
- completedBrowser.state = Browser.STATE_DISCONNECTED
+ completedBrowser.remove()
}
emitRunCompleteIfAllBrowsersDone()
@@ -354,9 +329,9 @@ class Server extends KarmaEventEmitter {
emitRunCompleteIfAllBrowsersDone()
})
- this.on('run_complete', function (browsers, results) {
+ this.on('run_complete', (browsers, results) => {
this.log.debug('Run complete, exiting.')
- disconnectBrowsers(results.exitCode)
+ this._close(results.exitCode)
})
this.emit('run_start', singleRunBrowsers)
@@ -372,61 +347,22 @@ class Server extends KarmaEventEmitter {
})
}
- const webServerCloseTimeout = 3000
- const disconnectBrowsers = (code) => {
- const sockets = socketServer.sockets.sockets
-
- Object.keys(sockets).forEach((id) => {
- const socket = sockets[id]
- socket.removeAllListeners('disconnect')
- if (!socket.disconnected) {
- process.nextTick(socket.disconnect.bind(socket))
- }
- })
-
- this.emitExitAsync(code).catch((err) => {
- this.log.error('Error while calling exit event listeners\n' + err.stack || err)
- return 1
- }).then((code) => {
- socketServer.sockets.removeAllListeners()
- socketServer.close()
-
- let removeAllListenersDone = false
- const removeAllListeners = () => {
- if (removeAllListenersDone) {
- return
- }
- removeAllListenersDone = true
- webServer.removeAllListeners()
- processWrapper.removeAllListeners()
- done(code || 0)
- }
-
- const closeTimeout = setTimeout(removeAllListeners, webServerCloseTimeout)
-
- webServer.close(() => {
- clearTimeout(closeTimeout)
- removeAllListeners()
- })
- })
- }
-
- processWrapper.on('SIGINT', () => disconnectBrowsers(process.exitCode))
- processWrapper.on('SIGTERM', disconnectBrowsers)
+ processWrapper.on('SIGINT', () => this._close())
+ processWrapper.on('SIGTERM', () => this._close())
const reportError = (error) => {
- process.emit('infrastructure_error', error)
- disconnectBrowsers(1)
this.log.error(error)
+ process.emit('infrastructure_error', error)
+ this._close(1)
}
processWrapper.on('unhandledRejection', (error) => {
- this.log.error(`UnhandledRejection: ${error.message || String(error)}`)
+ this.log.error(`UnhandledRejection: ${error.stack || error.message || String(error)}`)
reportError(error)
})
processWrapper.on('uncaughtException', (error) => {
- this.log.error(`UncaughtException:: ${error.message || String(error)}`)
+ this.log.error(`UncaughtException: ${error.stack || error.message || String(error)}`)
reportError(error)
})
}
@@ -451,13 +387,58 @@ class Server extends KarmaEventEmitter {
child.unref()
}
- stop () {
- return this.emitAsync('stop')
+ /**
+ * Cleanup all resources allocated by Karma and call the `done` callback
+ * with the result of the tests execution.
+ *
+ * @param [exitCode] - Optional exit code. If omitted will be computed by
+ * 'exit' event listeners.
+ */
+ _close (exitCode) {
+ const webServer = this._injector.get('webServer')
+ const socketServer = this._injector.get('socketServer')
+ const done = this._injector.get('done')
+
+ const webServerCloseTimeout = 3000
+ const sockets = socketServer.sockets.sockets
+
+ Object.keys(sockets).forEach((id) => {
+ const socket = sockets[id]
+ socket.removeAllListeners('disconnect')
+ if (!socket.disconnected) {
+ process.nextTick(socket.disconnect.bind(socket))
+ }
+ })
+
+ this.emitExitAsync(exitCode).catch((err) => {
+ this.log.error('Error while calling exit event listeners\n' + err.stack || err)
+ return 1
+ }).then((code) => {
+ socketServer.sockets.removeAllListeners()
+ socketServer.close()
+
+ let removeAllListenersDone = false
+ const removeAllListeners = () => {
+ if (removeAllListenersDone) {
+ return
+ }
+ removeAllListenersDone = true
+ webServer.removeAllListeners()
+ processWrapper.removeAllListeners()
+ done(code || 0)
+ }
+
+ const closeTimeout = setTimeout(removeAllListeners, webServerCloseTimeout)
+
+ webServer.close(() => {
+ clearTimeout(closeTimeout)
+ removeAllListeners()
+ })
+ })
}
- static start (cliOptions, done) {
- console.warn('Deprecated static method to be removed in v3.0')
- return new Server(cliOptions, done).start()
+ stop () {
+ return this.emitAsync('stop')
}
}
diff --git a/lib/web-server.js b/lib/web-server.js
index a348f9421..379818435 100644
--- a/lib/web-server.js
+++ b/lib/web-server.js
@@ -16,17 +16,6 @@ const proxyMiddleware = require('./middleware/proxy')
const log = require('./logger').create('web-server')
-function createCustomHandler (customFileHandlers, config) {
- return function (request, response, next) {
- const handler = customFileHandlers.find((handler) => handler.urlRegex.test(request.url))
- return handler
- ? handler.handler(request, response, 'fake/static', 'fake/adapter', config.basePath, 'fake/root')
- : next()
- }
-}
-
-createCustomHandler.$inject = ['customFileHandlers', 'config']
-
function createFilesPromise (emitter, fileList) {
// Set an empty list of files to avoid race issues with
// file_list_modified not having been emitted yet
@@ -69,9 +58,6 @@ function createWebServer (injector, config) {
handler.use(injector.invoke(sourceFilesMiddleware.create))
// TODO(vojta): extract the proxy into a plugin
handler.use(proxyMiddlewareInstance)
- // TODO(vojta): remove, this is only here because of karma-dart
- // we need a better way of custom handlers
- handler.use(injector.invoke(createCustomHandler))
if (config.middleware) {
config.middleware.forEach((middleware) => handler.use(injector.get('middleware:' + middleware)))
diff --git a/package-lock.json b/package-lock.json
index 19f4e6272..b92a4b0a0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "karma",
- "version": "5.2.3",
+ "version": "6.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -2329,7 +2329,23 @@
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+ "dev": true
+ },
+ "@types/component-emitter": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
+ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg=="
+ },
+ "@types/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg=="
+ },
+ "@types/cors": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.9.tgz",
+ "integrity": "sha512-zurD1ibz21BRlAOIKP8yhrxlqKx6L9VCwkB5kMiP6nZAhoF5MvC7qS1qPA7nRcr1GJolfkQC7/EAL4hdYejLtg=="
},
"@types/events": {
"version": "3.0.0",
@@ -2451,11 +2467,6 @@
"integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
"dev": true
},
- "after": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
- },
"agent-base": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
@@ -2555,24 +2566,6 @@
}
}
},
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -2606,12 +2599,6 @@
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true
},
- "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
- },
"array-each": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
@@ -2653,21 +2640,6 @@
"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
"dev": true
},
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "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",
@@ -2684,11 +2656,6 @@
"es-abstract": "^1.17.0-next.1"
}
},
- "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=="
- },
"arrify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
@@ -2776,15 +2743,6 @@
"integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
"dev": true
},
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.14"
- }
- },
"async-each": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
@@ -2794,7 +2752,8 @@
"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=="
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
},
"asynckit": {
"version": "0.4.0",
@@ -2851,11 +2810,6 @@
}
}
},
- "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",
@@ -2917,9 +2871,9 @@
}
},
"base64-arraybuffer": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
- "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
+ "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
},
"base64-js": {
"version": "1.3.0",
@@ -2944,23 +2898,20 @@
"integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==",
"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=",
- "requires": {
- "callsite": "1.0.0"
- }
- },
"binary-extensions": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
"integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="
},
- "blob": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
- "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
+ "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": {
+ "file-uri-to-path": "1.0.0"
+ }
},
"bluebird": {
"version": "3.7.2",
@@ -2974,42 +2925,6 @@
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
"dev": true
},
- "body": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
- "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=",
- "dev": true,
- "requires": {
- "continuable-cache": "^0.3.1",
- "error": "^7.0.0",
- "raw-body": "~1.1.0",
- "safe-json-parse": "~1.0.1"
- },
- "dependencies": {
- "bytes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
- "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=",
- "dev": true
- },
- "raw-body": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz",
- "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=",
- "dev": true,
- "requires": {
- "bytes": "1",
- "string_decoder": "0.10"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
@@ -3212,25 +3127,6 @@
"safe-buffer": "^5.0.1"
}
},
- "browserify-cache-api": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cache-api/-/browserify-cache-api-3.0.1.tgz",
- "integrity": "sha1-liR+hT8Gj9bg1FzHPwuyzZd47wI=",
- "dev": true,
- "requires": {
- "async": "^1.5.2",
- "through2": "^2.0.0",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- }
- }
- },
"browserify-cipher": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
@@ -3254,36 +3150,6 @@
"safe-buffer": "^5.1.2"
}
},
- "browserify-incremental": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/browserify-incremental/-/browserify-incremental-3.1.1.tgz",
- "integrity": "sha1-BxPLdYckemMqnwjPG9FpuHi2Koo=",
- "dev": true,
- "requires": {
- "JSONStream": "^0.10.0",
- "browserify-cache-api": "^3.0.0",
- "through2": "^2.0.0",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "JSONStream": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz",
- "integrity": "sha1-dDSdDYlSK3HzDwoD/5vSDKbxKsA=",
- "dev": true,
- "requires": {
- "jsonparse": "0.0.5",
- "through": ">=2.2.7 <3"
- }
- },
- "jsonparse": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
- "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
- "dev": true
- }
- }
- },
"browserify-rsa": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
@@ -3466,33 +3332,12 @@
"caller-callsite": "^2.0.0"
}
},
- "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==",
"dev": true
},
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true,
- "requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- }
- },
"cardinal": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
@@ -3575,13 +3420,6 @@
}
}
},
- "chownr": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
- "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==",
- "dev": true,
- "optional": true
- },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -3656,13 +3494,13 @@
}
},
"cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
+ "wrap-ansi": "^7.0.0"
},
"dependencies": {
"ansi-regex": {
@@ -3700,13 +3538,6 @@
}
}
},
- "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,
- "optional": true
- },
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -3795,20 +3626,11 @@
"integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
"dev": true
},
- "component-bind": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
- },
"component-emitter": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
- },
- "component-inherit": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
},
"concat-map": {
"version": "0.0.1",
@@ -3847,13 +3669,6 @@
"date-now": "^0.1.4"
}
},
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true,
- "optional": true
- },
"constants-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
@@ -3871,31 +3686,6 @@
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
- "continuable-cache": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz",
- "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=",
- "dev": true
- },
- "conventional-changelog": {
- "version": "1.1.24",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
- "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
- "dev": true,
- "requires": {
- "conventional-changelog-angular": "^1.6.6",
- "conventional-changelog-atom": "^0.2.8",
- "conventional-changelog-codemirror": "^0.3.8",
- "conventional-changelog-core": "^2.0.11",
- "conventional-changelog-ember": "^0.3.12",
- "conventional-changelog-eslint": "^1.0.9",
- "conventional-changelog-express": "^0.3.6",
- "conventional-changelog-jquery": "^0.1.0",
- "conventional-changelog-jscs": "^0.1.0",
- "conventional-changelog-jshint": "^0.3.8",
- "conventional-changelog-preset-loader": "^1.1.8"
- }
- },
"conventional-changelog-angular": {
"version": "1.6.6",
"resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
@@ -3906,24 +3696,6 @@
"q": "^1.5.1"
}
},
- "conventional-changelog-atom": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
- "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
- "dev": true,
- "requires": {
- "q": "^1.5.1"
- }
- },
- "conventional-changelog-codemirror": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
- "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
- "dev": true,
- "requires": {
- "q": "^1.5.1"
- }
- },
"conventional-changelog-conventionalcommits": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz",
@@ -3935,251 +3707,87 @@
"q": "^1.5.1"
}
},
- "conventional-changelog-core": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
- "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
"dev": true,
"requires": {
- "conventional-changelog-writer": "^3.0.9",
- "conventional-commits-parser": "^2.1.7",
- "dateformat": "^3.0.0",
- "get-pkg-repo": "^1.0.0",
- "git-raw-commits": "^1.3.6",
- "git-remote-origin-url": "^2.0.0",
- "git-semver-tags": "^1.3.6",
- "lodash": "^4.2.1",
- "normalize-package-data": "^2.3.5",
- "q": "^1.5.1",
- "read-pkg": "^1.1.0",
- "read-pkg-up": "^1.0.1",
- "through2": "^2.0.0"
+ "safe-buffer": "~5.1.1"
},
"dependencies": {
- "dateformat": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
- },
- "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": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "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,
- "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"
- }
- },
- "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"
- }
}
}
},
- "conventional-changelog-ember": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
- "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
- "dev": true,
- "requires": {
- "q": "^1.5.1"
- }
+ "cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
},
- "conventional-changelog-eslint": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
- "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
- "dev": true,
- "requires": {
- "q": "^1.5.1"
- }
+ "cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==",
+ "dev": true
},
- "conventional-changelog-express": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
- "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
- "dev": true,
- "requires": {
- "q": "^1.5.1"
- }
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
},
- "conventional-changelog-jquery": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
- "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
- "dev": true,
- "requires": {
- "q": "^1.4.1"
- }
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
+ "dev": true
},
- "conventional-changelog-jscs": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
- "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
- "dev": true,
+ "core-js-pure": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz",
+ "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "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": {
- "q": "^1.4.1"
+ "object-assign": "^4",
+ "vary": "^1"
}
},
- "conventional-changelog-jshint": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
- "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
"dev": true,
"requires": {
- "compare-func": "^1.3.1",
- "q": "^1.5.1"
- }
- },
- "conventional-changelog-preset-loader": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
- "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
- "dev": true
- },
- "conventional-changelog-writer": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
- "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
- "dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "conventional-commits-filter": "^1.1.6",
- "dateformat": "^3.0.0",
- "handlebars": "^4.0.2",
- "json-stringify-safe": "^5.0.1",
- "lodash": "^4.2.1",
- "meow": "^4.0.0",
- "semver": "^5.5.0",
- "split": "^1.0.0",
- "through2": "^2.0.0"
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
},
"dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- }
- },
- "dateformat": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
- "dev": true
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "map-obj": {
+ "import-fresh": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
- "dev": true
- },
- "meow": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
- "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
"dev": true,
"requires": {
- "camelcase-keys": "^4.0.0",
- "decamelize-keys": "^1.0.0",
- "loud-rejection": "^1.0.0",
- "minimist": "^1.1.3",
- "minimist-options": "^3.0.1",
- "normalize-package-data": "^2.3.4",
- "read-pkg-up": "^3.0.0",
- "redent": "^2.0.0",
- "trim-newlines": "^2.0.0"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- }
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
}
},
"parse-json": {
@@ -4192,586 +3800,258 @@
"json-parse-better-errors": "^1.0.1"
}
},
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
+ "resolve-from": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
- "dev": true,
- "requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
- }
- },
- "strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
- "dev": true
- },
- "trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
"dev": true
}
}
},
- "conventional-commits-filter": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
- "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
"dev": true,
"requires": {
- "is-subset": "^0.1.1",
- "modify-values": "^1.0.0"
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
}
},
- "conventional-commits-parser": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
- "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"dev": true,
"requires": {
- "JSONStream": "^1.0.4",
- "is-text-path": "^1.0.0",
- "lodash": "^4.2.1",
- "meow": "^4.0.0",
- "split2": "^2.0.0",
- "through2": "^2.0.0",
- "trim-off-newlines": "^1.0.0"
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "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,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "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=",
+ "dev": true
+ },
+ "cucumber": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-6.0.5.tgz",
+ "integrity": "sha512-x+W9Fwk6TvcapQsYMxwFU5AsQJDOIJVGrPKmH15OC7jzb9/Dk7Hb0ZAyw4WcpaDcUDRc8bi2k2yJejDp5eTRlg==",
+ "dev": true,
+ "requires": {
+ "assertion-error-formatter": "^3.0.0",
+ "bluebird": "^3.4.1",
+ "cli-table3": "^0.5.1",
+ "colors": "^1.1.2",
+ "commander": "^3.0.1",
+ "cucumber-expressions": "^8.1.0",
+ "cucumber-tag-expressions": "^2.0.2",
+ "duration": "^0.2.1",
+ "escape-string-regexp": "^2.0.0",
+ "figures": "^3.0.0",
+ "gherkin": "5.0.0",
+ "glob": "^7.1.3",
+ "indent-string": "^4.0.0",
+ "is-generator": "^1.0.2",
+ "is-stream": "^2.0.0",
+ "knuth-shuffle-seeded": "^1.0.6",
+ "lodash": "^4.17.14",
+ "mz": "^2.4.0",
+ "progress": "^2.0.0",
+ "resolve": "^1.3.3",
+ "serialize-error": "^4.1.0",
+ "stack-chain": "^2.0.0",
+ "stacktrace-js": "^2.0.0",
+ "string-argv": "^0.3.0",
+ "title-case": "^2.1.1",
+ "util-arity": "^1.0.2",
+ "verror": "^1.9.0"
},
"dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "commander": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
+ "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
"dev": true
},
- "camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "map-obj": {
+ "escape-string-regexp": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true
},
- "meow": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
- "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
"dev": true,
"requires": {
- "camelcase-keys": "^4.0.0",
- "decamelize-keys": "^1.0.0",
- "loud-rejection": "^1.0.0",
- "minimist": "^1.1.3",
- "minimist-options": "^3.0.1",
- "normalize-package-data": "^2.3.4",
- "read-pkg-up": "^3.0.0",
- "redent": "^2.0.0",
- "trim-newlines": "^2.0.0"
+ "escape-string-regexp": "^1.0.5"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ }
}
},
- "parse-json": {
+ "indent-string": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
- "dev": true,
- "requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
- }
- },
- "strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"dev": true
},
- "trim-newlines": {
+ "is-stream": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
"dev": true
}
}
},
- "conventional-github-releaser": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-1.1.13.tgz",
- "integrity": "sha1-C+ezp8eGfoiL5SZHWlkP9ZMDUXw=",
+ "cucumber-expressions": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-8.3.0.tgz",
+ "integrity": "sha512-cP2ya0EiorwXBC7Ll7Cj7NELYbasNv9Ty42L4u7sso9KruWemWG1ZiTq4PMqir3SNDSrbykoqI5wZgMbLEDjLQ==",
"dev": true,
"requires": {
- "conventional-changelog": "^1.1.0",
- "dateformat": "^1.0.11",
- "git-semver-tags": "^1.0.0",
- "github": "^0.2.4",
- "lodash.merge": "^4.0.2",
- "meow": "^3.3.0",
- "object-assign": "^4.0.1",
- "q": "^1.4.1",
- "semver": "^5.0.1",
- "semver-regex": "^1.0.0",
- "through2": "^2.0.0"
+ "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.4.0",
+ "xregexp": "^4.2.4"
}
},
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "cucumber-tag-expressions": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.3.tgz",
+ "integrity": "sha512-+x5j1IfZrBtbvYHuoUX0rl4nUGxaey6Do9sM0CABmZfDCcWXuuRm1fQeCaklIYQgOFHQ6xOHvDSdkMHHpni6tQ==",
+ "dev": true
+ },
+ "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,
"requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
+ "array-find-index": "^1.0.1"
}
},
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ "custom-event": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU="
},
- "cookiejar": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
- "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==",
- "dev": true
+ "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"
+ }
},
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dash-ast": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
+ "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",
"dev": true
},
- "core-js": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
- "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
- "dev": true
+ "date-format": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz",
+ "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w=="
},
- "core-js-pure": {
- "version": "3.6.5",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz",
- "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==",
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
"dev": true
},
- "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=",
+ "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=",
"dev": true
},
- "cosmiconfig": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
- "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
"dev": true,
"requires": {
- "import-fresh": "^2.0.0",
- "is-directory": "^0.3.1",
- "js-yaml": "^3.13.1",
- "parse-json": "^4.0.0"
- },
- "dependencies": {
- "import-fresh": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
- "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
- "dev": true,
- "requires": {
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- }
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
}
},
- "create-ecdh": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
- "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.0.0"
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "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,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
- "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=",
- "dev": true
- },
- "cucumber": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-6.0.5.tgz",
- "integrity": "sha512-x+W9Fwk6TvcapQsYMxwFU5AsQJDOIJVGrPKmH15OC7jzb9/Dk7Hb0ZAyw4WcpaDcUDRc8bi2k2yJejDp5eTRlg==",
- "dev": true,
- "requires": {
- "assertion-error-formatter": "^3.0.0",
- "bluebird": "^3.4.1",
- "cli-table3": "^0.5.1",
- "colors": "^1.1.2",
- "commander": "^3.0.1",
- "cucumber-expressions": "^8.1.0",
- "cucumber-tag-expressions": "^2.0.2",
- "duration": "^0.2.1",
- "escape-string-regexp": "^2.0.0",
- "figures": "^3.0.0",
- "gherkin": "5.0.0",
- "glob": "^7.1.3",
- "indent-string": "^4.0.0",
- "is-generator": "^1.0.2",
- "is-stream": "^2.0.0",
- "knuth-shuffle-seeded": "^1.0.6",
- "lodash": "^4.17.14",
- "mz": "^2.4.0",
- "progress": "^2.0.0",
- "resolve": "^1.3.3",
- "serialize-error": "^4.1.0",
- "stack-chain": "^2.0.0",
- "stacktrace-js": "^2.0.0",
- "string-argv": "^0.3.0",
- "title-case": "^2.1.1",
- "util-arity": "^1.0.2",
- "verror": "^1.9.0"
- },
- "dependencies": {
- "commander": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
- "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
- },
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- },
- "dependencies": {
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- }
- }
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "dev": true
- }
- }
- },
- "cucumber-expressions": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-8.3.0.tgz",
- "integrity": "sha512-cP2ya0EiorwXBC7Ll7Cj7NELYbasNv9Ty42L4u7sso9KruWemWG1ZiTq4PMqir3SNDSrbykoqI5wZgMbLEDjLQ==",
- "dev": true,
- "requires": {
- "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.4.0",
- "xregexp": "^4.2.4"
- }
- },
- "cucumber-tag-expressions": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.3.tgz",
- "integrity": "sha512-+x5j1IfZrBtbvYHuoUX0rl4nUGxaey6Do9sM0CABmZfDCcWXuuRm1fQeCaklIYQgOFHQ6xOHvDSdkMHHpni6tQ==",
- "dev": true
- },
- "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,
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
- "custom-event": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
- "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU="
- },
- "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"
- }
- },
- "dargs": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
- "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "dash-ast": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
- "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",
- "dev": true
- },
- "date-format": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz",
- "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w=="
- },
- "date-now": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
- "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
- "dev": true
- },
- "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="
- },
- "decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
- "dev": true,
- "requires": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- }
- },
- "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=",
- "dev": true
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "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=",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
"type-detect": "^4.0.0"
@@ -4851,13 +4131,6 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true,
- "optional": true
- },
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -4897,13 +4170,6 @@
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
"dev": true
},
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "dev": true,
- "optional": true
- },
"detective": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
@@ -5055,15 +4321,16 @@
}
},
"engine.io": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.1.tgz",
- "integrity": "sha512-8MfIfF1/IIfxuc2gv5K+XlFZczw/BpTvqBdl0E2fBLkYQp4miv4LuDTVtYt4yMyaIFLEr4vtaSgV4mjvll8Crw==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.5.tgz",
+ "integrity": "sha512-Ri+whTNr2PKklxQkfbGjwEo+kCBUM4Qxk4wtLqLrhH+b1up2NFL9g9pjYWiCV/oazwB0rArnvF/ZmZN2ab5Hpg==",
"requires": {
"accepts": "~1.3.4",
"base64id": "2.0.0",
- "cookie": "0.3.1",
+ "cookie": "~0.4.1",
+ "cors": "~2.8.5",
"debug": "~4.1.0",
- "engine.io-parser": "~2.2.0",
+ "engine.io-parser": "~4.0.0",
"ws": "^7.1.2"
},
"dependencies": {
@@ -5076,68 +4343,18 @@
}
},
"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.2",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.2.tgz",
- "integrity": "sha512-AWjc1Xg06a6UPFOBAzJf48W1UR/qKYmv/ubgSCumo9GXgvL/xGIvo05dXoBL+2NTLMipDI7in8xK61C17L25xg==",
- "requires": {
- "component-emitter": "~1.3.0",
- "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": {
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
- },
- "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"
- }
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"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==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz",
+ "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==",
"requires": {
- "after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
- "base64-arraybuffer": "0.1.5",
- "blob": "0.0.5",
- "has-binary2": "~1.0.2"
+ "base64-arraybuffer": "0.1.4"
}
},
"enquirer": {
@@ -5164,15 +4381,6 @@
"java-properties": "^1.0.0"
}
},
- "error": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz",
- "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==",
- "dev": true,
- "requires": {
- "string-template": "~0.2.1"
- }
- },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -5268,6 +4476,11 @@
"ext": "^1.1.2"
}
},
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -6052,15 +5265,6 @@
"reusify": "^1.0.4"
}
},
- "faye-websocket": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
"fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@@ -6088,6 +5292,13 @@
"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
+ },
"fill-keys": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz",
@@ -6316,16 +5527,6 @@
"universalify": "^0.1.0"
}
},
- "fs-minipass": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz",
- "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -6349,73 +5550,6 @@
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "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"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "optional": 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,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "gaze": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
- "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
- "dev": true,
- "requires": {
- "globule": "^1.0.0"
- }
- },
"get-assigned-identifiers": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
@@ -6433,25 +5567,6 @@
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
- "get-pkg-repo": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
- "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "meow": "^3.3.0",
- "normalize-package-data": "^2.3.0",
- "parse-github-repo-url": "^1.3.0",
- "through2": "^2.0.0"
- }
- },
- "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": "5.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
@@ -6485,325 +5600,22 @@
"integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=",
"dev": true,
"requires": {
- "argv-formatter": "~1.0.0",
- "spawn-error-forwarder": "~1.0.0",
- "split2": "~1.0.0",
- "stream-combiner2": "~1.1.1",
- "through2": "~2.0.0",
- "traverse": "~0.6.6"
- },
- "dependencies": {
- "split2": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz",
- "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=",
- "dev": true,
- "requires": {
- "through2": "~2.0.0"
- }
- }
- }
- },
- "git-raw-commits": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
- "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
- "dev": true,
- "requires": {
- "dargs": "^4.0.1",
- "lodash.template": "^4.0.2",
- "meow": "^4.0.0",
- "split2": "^2.0.0",
- "through2": "^2.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "map-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
- "dev": true
- },
- "meow": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
- "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
- "dev": true,
- "requires": {
- "camelcase-keys": "^4.0.0",
- "decamelize-keys": "^1.0.0",
- "loud-rejection": "^1.0.0",
- "minimist": "^1.1.3",
- "minimist-options": "^3.0.1",
- "normalize-package-data": "^2.3.4",
- "read-pkg-up": "^3.0.0",
- "redent": "^2.0.0",
- "trim-newlines": "^2.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
- "dev": true,
- "requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
- }
- },
- "strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
- "dev": true
- },
- "trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
- "dev": true
- }
- }
- },
- "git-remote-origin-url": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
- "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
- "dev": true,
- "requires": {
- "gitconfiglocal": "^1.0.0",
- "pify": "^2.3.0"
- }
- },
- "git-semver-tags": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
- "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
- "dev": true,
- "requires": {
- "meow": "^4.0.0",
- "semver": "^5.5.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "map-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
- "dev": true
- },
- "meow": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
- "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
- "dev": true,
- "requires": {
- "camelcase-keys": "^4.0.0",
- "decamelize-keys": "^1.0.0",
- "loud-rejection": "^1.0.0",
- "minimist": "^1.1.3",
- "minimist-options": "^3.0.1",
- "normalize-package-data": "^2.3.4",
- "read-pkg-up": "^3.0.0",
- "redent": "^2.0.0",
- "trim-newlines": "^2.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
- "dev": true,
- "requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
- }
- },
- "strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
- "dev": true
- },
- "trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
- "dev": true
- }
- }
- },
- "gitconfiglocal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
- "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
- "dev": true,
- "requires": {
- "ini": "^1.3.2"
- }
- },
- "github": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/github/-/github-0.2.4.tgz",
- "integrity": "sha1-JPp/DhP6EblGr5ETTFGYKpHOU4s=",
- "dev": true,
- "requires": {
- "mime": "^1.2.11"
+ "argv-formatter": "~1.0.0",
+ "spawn-error-forwarder": "~1.0.0",
+ "split2": "~1.0.0",
+ "stream-combiner2": "~1.1.1",
+ "through2": "~2.0.0",
+ "traverse": "~0.6.6"
},
"dependencies": {
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
+ "split2": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz",
+ "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=",
+ "dev": true,
+ "requires": {
+ "through2": "~2.0.0"
+ }
}
}
},
@@ -6908,17 +5720,6 @@
}
}
},
- "globule": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
- "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
- "dev": true,
- "requires": {
- "glob": "~7.1.1",
- "lodash": "~4.17.10",
- "minimatch": "~3.0.2"
- }
- },
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
@@ -6977,42 +5778,6 @@
}
}
},
- "grunt-auto-release": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/grunt-auto-release/-/grunt-auto-release-0.0.7.tgz",
- "integrity": "sha1-ShvjJUsQoXs0HkAvUbhRkehs9NE=",
- "dev": true
- },
- "grunt-browserify": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/grunt-browserify/-/grunt-browserify-5.3.0.tgz",
- "integrity": "sha1-R/2M+LrFj+LeaDr9xX9/OoDKeS0=",
- "dev": true,
- "requires": {
- "async": "^2.5.0",
- "browserify": "^16.0.0",
- "browserify-incremental": "^3.1.1",
- "glob": "^7.1.2",
- "lodash": "^4.17.4",
- "resolve": "^1.1.6",
- "watchify": "^3.6.1"
- }
- },
- "grunt-bump": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/grunt-bump/-/grunt-bump-0.8.0.tgz",
- "integrity": "sha1-0//gzzzws44JYHt4U49CpTHq/lU=",
- "dev": true,
- "requires": {
- "semver": "^5.1.0"
- }
- },
- "grunt-check-clean": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/grunt-check-clean/-/grunt-check-clean-0.1.2.tgz",
- "integrity": "sha1-ArsQ9+nyh4eCEg3hlm02ZJ8stBQ=",
- "dev": true
- },
"grunt-cli": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz",
@@ -7038,126 +5803,6 @@
}
}
},
- "grunt-contrib-watch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz",
- "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "gaze": "^1.1.0",
- "lodash": "^4.17.10",
- "tiny-lr": "^1.1.1"
- }
- },
- "grunt-conventional-changelog": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/grunt-conventional-changelog/-/grunt-conventional-changelog-6.1.0.tgz",
- "integrity": "sha1-mL1b37Kw3mMWwFx8b6ykziTdFDU=",
- "dev": true,
- "requires": {
- "chalk": "^1.1.0",
- "concat-stream": "^1.5.0",
- "conventional-changelog": "^1.1.0",
- "plur": "^2.0.0",
- "q": "^1.4.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "grunt-conventional-github-releaser": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/grunt-conventional-github-releaser/-/grunt-conventional-github-releaser-1.0.0.tgz",
- "integrity": "sha1-7Tbg9V1orq6FrxSEBsPXAYJnuHU=",
- "dev": true,
- "requires": {
- "chalk": "^1.1.0",
- "conventional-github-releaser": "^1.1.0",
- "plur": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
"grunt-known-options": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
@@ -7227,39 +5872,6 @@
"mkdirp": "^0.5.0"
}
},
- "grunt-npm": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/grunt-npm/-/grunt-npm-0.0.2.tgz",
- "integrity": "sha1-s8s0ub3y6tafFQFtkkEqeqkxzhQ=",
- "dev": true
- },
- "handlebars": {
- "version": "4.7.6",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
- "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.0",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4",
- "wordwrap": "^1.0.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==",
- "dev": true
- },
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- }
- }
- },
"hard-rejection": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
@@ -7275,43 +5887,6 @@
"function-bind": "^1.1.1"
}
},
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- }
- }
- },
- "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": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- }
- }
- },
- "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",
@@ -7324,13 +5899,6 @@
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
"dev": true
},
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true,
- "optional": true
- },
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -7458,12 +6026,6 @@
}
}
},
- "http-parser-js": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
- "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
- "dev": true
- },
"http-proxy": {
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
@@ -7731,16 +6293,6 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
- "ignore-walk": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
- "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
"import-fresh": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
@@ -7780,11 +6332,6 @@
"integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
"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",
@@ -7800,9 +6347,9 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
"inline-source-map": {
@@ -7856,12 +6403,6 @@
"p-is-promise": "^3.0.0"
}
},
- "irregular-plurals": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
- "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=",
- "dev": true
- },
"is-absolute": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
@@ -7986,15 +6527,6 @@
"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=",
- "dev": true,
- "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",
@@ -8098,12 +6630,6 @@
"integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
"dev": true
},
- "is-subset": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
- "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
- "dev": true
- },
"is-symbol": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
@@ -8131,12 +6657,6 @@
"unc-path-regex": "^0.1.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
- },
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
@@ -8479,24 +6999,6 @@
"integrity": "sha1-e3QYm/rW52Nn+1oQ88NpExKLeCs=",
"dev": true
},
- "livereload-js": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz",
- "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==",
- "dev": true
- },
- "load-grunt-tasks": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-4.0.0.tgz",
- "integrity": "sha512-w5JYPHpZgMxu9XFR9N9MEzyX8E0mLhQkwQ1qVP4mb3gmuomw8Ww8J49NHMbXqyQliq2LUCqdU7/wW96IVuPCKw==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.0",
- "multimatch": "^2.0.0",
- "pkg-up": "^2.0.0",
- "resolve-pkg": "^1.0.0"
- }
- },
"load-json-file": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
@@ -8572,12 +7074,6 @@
"integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
"dev": true
},
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
"lodash.set": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
@@ -8771,99 +7267,6 @@
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "dev": true,
- "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=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "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,
- "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"
- }
- },
- "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"
- }
- }
- }
- },
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -9043,27 +7446,6 @@
"is-plain-obj": "^1.1.0"
}
},
- "minipass": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
- "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
- "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -9208,18 +7590,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
- "multimatch": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz",
- "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=",
- "dev": true,
- "requires": {
- "array-differ": "^1.0.0",
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "minimatch": "^3.0.0"
- }
- },
"mz": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
@@ -9232,9 +7602,9 @@
}
},
"nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
"dev": true,
"optional": true
},
@@ -9263,37 +7633,6 @@
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
- "needle": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz",
- "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==",
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "optional": true,
- "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==",
- "dev": true,
- "optional": true
- }
- }
- },
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
@@ -9355,53 +7694,11 @@
}
},
"node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
"dev": true
},
- "node-pre-gyp": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz",
- "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==",
- "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"
- },
- "dependencies": {
- "nopt": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
@@ -9435,9 +7732,9 @@
"dev": true
},
"npm": {
- "version": "6.14.7",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.7.tgz",
- "integrity": "sha512-swhsdpNpyXg4GbM6LpOQ6qaloQuIKizZ+Zh6JPXJQc59ka49100Js0WvZx594iaKSoFgkFq2s8uXFHS3/Xy2WQ==",
+ "version": "6.14.10",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.10.tgz",
+ "integrity": "sha512-FT23Qy/JMA+qxEYReMOr1MY7642fKn8Onn+72LASPi872Owvmw0svm+/DXTHOC3yO9CheEO+EslyXEpdBdRtIA==",
"dev": true,
"requires": {
"JSONStream": "^1.3.5",
@@ -9504,7 +7801,7 @@
"lodash.uniq": "~4.5.0",
"lodash.without": "~4.4.0",
"lru-cache": "^5.1.1",
- "meant": "~1.0.1",
+ "meant": "^1.0.2",
"mississippi": "^3.0.0",
"mkdirp": "^0.5.5",
"move-concurrently": "^1.0.1",
@@ -9519,11 +7816,11 @@
"npm-packlist": "^1.4.8",
"npm-pick-manifest": "^3.0.2",
"npm-profile": "^4.0.4",
- "npm-registry-fetch": "^4.0.5",
- "npm-user-validate": "~1.0.0",
+ "npm-registry-fetch": "^4.0.7",
+ "npm-user-validate": "^1.0.1",
"npmlog": "~4.1.2",
"once": "~1.4.0",
- "opener": "^1.5.1",
+ "opener": "^1.5.2",
"osenv": "^0.1.5",
"pacote": "^9.5.12",
"path-is-inside": "~1.0.2",
@@ -9595,17 +7892,6 @@
"humanize-ms": "^1.2.1"
}
},
- "ajv": {
- "version": "5.5.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
"ansi-align": {
"version": "2.0.0",
"bundled": true,
@@ -9936,11 +8222,6 @@
"mkdirp": "~0.5.0"
}
},
- "co": {
- "version": "4.6.0",
- "bundled": true,
- "dev": true
- },
"code-point-at": {
"version": "1.1.0",
"bundled": true,
@@ -10032,11 +8313,11 @@
}
},
"configstore": {
- "version": "3.1.2",
+ "version": "3.1.5",
"bundled": true,
"dev": true,
"requires": {
- "dot-prop": "^4.1.0",
+ "dot-prop": "^4.2.1",
"graceful-fs": "^4.1.2",
"make-dir": "^1.0.0",
"unique-string": "^1.0.0",
@@ -10212,7 +8493,7 @@
}
},
"dot-prop": {
- "version": "4.2.0",
+ "version": "4.2.1",
"bundled": true,
"dev": true,
"requires": {
@@ -10389,11 +8670,6 @@
"bundled": true,
"dev": true
},
- "fast-deep-equal": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
"fast-json-stable-stringify": {
"version": "2.0.0",
"bundled": true,
@@ -10714,12 +8990,35 @@
"dev": true
},
"har-validator": {
- "version": "5.1.0",
+ "version": "5.1.5",
"bundled": true,
"dev": true,
"requires": {
- "ajv": "^5.3.0",
+ "ajv": "^6.12.3",
"har-schema": "^2.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "bundled": true,
+ "dev": true,
+ "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"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "bundled": true,
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "bundled": true,
+ "dev": true
+ }
}
},
"has": {
@@ -11006,11 +9305,6 @@
"bundled": true,
"dev": true
},
- "json-schema-traverse": {
- "version": "0.3.1",
- "bundled": true,
- "dev": true
- },
"json-stringify-safe": {
"version": "5.0.1",
"bundled": true,
@@ -11358,7 +9652,7 @@
}
},
"meant": {
- "version": "1.0.1",
+ "version": "1.0.2",
"bundled": true,
"dev": true
},
@@ -11383,6 +9677,11 @@
"brace-expansion": "^1.1.7"
}
},
+ "minimist": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true
+ },
"minizlib": {
"version": "1.3.3",
"bundled": true,
@@ -11619,7 +9918,7 @@
}
},
"npm-registry-fetch": {
- "version": "4.0.5",
+ "version": "4.0.7",
"bundled": true,
"dev": true,
"requires": {
@@ -11648,7 +9947,7 @@
}
},
"npm-user-validate": {
- "version": "1.0.0",
+ "version": "1.0.1",
"bundled": true,
"dev": true
},
@@ -11701,7 +10000,7 @@
}
},
"opener": {
- "version": "1.5.1",
+ "version": "1.5.2",
"bundled": true,
"dev": true
},
@@ -11993,13 +10292,6 @@
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true
- }
}
},
"read": {
@@ -12659,6 +10951,21 @@
"xdg-basedir": "^3.0.0"
}
},
+ "uri-js": {
+ "version": "4.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
"url-parse-lax": {
"version": "1.0.0",
"bundled": true,
@@ -12953,24 +11260,6 @@
}
}
},
- "npm-bundled": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
- "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==",
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz",
- "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==",
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -12988,41 +11277,16 @@
}
}
},
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "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"
- }
- },
"null-check": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
"integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
"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=",
- "dev": true
- },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "object-component": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
- "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-copy": {
"version": "0.1.0",
@@ -13351,12 +11615,6 @@
"path-root": "^0.1.1"
}
},
- "parse-github-repo-url": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
- "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
- "dev": true
- },
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
@@ -13372,22 +11630,6 @@
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
"dev": true
},
- "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.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -13526,21 +11768,6 @@
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": 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"
- }
- },
"pkg-conf": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
@@ -13590,15 +11817,6 @@
"find-up": "^2.1.0"
}
},
- "pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
- "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
- "dev": true,
- "requires": {
- "find-up": "^2.1.0"
- }
- },
"please-upgrade-node": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
@@ -13608,15 +11826,6 @@
"semver-compare": "^1.0.0"
}
},
- "plur": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
- "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=",
- "dev": true,
- "requires": {
- "irregular-plurals": "^1.0.0"
- }
- },
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -13922,27 +12131,6 @@
"resolve": "^1.1.6"
}
},
- "redent": {
- "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"
- },
- "dependencies": {
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- }
- }
- },
"redeyed": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
@@ -14001,15 +12189,6 @@
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true
},
- "repeating": {
- "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"
- }
- },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -14018,7 +12197,8 @@
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
},
"requires-port": {
"version": "1.0.0",
@@ -14059,23 +12239,6 @@
"global-dirs": "^0.1.1"
}
},
- "resolve-pkg": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-1.0.0.tgz",
- "integrity": "sha1-4ZoV54rKLhJEYdySsuOUPvk0lNk=",
- "dev": true,
- "requires": {
- "resolve-from": "^2.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
- "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
- "dev": true
- }
- }
- },
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
@@ -14135,12 +12298,6 @@
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
},
- "safe-json-parse": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz",
- "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=",
- "dev": true
- },
"safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
@@ -14155,13 +12312,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
- "dev": true,
- "optional": true
- },
"seed-random": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz",
@@ -14202,6 +12352,53 @@
"yargs": "^15.0.1"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "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==",
+ "dev": true
+ },
"cosmiconfig": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
@@ -14224,6 +12421,12 @@
"ms": "^2.1.1"
}
},
+ "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==",
+ "dev": true
+ },
"figures": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
@@ -14252,6 +12455,12 @@
"lru-cache": "^5.1.1"
}
},
+ "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==",
+ "dev": true
+ },
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -14358,11 +12567,77 @@
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
},
+ "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==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
"type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
@@ -14378,12 +12653,6 @@
"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
"dev": true
},
- "semver-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
- "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=",
- "dev": true
- },
"serialize-error": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-4.1.0.tgz",
@@ -14404,7 +12673,8 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
},
"set-value": {
"version": "2.0.1",
@@ -14650,18 +12920,26 @@
}
},
"socket.io": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz",
- "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.0.4.tgz",
+ "integrity": "sha512-Vj1jUoO75WGc9txWd311ZJJqS9Dr8QtNJJ7gk2r7dcM/yGe9sit7qOijQl3GAwhpBOz/W8CwkD7R6yob07nLbA==",
"requires": {
+ "@types/cookie": "^0.4.0",
+ "@types/cors": "^2.8.8",
+ "@types/node": "^14.14.7",
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
"debug": "~4.1.0",
- "engine.io": "~3.4.0",
- "has-binary2": "~1.0.2",
- "socket.io-adapter": "~1.1.0",
- "socket.io-client": "2.3.0",
- "socket.io-parser": "~3.4.0"
+ "engine.io": "~4.0.0",
+ "socket.io-adapter": "~2.0.3",
+ "socket.io-parser": "~4.0.1"
},
"dependencies": {
+ "@types/node": {
+ "version": "14.14.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.13.tgz",
+ "integrity": "sha512-vbxr0VZ8exFMMAjCW8rJwaya0dMCDyYW2ZRdTyjtrCvJoENMpdUHOT/eTzvgyA5ZnqRZ/sI0NwqAxNHKYokLJQ=="
+ },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -14671,93 +12949,32 @@
}
},
"ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"socket.io-adapter": {
- "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.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": "~4.1.0",
- "engine.io-client": "~3.4.0",
- "has-binary2": "~1.0.2",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "object-component": "0.0.3",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "socket.io-parser": "~3.3.0",
- "to-array": "0.1.4"
- },
- "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"
- }
- },
- "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": {
- "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="
- }
- }
- }
- }
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.0.3.tgz",
+ "integrity": "sha512-2wo4EXgxOGSFueqvHAdnmi5JLZzWqMArjuP4nqC26AtLh5PoCPsaRbRdah2xhcwTAMooZfjYiNVNkkmmSMaxOQ=="
},
"socket.io-parser": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
- "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.2.tgz",
+ "integrity": "sha512-Bs3IYHDivwf+bAAuW/8xwJgIiBNtlvnjYRc4PbXgniLmcP1BrakBoq/QhO24rgtgW7VZ7uAaswRGxutUnlAK7g==",
"requires": {
- "component-emitter": "1.2.1",
- "debug": "~4.1.0",
- "isarray": "2.0.1"
+ "@types/component-emitter": "^1.2.10",
+ "component-emitter": "~1.3.0",
+ "debug": "~4.1.0"
},
"dependencies": {
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -14766,15 +12983,10 @@
"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=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
@@ -15024,12 +13236,6 @@
"integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
"dev": true
},
- "string-template": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
- "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=",
- "dev": true
- },
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -15104,15 +13310,6 @@
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true
},
- "strip-indent": {
- "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"
- }
- },
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
@@ -15255,35 +13452,6 @@
}
}
},
- "tar": {
- "version": "4.4.13",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
- "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
- "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"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
"temp-dir": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
@@ -15393,37 +13561,6 @@
"process": "~0.11.0"
}
},
- "tiny-lr": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz",
- "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==",
- "dev": true,
- "requires": {
- "body": "^5.1.0",
- "debug": "^3.1.0",
- "faye-websocket": "~0.10.0",
- "livereload-js": "^2.3.0",
- "object-assign": "^4.1.0",
- "qs": "^6.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "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
- }
- }
- },
"title-case": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz",
@@ -15452,11 +13589,6 @@
}
}
},
- "to-array": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
- },
"to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
@@ -15515,12 +13647,6 @@
"integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
"dev": true
},
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
- "dev": true
- },
"trim-off-newlines": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
@@ -15588,9 +13714,9 @@
"dev": true
},
"ua-parser-js": {
- "version": "0.7.22",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz",
- "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q=="
+ "version": "0.7.23",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz",
+ "integrity": "sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA=="
},
"uglify-js": {
"version": "3.6.0",
@@ -15728,9 +13854,9 @@
}
},
"upath": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
- "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
"dev": true
},
"upper-case": {
@@ -15851,6 +13977,11 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
@@ -15913,9 +14044,9 @@
}
},
"chokidar": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
- "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
@@ -15954,14 +14085,14 @@
}
},
"fsevents": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
- "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
"optional": true,
"requires": {
- "nan": "^2.12.1",
- "node-pre-gyp": "^0.12.0"
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
}
},
"glob-parent": {
@@ -16017,23 +14148,6 @@
}
}
},
- "websocket-driver": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
- "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
- "dev": true,
- "requires": {
- "http-parser-js": ">=0.4.0 <0.4.11",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
- }
- },
- "websocket-extensions": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
- "dev": true
- },
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -16046,7 +14160,8 @@
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
},
"which-pm-runs": {
"version": "1.0.0",
@@ -16054,16 +14169,6 @@
"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
"dev": true
},
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
"windows-release": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz",
@@ -16121,9 +14226,9 @@
"dev": true
},
"wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -16136,11 +14241,10 @@
"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==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
- "@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
@@ -16202,9 +14306,9 @@
}
},
"ws": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz",
- "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w=="
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz",
+ "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ=="
},
"xmlbuilder": {
"version": "12.0.0",
@@ -16212,11 +14316,6 @@
"integrity": "sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==",
"dev": true
},
- "xmlhttprequest-ssl": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
- "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
- },
"xregexp": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz",
@@ -16233,9 +14332,9 @@
"dev": true
},
"y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
+ "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg=="
},
"yallist": {
"version": "3.0.3",
@@ -16253,21 +14352,17 @@
}
},
"yargs": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
- "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz",
+ "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==",
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
"string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.1"
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
},
"dependencies": {
"ansi-regex": {
@@ -16275,64 +14370,16 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
},
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
"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=="
},
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
"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=="
},
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
- "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
@@ -16352,13 +14399,9 @@
}
},
"yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
}
}
},
@@ -16388,11 +14431,6 @@
"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="
}
}
}
diff --git a/package.json b/package.json
index 3d34ac795..9fdce2cad 100644
--- a/package.json
+++ b/package.json
@@ -124,6 +124,7 @@
"Steve Mao ",
"Steve Van Opstal ",
"Sylvain Hamel ",
+ "SymbioticKilla <59652865+SymbioticKilla@users.noreply.github.com>",
"Terry ",
"Thomas Parisot ",
"Tom Erik Støwer ",
@@ -152,6 +153,7 @@
"Andrey Chalkin ",
"Andy Joslin ",
"Anton Usmansky ",
+ "Athur Ming ",
"Atul Bhosale ",
"AugustinLF ",
"AvnerCohen ",
@@ -237,6 +239,7 @@
"Jon Bretman ",
"Jonathan ES Lin ",
"Jonathan Felchlin ",
+ "Jonathan Ginsburg ",
"Jonathan Niles ",
"Josh Lory ",
"João Marcos Duarte ",
@@ -266,6 +269,7 @@
"Martin Jul ",
"Martin Lemanski ",
"Martin Probst ",
+ "Marvin Heilemann ",
"Matias Niemelä ",
"Matthew Amato ",
"Matthew Cale ",
@@ -422,11 +426,11 @@
"qjobs": "^1.2.0",
"range-parser": "^1.2.1",
"rimraf": "^3.0.2",
- "socket.io": "^2.3.0",
+ "socket.io": "^3.0.4",
"source-map": "^0.6.1",
"tmp": "0.2.1",
- "ua-parser-js": "0.7.22",
- "yargs": "^15.3.1"
+ "ua-parser-js": "^0.7.23",
+ "yargs": "^16.1.1"
},
"devDependencies": {
"@commitlint/cli": "^8.3.4",
@@ -446,16 +450,8 @@
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.1",
"grunt": "^1.2.1",
- "grunt-auto-release": "^0.0.7",
- "grunt-browserify": "^5.0.0",
- "grunt-bump": "^0.8.0",
- "grunt-check-clean": "^0.1.2",
"grunt-cli": "^1.1.0",
- "grunt-contrib-watch": "^1.1.0",
- "grunt-conventional-changelog": "^6.0.1",
- "grunt-conventional-github-releaser": "^1.0.0",
"grunt-mocha-test": "^0.13.2",
- "grunt-npm": "0.0.2",
"http2": "^3.3.6",
"husky": "^4.2.5",
"jasmine-core": "^3.6.0",
@@ -469,7 +465,6 @@
"karma-mocha": "^1.0.1",
"karma-mocha-reporter": "^2.0.0",
"karma-script-launcher": "^1.0.0",
- "load-grunt-tasks": "^4.0.0",
"mkdirp": "^0.5.0",
"mocha": "^4.1.0",
"mocks": "^0.0.15",
@@ -480,6 +475,7 @@
"sinon-chai": "^3.5.0",
"supertest": "^4.0.2",
"timer-shim": "^0.3.0",
+ "watchify": "^3.11.1",
"which": "^1.3.1"
},
"main": "./lib/index",
@@ -489,7 +485,7 @@
"engines": {
"node": ">= 10"
},
- "version": "5.2.3",
+ "version": "6.0.0",
"license": "MIT",
"husky": {
"hooks": {
@@ -500,13 +496,13 @@
"scripts": {
"lint": "eslint . --ext js --ignore-pattern *.tpl.js",
"lint:fix": "eslint . --ext js --ignore-pattern *.tpl.js --fix",
- "test:unit": "grunt test:unit",
+ "test:unit": "grunt",
"test:e2e": "cucumber-js test/e2e/*.feature",
- "test:client": "grunt test:client",
+ "test:client": "node bin/karma start test/client/karma.conf.js",
"test": "npm run test:unit && npm run test:e2e && npm run test:client",
"build": "node scripts/client.js build",
"build:check": "node scripts/client.js check",
- "test:appveyor": "grunt test-appveyor",
+ "build:watch": "node scripts/client.js watch",
"test:integration": "./scripts/integration-tests.sh",
"link": "node --eval \"path=require('path'); require('fs').symlinkSync(path.resolve(__dirname), path.resolve(__dirname, 'node_modules', 'karma'), 'junction')\"",
"unlink": "node --eval \"require('fs').unlinkSync(require('path').resolve(__dirname, 'node_modules', 'karma'))\"",
diff --git a/scripts/client.js b/scripts/client.js
index 29dfabc72..be4400f13 100644
--- a/scripts/client.js
+++ b/scripts/client.js
@@ -1,13 +1,14 @@
const browserify = require('browserify')
-const fs = require('fs')
+const watchify = require('watchify')
+const { createWriteStream } = require('fs')
const { readFile } = require('fs').promises
const bundleResourceToFile = (inPath, outPath) => {
return new Promise((resolve, reject) => {
browserify(inPath).bundle()
- .pipe(fs.createWriteStream(outPath))
- .once('finish', () => resolve())
.once('error', (e) => reject(e))
+ .pipe(createWriteStream(outPath))
+ .once('finish', () => resolve())
})
}
@@ -24,6 +25,28 @@ const bundleResource = (inPath) => {
})
}
+const watchResourceToFile = (inPath, outPath) => {
+ const b = browserify({
+ entries: [inPath],
+ cache: {},
+ packageCache: {},
+ plugin: [watchify]
+ })
+
+ const bundle = () => {
+ b.bundle()
+ .once('error', (e) => {
+ console.error(`Failed to bundle ${inPath} into ${outPath}.`)
+ console.error(e)
+ })
+ .pipe(createWriteStream(outPath))
+ .once('finish', () => console.log(`Bundled ${inPath} into ${outPath}.`))
+ }
+
+ b.on('update', bundle)
+ bundle()
+}
+
const main = async () => {
if (process.argv[2] === 'build') {
await bundleResourceToFile('client/main.js', 'static/karma.js')
@@ -39,6 +62,9 @@ const main = async () => {
// eslint-disable-next-line no-throw-literal
throw 'Bundled client assets are outdated. Forgot to run "npm run build"?'
}
+ } else if (process.argv[2] === 'watch') {
+ watchResourceToFile('client/main.js', 'static/karma.js')
+ watchResourceToFile('context/main.js', 'static/context.js')
} else {
// eslint-disable-next-line no-throw-literal
throw `Unknown command: ${process.argv[2]}`
diff --git a/static/karma.js b/static/karma.js
index bb3630d98..8c08d3fca 100644
--- a/static/karma.js
+++ b/static/karma.js
@@ -12,9 +12,10 @@ var stringify = require('../common/stringify')
var constant = require('./constants')
var util = require('../common/util')
-function Karma (socket, iframe, opener, navigator, location, document) {
+function Karma (updater, socket, iframe, opener, navigator, location, document) {
+ this.updater = updater
var startEmitted = false
- var reloadingContext = false
+ var karmaNavigating = false
var self = this
var queryParams = util.parseQueryParams(location.search)
var browserId = queryParams.id || util.generateId('manual-')
@@ -51,9 +52,11 @@ function Karma (socket, iframe, opener, navigator, location, document) {
}
}
- // This variable will be set to "true" whenever the socket lost connection and was able to
- // reconnect to the Karma server. This will be passed to the Karma server then, so that
- // Karma can differentiate between a socket client reconnect and a full browser reconnect.
+ // To start we will signal the server that we are not reconnecting. If the socket loses
+ // connection and was able to reconnect to the Karma server we will get a
+ // second 'connect' event. There we will pass 'true' and that will be passed to the
+ // Karma server then, so that Karma can differentiate between a socket client
+ // econnect and a full browser reconnect.
var socketReconnect = false
this.VERSION = constant.VERSION
@@ -90,6 +93,7 @@ function Karma (socket, iframe, opener, navigator, location, document) {
var childWindow = null
function navigateContextTo (url) {
+ karmaNavigating = true
if (self.config.useIframe === false) {
// run in new window
if (self.config.runInParent === false) {
@@ -99,9 +103,11 @@ function Karma (socket, iframe, opener, navigator, location, document) {
childWindow.close()
}
childWindow = opener(url)
+ karmaNavigating = false
// run context on parent element (client_with_context)
// using window.__karma__.scriptUrls to get the html element strings and load them dynamically
} else if (url !== 'about:blank') {
+ karmaNavigating = false
var loadScript = function (idx) {
if (idx < window.__karma__.scriptUrls.length) {
var parser = new DOMParser()
@@ -133,21 +139,15 @@ function Karma (socket, iframe, opener, navigator, location, document) {
// run in iframe
} else {
iframe.src = policy.createURL(url)
+ karmaNavigating = false
}
}
this.onbeforeunload = function () {
- if (!reloadingContext) {
+ if (!karmaNavigating) {
// TODO(vojta): show what test (with explanation about jasmine.UPDATE_INTERVAL)
self.error('Some of your tests did a full page reload!')
}
- reloadingContext = false
- }
-
- function clearContext () {
- reloadingContext = true
-
- navigateContextTo('about:blank')
}
this.log = function (type, args) {
@@ -201,6 +201,7 @@ function Karma (socket, iframe, opener, navigator, location, document) {
}
socket.emit('karma_error', message)
+ self.updater.updateTestStatus(`karma_error ${message}`)
this.complete()
return false
}
@@ -223,10 +224,12 @@ function Karma (socket, iframe, opener, navigator, location, document) {
if (!startEmitted) {
socket.emit('start', { total: null })
+ self.updater.updateTestStatus('start')
startEmitted = true
}
if (resultsBufferLimit === 1) {
+ self.updater.updateTestStatus('result')
return socket.emit('result', convertedResult)
}
@@ -234,6 +237,7 @@ function Karma (socket, iframe, opener, navigator, location, document) {
if (resultsBuffer.length === resultsBufferLimit) {
socket.emit('result', resultsBuffer)
+ self.updater.updateTestStatus('result')
resultsBuffer = []
}
}
@@ -244,14 +248,16 @@ function Karma (socket, iframe, opener, navigator, location, document) {
resultsBuffer = []
}
- if (self.config.clearContext) {
- // A test could have incorrectly issued a navigate. To clear the context
- // we will navigate the iframe. Delay ours to ensure the error from an
- // incorrect navigate is processed.
- setTimeout(clearContext)
- }
+ // A test could have incorrectly issued a navigate. Wait one turn
+ // to ensure the error from an incorrect navigate is processed.
+ setTimeout(() => {
+ if (this.config.clearContext) {
+ navigateContextTo('about:blank')
+ }
+
+ socket.emit('complete', result || {})
+ self.updater.updateTestStatus('complete')
- socket.emit('complete', result || {}, function () {
if (returnUrl) {
location.href = returnUrl
}
@@ -269,26 +275,24 @@ function Karma (socket, iframe, opener, navigator, location, document) {
}
socket.on('execute', function (cfg) {
- // Delay our navigation to the next event in case the clearContext has not completed.
- setTimeout(function allowClearContextToComplete () {
- // reset startEmitted and reload the iframe
- startEmitted = false
- self.config = cfg
-
- navigateContextTo(constant.CONTEXT_URL)
-
- if (self.config.clientDisplayNone) {
- [].forEach.call(document.querySelectorAll('#banner, #browsers'), function (el) {
- el.style.display = 'none'
- })
- }
+ self.updater.updateTestStatus('execute')
+ // reset startEmitted and reload the iframe
+ startEmitted = false
+ self.config = cfg
- // clear the console before run
- // works only on FF (Safari, Chrome do not allow to clear console from js source)
- if (window.console && window.console.clear) {
- window.console.clear()
- }
- })
+ navigateContextTo(constant.CONTEXT_URL)
+
+ if (self.config.clientDisplayNone) {
+ [].forEach.call(document.querySelectorAll('#banner, #browsers'), function (el) {
+ el.style.display = 'none'
+ })
+ }
+
+ // clear the console before run
+ // works only on FF (Safari, Chrome do not allow to clear console from js source)
+ if (window.console && window.console.clear) {
+ window.console.clear()
+ }
})
socket.on('stop', function () {
this.complete()
@@ -315,9 +319,6 @@ function Karma (socket, iframe, opener, navigator, location, document) {
info.displayName = displayName
}
socket.emit('register', info)
- })
-
- socket.on('reconnect', function () {
socketReconnect = true
})
}
@@ -347,8 +348,8 @@ var socket = io(location.host, {
})
// instantiate the updater of the view
-new StatusUpdater(socket, util.elm('title'), util.elm('banner'), util.elm('browsers'))
-window.karma = new Karma(socket, util.elm('context'), window.open,
+var updater = new StatusUpdater(socket, util.elm('title'), util.elm('banner'), util.elm('browsers'))
+window.karma = new Karma(updater, socket, util.elm('context'), window.open,
window.navigator, window.location, window.document)
},{"../common/util":6,"./constants":1,"./karma":2,"./updater":4}],4:[function(require,module,exports){
@@ -375,26 +376,60 @@ function StatusUpdater (socket, titleElement, bannerElement, browsersElement) {
}
}
- function updateBanner (status) {
- return function (param) {
- if (!titleElement || !bannerElement) {
- return
- }
- var paramStatus = param ? status.replace('$', param) : status
- titleElement.textContent = 'Karma v' + VERSION + ' - ' + paramStatus
- bannerElement.className = status === 'connected' ? 'online' : 'offline'
+ var connectionText = 'never-connected'
+ var testText = 'loading'
+ var pingText = ''
+
+ function updateBanner () {
+ if (!titleElement || !bannerElement) {
+ return
}
+ titleElement.textContent = `Karma v ${VERSION} - ${connectionText}; test: ${testText}; ${pingText}`
+ bannerElement.className = connectionText === 'connected' ? 'online' : 'offline'
+ }
+
+ function updateConnectionStatus (connectionStatus) {
+ connectionText = connectionStatus || connectionText
+ updateBanner()
}
+ function updateTestStatus (testStatus) {
+ testText = testStatus || testText
+ updateBanner()
+ }
+ function updatePingStatus (pingStatus) {
+ pingText = pingStatus || pingText
+ updateBanner()
+ }
+
+ socket.on('connect', () => {
+ updateConnectionStatus('connected')
+ })
+ socket.on('disconnect', () => {
+ updateConnectionStatus('disconnected')
+ })
+ socket.on('reconnecting', (sec) => {
+ updateConnectionStatus(`reconnecting in ${sec} seconds`)
+ })
+ socket.on('reconnect', () => {
+ updateConnectionStatus('reconnected')
+ })
+ socket.on('reconnect_failed', () => {
+ updateConnectionStatus('reconnect_failed')
+ })
- socket.on('connect', updateBanner('connected'))
- socket.on('disconnect', updateBanner('disconnected'))
- socket.on('reconnecting', updateBanner('reconnecting in $ seconds...'))
- socket.on('reconnect', updateBanner('connected'))
- socket.on('reconnect_failed', updateBanner('failed to reconnect'))
socket.on('info', updateBrowsersInfo)
- socket.on('disconnect', function () {
+ socket.on('disconnect', () => {
updateBrowsersInfo([])
})
+
+ socket.on('ping', () => {
+ updatePingStatus('ping...')
+ })
+ socket.on('pong', (latency) => {
+ updatePingStatus(`ping ${latency}ms`)
+ })
+
+ return { updateTestStatus: updateTestStatus }
}
module.exports = StatusUpdater
diff --git a/tasks/test.js b/tasks/test.js
deleted file mode 100644
index efbed1c15..000000000
--- a/tasks/test.js
+++ /dev/null
@@ -1,48 +0,0 @@
-module.exports = function (grunt) {
- /**
- * Run tests
- *
- * grunt test
- * grunt test:unit
- * grunt test:client
- */
- grunt.registerMultiTask('test', 'Run tests.', function () {
- const specDone = this.async()
- const node = require('which').sync('node')
- const path = require('path')
- const cmd = path.join(__dirname, '..', 'bin', 'karma')
-
- function spawnKarma (args, callback) {
- grunt.log.writeln(['Running', cmd].concat(args).join(' '))
- var child
- if (process.platform === 'win32') {
- child = grunt.util.spawn({ cmd: node, args: [cmd].concat(args) }, callback)
- } else {
- child = grunt.util.spawn({ cmd: cmd, args: args }, callback)
- }
- child.stdout.pipe(process.stdout)
- child.stderr.pipe(process.stderr)
- }
-
- function exec (args, failMsg) {
- spawnKarma(args, function (err, result, code) {
- if (code || err) {
- console.error(err)
- grunt.fail.fatal(failMsg, code)
- } else {
- specDone()
- }
- })
- }
-
- // CLIENT unit tests
- if (this.target === 'client') {
- return exec(['start', this.data, '--single-run', '--no-auto-watch', '--reporters=dots'],
- 'Client unit tests failed.')
- }
-
- // UNIT tests or TASK tests
- grunt.task.run([this.data])
- specDone()
- })
-}
diff --git a/test/client/karma.conf.js b/test/client/karma.conf.js
index eb16e4e0c..0b1281d78 100644
--- a/test/client/karma.conf.js
+++ b/test/client/karma.conf.js
@@ -14,35 +14,35 @@ const launchers = {
browser: 'firefox',
os: 'Windows',
os_version: '10'
- },
- bs_safari: {
- base: 'BrowserStack',
- browser: 'safari',
- browser_version: '9.0',
- os_version: 'El Capitan',
- os: 'OS X'
- },
- bs_ie_11: {
- base: 'BrowserStack',
- browser: 'ie',
- browser_version: '11.0',
- os: 'Windows',
- os_version: '10'
- },
- bs_ie_10: {
- base: 'BrowserStack',
- browser: 'ie',
- browser_version: '10.0',
- os: 'Windows',
- os_version: '8'
- },
- bs_ie_9: {
- base: 'BrowserStack',
- browser: 'ie',
- browser_version: '9.0',
- os: 'Windows',
- os_version: '7'
}
+ // bs_safari: {
+ // base: 'BrowserStack',
+ // browser: 'safari',
+ // browser_version: '9.0',
+ // os_version: 'El Capitan',
+ // os: 'OS X'
+ // },
+ // bs_ie_11: {
+ // base: 'BrowserStack',
+ // browser: 'ie',
+ // browser_version: '11.0',
+ // os: 'Windows',
+ // os_version: '10'
+ // },
+ // bs_ie_10: {
+ // base: 'BrowserStack',
+ // browser: 'ie',
+ // browser_version: '10.0',
+ // os: 'Windows',
+ // os_version: '8'
+ // },
+ // bs_ie_9: {
+ // base: 'BrowserStack',
+ // browser: 'ie',
+ // browser_version: '9.0',
+ // os: 'Windows',
+ // os_version: '7'
+ // }
}
// Verify the install. This will run async but that's ok we'll see the log.
@@ -57,26 +57,22 @@ fs.lstat('node_modules/karma', (err, stats) => {
console.log('**** Incorrect directory layout for karma self-tests ****')
console.log(`
$ npm install
-
+
$ npm run init
# or if you're on Windows
$ npm run init:windows
-
+
$ npm run build
`)
process.exit(1)
})
-let browsers = []
+let browsers = ['Chrome']
if (process.env.TRAVIS) {
if (TRAVIS_WITH_BS) {
browsers = Object.keys(launchers)
- } else {
- browsers.push('Firefox')
}
-} else {
- browsers.push('Chrome')
}
module.exports = function (config) {
@@ -102,7 +98,7 @@ module.exports = function (config) {
// use dots reporter, as travis terminal does not support escaping sequences
// possible values: 'dots', 'progress'
// CLI --reporters progress
- reporters: ['progress', 'junit'],
+ reporters: ['dots'],
junitReporter: {
// will be resolved to basePath (in the same way as files/exclude patterns)
@@ -124,7 +120,7 @@ module.exports = function (config) {
// enable / disable watching file and executing tests whenever any file changes
// CLI --auto-watch --no-auto-watch
- autoWatch: true,
+ autoWatch: false,
// Start these browsers, currently available:
// - Chrome
@@ -149,7 +145,7 @@ module.exports = function (config) {
// Auto run tests on start (when browsers are captured) and exit
// CLI --single-run --no-single-run
- singleRun: false,
+ singleRun: true,
// report which specs are slower than 500ms
// CLI --report-slower-than 500
diff --git a/test/client/karma.spec.js b/test/client/karma.spec.js
index bc3ad81f2..b1c50a00a 100644
--- a/test/client/karma.spec.js
+++ b/test/client/karma.spec.js
@@ -6,8 +6,8 @@ var ContextKarma = require('../../context/karma')
var MockSocket = require('./mocks').Socket
describe('Karma', function () {
- var socket, k, ck, windowNavigator, windowLocation, windowStub, startSpy, iframe, clientWindow
- var windowDocument, elements
+ var updater, socket, k, ck, windowNavigator, windowLocation, windowStub, startSpy, iframe, clientWindow
+ var windowDocument, elements, mockTestStatus
function setTransportTo (transportName) {
socket._setTransportNameTo(transportName)
@@ -15,6 +15,12 @@ describe('Karma', function () {
}
beforeEach(function () {
+ mockTestStatus = ''
+ updater = {
+ updateTestStatus: (s) => {
+ mockTestStatus = s
+ }
+ }
socket = new MockSocket()
iframe = {}
windowNavigator = {}
@@ -23,7 +29,7 @@ describe('Karma', function () {
elements = [{ style: {} }, { style: {} }]
windowDocument = { querySelectorAll: sinon.stub().returns(elements) }
- k = new ClientKarma(socket, iframe, windowStub, windowNavigator, windowLocation, windowDocument)
+ k = new ClientKarma(updater, socket, iframe, windowStub, windowNavigator, windowLocation, windowDocument)
clientWindow = {
karma: k
}
@@ -145,6 +151,29 @@ describe('Karma', function () {
})
it('should error out if a script attempted to reload the browser after setup', function (done) {
+ // Perform setup
+ var config = ck.config = {
+ clearContext: false
+ }
+ socket.emit('execute', config)
+
+ setTimeout(function nextEventLoop () {
+ var mockWindow = {}
+ ck.setupContext(mockWindow)
+
+ // Spy on our error handler
+ sinon.spy(k, 'error')
+
+ // Emulate an unload event
+ mockWindow.onbeforeunload()
+
+ // Assert our spy was called
+ assert(k.error.calledWith('Some of your tests did a full page reload!'))
+ done()
+ })
+ })
+
+ it('should error out if a script attempted to reload the browser after setup with clearContext true', function (done) {
// Perform setup
var config = ck.config = {
clearContext: true
@@ -181,18 +210,20 @@ describe('Karma', function () {
})
it('should mark "register" event for reconnected socket', function () {
+ // First connect.
+ socket.emit('connect')
+
socket.on('register', sinon.spy(function (info) {
assert(info.isSocketReconnect === true)
}))
-
- socket.emit('reconnect')
+ // Reconnect
socket.emit('connect')
})
it('should report browser id', function () {
windowLocation.search = '?id=567'
socket = new MockSocket()
- k = new ClientKarma(socket, {}, windowStub, windowNavigator, windowLocation)
+ k = new ClientKarma(updater, socket, {}, windowStub, windowNavigator, windowLocation)
var spyInfo = sinon.spy(function (info) {
assert(info.id === '567')
@@ -414,24 +445,20 @@ describe('Karma', function () {
it('should navigate the client to return_url if specified', function (done) {
windowLocation.search = '?id=567&return_url=http://return.com'
socket = new MockSocket()
- k = new ClientKarma(socket, {}, windowStub, windowNavigator, windowLocation)
+ k = new ClientKarma(updater, socket, iframe, windowStub, windowNavigator, windowLocation)
clientWindow = { karma: k }
ck = new ContextKarma(ContextKarma.getDirectCallParentKarmaMethod(clientWindow))
ck.config = {}
sinon.spy(socket, 'disconnect')
-
- socket.on('complete', function (data, ack) {
- ack()
- })
+ clock.tick(500)
ck.complete()
-
- clock.tick(500)
- setTimeout(function () {
+ setTimeout(() => {
assert(windowLocation.href === 'http://return.com')
done()
}, 5)
+
clock.tick(10)
})
@@ -458,11 +485,14 @@ describe('Karma', function () {
}
socket.emit('execute', config)
+ assert(mockTestStatus === 'execute')
+
clock.tick(1)
var CURRENT_URL = iframe.src
ck.complete()
clock.tick(1)
assert.strictEqual(iframe.src, CURRENT_URL)
+ assert(mockTestStatus === 'complete')
})
it('should accept multiple calls to loaded', function () {
diff --git a/test/e2e/cli.feature b/test/e2e/cli.feature
index 2913f23f2..476d29a8e 100644
--- a/test/e2e/cli.feature
+++ b/test/e2e/cli.feature
@@ -15,11 +15,11 @@ Feature: CLI
karma
Commands:
- karma init Initialize a config file.
- karma start Start the server / do a single run.
- karma run Trigger a test run.
- karma stop Stop the server.
- karma completion Shell completion for karma.
+ karma init [configFile] Initialize a config file.
+ karma start [configFile] Start the server / do a single run.
+ karma run [configFile] Trigger a test run.
+ karma stop [configFile] Stop the server.
+ karma completion Shell completion for karma.
Options:
--help Print usage and options. [boolean]
@@ -45,17 +45,62 @@ Feature: CLI
karma
Commands:
- karma init Initialize a config file.
- karma start Start the server / do a single run.
- karma run Trigger a test run.
- karma stop Stop the server.
- karma completion Shell completion for karma.
+ karma init [configFile] Initialize a config file.
+ karma start [configFile] Start the server / do a single run.
+ karma run [configFile] Trigger a test run.
+ karma stop [configFile] Stop the server.
+ karma completion Shell completion for karma.
Options:
--help Print usage and options. [boolean]
--version Print current version. [boolean]
- Unknown command: strat
+ Unknown argument: strat
+ """
+
+ Scenario: Error when option is unknown
+ When I execute Karma with arguments: "start --invalid-option"
+ Then the stderr is exactly:
+ """
+ Karma - Spectacular Test Runner for JavaScript.
+
+ START - Start the server / do a single run.
+
+ Usage:
+ karma start [configFile]
+
+ Positionals:
+ configFile Path to the Karma configuration file [string]
+
+ Options:
+ --help Print usage and options. [boolean]
+ --port Port where the server is running.
+ --auto-watch Auto watch source files and run on change.
+ --detached Detach the server.
+ --no-auto-watch Do not watch source files.
+ --log-level Level
+ of logging.
+ --colors Use colors when reporting and printing logs.
+ --no-colors Do not use colors when reporting or printing
+ logs.
+ --reporters List of reporters (available: dots, progress,
+ junit, growl, coverage).
+ --browsers List of browsers to start (eg. --browsers
+ Chrome,ChromeCanary,Firefox).
+ --capture-timeout Kill browser if does not capture in
+ given time [ms].
+ --single-run Run the test when browsers captured and exit.
+ --no-single-run Disable single-run.
+ --report-slower-than Report tests that are slower than
+ given time [ms].
+ --fail-on-empty-test-suite Fail on empty test suite.
+ --no-fail-on-empty-test-suite Do not fail on empty test suite.
+ --fail-on-failing-test-suite Fail on failing test suite.
+ --no-fail-on-failing-test-suite Do not fail on failing test suite.
+ --format-error A path to a file that exports the format
+ function. [string]
+
+ Unknown arguments: invalid-option, invalidOption
"""
Scenario: Init command help
@@ -69,6 +114,9 @@ Feature: CLI
Usage:
karma init [configFile]
+ Positionals:
+ configFile Name of the generated Karma configuration file [string]
+
Options:
--help Print usage and options. [boolean]
--log-level Level of logging.
@@ -87,6 +135,9 @@ Feature: CLI
Usage:
karma start [configFile]
+ Positionals:
+ configFile Path to the Karma configuration file [string]
+
Options:
--help Print usage and options. [boolean]
--port Port where the server is running.
@@ -112,6 +163,8 @@ Feature: CLI
--no-fail-on-empty-test-suite Do not fail on empty test suite.
--fail-on-failing-test-suite Fail on failing test suite.
--no-fail-on-failing-test-suite Do not fail on failing test suite.
+ --format-error A path to a file that exports the format
+ function. [string]
"""
Scenario: Run command help
@@ -125,6 +178,9 @@ Feature: CLI
Usage:
karma run [configFile] [-- ]
+ Positionals:
+ configFile Path to the Karma configuration file [string]
+
Options:
--help Print usage and options. [boolean]
--port Port where the server is listening.
@@ -136,6 +192,15 @@ Feature: CLI
--colors Use colors when reporting and printing logs.
--no-colors Do not use colors when reporting or printing
logs.
+ --removed-files Comma-separated paths to removed files. Useful
+ when automatic file watching is disabled.
+ [string]
+ --changed-files Comma-separated paths to changed files. Useful
+ when automatic file watching is disabled.
+ [string]
+ --added-files Comma-separated paths to added files. Useful
+ when automatic file watching is disabled.
+ [string]
"""
Scenario: Stop command help
@@ -149,6 +214,9 @@ Feature: CLI
Usage:
karma stop [configFile]
+ Positionals:
+ configFile Path to the Karma configuration file [string]
+
Options:
--help Print usage and options. [boolean]
--port Port where the server is listening.
diff --git a/test/e2e/error.feature b/test/e2e/error.feature
index 0b327110e..09236959a 100644
--- a/test/e2e/error.feature
+++ b/test/e2e/error.feature
@@ -40,3 +40,19 @@ Feature: Error Display
"""
SyntaxError: Unexpected token '}'
"""
+
+Scenario: Missing module Error in a test file
+ Given a configuration with:
+ """
+ files = [{pattern: 'error/import-something-from-somewhere.js', type: 'module'}];
+ browsers = ['ChromeHeadlessNoSandbox'];
+ plugins = [
+ 'karma-jasmine',
+ 'karma-chrome-launcher'
+ ];
+ """
+ When I start Karma
+ Then it fails with:
+ """
+ Uncaught Error loading error/import-something-from-somewhere.js
+ """
diff --git a/test/e2e/reconnecting.feature b/test/e2e/reconnecting.feature
index 829cbaec7..246d4e0da 100644
--- a/test/e2e/reconnecting.feature
+++ b/test/e2e/reconnecting.feature
@@ -21,6 +21,7 @@ Feature: Passing Options
When I start Karma
Then it passes with:
"""
+ LOG: '============== START TEST =============='
.....
Chrome Headless
"""
diff --git a/test/e2e/support/error/import-something-from-somewhere.js b/test/e2e/support/error/import-something-from-somewhere.js
new file mode 100644
index 000000000..1a56d4654
--- /dev/null
+++ b/test/e2e/support/error/import-something-from-somewhere.js
@@ -0,0 +1,2 @@
+import { something } from './somewhere.js'
+console.log(something)
diff --git a/test/e2e/support/reconnecting/test.js b/test/e2e/support/reconnecting/test.js
index a3b682e1b..74216c7fe 100644
--- a/test/e2e/support/reconnecting/test.js
+++ b/test/e2e/support/reconnecting/test.js
@@ -6,27 +6,26 @@ describe('plus', function () {
}
it('should pass', function () {
+ // In flaky fails we probably get two starts.
+ console.log('============== START TEST ==============')
expect(1).toBe(1)
})
it('should disconnect', function (done) {
expect(2).toBe(2)
- socket().disconnect()
-
- done()
+ setTimeout(() => {
+ socket().disconnect()
+ done()
+ }, 500)
})
it('should work', function () {
expect(plus(1, 2)).toBe(3)
})
- it('should re-connect', function (done) {
+ it('should re-connect', function () {
expect(4).toBe(4)
- // Emit reconnect, so Karma will not start new test run after reconnecting.
- socket().emit('reconnect')
socket().connect()
-
- done()
})
it('should work', function () {
diff --git a/test/unit/browser.spec.js b/test/unit/browser.spec.js
index ec889b083..15b150a59 100644
--- a/test/unit/browser.spec.js
+++ b/test/unit/browser.spec.js
@@ -215,7 +215,7 @@ describe('Browser', () => {
})
})
- describe('onDisconnect', () => {
+ describe('onSocketDisconnect', () => {
let timer = null
beforeEach(() => {
@@ -227,7 +227,7 @@ describe('Browser', () => {
it('should remove from parent collection', () => {
expect(collection.length).to.equal(1)
- browser.onDisconnect('socket.io-reason', socket)
+ browser.onSocketDisconnect('socket.io-reason', socket)
expect(collection.length).to.equal(0)
})
@@ -236,7 +236,7 @@ describe('Browser', () => {
emitter.on('browser_complete', spy)
browser.state = Browser.STATE_EXECUTING
- browser.onDisconnect('socket.io-reason', socket)
+ browser.onSocketDisconnect('socket.io-reason', socket)
timer.wind(20)
expect(browser.lastResult.disconnected).to.equal(true)
@@ -248,7 +248,7 @@ describe('Browser', () => {
emitter.on('browser_complete', spy)
browser.state = Browser.STATE_CONNECTED
- browser.onDisconnect('socket.io-reason', socket)
+ browser.onSocketDisconnect('socket.io-reason', socket)
expect(spy).not.to.have.been.called
})
})
@@ -261,8 +261,8 @@ describe('Browser', () => {
browser.init()
browser.state = Browser.STATE_EXECUTING
- browser.onDisconnect('socket.io-reason', socket)
- browser.reconnect(mkSocket())
+ browser.onSocketDisconnect('socket.io-reason', socket)
+ browser.reconnect(mkSocket(), true)
timer.wind(10)
expect(browser.state).to.equal(Browser.STATE_EXECUTING)
@@ -275,7 +275,7 @@ describe('Browser', () => {
browser.init()
browser.state = Browser.STATE_EXECUTING
- browser.reconnect(mkSocket())
+ browser.reconnect(mkSocket(), true)
// still accept results on the old socket
socket.emit('result', { success: true })
@@ -293,7 +293,7 @@ describe('Browser', () => {
browser = new Browser('id', 'Chrome 25.0', collection, emitter, socket, null, 10)
browser.state = Browser.STATE_DISCONNECTED
- browser.reconnect(mkSocket())
+ browser.reconnect(mkSocket(), true)
expect(browser.isConnected()).to.equal(true)
})
@@ -306,7 +306,7 @@ describe('Browser', () => {
browser.state = Browser.STATE_DISCONNECTED
- browser.reconnect(mkSocket())
+ browser.reconnect(mkSocket(), false)
expect(collection.length).to.equal(1)
})
@@ -387,13 +387,18 @@ describe('Browser', () => {
describe('execute and start', () => {
it('should emit execute and change state to CONFIGURING', () => {
const spyExecute = sinon.spy()
- const config = {}
- browser = new Browser('fake-id', 'full name', collection, emitter, socket)
+ const timer = undefined
+ const disconnectDelay = 0
+ const noActivityTimeout = 0
+ const singleRun = false
+ const clientConfig = {}
+ browser = new Browser('fake-id', 'full name', collection, emitter, socket,
+ timer, disconnectDelay, noActivityTimeout, singleRun, clientConfig)
socket.on('execute', spyExecute)
- browser.execute(config)
+ browser.execute()
expect(browser.state).to.equal(Browser.STATE_CONFIGURING)
- expect(spyExecute).to.have.been.calledWith(config)
+ expect(spyExecute).to.have.been.calledWith(clientConfig)
})
it('should emit start and change state to EXECUTING', () => {
@@ -417,7 +422,7 @@ describe('Browser', () => {
expect(browser.isConnected()).to.equal(false)
const newSocket = mkSocket()
- browser.reconnect(newSocket)
+ browser.reconnect(newSocket, true)
expect(browser.isConnected()).to.equal(false)
newSocket.emit('result', { success: false, suite: [], log: [] })
@@ -466,7 +471,7 @@ describe('Browser', () => {
emitter.on('browser_register', () => browser.execute())
// reconnect on a new socket (which triggers re-execution)
- browser.reconnect(newSocket)
+ browser.reconnect(newSocket, false)
expect(browser.state).to.equal(Browser.STATE_CONFIGURING)
newSocket.emit('start', { total: 11 })
expect(browser.state).to.equal(Browser.STATE_EXECUTING)
@@ -487,13 +492,14 @@ describe('Browser', () => {
expect(browser.state).to.equal(Browser.STATE_CONNECTED)
browser.execute()
+ expect(browser.state).to.equal(Browser.STATE_CONFIGURING)
// A second connection...
const newSocket = mkSocket()
- browser.reconnect(newSocket)
+ browser.reconnect(newSocket, true)
// Disconnect the second connection...
- browser.onDisconnect('socket.io-reason', newSocket)
+ browser.onSocketDisconnect('socket.io-reason', newSocket)
expect(browser.state).to.equal(Browser.STATE_CONFIGURING)
socket.emit('start', { total: 1 })
expect(browser.state).to.equal(Browser.STATE_EXECUTING)
@@ -512,7 +518,7 @@ describe('Browser', () => {
browser.execute()
// A second connection...
- browser.reconnect(socket)
+ browser.reconnect(socket, true)
socket.emit('result', { success: true, suite: [], log: [] })
socket.emit('complete')
diff --git a/test/unit/cli.spec.js b/test/unit/cli.spec.js
index 8d9223256..222e92c04 100644
--- a/test/unit/cli.spec.js
+++ b/test/unit/cli.spec.js
@@ -1,6 +1,5 @@
'use strict'
-const yargs = require('yargs')
const path = require('path')
const mocks = require('mocks')
@@ -34,7 +33,7 @@ describe('cli', () => {
}
const processArgs = (args, opts) => {
- const argv = yargs.parse(args)
+ const argv = m.describeRoot().parse(args)
return e.processArgs(argv, opts || {}, fsMock, pathMock)
}
@@ -63,14 +62,14 @@ describe('cli', () => {
describe('processArgs', () => {
it('should override if multiple options given', () => {
// yargs parses --port 123 --port 456 as port = [123, 456] which makes no sense
- const options = processArgs(['some.conf', '--port', '12', '--log-level', 'info', '--port', '34', '--log-level', 'debug'])
+ const options = processArgs(['start', 'some.conf', '--port', '12', '--log-level', 'info', '--port', '34', '--log-level', 'debug'])
expect(options.port).to.equal(34)
expect(options.logLevel).to.equal('DEBUG')
})
it('should return camelCased options', () => {
- const options = processArgs(['some.conf', '--port', '12', '--single-run'])
+ const options = processArgs(['start', 'some.conf', '--port', '12', '--single-run'])
expect(options.configFile).to.exist
expect(options.port).to.equal(12)
@@ -79,41 +78,40 @@ describe('cli', () => {
it('should parse options without configFile and set default', () => {
setCWD('/cwd')
- const options = processArgs(['--auto-watch', '--auto-watch-interval', '10'])
+ const options = processArgs(['start', '--auto-watch'])
expect(path.resolve(options.configFile)).to.equal(path.resolve('/cwd/karma.conf.js'))
expect(options.autoWatch).to.equal(true)
- expect(options.autoWatchInterval).to.equal(10)
})
it('should set default karma.conf.coffee config file if exists', () => {
setCWD('/cwd2')
- const options = processArgs(['--port', '10'])
+ const options = processArgs(['start', '--port', '10'])
expect(path.resolve(options.configFile)).to.equal(path.resolve('/cwd2/karma.conf.coffee'))
})
it('should set default karma.conf.ts config file if exists', () => {
setCWD('/cwd3')
- const options = processArgs(['--port', '10'])
+ const options = processArgs(['start', '--port', '10'])
expect(path.resolve(options.configFile)).to.equal(path.resolve('/cwd3/karma.conf.ts'))
})
it('should not set default config if neither exists', () => {
setCWD('/')
- const options = processArgs([])
+ const options = processArgs(['start'])
expect(options.configFile).to.equal(null)
})
it('should parse auto-watch, colors, singleRun to boolean', () => {
- let options = processArgs(['--auto-watch', 'false', '--colors', 'false', '--single-run', 'false'])
+ let options = processArgs(['start', '--auto-watch', 'false', '--colors', 'false', '--single-run', 'false'])
expect(options.autoWatch).to.equal(false)
expect(options.colors).to.equal(false)
expect(options.singleRun).to.equal(false)
- options = processArgs(['--auto-watch', 'true', '--colors', 'true', '--single-run', 'true'])
+ options = processArgs(['start', '--auto-watch', 'true', '--colors', 'true', '--single-run', 'true'])
expect(options.autoWatch).to.equal(true)
expect(options.colors).to.equal(true)
@@ -121,63 +119,64 @@ describe('cli', () => {
})
it('should replace log-level constants', () => {
- let options = processArgs(['--log-level', 'debug'])
+ let options = processArgs(['start', '--log-level', 'debug'])
expect(options.logLevel).to.equal(constant.LOG_DEBUG)
- options = processArgs(['--log-level', 'error'])
+ options = processArgs(['start', '--log-level', 'error'])
expect(options.logLevel).to.equal(constant.LOG_ERROR)
- options = processArgs(['--log-level', 'warn'])
+ options = processArgs(['start', '--log-level', 'warn'])
expect(options.logLevel).to.equal(constant.LOG_WARN)
- options = processArgs(['--log-level', 'foo'])
+ options = processArgs(['start', '--log-level', 'foo'])
expect(mockery.process.exit).to.have.been.calledWith(1)
- options = processArgs(['--log-level'])
+ options = processArgs(['start', '--log-level'])
expect(mockery.process.exit).to.have.been.calledWith(1)
})
it('should parse format-error into a function', () => {
// root export
- let options = processArgs(['--format-error', '../../test/unit/fixtures/format-error-root'])
+ let options = processArgs(['start', '--format-error', '../../test/unit/fixtures/format-error-root'])
const formatErrorRoot = require('../../test/unit/fixtures/format-error-root')
expect(options.formatError).to.equal(formatErrorRoot)
// property export
- options = processArgs(['--format-error', '../../test/unit/fixtures/format-error-property'])
+ options = processArgs(['start', '--format-error', '../../test/unit/fixtures/format-error-property'])
const formatErrorProperty = require('../../test/unit/fixtures/format-error-property').formatError
expect(options.formatError).to.equal(formatErrorProperty)
})
it('should parse browsers into an array', () => {
- const options = processArgs(['--browsers', 'Chrome,ChromeCanary,Firefox'])
+ const options = processArgs(['start', '--browsers', 'Chrome,ChromeCanary,Firefox'])
expect(options.browsers).to.deep.equal(['Chrome', 'ChromeCanary', 'Firefox'])
})
it('should resolve configFile to absolute path', () => {
setCWD('/cwd')
- const options = processArgs(['some/config.js'])
+ const options = processArgs(['start', 'some/config.js'])
expect(path.resolve(options.configFile)).to.equal(path.resolve('/cwd/some/config.js'))
})
it('should parse report-slower-than to a number', () => {
- let options = processArgs(['--report-slower-than', '2000'])
+ let options = processArgs(['start', '--report-slower-than', '2000'])
expect(options.reportSlowerThan).to.equal(2000)
- options = processArgs(['--no-report-slower-than'])
+ options = processArgs(['start', '--no-report-slower-than'])
expect(options.reportSlowerThan).to.equal(0)
})
it('should cast reporters to array', () => {
- let options = processArgs(['--reporters', 'dots,junit'])
+ let options = processArgs(['start', '--reporters', 'dots,junit'])
expect(options.reporters).to.deep.equal(['dots', 'junit'])
- options = processArgs(['--reporters', 'dots'])
+ options = processArgs(['start', '--reporters', 'dots'])
expect(options.reporters).to.deep.equal(['dots'])
})
it('should parse removed/added/changed files to array', () => {
const options = processArgs([
+ 'run',
'--removed-files', 'r1.js,r2.js',
'--changed-files', 'ch1.js,ch2.js',
'--added-files', 'a1.js,a2.js'
@@ -187,18 +186,6 @@ describe('cli', () => {
expect(options.addedFiles).to.deep.equal(['a1.js', 'a2.js'])
expect(options.changedFiles).to.deep.equal(['ch1.js', 'ch2.js'])
})
-
- it('should error on args with underscores', () => {
- let expectedException
- try {
- const options = processArgs(['--no_browsers'])
- expectedException = 'Should have thrown but got ' + options
- } catch (e) {
- expectedException = e
- } finally {
- expect(expectedException + '').to.includes('Bad argument: no_browsers did you mean no-browsers')
- }
- })
})
describe('parseClientArgs', () => {
diff --git a/test/unit/middleware/karma.spec.js b/test/unit/middleware/karma.spec.js
index 16242d09d..8a968262c 100644
--- a/test/unit/middleware/karma.spec.js
+++ b/test/unit/middleware/karma.spec.js
@@ -202,12 +202,12 @@ describe('middleware.karma', () => {
it('should serve context.html with replaced script tags', (done) => {
includedFiles([
new MockFile('/first.js', 'sha123'),
- new MockFile('/second.dart', 'sha456')
+ new MockFile('/second.js', 'sha456')
])
response.once('end', () => {
expect(nextSpy).not.to.have.been.called
- expect(response).to.beServedAs(200, 'CONTEXT\n\n')
+ expect(response).to.beServedAs(200, 'CONTEXT\n\n')
done()
})
diff --git a/test/unit/preprocessor.spec.js b/test/unit/preprocessor.spec.js
index 1f59eb87f..2b5fefbc2 100644
--- a/test/unit/preprocessor.spec.js
+++ b/test/unit/preprocessor.spec.js
@@ -11,7 +11,7 @@ describe('preprocessor', () => {
let mockFs
let emitterSetting
// mimic first few bytes of a pdf file
- const binarydata = new Buffer([0x25, 0x50, 0x44, 0x66, 0x46, 0x00]) // eslint-disable-line node/no-deprecated-api
+ const binarydata = Buffer.from([0x25, 0x50, 0x44, 0x66, 0x46, 0x00])
beforeEach(() => {
mockFs = mocks.fs.create({
diff --git a/test/unit/runner.spec.js b/test/unit/runner.spec.js
index 97cefc49a..82f0eb15b 100644
--- a/test/unit/runner.spec.js
+++ b/test/unit/runner.spec.js
@@ -14,12 +14,12 @@ describe('runner', () => {
const EXIT = constant.EXIT_CODE
it('should return 0 exit code if present in the buffer', () => {
- const result = m.parseExitCode(new Buffer(`something\nfake${EXIT}10`)) // eslint-disable-line node/no-deprecated-api
+ const result = m.parseExitCode(Buffer.from(`something\nfake${EXIT}10`))
expect(result.exitCode).to.equal(0)
})
it('should remove the exit code part of the returned buffer', () => {
- const buffer = new Buffer(`some${EXIT}01`) // eslint-disable-line node/no-deprecated-api
+ const buffer = Buffer.from(`some${EXIT}01`)
const result = m.parseExitCode(buffer)
expect(buffer.toString()).to.equal(`some${EXIT}01`)
@@ -28,7 +28,7 @@ describe('runner', () => {
it('should not touch buffer without exit code and return default', () => {
const msg = 'some nice \n messgae {}'
- const buffer = new Buffer(msg) // eslint-disable-line node/no-deprecated-api
+ const buffer = Buffer.from(msg)
const result = m.parseExitCode(buffer, 10)
expect(result.buffer.toString()).to.equal(msg)
@@ -53,21 +53,21 @@ describe('runner', () => {
})
it('should parse any single digit exit code', () => {
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`)).exitCode).to.equal(1) // eslint-disable-line node/no-deprecated-api
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}17`)).exitCode).to.equal(7) // eslint-disable-line node/no-deprecated-api
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}01`)).exitCode).to.equal(1)
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}17`)).exitCode).to.equal(7)
})
it('should return exit code 0 if failOnEmptyTestSuite is false and and non-empty int is 0', () => {
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`), undefined, false).exitCode).to.equal(0) // eslint-disable-line node/no-deprecated-api
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}01`), undefined, false).exitCode).to.equal(0)
})
it('should return exit code if failOnEmptyTestSuite is true', () => {
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}00`), undefined, true).exitCode).to.equal(0) // eslint-disable-line node/no-deprecated-api
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`), undefined, true).exitCode).to.equal(1) // eslint-disable-line node/no-deprecated-api
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}07`), undefined, true).exitCode).to.equal(7) // eslint-disable-line node/no-deprecated-api
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}10`), undefined, true).exitCode).to.equal(0) // eslint-disable-line node/no-deprecated-api
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}11`), undefined, true).exitCode).to.equal(1) // eslint-disable-line node/no-deprecated-api
- expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}17`), undefined, true).exitCode).to.equal(7) // eslint-disable-line node/no-deprecated-api
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}00`), undefined, true).exitCode).to.equal(0)
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}01`), undefined, true).exitCode).to.equal(1)
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}07`), undefined, true).exitCode).to.equal(7)
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}10`), undefined, true).exitCode).to.equal(0)
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}11`), undefined, true).exitCode).to.equal(1)
+ expect(m.parseExitCode(Buffer.from(`something\nfake${EXIT}17`), undefined, true).exitCode).to.equal(7)
})
})
})
diff --git a/test/unit/server.spec.js b/test/unit/server.spec.js
index 8bfd39200..6523a709d 100644
--- a/test/unit/server.spec.js
+++ b/test/unit/server.spec.js
@@ -15,11 +15,11 @@ describe('server', () => {
let mockSocketServer
let mockBoundServer
let mockExecutor
- let doneSpy
+ let doneStub
let logErrorSpy
let server = mockConfig = browserCollection = webServerOnError = null
let fileListOnResolve = fileListOnReject = mockLauncher = null
- let mockFileList = mockWebServer = mockSocketServer = mockExecutor = doneSpy = null
+ let mockFileList = mockWebServer = mockSocketServer = mockExecutor = doneStub = null
const mockSocketEventListeners = new Map()
// Use regular function not arrow so 'this' is mocha 'this'.
@@ -27,13 +27,11 @@ describe('server', () => {
// The first call to new Server() loads plugins and it can take >2000ms.
this.timeout(4000)
browserCollection = new BrowserCollection()
- doneSpy = sinon.spy()
+ doneStub = sinon.stub()
logErrorSpy = sinon.spy(logger.create('karma-server'), 'error')
fileListOnResolve = fileListOnReject = null
- doneSpy = sinon.spy()
-
mockConfig = {
frameworks: [],
port: 9876,
@@ -45,10 +43,11 @@ describe('server', () => {
singleRun: true,
logLevel: 'OFF',
plugins: [],
- browserDisconnectTolerance: 0
+ browserDisconnectTolerance: 0,
+ browserNoActivityTimeout: 0
}
- server = new Server(mockConfig, doneSpy)
+ server = new Server(mockConfig, doneStub)
sinon.stub(server._injector, 'invoke').returns([])
@@ -119,10 +118,10 @@ describe('server', () => {
close: sinon.spy((callback) => callback && callback())
}
- sinon
- .stub(server._injector, 'get')
- .withArgs('webServer').returns(mockWebServer)
- .withArgs('socketServer').returns(mockSocketServer)
+ const injectorStub = sinon.stub(server._injector, 'get')
+ injectorStub.withArgs('socketServer').returns(mockSocketServer)
+ injectorStub.withArgs('webServer').returns(mockWebServer)
+ injectorStub.callThrough()
webServerOnError = null
})
@@ -184,7 +183,7 @@ describe('server', () => {
})
it('should start the web server after all files have been preprocessed successfully', async () => {
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy)
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
expect(mockFileList.refresh).to.have.been.called
expect(fileListOnResolve).not.to.be.null
@@ -198,7 +197,7 @@ describe('server', () => {
})
it('should start the web server after all files have been preprocessed with an error', async () => {
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy)
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
expect(mockFileList.refresh).to.have.been.called
expect(fileListOnReject).not.to.be.null
@@ -214,7 +213,7 @@ describe('server', () => {
})
it('should launch browsers after the web server has started', async () => {
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy)
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
expect(mockWebServer.listen).not.to.have.been.called
expect(webServerOnError).not.to.be.null
@@ -226,7 +225,7 @@ describe('server', () => {
})
it('should emit a listening event once server begin accepting connections', async () => {
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy)
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
const listening = sinon.spy()
server.on('listening', listening)
@@ -238,7 +237,7 @@ describe('server', () => {
})
it('should emit a browsers_ready event once all the browsers are captured', async () => {
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy)
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
const browsersReady = sinon.spy()
server.on('browsers_ready', browsersReady)
@@ -253,7 +252,7 @@ describe('server', () => {
})
it('should emit a browser_register event for each browser added', async () => {
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy)
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
const browsersReady = sinon.spy()
server.on('browsers_ready', browsersReady)
@@ -275,43 +274,28 @@ describe('server', () => {
})
}
- it('1 on load errors', async () => {
- mockProcess(process)
+ beforeEach(() => {
+ doneStub.callsFake((exitCode) => resolveExitCode(exitCode))
+ })
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ it('1 on load errors', async () => {
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
server.loadErrors.push(['TestError', 'Test'])
fileListOnResolve()
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
-
expect(await exitCode()).to.have.equal(1)
})
it('given on run_complete', async () => {
- mockProcess(process)
-
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
server.emit('run_complete', browserCollection, { exitCode: 15 })
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(15)
})
it('given on run_complete with exit event listener (15)', async () => {
- mockProcess(process)
-
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
// last non-zero exit code will be taken
server.on('exit', (done) => {
@@ -327,18 +311,11 @@ describe('server', () => {
// Provided run_complete exitCode will be overridden by exit listeners
server.emit('run_complete', browserCollection, { exitCode: 5 })
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(15)
})
it('given on run_complete with exit event listener (0)', async () => {
- mockProcess(process)
-
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
// exit listeners can't set exit code back to 0
server.on('exit', (done) => {
@@ -347,18 +324,11 @@ describe('server', () => {
server.emit('run_complete', browserCollection, { exitCode: 15 })
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(15)
})
it('1 on run_complete with exit event listener throws', async () => {
- mockProcess(process)
-
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
server.on('exit', (done) => {
throw new Error('async error from exit event listener')
@@ -366,18 +336,11 @@ describe('server', () => {
server.emit('run_complete', browserCollection, { exitCode: 0 })
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(1)
})
it('1 on run_complete with exit event listener rejects', async () => {
- mockProcess(process)
-
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
function onExit (done) {
// Need to remove listener to prevent endless loop via unhandledRejection handler
@@ -389,71 +352,40 @@ describe('server', () => {
server.emit('run_complete', browserCollection, { exitCode: 0 })
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(1)
})
it('0 on server stop', async () => {
- mockProcess(process)
-
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
server.stop()
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(0)
})
it('1 on browser_process_failure (singleRunBrowserNotCaptured)', async () => {
- mockProcess(process)
-
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
server.emit('browser_process_failure', { id: 'fake' })
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(1)
})
it('0 on browser_complete_with_no_more_retries', async () => {
- mockProcess(process)
-
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
- server.emit('browser_complete_with_no_more_retries', { id: 'fake' })
+ server.emit('browser_complete_with_no_more_retries', { id: 'fake', remove: () => {} })
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(0)
})
it('1 on browser_complete_with_no_more_retries with config.failOnEmptyTestSuite', async () => {
- mockProcess(process)
-
mockConfig.failOnEmptyTestSuite = true
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, (exitCode) => {
- resolveExitCode(exitCode)
- })
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
- server.emit('browser_complete_with_no_more_retries', { id: 'fake' })
+ server.emit('browser_complete_with_no_more_retries', { id: 'fake', remove: () => {} })
- function mockProcess (process) {
- sinon.stub(process, 'kill').callsFake((pid, ev) => process.emit(ev))
- }
expect(await exitCode()).to.have.equal(1)
})
})
@@ -464,7 +396,7 @@ describe('server', () => {
beforeEach(async () => {
browserCollection = new BrowserCollection(server)
- await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy)
+ await server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneStub)
mockBrowserSocket = {
id: 'browser-socket-id',
@@ -476,7 +408,7 @@ describe('server', () => {
it('should re-configure disconnected browser which has been restarted', () => {
const testBrowserId = 'my-id'
const browser = new Browser(testBrowserId, 'Chrome 19.0', browserCollection, server,
- mockBrowserSocket, null, 0)
+ mockBrowserSocket, undefined, 0, 0, true, {})
const registerFn = mockSocketEventListeners.get('register')
browser.init()
diff --git a/test/unit/web-server.spec.js b/test/unit/web-server.spec.js
index 5d9f4f18e..8517f172e 100644
--- a/test/unit/web-server.spec.js
+++ b/test/unit/web-server.spec.js
@@ -31,7 +31,7 @@ describe('web-server', () => {
// NOTE(vojta): only loading once, to speed things up
// this relies on the fact that none of these tests mutate fs
const m = mocks.loadFile(path.join(__dirname, '/../../lib/web-server.js'), _mocks, _globals)
- let customFileHandlers = server = emitter = null
+ server = emitter = null
let beforeMiddlewareActive = false
let middlewareActive = false
const servedFiles = (files) => {
@@ -40,7 +40,6 @@ describe('web-server', () => {
describe('request', () => {
beforeEach(() => {
- customFileHandlers = []
emitter = new EventEmitter()
const config = {
basePath: '/base/path',
@@ -57,7 +56,6 @@ describe('web-server', () => {
const injector = new di.Injector([{
config: ['value', config],
- customFileHandlers: ['value', customFileHandlers],
emitter: ['value', emitter],
fileList: ['value', { files: { served: [], included: [] } }],
filesPromise: ['factory', m.createFilesPromise],
@@ -182,23 +180,6 @@ describe('web-server', () => {
})
})
- it('should load custom handlers', () => {
- servedFiles(new Set())
-
- // TODO(vojta): change this, only keeping because karma-dart is relying on it
- customFileHandlers.push({
- urlRegex: /\/some\/weird/,
- handler (request, response, staticFolder, adapterFolder, baseFolder, urlRoot) {
- response.writeHead(222)
- response.end('CONTENT')
- }
- })
-
- return request(server)
- .get('/some/weird/url')
- .expect(222, 'CONTENT')
- })
-
it('should serve 404 for non-existing files', () => {
servedFiles(new Set())
@@ -215,7 +196,6 @@ describe('web-server', () => {
cert: fs.readFileSync(path.join(__dirname, '/certificates/server.crt'))
}
- customFileHandlers = []
emitter = new EventEmitter()
const injector = new di.Injector([{
@@ -226,7 +206,6 @@ describe('web-server', () => {
httpsServerOptions: credentials,
client: { useIframe: true, useSingleWindow: false }
}],
- customFileHandlers: ['value', customFileHandlers],
emitter: ['value', emitter],
fileList: ['value', { files: { served: [], included: [] } }],
filesPromise: ['factory', m.createFilesPromise],
@@ -265,12 +244,10 @@ describe('web-server', () => {
cert: fs.readFileSync(path.join(__dirname, '/certificates/server.crt'))
}
- customFileHandlers = []
emitter = new EventEmitter()
const injector = new di.Injector([{
config: ['value', { basePath: '/base/path', urlRoot: '/', httpModule: http2, protocol: 'https:', httpsServerOptions: credentials }],
- customFileHandlers: ['value', customFileHandlers],
emitter: ['value', emitter],
fileList: ['value', { files: { served: [], included: [] } }],
filesPromise: ['factory', m.createFilesPromise],