diff --git a/docs/Clients/WebSocket.md b/docs/Clients/WebSocket.md index fa131d85f..d64748824 100644 --- a/docs/Clients/WebSocket.md +++ b/docs/Clients/WebSocket.md @@ -100,11 +100,18 @@ the WebSocket client disconnects. ### Web Browser Call Example -> Note: The following example requires msgpack. Either download it or reference it via the CDN: +> ## `msgpack` required +> +> The following example requires msgpack. Either download it via `npm install msgpack-lite` or +> reference it via the CDN: > > `` +> +> For development, you may reference it directly from GitHub: +> +> `` -```javascript +```js const ws = new WebSocket('ws://127.0.0.1:1732'); ws.binaryType = 'arraybuffer'; @@ -125,7 +132,7 @@ ws.onmessage = evt => { This example uses the [ws](https://www.npmjs.com/package/ws) and [msgpack-lite](https://www.npmjs.com/package/msgpack-lite) packages. -```javascript +```js const msgpack = require('msgpack-lite'); const util = require('util'); const WebSocket = require('ws'); @@ -145,7 +152,7 @@ const ws = new WebSocket('ws://127.0.0.1:1732', { ### Node.js Subscribe Example -```javascript +```js const msgpack = require('msgpack-lite'); const util = require('util'); const WebSocket = require('ws'); diff --git a/docs/Components/Configuration-System.md b/docs/Components/Configuration-System.md index bc637c312..e829656b2 100644 --- a/docs/Components/Configuration-System.md +++ b/docs/Components/Configuration-System.md @@ -2,6 +2,92 @@ ## Configuration System +The Appc Daemon contains a default configuration file located inside the `appcd-core` package. +User-defined config settings are stored in `~/.appcelerator/appcd/config.json`. + +## Usage + +The daemon configuration can be accessed via the CLI, WebSocket (external), appcd client +(external), or programmatically (internal). + +### Actions + + * `ls`, `list` - Display all config settings. + * `get` - Display a specific setting. + * `set` - Sets a config setting and saves it in the user-defined config file. + * `rm`, `delete` - Remove a config setting. + * `push` - Add a value to the end of a list. + * `pop` - Remove the last value in a list. + +### `appcd config` CLI command + +```sh +# show the help screen +$ appcd config +$ appcd config -h +$ appcd config --help + +$ appcd config [options] [] [] +``` + +Refer to the [config command](Commands/config.md) page for more information. + +### Config Service via `appcd` CLI + +```sh +$ appcd exec /appcd/config + +$ appcd exec /appcd/config/{action} +``` + +### `appcd-client` for Node.js + +```js +import Client from 'appcd-client'; + +new Client() + .request({ + path: '/appcd/config' + }) + .on('response', (message, response) => { + console.log(message); + process.exit(0); + }) + .once('close', () => process.exit(0)) + .once('error', err => { + console.error(err.message); + process.exit(1); + }); +``` + +### WebSocket Client + +HTML: + +```html + +``` + +JavaScript: + +```js +const ws = new WebSocket('ws://127.0.0.1:1732'); +ws.binaryType = 'arraybuffer'; + +ws.onopen = () => ws.send(JSON.stringify({ + version: '1.0', + path: '/appcd/config', + id: Date.now() +})); + +ws.onmessage = evt => { + const status = msgpack.decode(new Uint8Array(evt.data)).message; + console.info(status); +}; +``` + +## Implementation + The Appc Daemon config system is implemented in the `appcd-config` package. It supports both `.js` `.json` config files. diff --git a/docs/Configuration-Settings.md b/docs/Configuration-Settings.md new file mode 100644 index 000000000..92e12dc53 --- /dev/null +++ b/docs/Configuration-Settings.md @@ -0,0 +1,72 @@ +# ![Appc Daemon logo](images/appc-daemon.png) Daemon Project + +## Configuration Settings + +> For information about the implementation details of the config system, please refer to the +> [configuration system](Components/Configuration-System.md) page. + +### Appc Daemon Settings + +| Name | Type | Default | Scope | Requires Restart | Description | +| ---------------------------------- | -------------- | ------------------------------------ | ------------------------------------------ | ---------------- | ----------- | +| `core.enforceNodeVersion` | Boolean | `true` | appcd-nodejs (via appcd) | Yes | When `true`, enforces the Node.js version required by the core. If the required Node.js version is not installed, then the required version is downloaded. When `false`, it will use the current Node.js version which may be incompatible with the core. | +| `core.v8.memory` | String, Number | `"auto"` | appcd-nodejs (via appcd) | Yes | The maximum amount of memory the spawned appcd core process should allocate. The value must either be the number of megabytes or the string `"auto"`, which will automatically select a sensible size based on the system architecture and installed memory. | +| `environment.name` | String | `"prod"` | appcd-core | Yes | Shorthand environment name used for loading the environment-specific config file. This value is sent in the `ti.start` telemetry data payload. This value is not the same as the `telemetry.environment`. | +| `environment.title` | String | `"production"` | appcd-core | Yes | Title for the environment used in debug logging when the daemon starts. | +| `home` | String | `"~/.appcelerator/appcd"` | appcd, appcd-core, appcd-config-service, appcd-subprocess | | Yes | The path to the `appcd` home directory containing user-defined config files and plugins. | +| `network.agentOptions` | Object | `null` | appcd-request | No | Additional agent options to pass directly into `request`. | +| `network.caFile` | String | `null` | appcd-request | No | Path to a pem file containing one or more certificate authorities. Note that the `APPCD_NETWORK_CA_FILE` environment variable overrides this value. | +| `network.certFile` | String | `null` | appcd-request | No | Path to a cert file. | +| `network.httpProxy` | String | `null` | appcd-request | No | The proxy URL to use for outgoing HTTP network requests. Note that the `APPCD_NETWORK_PROXY` environment variable overrides this value. | +| `network.httpsProxy` | String | `null` | appcd-request | No | The secure proxy URL to use for outgoing HTTPS network requests. Note that the `APPCD_NETWORK_PROXY` environment variable overrides this value. | +| `network.keyFile` | String | `null` | appcd-request | No | Path to a private key file. | +| `network.passphrase` | String | `null` | appcd-request | No | The private key's passphrase. | +| `network.strictSSL` | Boolean | `true` | appcd-request | No | Enforces SSL certificates to be valid. Note that the `APPCD_NETWORK_STRICT_SSL` environment variable overrides this value. | +| `plugins.autoReload` | Boolean | `true` | appcd-plugin | No | Stops `external` plugins when one of its files is changed. | +| `plugins.defaultInactivityTimeout` | Number | `60 * 60 * 1000` (1 hour) | appcd-plugin | No | The default number of milliseconds of inactivity before an `external` plugin is deactivated. | +| `server.agentPollInterval` | Number | `1000` | appcd-agent (via appcd-core, appcd-plugin) | No | The number of milliseconds to have the agents poll for system health. | +| `server.daemonize` | Boolean | `true` | appcd | Yes | Launches the server as a background process. | +| `server.group` | String, Number | `null` | appcd-core | Yes | The group to switch to when the daemon is started as root on a POSIX system. | +| `server.hostname` | String | `"127.0.0.1"` | appcd-core | Yes | The hostname or IP address to listen on. | +| `server.nodejsMaxUnusedAge` | Number | `90 * 24 * 60 * 60 * 1000` (90 days) | appcd-core | Yes | The max age in milliseconds an unused Node.js executable should be kept before it's purged. | +| `server.pidFile` | String | `"~/.appcelerator/appcd/appcd.pid"` | appcd-core | Yes | Path to the daemon's pid (process id) file. | +| `server.port` | Number | `1732` | appcd-core | Yes | The port to listen for incoming requests. | +| `server.user` | String | `null` | appcd-core | Yes | The user to switch to when the daemon is started as root on a POSIX system. | +| `telemetry.app` | String | `""` | appcd-telemetry | No | The Appc Daemon app GUID to send with each event. | +| `telemetry.enabled` | Boolean | `true` | appcd-telemetry | No | Turns on telemetry recording and submitting. | +| `telemetry.environment` | String | `"production"` | appcd-telemetry | No | Deploy type for the analytics events. | +| `telemetry.eventsDir` | String | `"~/.appcelerator/appcd/telemetry"` | appcd-telemetry | No | The path store unsent telemetry events. | +| `telemetry.sendBatchSize` | Number | `10` | appcd-telemetry | No | The maximum number of events to send at a time. | +| `telemetry.sendInterval` | Number | `60000` | appcd-telemetry | No | The number of milliseconds to wait before checking if there are enough telemetry events to batch send. | +| `telemetry.sendTimeout` | Number | `60000` | appcd-telemetry | No | The number of milliseconds to wait before timing out sending telementry events. | +| `telemetry.url` | String | `""` | appcd-telemetry | No | The URL to send the telemetry events to. | + +### Titanium Settings + +| Name | Type | Default | Scope | Requires Restart | Description | +| ---------------------------------- | ------------- | ------------------------------------------------ | -------------------------------------- | ---------------- | ----------- | +| `android.adb.install.timeout` | Number | `null` | androidlib (via @appcd/plugin-android) | No | The number of milliseconds to wait before installing an app times out. | +| `android.adb.port` | Number | `null` | androidlib (via @appcd/plugin-android) | No | The port to connect to ADB. | +| `android.adb.start.retryInterval` | Number | `null` | androidlib (via @appcd/plugin-android) | No | The number of milliseconds to wait before retrying to start ADB. | +| `android.adb.start.timeout` | Number | `null` | androidlib (via @appcd/plugin-android) | No | The number of milliseconds to wait before starting ADB times out. | +| `android.avd.path` | String | `null` | androidlib (via @appcd/plugin-android) | No | The path to where AVDs are stored. | +| `android.emulator.start.timeout` | Number | `null` | androidlib (via @appcd/plugin-android) | No | The number of milliseconds to wait before starting the Android emulator times out. | +| `android.env.path` | String | `null` | androidlib (via @appcd/plugin-android) | No | An override for the `PATH` environment variable for androidlib's ADB detection. | +| `android.executables.adb` | String | `null` | androidlib (via @appcd/plugin-android) | No | The path to the ADB executable. | +| `android.genymotion.searchPaths` | Array[String] | `null` | androidlib (via @appcd/plugin-android) | No | A list of paths to search for Genymotion. | +| `android.ndk.searchPaths` | Array[String] | `null` | @appcd/plugin-android, androidlib | No | A list of paths to search for Android NDKs. | +| `android.sdk.searchPaths` | Array[String] | `null` | @appcd/plugin-android, androidlib | No | A list of paths to search for Android SDKs. | +| `android.virtualbox.configFile` | String | `null` | @appcd/plugin-android, androidlib | No | The path to VirtualBox's XML config file. | +| `android.virtualbox.searchPaths` | Array[String] | `null` | @appcd/plugin-android, androidlib | No | A list of paths to search for VirtualBox. | +| `ios.env.path` | String | `null` | ioslib (via @appcd/plugin-ios) | No | An override for the `PATH` environment variable for ioslib's `xcode-select` detection. | +| `ios.executables.security` | String | `null` | ioslib (via @appcd/plugin-ios) | No | Path to the `security` executable. | +| `ios.executables.xcodeSelect` | String | `null` | ioslib (via @appcd/plugin-ios) | No | Path to the `xcode-select` executable. | +| `ios.provisioning.path` | String | `"~/Library/MobileDevice/Provisioning Profiles"` | ioslib (via @appcd/plugin-ios) | No | The path to the provisioning profiles directory. | +| `ios.simulator.devicesDir` | String | `"~/Library/Developer/CoreSimulator/Devices"` | ioslib (via @appcd/plugin-ios) | No | The path to the directory containing the simulator device directories. | +| `ios.xcode.searchPaths` | String | `null` | ioslib (via @appcd/plugin-ios) | No | A list of paths to search for Xcode installations. | +| `java.searchPaths` | Array[String] | `null` | @appcd/plugin-jdk | No | A list of paths to search for JDKs. | +| `titanium.configImported` | Boolean | `undefined` | appcd | Yes | Indicates the legacy Titanium CLI config file has been imported. This includes Android, Genymotion, iOS, and Java settings. | +| `titanium.searchPaths` | Array[String] | `null` | @appcd/plugin-titanium | No | A list of paths to search for Titanium SDKs. | +| `windows.sdk.searchPaths` | Array[String] | `null` | @appcd/plugin-windows | No | A list of paths to search for Windows SDKs. | +| `windows.visualstudio.searchPaths` | Array[String] | `null` | @appcd/plugin-windows | No | A list of paths to search for Visual Studio installations. | +| `windows.vswhere.searchPaths` | Array[String] | `null` | @appcd/plugin-windows | No | A list of paths to search for the `vswhere.exe` utility. | diff --git a/docs/Configuration.md b/docs/Configuration.md deleted file mode 100644 index b36457c23..000000000 --- a/docs/Configuration.md +++ /dev/null @@ -1,5 +0,0 @@ -# ![Appc Daemon logo](images/appc-daemon.png) Daemon Project - -## Configuration - -> :warning: Under construction. diff --git a/docs/README.md b/docs/README.md index c4c47ad89..c739697ef 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,7 +1,7 @@ # ![Appc Daemon logo](images/appc-daemon.png) Daemon Project -appcd is the name of the npm package that contains the Appc Daemon bootstrap, command line interface -(CLI), core, and supporting packages. +_appcd_ is the name of the npm package that contains the Appc Daemon bootstrap, command line +interface (CLI), core, and supporting packages. ## Table of Contents @@ -22,7 +22,7 @@ appcd is the name of the npm package that contains the Appc Daemon bootstrap, co 8. [Subprocess Manager](Components/Subprocess-Manager.md) 9. [Telemetry](Components/Telemetry.md) 10. [Web Server](Components/Web-Server.md) -8. [Configuration](Configuration.md) +8. [Configuration Settings](Configuration-Settings.md) 9. [Commands](Commands/README.md) 1. [config](Commands/config.md) 2. [dump](Commands/dump.md) diff --git a/gulpfile.js b/gulpfile.js index 93d3d9018..a7f964523 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -199,9 +199,7 @@ exports.ls = exports.list = async function listPackages() { */ exports.lint = series(cyclic, function lint() { return gulp - .src([ - path.join(__dirname, 'packages/*/gulpfile.js') - ]) + .src(path.join(__dirname, 'packages/*/gulpfile.js')) .pipe(debug({ title: 'Linting project:' })) .pipe(plumber()) .pipe(chug({ tasks: [ 'lint' ] })); diff --git a/package.json b/package.json index 6916f0f1c..2d5c30145 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "version": "0.0.0", "private": true, "dependencies": { - "ansi-colors": "^4.0.1", + "ansi-colors": "^4.1.1", "cli-table2": "^0.2.0", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "globule": "^1.2.1", "gulp": "^4.0.2", "gulp-chug": "^0.5.1", @@ -15,13 +15,14 @@ "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-report": "^2.0.8", "istanbul-reports": "^2.2.6", - "lerna": "^3.15.0", - "libnpm": "^2.0.1", + "lerna": "^3.16.4", + "libnpm": "^3.0.1", + "node-gyp": "^5.0.3", "pretty-log": "^0.1.0", "progress": "^2.0.3", "promise-limit": "^2.7.0", - "retire": "^2.0.2", - "semver": "^6.1.2", + "retire": "^2.0.3", + "semver": "^6.3.0", "sloc": "^0.2.1", "toposort": "^2.0.2", "tree-printer": "^1.1.1" diff --git a/packages/appcd-agent/CHANGELOG.md b/packages/appcd-agent/CHANGELOG.md index f33afb303..7b23855da 100644 --- a/packages/appcd-agent/CHANGELOG.md +++ b/packages/appcd-agent/CHANGELOG.md @@ -1,3 +1,8 @@ +# v1.1.7 + + * chore: Fixed eslint `hasOwnProperty` warnings. + * chore: Updated dependencies. + # v1.1.6 (Jun 4, 2019) * chore: Updated dependencies. diff --git a/packages/appcd-agent/package.json b/packages/appcd-agent/package.json index e69d60048..4c5aee25d 100644 --- a/packages/appcd-agent/package.json +++ b/packages/appcd-agent/package.json @@ -16,8 +16,8 @@ "test": "gulp test" }, "dependencies": { - "nanobuffer": "^1.1.4", - "source-map-support": "^0.5.12" + "nanobuffer": "^1.1.5", + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-agent/src/agent.js b/packages/appcd-agent/src/agent.js index 67a5c6c14..3e174b2b4 100644 --- a/packages/appcd-agent/src/agent.js +++ b/packages/appcd-agent/src/agent.js @@ -165,7 +165,7 @@ export default class Agent extends EventEmitter { // add the values for each stat to its bucket, or set zero if we don't have a value // for this poll for (const name of Object.keys(this.buckets)) { - if (stats.hasOwnProperty(name)) { + if (Object.prototype.hasOwnProperty.call(stats, name)) { const value = stats[name]; const bucket = this.buckets[name]; let last = bucket.last || 0; diff --git a/packages/appcd-client/package.json b/packages/appcd-client/package.json index b7c060a9e..18b02a191 100644 --- a/packages/appcd-client/package.json +++ b/packages/appcd-client/package.json @@ -25,12 +25,12 @@ "appcd-logger": "^2.0.2", "appcd-response": "^2.0.0", "appcd-util": "^1.1.7", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "msgpack-lite": "^0.1.26", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "uuid": "^3.3.2", "which": "^1.3.1", - "ws": "^7.0.1" + "ws": "^7.1.1" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-config-service/package.json b/packages/appcd-config-service/package.json index 10be425d2..5459fd4d4 100644 --- a/packages/appcd-config-service/package.json +++ b/packages/appcd-config-service/package.json @@ -21,7 +21,7 @@ "appcd-logger": "^2.0.2", "appcd-path": "^1.1.6", "appcd-response": "^2.0.0", - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-config/CHANGELOG.md b/packages/appcd-config/CHANGELOG.md index a28093969..bc79f040d 100644 --- a/packages/appcd-config/CHANGELOG.md +++ b/packages/appcd-config/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.3.1 + + * fix: Fixed bug when pushing a config value to an existing key with null value. + * chore: Fixed eslint `hasOwnProperty` warnings. + * chore: Updated dependencies. + # v1.3.0 (Jun 4, 2019) * refactor: Complete refactor to support config namespaces. diff --git a/packages/appcd-config/package.json b/packages/appcd-config/package.json index 3b2341f64..ea201cc64 100644 --- a/packages/appcd-config/package.json +++ b/packages/appcd-config/package.json @@ -16,16 +16,16 @@ "test": "gulp test" }, "dependencies": { - "@babel/parser": "^7.4.5", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", "appcd-fs": "^1.1.7", "appcd-logger": "^2.0.2", "appcd-path": "^1.1.6", "doctrine": "^3.0.0", - "fs-extra": "^8.0.1", - "gawk": "^4.6.3", - "source-map-support": "^0.5.12" + "fs-extra": "^8.1.0", + "gawk": "^4.6.4", + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1", diff --git a/packages/appcd-config/src/config.js b/packages/appcd-config/src/config.js index 7661cddc5..7c565bf9b 100644 --- a/packages/appcd-config/src/config.js +++ b/packages/appcd-config/src/config.js @@ -134,7 +134,7 @@ export default class Config { for (let i = 0, len = parts.length; i < len; i++) { const prop = parts[i]; - if (!obj.hasOwnProperty(prop)) { + if (!Object.prototype.hasOwnProperty.call(obj, prop)) { break; } @@ -381,7 +381,7 @@ export default class Config { this._merge(values, obj, opts); } else { this.namespaceOrder.splice(1, 0, ns); - this.namespaces[ns] = typeof ns === 'string' && !values.hasOwnProperty(ns) ? { [ns]: values } : values; + this.namespaces[ns] = typeof ns === 'string' && !Object.prototype.hasOwnProperty.call(values, ns) ? { [ns]: values } : values; } return this; @@ -556,7 +556,11 @@ export default class Config { return this; } - value = Array.isArray(obj) ? [ ...obj, ...value ] : [ obj, ...value ]; + if (Array.isArray(obj)) { + value = [ ...obj, ...value ]; + } else { + value = obj ? [ obj, ...value ] : value; + } } return this._set(key, value); diff --git a/packages/appcd-config/test/test-config.js b/packages/appcd-config/test/test-config.js index 29f847249..b0b5be907 100644 --- a/packages/appcd-config/test/test-config.js +++ b/packages/appcd-config/test/test-config.js @@ -273,6 +273,12 @@ describe('Config', () => { expect(config.get('foo.bar')).to.deep.equal([ 'baz', 'wiz' ]); }); + it('should push overwrite an existing falsey value', () => { + const config = new Config({ config: { foo: { bar: null } } }); + config.push('foo.bar', 'baz'); + expect(config.get('foo.bar')).to.deep.equal([ 'baz' ]); + }); + it('should combine multiple types ', () => { const config = new Config({ config: { foo: { bar: [ 'baz' ] } } }); config.push('foo', 'wiz'); diff --git a/packages/appcd-core/CHANGELOG.md b/packages/appcd-core/CHANGELOG.md index 728475c83..087b837e4 100644 --- a/packages/appcd-core/CHANGELOG.md +++ b/packages/appcd-core/CHANGELOG.md @@ -1,14 +1,18 @@ -# v2.8.1 +# v2.9.0 + * fix: Added `sid` to WebSocketSession context so remote clients will know the subscription id. + * fix: Fixed bug where `server.hostname` was not being correctly referenced. + * chore: Bumped Node.js version from 10.15.3 to 10.16.2. + * chore: Updated to `appcd-default-plugins@4.0.0`. * chore: Updated dependencies # v2.8.0 (Jun 25, 2019) - * chore: Updated to `appcd-default-plugins@3.0.0`, + * chore: Updated to `appcd-default-plugins@3.0.0`. # v2.7.0 (Jun 24, 2019) - * chore: Updated to `appcd-config-service@2.0.0`, + * chore: Updated to `appcd-config-service@2.0.0`. # v2.6.0 (Jun 13, 2019) diff --git a/packages/appcd-core/conf/default.js b/packages/appcd-core/conf/default.js index 59c5fde61..c315937f4 100644 --- a/packages/appcd-core/conf/default.js +++ b/packages/appcd-core/conf/default.js @@ -11,10 +11,10 @@ module.exports = { v8: { /** - * The maximum amount of memory the spawned appcd-core process - * should allocate. The value must either be the number of megabytes - * or the string `auto`, which will automatically select a sensible - * size based on the system architecture and installed memory. + * The maximum amount of memory the spawned appcd core process should allocate. The + * value must either be the number of megabytes or the string `"auto"`, which will + * automatically select a sensible size based on the system architecture and installed + * memory. * @type {Number|String} * @readonly */ @@ -24,22 +24,25 @@ module.exports = { environment: { /** - * Shorthand name for the environment. + * Shorthand environment name used for loading the environment-specific config file. This + * value is sent in the `ti.start` telemetry data payload. This value is not the same as + * the `telemetry.environment`. * @type {String} + * @readonly */ name: 'prod', /** - * Title for the environment + * Title for the environment used in debug logging when the daemon starts. * @type {String} */ title: 'Production' }, /** - * The path to the appcd home directory - * @type {String} + * The path to the `appcd` home directory containing user-defined config files and plugins. * @readonly + * @type {String} */ home: '~/.appcelerator/appcd', @@ -51,7 +54,8 @@ module.exports = { agentOptions: null, /** - * Path to a pem file containing one or more certificate authorities. + * Path to a pem file containing one or more certificate authorities. Note that the + * `APPCD_NETWORK_CA_FILE` environment variable overrides this value. * @type {?String} */ caFile: null, @@ -63,19 +67,21 @@ module.exports = { certFile: null, /** - * The proxy URL to use for all outgoing HTTP network requests. + * The proxy URL to use for outgoing HTTP network requests. Note that the + * `APPCD_NETWORK_PROXY` environment variable overrides this value. * @type {?String} */ httpProxy: null, /** - * The secure proxy URL to use for all outgoing HTTPS network requests. + * The secure proxy URL to use for outgoing HTTPS network requests. Note that the + * `APPCD_NETWORK_PROXY` environment variable overrides this value. * @type {?String} */ httpsProxy: null, /** - * Path to a key file. + * Path to a private key file. * @type {?String} */ keyFile: null, @@ -87,7 +93,8 @@ module.exports = { passphrase: null, /** - * Enforces SSL certificates to be valid. + * Enforces SSL certificates to be valid. Note that the `APPCD_NETWORK_STRICT_SSL` + * environment variable overrides this value. * @type {Boolean} */ strictSSL: true @@ -95,7 +102,7 @@ module.exports = { plugins: { /** - * Allow `external` plugins to be auto-reloaded when one of its files is changed. + * Stops `external` plugins when one of its files is changed. * @type {Boolean} */ autoReload: true, @@ -116,7 +123,7 @@ module.exports = { agentPollInterval: 1000, /** - * Launches the server as a background process + * Launches the server as a background process. * @type {Boolean} * @readonly */ @@ -140,11 +147,12 @@ module.exports = { * The max age in milliseconds an unused Node.js executable should be kept before it's * purged. Defaults to 90 days. * @type {Number} + * @readonly */ nodejsMaxUnusedAge: 90 * 24 * 60 * 60 * 1000, /** - * Path to the daemon's pid file. + * Path to the daemon's pid (process id) file. * @type {String} * @readonly */ @@ -167,10 +175,10 @@ module.exports = { telemetry: { /** - * Deploy type for the analytics events. + * The Appc Daemon app GUID to send with each event. * @type {String} */ - environment: 'production', + app: 'ea327577-858f-4d31-905e-fa670f50ef48', /** * Turns on telemetry recording and submitting. @@ -179,16 +187,16 @@ module.exports = { enabled: true, /** - * The path to the telemetry cache directory. + * Deploy type for the analytics events. * @type {String} */ - eventsDir: '~/.appcelerator/appcd/telemetry', + environment: 'production', /** - * GUID to use for telemetry. + * The path store unsent telemetry events. * @type {String} */ - app: 'ea327577-858f-4d31-905e-fa670f50ef48', + eventsDir: '~/.appcelerator/appcd/telemetry', /** * The maximum number of events to send at a time. @@ -210,7 +218,7 @@ module.exports = { sendTimeout: 60000, /** - * The URL to post the telemetry events to. + * The URL to send the telemetry events to. * @type {String} */ url: 'https://api.appcelerator.com/p/v4/app-track' diff --git a/packages/appcd-core/package.json b/packages/appcd-core/package.json index 71500a8a2..e4f4b9c31 100644 --- a/packages/appcd-core/package.json +++ b/packages/appcd-core/package.json @@ -20,7 +20,7 @@ "appcd-agent": "^1.1.6", "appcd-config": "^1.3.0", "appcd-config-service": "^2.0.0", - "appcd-default-plugins": "^3.0.0", + "appcd-default-plugins": "^4.0.0", "appcd-dispatcher": "^2.0.0", "appcd-fs": "^1.1.7", "appcd-fswatch-manager": "^2.0.0", @@ -34,9 +34,9 @@ "appcd-subprocess": "^2.0.1", "appcd-telemetry": "^2.0.1", "appcd-util": "^1.1.7", - "cli-kit": "^0.11.1", - "fs-extra": "^8.0.1", - "gawk": "^4.6.3", + "cli-kit": "^0.11.2", + "fs-extra": "^8.1.0", + "gawk": "^4.6.4", "global-modules": "^2.0.0", "humanize": "^0.0.9", "msgpack-lite": "^0.1.26" @@ -51,6 +51,6 @@ "node": ">=8.12.0" }, "appcd": { - "node": "10.15.3" + "node": "10.16.2" } } diff --git a/packages/appcd-core/src/server.js b/packages/appcd-core/src/server.js index 296f013e3..7c07a53ed 100644 --- a/packages/appcd-core/src/server.js +++ b/packages/appcd-core/src/server.js @@ -17,6 +17,7 @@ import WebSocketSession from './websocket-session'; import { arch as getArch, arrayify, get, trackTimers } from 'appcd-util'; import { expandPath } from 'appcd-path'; import { i18n } from 'appcd-response'; +import { installDefaultPlugins } from 'appcd-default-plugins'; import { isDir, isFile } from 'appcd-fs'; import { load as loadConfig } from 'appcd-config'; import { purgeUnusedNodejsExecutables } from 'appcd-nodejs'; @@ -88,21 +89,16 @@ export default class Server { * @access public */ async start() { - // check if the current user is root - let uid, gid; + const uid = this.config.get('server.user'); + const gid = this.config.get('server.group'); + if (process.getuid && process.getuid() === 0) { // we are on a posix system and we're root, so we need to switch to a non-root user - uid = this.config.get('server.user'); - gid = this.config.get('server.group'); if (!uid) { const err = new Error('The daemon cannot be run as root. You must run as a non-root user or set a user in the config.'); err.code = 5; throw err; } - process.setuid(uid); - if (gid) { - process.setgid(gid); - } } // check if appcd is already running @@ -122,6 +118,40 @@ export default class Server { } fs.writeFileSync(this.pidFile, process.pid); + // rename the process + process.title = 'appcd'; + + logger.log(`Appcelerator Daemon v${this.version}`); + logger.log('Environment: %s', highlight(this.config.get('environment.title'))); + logger.log(`Node.js ${process.version} (${process.platform}, module v${process.versions.modules})`); + logger.log(`PID: ${highlight(process.pid)}`); + + // init the home directory + const homeDir = expandPath(this.config.get('home')); + if (!isDir(homeDir)) { + logger.debug('Creating home directory %s', homeDir); + fs.mkdirsSync(homeDir); + } + + // install default plugins before we drop permissions + try { + await installDefaultPlugins(path.join(homeDir, 'plugins')); + } catch (err) { + if (err.code === 'EACCES') { + logger.warn(err); + } else { + logger.error(err); + } + } + + // check if the current user is root + if (process.getuid && process.getuid() === 0) { + process.setuid(uid); + if (gid) { + process.setgid(gid); + } + } + // watch the pid to make sure it always exists this.pidWatcher = new FSWatcher(this.pidFile) .on('change', ({ action }) => { @@ -131,14 +161,6 @@ export default class Server { } }); - // rename the process - process.title = 'appcd'; - - logger.log(`Appcelerator Daemon v${this.version}`); - logger.log('Environment: %s', highlight(this.config.get('environment.title'))); - logger.log(`Node.js ${process.version} (${process.platform}, module v${process.versions.modules})`); - logger.log(`PID: ${highlight(process.pid)}`); - // listen for CTRL-C and SIGTERM const shutdown = async () => { try { @@ -151,13 +173,6 @@ export default class Server { process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); - // init the home directory - const homeDir = expandPath(this.config.get('home')); - if (!isDir(homeDir)) { - logger.debug('Creating home directory %s', homeDir); - fs.mkdirsSync(homeDir); - } - // import any Titanium CLI configuration settings await this.importTiConfig(); @@ -229,7 +244,7 @@ export default class Server { // init the web server this.systems.webserver = new WebServer({ - hostname: this.config.get('server.host', '127.0.0.1'), + hostname: this.config.get('server.hostname', '127.0.0.1'), port: this.config.get('server.port'), webroot: path.resolve(__dirname, '..', 'public') }); diff --git a/packages/appcd-default-plugins/.npmignore b/packages/appcd-default-plugins/.npmignore index 74f215cbc..a89d314e6 100644 --- a/packages/appcd-default-plugins/.npmignore +++ b/packages/appcd-default-plugins/.npmignore @@ -11,7 +11,6 @@ gulpfile.js junit.xml node_modules npm-debug.log -/plugins retire_output.json yarn-error.log /src diff --git a/packages/appcd-default-plugins/CHANGELOG.md b/packages/appcd-default-plugins/CHANGELOG.md index 6b56f73fe..c48cf45bb 100644 --- a/packages/appcd-default-plugins/CHANGELOG.md +++ b/packages/appcd-default-plugins/CHANGELOG.md @@ -1,5 +1,7 @@ -# v3.0.1 +# v4.0.0 + * BREAKING CHANGE: `appcd-default-plugins` supports both postinstall and runtime installation of + default plugins. * chore: Updated dependencies # v3.0.0 (Jun 25, 2019) @@ -9,6 +11,9 @@ * BREAKING CHANGE: Plugins are installed into `"~/.appcelerator/appcd/plugins"` instead of the `"appcd-default-plugins/plugins"` directory to avoid permission issues when npm installing `appcd` globally using `sudo` due to npm dropping root before running the post install script. + UPDATE: Turns out that this won't work because unless there's an explicit `user` set in the + npm config, it defaults to the user `nobody` which does not have write permissions to the + user's home directory. # v2.0.0 (Jun 6, 2019) diff --git a/packages/appcd-default-plugins/README.md b/packages/appcd-default-plugins/README.md index c64a3bc09..d522cfce5 100644 --- a/packages/appcd-default-plugins/README.md +++ b/packages/appcd-default-plugins/README.md @@ -1,26 +1,55 @@ # appcd-default-plugins -A psuedo package that installs the latest major versions of all default _appcd_ plugins into the -user's appcd home directrory (e.g. `"~/.appcelerator/appcd/plugins"`). +A psuedo package that attempts to install the latest major versions of all default _appcd_ plugins +into the user's appcd home directrory (e.g. `"~/.appcelerator/appcd/plugins"`) postinstall and +optionally at runtime. Visit https://github.com/appcelerator/appc-daemon for more information. -## Overview - -After installing `appcd-default-plugins`, a post-install script will run and download every major -plugin release and puts it in the `"~/.appcelerator/appcd/plugins"` directory. - -If any of the plugins match locally linked packages using _yarn_, then it will use those instead of -installing from _npm_. - -A list of packages to be installed is used to create a monorepo in the `plugins` directory, then -it runs `lerna` to initialize it. - -The post-install script will detect if _yarn_ is installed. If found, it will initialize the -monorepo using _yarn_'s workspaces, otherwise it fallsback to _npm_ with hoisting. - -If at all possible, you should install _yarn_ before installing `appcd-default-plugins`. yarn is -about 3 times faster and uses about 75% less disk space. +## Usage + +```js +import { installDefaultPlugins } from 'appcd-default-plugins'; + +await installDefaultPlugins('/path/to/plugins/dir'); +``` + +## Details + +`appcd-default-plugins` deploys two strategies for installing the default appcd plugins: +post-install and at runtime. + +Post-install is the ideal time to install the default plugins, however if the user installs as root +(e.g. sudo), then `npm` will drop permissions and the post-install script will be unable to write +to the plugins directory. In this case, the permission error is suppressed allowing the install to +complete. + +`appcd-default-plugins` leverages _lerna_ and _yarn_ to create a local workspace for the purpose of +optimizing a hoisted `node_modules` directory. + +Since downloading and installing a plugin and its dependencies is an expensive operation, it will +only install a plugin from _npm_ if there are no installed plugins that satisfy the plugin's specs. +Likewise, it will only invoke _lerna_ if a plugin was installed or a plugin was removed/invalidated. + +The `installDefaultPlugins()` function performs a number of steps to attempt to install the default +plugins: + +1. Determine if the plugins directory is writable. +2. Locate the _yarn_ and _lerna_ scripts. +3. Detect existing list of workspaces that were created during `postinstall` or previous _appcd_ + start. +4. Detect existing installed plugins. + - Invalid plugins are quarantine in a `/path/to/plugins/invalid` directory. +5. Detect an global yarn links. + - Symlink any new yarn links. +6. Loop over the list of default _appcd_ plugins and figure out what needs to be installed. +7. Install the missing _appcd_ plugins. +8. Assuming one or more plugins where installed or the list of workspaces has changed, then: + - Rewrite every plugin's package name in their respective `package.json` files to make + lerna/yarn happy. + - Write the main `package.json` and `lerna.json` files. + - Execute _lerna bootstrap_ which in turn executes _yarn_. + - Revert the plugin package names. ## Legal diff --git a/packages/appcd-default-plugins/gulpfile.js b/packages/appcd-default-plugins/gulpfile.js new file mode 100644 index 000000000..e36fd15b4 --- /dev/null +++ b/packages/appcd-default-plugins/gulpfile.js @@ -0,0 +1,8 @@ +'use strict'; + +require('appcd-gulp')({ + exports, + pkgJson: require('./package.json'), + template: 'standard', + babel: 'node8' +}); diff --git a/packages/appcd-default-plugins/package.json b/packages/appcd-default-plugins/package.json index 5078a9857..06dc6a428 100644 --- a/packages/appcd-default-plugins/package.json +++ b/packages/appcd-default-plugins/package.json @@ -1,18 +1,33 @@ { "name": "appcd-default-plugins", - "version": "3.0.0", + "version": "4.0.0", "description": "A psuedo package that bundles all default appcd plugins.", + "main": "./dist/index", "author": "Axway, Inc. ", "maintainers": [ "Chris Barber " ], "license": "Apache-2.0", + "scripts": { + "build": "gulp build", + "coverage": "gulp coverage", + "docs": "gulp docs", + "postinstall": "node postinstall.js", + "prepare": "gulp build", + "test": "gulp test" + }, "dependencies": { - "fs-extra": "^8.0.1", - "lerna": "^3.15.0", - "pacote": "^9.5.1", - "semver": "^6.1.2", - "which": "^1.3.1" + "fs-extra": "^8.1.0", + "globule": "^1.2.1", + "lerna": "^3.16.4", + "pacote": "^9.5.4", + "semver": "^6.3.0", + "snooplogg": "^2.1.0", + "yarn": "^1.17.3" + }, + "devDependencies": { + "appcd-gulp": "^2.1.1", + "tmp": "^0.1.0" }, "plugins": { "@appcd/plugin-android": [ @@ -37,9 +52,6 @@ "^1.4.0" ] }, - "scripts": { - "postinstall": "node postinstall.js" - }, "homepage": "https://github.com/appcelerator/appc-daemon/tree/master/packages/appcd-default-plugins", "bugs": "https://github.com/appcelerator/appc-daemon/issues", "repository": "https://github.com/appcelerator/appc-daemon" diff --git a/packages/appcd-default-plugins/postinstall.js b/packages/appcd-default-plugins/postinstall.js index 7c057cd96..709fcb56b 100644 --- a/packages/appcd-default-plugins/postinstall.js +++ b/packages/appcd-default-plugins/postinstall.js @@ -1,122 +1,26 @@ -const fs = require('fs-extra'); -const os = require('os'); -const path = require('path'); -const pacote = require('pacote'); -const semver = require('semver'); -const which = require('which'); -const { spawnSync } = require('child_process'); -const { plugins } = require('./package.json'); - -(async () => { - try { - const npmClient = which.sync('yarn', { nothrow: true }) ? 'yarn' : 'npm'; - const pluginsDir = path.join(os.homedir(), '.appcelerator/appcd/plugins'); - const packagesDir = path.join(pluginsDir, 'packages'); - const workspaces = []; - - console.log(`Using ${npmClient} client`); - - fs.mkdirsSync(packagesDir); - - // find lerna - let lerna; - for (let cur = __dirname, last = null; cur !== last; last = cur, cur = path.dirname(cur)) { - if (fs.existsSync(lerna = path.join(cur, 'node_modules', '.bin', 'lerna'))) { - console.log(`Found lerna: ${path.relative(path.dirname(__dirname), lerna)}`); - break; +try { + const os = require('os'); + const { createInstanceWithDefaults, StdioStream } = require('snooplogg'); + const { installDefaultPlugins } = require('./dist/index'); + + const logger = createInstanceWithDefaults() + .snoop() + .config({ + maxBufferSize: 1000, + minBrightness: 80, + maxBrightness: 200 + }) + .enable('*') + .pipe(new StdioStream(), { flush: true }) + .ns('appcd:default-plugins:postinstall'); + + installDefaultPlugins(`${os.homedir()}/.appcelerator/appcd/plugins`) + .catch(err => { + if (err.code === 'EACCES') { + logger.warn(err); + } else { + logger.error(err); + process.exit(1); } - } - if (!lerna) { - throw new Error('Unable to find lerna, run "npm install"'); - } - - // loop over every plugin until we find - for (const [ name, versions ] of Object.entries(plugins)) { - for (const spec of versions) { - try { - // check for a local yarn link first - const linkDir = path.join(os.homedir(), '.config', 'yarn', 'link', name); - const { version } = fs.readJsonSync(path.join(linkDir, 'package.json')); - const dir = path.join(packagesDir, name, version); - if (semver.satisfies(version, spec)) { - if (!fs.existsSync(dir) || fs.realpathSync(linkDir) !== fs.realpathSync(dir)) { - console.log(`Linking ${linkDir} => ${path.relative(path.dirname(__dirname), dir)}`); - fs.removeSync(dir); - fs.mkdirsSync(path.dirname(dir)); - fs.symlinkSync(linkDir, dir, 'dir'); - } else { - console.log(`Already linked ${linkDir} => ${path.relative(path.dirname(__dirname), dir)}`); - } - continue; - } - } catch (e) { - // squelch - } - - let manifest; - - try { - // call out to npm - manifest = await pacote.manifest(`${name}@${spec}`); - } catch (e) { - console.error(`Failed to find required appcd plugin: ${name}@${spec}:`); - console.error(e); - process.exit(1); - } - - const dir = path.join(packagesDir, name, manifest.version); - - try { - const realDir = fs.realpathSync(dir); - const { version } = await fs.readJsonSync(path.join(realDir, 'package.json')); - if (version === manifest.version) { - console.log(`${name}@${ver} already installed`); - continue; - } - } catch (e) { - // directory does not exist or doesn't have a package.json - } - - workspaces.push(`packages/${name}/${manifest.version}`); - - console.log(`Downloading ${name}@${manifest.version}`); - await pacote.extract(`${name}@${manifest.version}`, dir); - } - } - - const pkgJson = { - name: 'root', - private: true, - version: '0.0.0' - }; - const lernaJson = { - npmClient, - npmClientArgs: [ '--production' ], - version: 'independent' - }; - const lernaArgs = [ lerna, 'bootstrap' ]; - - if (npmClient === 'yarn') { - pkgJson.workspaces = workspaces; - lernaJson.npmClientArgs.push('--no-lockfile'); - lernaJson.useWorkspaces = true; - } else { - lernaJson.npmClientArgs.push('--no-package-lock'); - lernaJson.packages = workspaces; - lernaArgs.push('--hoist'); - } - - console.log('Writing plugins/package.json'); - fs.writeFileSync(path.join(pluginsDir, 'package.json'), JSON.stringify(pkgJson, null, 2)); - - console.log('Writing plugins/lerna.json'); - fs.writeFileSync(path.join(pluginsDir, 'lerna.json'), JSON.stringify(lernaJson, null, 2)); - - console.log('Running lerna bootstrap...'); - spawnSync(process.execPath, lernaArgs, { cwd: pluginsDir, stdio: 'inherit' }); - console.log('appcd-default-plugins install complete'); - } catch (e) { - console.error(e); - process.exit(1); - } -})(); + }); +} catch (e) {} diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js new file mode 100644 index 000000000..0cdf5cb0e --- /dev/null +++ b/packages/appcd-default-plugins/src/index.js @@ -0,0 +1,336 @@ +import snooplogg from 'snooplogg'; +import fs from 'fs-extra'; +import globule from 'globule'; +import os from 'os'; +import pacote from 'pacote'; +import path from 'path'; +import semver from 'semver'; + +import { spawn } from 'child_process'; + +const logger = snooplogg('appcd:default-plugins'); +const { highlight } = snooplogg.styles; + +/** + * Ensures the default appcd plugins are installed. + * + * @param {String} pluginsDir - Path to the plugins directory. + * @returns {Promise} + */ +export async function installDefaultPlugins(pluginsDir) { + const start = new Date(); + + if (!pluginsDir || typeof pluginsDir !== 'string') { + throw new TypeError('Expected plugins directory to be a non-empty string'); + } + + const packagesDir = path.join(pluginsDir, 'packages'); + + // check that we can write to the plugins dir + try { + // make sure the plugins/packages directory exists + await fs.mkdirs(packagesDir); + + const testFile = path.join(packagesDir, `test_${Date.now()}.txt`); + fs.writeFileSync(testFile, 'delete me'); + await fs.remove(testFile); + } catch (e) { + const err = new Error(e.code === 'EACCES' + ? 'Could not write to plugins directory' + : `Error initializing plugins directory: ${e.message}`); + err.code = e.code; + throw err; + } + + // find yarn and lerna + const yarn = find('yarn'); + if (yarn) { + logger.log(`Found yarn: ${highlight(yarn)}`); + } else { + logger.error('Unable to find yarn bin, skipping install default plugins'); + return; + } + + const lerna = find('lerna'); + if (lerna) { + logger.log(`Found lerna: ${highlight(lerna)}`); + } else { + logger.error('Unable to find lerna bin, skipping install default plugins'); + return; + } + + const linksDir = process.platform === 'win32' + ? path.join(os.homedir(), 'AppData', 'Local', 'Yarn', 'Data', 'link') + : path.join(os.homedir(), '.config', 'yarn', 'link'); + const { plugins } = await fs.readJson(path.resolve(__dirname, '..', 'package.json')); + const installed = {}; + const install = []; + const newWorkspaces = new Set(); + let existingWorkspaces = new Set(); + + try { + existingWorkspaces = new Set((await fs.readJson(path.join(pluginsDir, 'package.json'))).workspaces); + } catch (e) { + // does not exist or bad + } + + const cleanup = (src, invalidDest, msg) => { + if (fs.lstatSync(src).isSymbolicLink()) { + logger.warn(`${msg}, unlinking...`); + fs.unlinkSync(src); + } else { + logger.warn(`${msg}, invalidating...`); + fs.moveSync(src, invalidDest, { overwrite: true }); + } + }; + + // determine what packages are already installed + for (const rel of globule.find('*/*/package.json', '@*/*/*/package.json', { srcBase: packagesDir })) { + const pkgJsonFile = path.join(packagesDir, rel); + const src = path.dirname(pkgJsonFile); + const invalidDest = path.join(pluginsDir, 'invalid', path.dirname(rel)); + let name, version; + + try { + ({ name, version } = await fs.readJson(pkgJsonFile)); + } catch (e) { + cleanup(src, invalidDest, 'Bad package.json'); + continue; + } + + const nameDir = path.dirname(path.dirname(rel)); + const versionDir = path.basename(src); + + if (name !== nameDir) { + cleanup(src, invalidDest, `Plugin directory name mismatch: ${highlight(`${name}@${version}`)} found in ${highlight(nameDir)}`); + } else if (version !== versionDir) { + cleanup(src, invalidDest, `Plugin directory version mismatch: ${highlight(`${name}@${version}`)} found in ${highlight(versionDir)}`); + } else { + logger.log(`Found installed plugin ${highlight(`${name}@${version}`)}`); + if (!installed[name]) { + installed[name] = {}; + } + installed[name][version] = path.dirname(pkgJsonFile); + newWorkspaces.add(`packages/${name}/${version}`); + } + } + + // detect any existing yarn links + for (const rel of globule.find('*/package.json', '@*/*/package.json', { srcBase: linksDir })) { + const pkgJsonFile = path.join(linksDir, rel); + let appcd, name, version; + + try { + ({ appcd, name, version } = await fs.readJson(pkgJsonFile)); + } catch (e) { + logger.warn(`Failed to parse link package.json: ${pkgJsonFile}`); + } + + if (appcd && (!appcd.os || appcd.os.includes(process.platform))) { + const linkPath = path.dirname(pkgJsonFile); + + if (!installed[name]) { + installed[name] = {}; + } + if (!installed[name][version]) { + const dest = path.join(packagesDir, name, version); + installed[name][version] = dest; + + await fs.mkdirs(path.dirname(dest)); + logger.log(`Symlinking ${highlight(linkPath)} => ${highlight(path.relative(pluginsDir, dest))}`); + fs.symlinkSync(linkPath, dest, 'dir'); + } + newWorkspaces.delete(`packages/${name}/${version}`); + } + } + + // loop over default plugins and figure out what is missing + for (const [ name, specs ] of Object.entries(plugins)) { + if (installed[name]) { + for (let i = 0; i < specs.length; i++) { + for (const ver of Object.keys(installed[name])) { + if (semver.satisfies(ver, specs[i])) { + // installed version is good + specs.splice(i--, 1); + break; + } + } + } + } + for (const spec of specs) { + install.push(`${name}@${spec}`); + } + } + + // install missing plugins + await Promise.all(install.map(async pkg => { + let manifest; + + // query npm + try { + manifest = await pacote.manifest(pkg, { 'full-metadata': true }); + } catch (e) { + logger.warn(`Unable to find default plugin on npm: ${highlight(pkg)}`); + return; + } + + if (!manifest.appcd) { + logger.warn(`Package manifest missing "appcd" property: ${highlight(pkg)}`); + return; + } + + if (manifest.appcd.os && !manifest.appcd.os.includes(process.platform)) { + logger.warn(`Skipping incompatible plugin: ${highlight(pkg)}`); + return; + } + + logger.log(`Downloading ${highlight(`${manifest.name}@${manifest.version}`)}`); + await pacote.extract(`${manifest.name}@${manifest.version}`, path.join(packagesDir, manifest.name, manifest.version)); + + newWorkspaces.add(`packages/${manifest.name}/${manifest.version}`); + })); + + // if anything was installed or workspaces changed, write the package.json and lerna.json + // files, then execute lerna + if (install.length || !eq(existingWorkspaces, newWorkspaces)) { + const workspaces = Array.from(newWorkspaces); + + // the workspaces changed, so we need to run lerna and since lerna (and yarn) do not like + // packages with the same name, we need to temporarily change the plugin names + const revert = {}; + await Promise.all(workspaces.map(async ws => { + const pkgJsonFile = path.join(pluginsDir, ws, 'package.json'); + const pkgJson = await fs.readJson(pkgJsonFile); + revert[pkgJson.name] = pkgJsonFile; + pkgJson.name = `${pkgJson.name}-${pkgJson.version.replace(/[^\w]/g, '_')}`; + await fs.writeJson(pkgJsonFile, pkgJson); + })); + + try { + // write the json files + logger.log(`Writing ${highlight('plugins/package.json')}`); + await fs.writeJson(path.join(pluginsDir, 'package.json'), { + name: 'root', + private: true, + version: '0.0.0', + workspaces + }, { spaces: 2 }); + + logger.log(`Writing ${highlight('plugins/lerna.json')}`); + await fs.writeJson(path.join(pluginsDir, 'lerna.json'), { + npmClient: 'yarn', + npmClientArgs: [ + '--emoji=false', + '--ignore-engines', + '--no-lockfile', + '--no-progress', + '--production' + ], + useWorkspaces: true, + version: 'independent' + }, { spaces: 2 }); + + // run lerna and add yarn to the system path + const args = [ lerna, 'bootstrap', '--no-progress' ]; + const cmd = process.platform === 'win32' ? args.shift() : process.execPath; + logger.log(`Executing: ${highlight(`${cmd} ${args.join(' ')}`)}`); + const child = spawn(cmd, args, { + cwd: pluginsDir, + env: { + ...process.env, + FORCE_COLOR: '0', + PATH: path.dirname(yarn) + path.delimiter + process.env.PATH + }, + windowsHide: true + }); + + const newlineRE = /\r\n|\n/; + const scrubRE = /^lerna (info|notice) /; + + // helper class that pretty formats lerna/yarn output + class Relay { + constructor(stream, name, indent) { + this.buffer = ''; + this.indent = indent ? ' '.repeat(indent) : ''; + this.logger = logger(name); + + stream.on('data', data => { + const lines = (this.buffer + data.toString()).split(newlineRE); + this.buffer = lines.pop(); + for (const line of lines) { + this.logger.log(this.indent + line.replace(scrubRE, '')); + } + }); + } + + flush() { + if (this.buffer) { + for (const line of this.buffer.split(newlineRE)) { + this.logger.log(this.indent + line.replace(scrubRE, '')); + } + } + } + } + + // wire up the relays + const out = new Relay(child.stdout, 'yarn', 3); + const err = new Relay(child.stderr, 'lerna'); + + await new Promise(resolve => { + child.on('close', code => { + out.flush(); + err.flush(); + + if (code) { + logger.warn(`lerna exited with code ${highlight(code)}`); + } + resolve(); + }); + }); + } finally { + // restore the plugin names in the package.json files + await Promise.all(Object.entries(revert).map(async ([ name, pkgJsonFile ]) => { + const pkgJson = await fs.readJson(pkgJsonFile); + pkgJson.name = name; + await fs.writeJson(pkgJsonFile, pkgJson, { spaces: 2 }); + })); + } + } + + logger.log(`Finished in ${highlight(((new Date() - start) / 1000).toFixed(1))} seconds`); +} + +/** + * Compares two sets for equality. + * + * @param {Set} s1 - First set. + * @param {Set} s2 - Second set. + * @returns {Boolean} + */ +function eq(s1, s2) { + if (s1.size !== s2.size) { + return false; + } + for (const val of s1) { + if (!s2.has(val)) { + return false; + } + } + return true; +} + +/** + * Scans `node_modules/.bin` directories until it locates the requested binary name or hits the + * root. + * + * @param {String} name - The name of the binary to find. + * @returns {?String} The path to the binary or `null` if not found. + */ +function find(name) { + for (let bin, cur = __dirname, last = null; cur !== last; last = cur, cur = path.dirname(cur)) { + if (fs.existsSync(bin = path.join(cur, 'node_modules', '.bin', name + (process.platform === 'win32' ? '.cmd' : '')))) { + return bin; + } + } + return null; +} diff --git a/packages/appcd-default-plugins/test/test-default-plugins.js b/packages/appcd-default-plugins/test/test-default-plugins.js new file mode 100644 index 000000000..1c5d20b2e --- /dev/null +++ b/packages/appcd-default-plugins/test/test-default-plugins.js @@ -0,0 +1,51 @@ +import fs from 'fs-extra'; +import path from 'path'; +import tmp from 'tmp'; +import { installDefaultPlugins } from '../dist/index'; + +const tmpDir = tmp.dirSync({ + mode: '755', + prefix: 'appcd-plugin-test-', + unsafeCleanup: true +}).name; + +function makeTempName() { + return path.join(tmpDir, Math.random().toString(36).substring(7)); +} + +describe('Default Plugins', () => { + after(() => { + fs.removeSync(tmpDir); + }); + + it('should error if plugins directory is invalid', async () => { + try { + await installDefaultPlugins(); + } catch (e) { + expect(e).to.be.instanceof(TypeError); + expect(e.message).to.equal('Expected plugins directory to be a non-empty string'); + return; + } + + throw new Error('Expected error'); + }); + + it('should download and install the plugins', async function () { + this.timeout(200000); + this.slow(190000); + + const dir = makeTempName(); + await installDefaultPlugins(dir); + + expect(fs.existsSync(path.join(dir, 'node_modules'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'lerna.json'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'package.json'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'packages', '@appcd', 'plugin-android'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'packages', '@appcd', 'plugin-genymotion'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'packages', '@appcd', 'plugin-ios'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'packages', '@appcd', 'plugin-android'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'packages', '@appcd', 'plugin-android'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'packages', '@appcd', 'plugin-android'))).to.be.true; + expect(fs.existsSync(path.join(dir, 'packages', '@appcd', 'plugin-android'))).to.be.true; + }); +}); diff --git a/packages/appcd-detect/CHANGELOG.md b/packages/appcd-detect/CHANGELOG.md index a4cbf6516..804db2552 100644 --- a/packages/appcd-detect/CHANGELOG.md +++ b/packages/appcd-detect/CHANGELOG.md @@ -1,3 +1,8 @@ +# v2.2.0 + + * feat: Updated `registryKeys` option for more advanced Windows Registry handling. + * chore: Updated dependencies. + # v2.1.0 (Jun 13, 2019) * chore: Updated to `appcd-dispatcher@2.0.0`, `appcd-fswatch-manager@2.0.0`, and diff --git a/packages/appcd-detect/README.md b/packages/appcd-detect/README.md index 3db52bbfe..01fb369f2 100644 --- a/packages/appcd-detect/README.md +++ b/packages/appcd-detect/README.md @@ -39,6 +39,116 @@ const results = await engine.start(); console.log(results); ``` +## Windows Registry + +On Windows machines, there may be times where the list of paths to scan is derived based on values +in the Windows Registry or the search paths should be rescanned when activity occurs in the +registry. The `DetectEngine` supports this via the `registryCallback` and `registryKeys` options. + +### `registryCallback` + +A callback that is fired every `refreshPathsInterval` milliseconds when the `watch` option is set +to `true`. By default, `refreshPathsInterval` is set to `30000` (30 seconds). + +`registryCallback` is supplied a reference to the `DetectEngine`. + +`registryCallback` must return either a falsey value, an object containing `paths` and +`defaultPath`, or a `Promise` that resolves the aforementioned object. + +`paths` may be a string, an array of strings, or falsey. + +`defaultPath` must be a string or falsey. It is assumed the `defaultPath` is already in the list of +`paths`. + +```js +new DetectEngine({ + checkDir(dir) {}, + async registryCallback(engine) { + // do something + return { + paths: [ '/path/to/somewhere' ], + defaultPath: '/path/to/somewhere' // or `undefined` to autoselect the first path + }; + }, + watch: true +}); +``` + +If the list of `paths` changes, then it triggers a rescan. If `paths` has not changed since last +called, but `defaultPath` has changed, then only the cached results are processed again. If neither +the `paths` or `defaultPath` has changed, then no action is taken. + +### `registryKeys` + +This option contains an array of registry watch parameters. + +```js +new DetectEngine({ + checkDir(dir) {}, + registryKeys: [ + { + key: 'HKLM\\SOFTWARE\\Android Studio', + value: 'SdkPath' + }, + { + key: 'HKLM\\Software\\Microsoft\\Microsoft SDKs\\Windows' + // depth (Number, defaults to 0) + // filter (Object w/ `subkeys` and/or `values` filters) + // transform() (Function) + // value (String) + } + ], + watch: true +}); +``` + +The registry watcher will watch the specified keys for changes such as the key itself being +created, a new subkey, or a new value name. It also supports recursively watching key activity. + +A `key` may specify the `hive` separate from the `key`, however the detect engine will just combine +them. + +If a `value` name is present, it will collect each value and add them to the list of search paths. + +During the detect engine startup, the registry key watchers are initialized and each key is +queried and its value added to the list of search paths. + +Optionally, each key may contain a `transform()` callback which is invoked on the `value`. If the +result is `undefined`, then the original value argument is used. `transform()` must return an +object with a `value` property, but may also have additional properties such as an `isDefault` +flag. + +The `depth` specifies how many subkeys deep it should watch for changes. Defaults to zero. + +The `filter` property is an object with `values` and/or `subkeys` containing a string or regex. +Filtering only applies to the existence of subkeys and value "names", but not actual value +"values" or the specified value's "value". + +#### `registryKeys` Examples + +```js +{ + key: 'HKLM\\SOFTWARE\\Android Studio', + value: 'SdkPath' +} +``` + +```js +{ + callback(state, keyWatcher) { + // `state.value` contains the registry key value + + // if needed, you can use `keyWatcher.winreglib.get()` to fetch additional info + + // optionally, you can set `state.isDefault` to help the detect engine prioritize results + + return state; // optional + }, + key: 'HKLM\\SOFTWARE\\Android Studio', + value: 'SdkPath' +} +``` + ## Legal This project is open source under the [Apache Public License v2][1] and is developed by diff --git a/packages/appcd-detect/package.json b/packages/appcd-detect/package.json index c28584144..e667b5245 100644 --- a/packages/appcd-detect/package.json +++ b/packages/appcd-detect/package.json @@ -22,16 +22,16 @@ "appcd-path": "^1.1.6", "appcd-subprocess": "^2.0.1", "appcd-util": "^1.1.7", - "gawk": "^4.6.3", + "gawk": "^4.6.4", "pluralize": "^8.0.0", - "source-map-support": "^0.5.12", - "winreglib": "^1.0.2" + "source-map-support": "^0.5.13", + "winreglib": "^1.0.5" }, "devDependencies": { "appcd-fswatch-manager": "^2.0.0", "appcd-fswatcher": "^1.2.2", "appcd-gulp": "^2.1.1", - "fs-extra": "^8.0.1" + "fs-extra": "^8.1.0" }, "homepage": "https://github.com/appcelerator/appc-daemon/tree/master/packages/appcd-detect", "bugs": "https://github.com/appcelerator/appc-daemon/issues", diff --git a/packages/appcd-detect/src/detect-engine.js b/packages/appcd-detect/src/detect-engine.js index 7dfa0d01d..a0b22d338 100644 --- a/packages/appcd-detect/src/detect-engine.js +++ b/packages/appcd-detect/src/detect-engine.js @@ -7,12 +7,11 @@ import pluralize from 'pluralize'; import { arrayify, debounce, randomBytes, tailgate } from 'appcd-util'; import { EventEmitter } from 'events'; import { real } from 'appcd-path'; +import RegistryWatcher from './registry-watcher'; import { which } from 'appcd-subprocess'; const { highlight } = appcdLogger.styles; -const winreglib = process.platform === 'win32' ? require('winreglib') : null; - /** * A engine for detecting various things. It walks the search paths and calls a `checkDir()` * function. The results are accumulated and cached. The engine also supports watching the search @@ -43,6 +42,12 @@ export default class DetectEngine extends EventEmitter { */ refreshPathsTimer = null; + /** + * A list of active Windows Registry watchers. + * @type {Array.} + */ + registryWatchers = []; + /** * A gawked array containing the results from the scan. * @type {Array.} @@ -55,6 +60,12 @@ export default class DetectEngine extends EventEmitter { */ searchPaths = null; + /** + * A reference to the `winreglib` module. Only available on Windows machines. + * @type {Object} + */ + winreglib = process.platform === 'win32' ? require('winreglib') : null; + /** * Initializes the detect engine instance and validates the options. * @@ -83,14 +94,17 @@ export default class DetectEngine extends EventEmitter { * found path. Requires `opts.recursive` to be `true`. * @param {Boolean} [opts.redetect=false] - When `true`, re-runs detection when a path changes. * Requires `watch` to be `true`. - * @param {Number} [opts.refreshPathsInterval=30000] - The number of milliseconds to check for - * updated search and default paths, namely from the Windows Registry. Only used when `detect()` - * is called with `watch=true`. - * @param {Function} [opts.registryCallback] - A user-defined function that performs its own - * Windows Registry checks. The callback may return a promise. The result must be a string - * containing a path, an array of paths, or a falsey value if there are no paths to return. - * @param {Object|Array|Set} [opts.registryKeys] - One or more objects containing the - * registry `hive`, `key`, and value `name` to query the Windows Registry. + * @param {Number} [opts.refreshPathsInterval=30000] - The number of milliseconds to wait + * between calls to `opts.registryCallback`. This option is ignored on non-Windows platforms. + * @param {Function} [opts.registryCallback] - A function that will only be invoked when the + * current platform is `win32` and `opts.watch` is set to `true`. The intent is this function + * performs whatever Windows Registry queries, then returns a promise that resolves an object + * containing two properties: `paths` containing an array of paths to add to the list of search + * paths and `defaultPath` containing either undefined or a string with a path. This option is + * ignored on non-Windows platforms. + * @param {Array|Set|Object} [opts.registryKeys] - An array containg one or more + * registry watch parameter objects. There are two types of params: `paths` and `rescan`. This + * option is ignored on non-Windows platforms. * @param {Boolean} [opts.watch=false] - When `true`, watches for changes and emits the new * results when a change occurs. * @access public @@ -128,18 +142,20 @@ export default class DetectEngine extends EventEmitter { // we only set redetect if we're watching opts.redetect = opts.watch ? opts.redetect : false; - opts.refreshPathsInterval = Math.max(~~opts.refreshPathsInterval || 30000, 0); + super(); - if (opts.registryCallback !== undefined && typeof opts.registryCallback !== 'function') { - throw new TypeError('Expected "registryCallback" option to be a function'); - } + if (this.winreglib) { + opts.refreshPathsInterval = Math.max(~~opts.refreshPathsInterval || 30000, 0); - opts.registryKeys = arrayify(opts.registryKeys, true); - if (opts.registryKeys.some(r => !r || typeof r !== 'object' || Array.isArray(r) || !r.hive || !r.key || !r.name)) { - throw new TypeError('Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - } + if (opts.registryCallback !== undefined && typeof opts.registryCallback !== 'function') { + throw new TypeError('Expected "registryCallback" option to be a function'); + } - super(); + // validate and normalize registry keys + for (const params of arrayify(opts.registryKeys, true)) { + this.registryWatchers.push(new RegistryWatcher(params)); + } + } this.opts = opts; @@ -215,15 +231,7 @@ export default class DetectEngine extends EventEmitter { } } - if (process.platform === 'win32') { - await Promise.all(this.opts.registryKeys.map(async (obj) => { - try { - searchPaths.add(real(winreglib.get(obj.hive ? `${obj.hive}\\${obj.key}` : obj.key, obj.name))); - } catch (e) { - this.logger.warn('Failed to get registry key: %s', e.message); - } - })); - + if (this.winreglib) { if (typeof this.opts.registryCallback === 'function') { try { const result = await this.opts.registryCallback(); @@ -242,6 +250,16 @@ export default class DetectEngine extends EventEmitter { this.logger.warn('Registry callback threw error: %s', e.message); } } + + for (const watcher of this.registryWatchers) { + for (const { isDefault, value } of watcher.values) { + searchPaths.add(real(value)); + if (isDefault && value !== defaultPath) { + defaultPath = value; + this.logger.log(`Overwriting default path based on registry: ${highlight(defaultPath)}`); + } + } + } } return { @@ -291,22 +309,24 @@ export default class DetectEngine extends EventEmitter { * @access private */ refreshPaths() { - this.refreshPathsTimer = setTimeout(async () => { - try { - const { defaultPath, searchPaths } = await this.getPaths(); + if (this.opts.registryCallback && this.opts.refreshPathsInterval && this.opts.watch) { + this.refreshPathsTimer = setTimeout(async () => { + try { + const { defaultPath, searchPaths } = await this.getPaths(); - if (searchPaths.size !== this.detectors.size || [ ...searchPaths ].some(dir => !this.detector.has(dir))) { - await this.scan({ defaultPath, searchPaths }); - } else if (defaultPath !== this.defaultPath) { - this.defaultPath = defaultPath; - await this.processResults(this.results); + if (searchPaths.size !== this.detectors.size || [ ...searchPaths ].some(dir => !this.detector.has(dir))) { + await this.scan({ defaultPath, searchPaths }); + } else if (defaultPath !== this.defaultPath) { + this.defaultPath = defaultPath; + await this.processResults(this.results); + } + } catch (err) { + this.emit('error', err); } - } catch (err) { - this.emit('error', err); - } - this.refreshPaths(); - }, this.opts.refreshPathsInterval); + this.refreshPaths(); + }, this.opts.refreshPathsInterval); + } } /** @@ -397,10 +417,20 @@ export default class DetectEngine extends EventEmitter { */ async start() { try { - await this.rescan(); if (this.opts.watch) { + for (const watcher of this.registryWatchers) { + watcher + .on('change', () => this.rescan()) + .start(); + } + } + + await this.rescan(); + + if (this.winreglib) { this.refreshPaths(); } + return this.opts.multiple ? this.results : this.results[0]; } catch (err) { this.emit('error', err); @@ -422,6 +452,10 @@ export default class DetectEngine extends EventEmitter { this.refreshPathsTimer = null; } + for (const watcher of this.registryWatchers) { + watcher.stop(); + } + this.logger.log(pluralize(` Stopping ${highlight(this.detectors.size)} detector`, this.detectors.size)); for (const detector of this.detectors.values()) { await detector.stop(); diff --git a/packages/appcd-detect/src/index.js b/packages/appcd-detect/src/index.js index 4034a243b..ea1510263 100644 --- a/packages/appcd-detect/src/index.js +++ b/packages/appcd-detect/src/index.js @@ -5,3 +5,4 @@ if (!Error.prepareStackTrace) { export { default as default } from './detect-engine'; export { default as Detector } from './detector'; +export { default as RegistryWatcher } from './registry-watcher'; diff --git a/packages/appcd-detect/src/registry-watcher.js b/packages/appcd-detect/src/registry-watcher.js new file mode 100644 index 000000000..a4d66a990 --- /dev/null +++ b/packages/appcd-detect/src/registry-watcher.js @@ -0,0 +1,340 @@ +/* eslint-disable no-confusing-arrow */ + +import appcdLogger from 'appcd-logger'; + +import { debounce } from 'appcd-util'; +import { EventEmitter } from 'events'; + +const { log } = appcdLogger('appcd-detect:registry-watcher'); +const { highlight, note } = appcdLogger.styles; + +const winreglib = process.platform === 'win32' ? require('winreglib') : null; + +/** + * Generates a filter function for the given criteria. + * + * @param {String|RegExp} cond - The criteria used for filtering. + * @returns {Function} + */ +function createFilterFn(cond) { + return cond instanceof RegExp ? it => cond.test(it) : cond ? it => cond === it : null; +} + +/** + * Helper function that quickly checks if two unsorted arrays are shallowly equal. + * + * @param {?Array} a1 - The first array. + * @param {?Array} a2 - The second array. + * @returns {Boolean} + */ +function equal(a1, a2) { + return a1 === a2 || (a1 && a2 && !(a1 < a2) && !(a1 > a2)); +} + +/** + * A node in the registry tree representing a specific key, its watch instance, and its state. + */ +class KeyWatcher extends EventEmitter { + /** + * A map of all subkeys being watched. + * @type {Object} + */ + subkeys = {}; + + /** + * The state of the key being watched. + * @type {Object} + */ + state = { + subkeys: null, + value: undefined, + values: null + }; + + /** + * A reference to the `winreglib` library. + * @type {Object} + */ + winreglib = winreglib; + + /** + * Initializes the registry key state and wires up the registry key watcher. + * + * @param {Object} params - An object containing a `key`, `filter`, `hive`, `transform`, and + * `value` properties or an array of objects containing the forementioned properties. + * @param {Number} [params.depth=0] - The max depth to recursively watch for changes. + * @param {Object} [params.filter] - An object containing `subkeys` and/or `values` properties + * and used + * @param {Object} params.key - The name of the registry key to watch. + * @param {Function} [params.transform] - A function that transforms the incoming returns an object containing + * `isDefault` and `value` properties. + * @param {String} [params.value] - The name of the value to collect. + * @access public + */ + constructor(params) { + super(); + Object.assign(this, params); + + this.update(); + + log(`Start watching key: ${highlight(params.key)} ${note(`(depth=${params.depth})`)}`); + + // start watching the key + this.handle = winreglib.watch(params.key).on('change', async ({ type }) => { + log(`${highlight(params.key)} changed (type=${type})`); + + if (this.update()) { + this.emit('change'); + } + + if (type === 'delete') { + // deleted, nuke subkeys + this.destroy(true); + + } else if (type !== 'delete') { + // add or change + this.initSubkeys(); + } + }); + + this.initSubkeys(); + } + + /** + * Destroys this watch instance. + * + * @param {Boolean} [subkeysOnly=false] - When `true`, only subkeys are destroyed. When + * `false`, this watch instance is completely stopped and cleaned up. + * @access public + */ + destroy(subkeysOnly) { + if (!subkeysOnly) { + this.handle.stop(); + this.removeAllListeners(); + } + for (const [ key, subkey ] of Object.entries(this.subkeys)) { + subkey.destroy(); + delete this.subkeys[key]; + } + } + + /** + * Returns the value when `value` name is defined. + * + * @returns {*} + * @access public + */ + getValue() { + return this.state.value; + } + + /** + * Returns the value when `value` name is defined. + * + * @access private + */ + initSubkeys() { + if (this.depth && this.state.subkeys) { + // add or change + for (const subkey of this.state.subkeys) { + if (!this.subkeys[subkey]) { + this.subkeys[subkey] = new KeyWatcher({ + depth: this.depth - 1, + key: `${this.key}\\${subkey}` + }).on('change', (...args) => this.emit('change', ...args)); + } + } + } + } + + /** + * Refreshes the key's subkeys and values. It returns `true` if the state changed. + * + * @returns {Boolean} + * @access private + */ + update() { + let changed = false; + let subkeys = null; + let value; + let values = null; + + try { + const state = winreglib.list(this.key); + subkeys = (this.filter && this.filter.subkeys ? state.subkeys.filter(this.filter.subkeys) : state.subkeys).sort(); + values = (this.filter && this.filter.values ? state.values.filter(this.filter.values) : state.values).sort(); + } catch (e) { + // squelch + } + + changed = !equal(this.state.subkeys, subkeys) || !equal(this.state.values, values); + + if (this.value) { + try { + const obj = { value: winreglib.get(this.key, this.value) }; + value = this.transform && this.transform(obj, this) || obj; + changed = changed || JSON.stringify(value) !== JSON.stringify(this.state.value); + } catch (e) { + // squelch + } + } + + this.state = { subkeys, value, values }; + + return changed; + } +} + +/** + * Orchestrates the watching of a registry key. + */ +export default class RegistryWatcher extends EventEmitter { + /** + * A list of keys that are being watched. + * @type {Array.} + */ + keys = []; + + /** + * A list of objects containing a `value` property as well as any other arbitrary data. + * @type {Array.} + */ + values = []; + + /** + * A tree of registry key watchers. + * @type {Object} + */ + watchers = []; + + /** + * Validates and initializes the watcher parameters. + * + * @param {Object} params - An object containing a `key`, `filter`, `hive`, `transform`, and + * `value` properties or an array of objects containing the forementioned properties. + * @param {Number} [params.depth=0] - The max depth to recursively watch for changes. + * @param {Object} [params.filter] - An object containing `subkeys` and/or `values` properties + * and used + * @param {String} [params.hive] - The name of the Windows Registry hive. If `key` is set, then + * the name of the registry hive is prepended to the `key`. This should only be set when `key` + * is set, not `keys`. + * @param {Object} params.key - The name of the registry key to watch. + * @param {Function} [params.transform] - A function that transforms the incoming returns an object containing + * `isDefault` and `value` properties. + * @param {String} [params.value] - The name of the value to collect. + * @access public + */ + constructor(params) { + if (!params || typeof params !== 'object') { + throw new TypeError('Expected registry watcher params to be an object'); + } + + super(); + + const { depth, filter, hive, key, transform, value } = params; + const data = { + depth: 0, + filter: {}, + key, + transform, + value + }; + + if (!key || typeof key !== 'string') { + throw new TypeError('Expected registry watcher "key" param to be a non-empty string'); + } + + if (depth !== undefined) { + if (typeof depth !== 'number' || depth < 0) { + throw new TypeError('Expected registry watcher "depth" param to be a positive integer'); + } + data.depth = depth; + } + + if (filter !== undefined) { + if (typeof filter !== 'object' || Array.isArray(filter)) { + throw new TypeError('Expected registry watcher "filter" param to be an object'); + } + + if (filter.values !== undefined) { + if (!filter.values || (typeof filter.values !== 'string' && !(filter.values instanceof RegExp))) { + throw new TypeError('Expected registry watcher "values" filter param to be a non-empty string or regex'); + } + data.filter.values = createFilterFn(filter.values); + } + if (filter.subkeys !== undefined) { + if (!filter.subkeys || (typeof filter.subkeys !== 'string' && !(filter.subkeys instanceof RegExp))) { + throw new TypeError('Expected registry watcher "subkeys" filter param to be a non-empty string or regex'); + } + data.filter.subkeys = createFilterFn(filter.subkeys); + } + } + + if (hive !== undefined) { + if (!hive || typeof hive !== 'string') { + throw new TypeError('Expected registry watcher "hive" param to be a non-empty string'); + } + data.key = `${hive}\\${data.key}`; + } + + if (transform !== undefined && typeof transform !== 'function') { + throw new TypeError('Expected registry watcher "transform" param to be a function'); + } + + if (value !== undefined && (!value || typeof value !== 'string')) { + throw new TypeError('Expected registry watcher "value" param to be a non-empty string'); + } + + this.keys.push(data); + + this.notify = debounce(() => { + this.refreshValues(); + this.emit('change'); + }); + } + + /** + * Aggregates values from all watchers that are watching values. + * + * @access private + */ + refreshValues() { + const values = []; + for (const w of this.watchers) { + let value = w.getValue(); + if (value) { + values.push(value); + } + } + this.values = values; + } + + /** + * Wires up the registry key watchers. + * + * @returns {RegistryWatcher} + * @access public + */ + start() { + for (const params of this.keys) { + const w = new KeyWatcher(params); + w.on('change', () => this.notify()); + this.watchers.push(w); + } + + this.refreshValues(); + return this; + } + + /** + * Stops the registry key watchers. + * + * @access public + */ + stop() { + let w; + while (w = this.watchers.shift()) { + w.destroy(); + } + } +} diff --git a/packages/appcd-detect/test/test-detect-engine.js b/packages/appcd-detect/test/test-detect-engine.js index 6044c45b5..eff72cbcf 100644 --- a/packages/appcd-detect/test/test-detect-engine.js +++ b/packages/appcd-detect/test/test-detect-engine.js @@ -1,3 +1,5 @@ +/* eslint-disable no-unused-vars, promise/no-callback-in-promise */ + import appcdLogger from 'appcd-logger'; import DetectEngine from '../dist/index'; import Dispatcher from 'appcd-dispatcher'; @@ -11,11 +13,19 @@ import { exe } from 'appcd-subprocess'; import { isFile } from 'appcd-fs'; import { real } from 'appcd-path'; import { sleep } from 'appcd-util'; +import { spawnSync } from 'child_process'; import { status } from 'appcd-fswatcher'; const { log } = appcdLogger('test:appcd:detect'); const { highlight } = appcdLogger.styles; +const reg = (...args) => { + log(`Executing: ${highlight(`reg ${args.join(' ')}`)}`); + spawnSync('reg', args, { stdio: 'ignore' }); +}; + +const isWindows = process.platform === 'win32'; + const _tmpDir = tmp.dirSync({ mode: '755', prefix: 'appcd-detect-test-', @@ -134,87 +144,6 @@ describe('Detect', () => { expect(engine.opts.recursiveWatchDepth).to.equal(0); }); - it('should reject if registryCallback() is not a function', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryCallback: 123 - }); - }).to.throw(TypeError, 'Expected "registryCallback" option to be a function'); - }); - - it('should reject if registryKeys is not a function or object', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: 'foo' - }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - - it('should reject if registryKeys is an array with a non-object', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: [ 'foo' ] - }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - - it('should reject if registryKeys is an array with object missing a hive', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: [ { foo: 'bar' } ] - }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - - it('should reject if registryKeys is an array with object missing a key', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: [ { hive: 'HKLM' } ] - }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - - it('should reject if registryKeys is an array with object missing a name', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: [ { hive: 'HKLM', key: 'foo' } ] - }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - - it('should reject if registryKeys is an object missing a hive', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: { foo: 'bar' } - }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - - it('should reject if registryKeys is an object missing a key', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: { hive: 'HKLM' } - }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - - it('should reject if registryKeys is an object missing a name', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: { hive: 'HKLM', key: 'foo' } - }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - it('should disable redetect if not watching', () => { const engine = new DetectEngine({ checkDir() {}, @@ -751,4 +680,766 @@ describe('Detect', () => { expect(results).to.deep.equal([ { foo: 'bar' } ]); }); }); + + (isWindows ? describe : describe.skip)('Windows Registry', () => { + describe('Validation', () => { + it('should error if registryCallback() is not a function', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryCallback: 123 + }); + }).to.throw(TypeError, 'Expected "registryCallback" option to be a function'); + }); + + it('should error if registryKeys is not a function or object', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: 'foo' + }); + }).to.throw(TypeError, 'Expected registry watcher params to be an object'); + }); + + it('should error if registryKeys is an array with a non-object', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ 'foo' ] + }); + }).to.throw(TypeError, 'Expected registry watcher params to be an object'); + }); + + it('should error if registryKeys has invalid key', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: null } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "key" param to be a non-empty string'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: '' } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "key" param to be a non-empty string'); + }); + + it('should error if registryKeys has invalid depth', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', depth: null } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "depth" param to be a positive integer'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', depth: 'bar' } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "depth" param to be a positive integer'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', depth: -123 } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "depth" param to be a positive integer'); + }); + + it('should error if registryKeys has invalid value', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: null } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "value" param to be a non-empty string'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: '' } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "value" param to be a non-empty string'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: 123 } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "value" param to be a non-empty string'); + }); + + it('should error if registryKeys has invalid hive', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: 'bar', hive: null } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "hive" param to be a non-empty string'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: 'bar', hive: '' } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "hive" param to be a non-empty string'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: 'bar', hive: true } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "hive" param to be a non-empty string'); + }); + + it('should error if registryKeys has invalid filter', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', filter: 'baz' } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "filter" param to be an object'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', filter: [] } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "filter" param to be an object'); + }); + + it('should error if registryKeys has invalid filter values', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', filter: { values: null } } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "values" filter param to be a non-empty string or regex'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', filter: { values: 123 } } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "values" filter param to be a non-empty string or regex'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', filter: { values: '' } } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "values" filter param to be a non-empty string or regex'); + }); + + it('should error if registryKeys has invalid filter subkeys', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', filter: { subkeys: null } } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "subkeys" filter param to be a non-empty string or regex'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', filter: { subkeys: 123 } } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "subkeys" filter param to be a non-empty string or regex'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', filter: { subkeys: '' } } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "subkeys" filter param to be a non-empty string or regex'); + }); + + it('should error if registryKeys has key and invalid transform callback', () => { + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: 'bar', transform: null } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "transform" param to be a function'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: 'bar', transform: 'baz' } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "transform" param to be a function'); + + expect(() => { + new DetectEngine({ + checkDir() {}, + registryKeys: [ { key: 'foo', value: 'bar', transform: 123 } ] + }); + }).to.throw(TypeError, 'Expected registry watcher "transform" param to be a function'); + }); + }); + + describe('Changes', () => { + afterEach(async function () { + if (this.engine) { + await this.engine.stop(); + this.engine = null; + } + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + }); + + it('should watch existing key for changes (new subkey)', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir = makeTempDir(); + let counter = 0; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test\\foo'); + + this.engine = new DetectEngine({ + checkDir: async dir => { + // log(`${counter + 1}: ${dir}`); + + switch (++counter) { + case 2: + done(); + break; + } + }, + paths: [ dir ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test\\foo' + } + ], + watch: true + }); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('add', 'HKCU\\Software\\appcd-detect-test\\foo\\bar')) + .catch(done); + }); + + it('should watch existing key that is deleted', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir = makeTempDir(); + let counter = 0; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test\\foo'); + + this.engine = new DetectEngine({ + checkDir: async dir => { + // log(`${counter + 1}: ${dir}`); + + switch (++counter) { + case 2: + done(); + break; + } + }, + paths: [ dir ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test\\foo' + } + ], + watch: true + }); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('delete', 'HKCU\\Software\\appcd-detect-test\\foo', '/f')) + .catch(done); + }); + + it('should watch a non-existent key to be created', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir = makeTempDir(); + let counter = 0; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test'); + + this.engine = new DetectEngine({ + checkDir: async dir => { + // log(`${counter + 1}: ${dir}`); + + switch (++counter) { + case 2: + done(); + break; + } + }, + paths: [ dir ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test\\foo' + } + ], + watch: true + }); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('add', 'HKCU\\Software\\appcd-detect-test\\foo')) + .catch(done); + }); + + it('should watch a subkey for changes', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir = makeTempDir(); + let counter = 0; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test\\foo\\bar'); + + this.engine = new DetectEngine({ + checkDir: async dir => { + // log(`${counter + 1}: ${dir}`); + + switch (++counter) { + case 2: + done(); + break; + } + }, + paths: [ dir ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test\\foo', + depth: 1 + } + ], + watch: true + }); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('add', 'HKCU\\Software\\appcd-detect-test\\foo\\bar\\baz')) + .catch(done); + }); + }); + + describe('Values', () => { + afterEach(async function () { + if (this.engine) { + await this.engine.stop(); + this.engine = null; + } + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + }); + + it('should get existing value', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir1 = makeTempDir(); + const dir2 = makeTempDir(); + const dir3 = makeTempDir(); + let counter = 0; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test'); + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/t', 'REG_SZ', '/d', dir2); + + this.engine = new DetectEngine({ + checkDir: async dir => { + // log(`${counter + 1}: ${dir}`); + + try { + switch (++counter) { + case 2: + expect(this.engine.paths).to.deep.equal([ dir1, dir2 ]); + await sleep(250); + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/t', 'REG_SZ', '/d', dir3, '/f'); + break; + + case 4: + expect(this.engine.paths).to.deep.equal([ dir1, dir3 ]); + done(); + break; + } + } catch (err) { + done(err); + } + }, + paths: [ dir1 ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test', + value: 'foo' + } + ], + watch: true + }); + + this.engine.start(); + }); + + it('should get value once created', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir1 = makeTempDir(); + const dir2 = makeTempDir(); + const dir3 = makeTempDir(); + let counter = 0; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test'); + + this.engine = new DetectEngine({ + checkDir: async dir => { + // log(`${counter + 1}: ${dir}`); + + try { + switch (++counter) { + case 1: + expect(this.engine.paths).to.deep.equal([ dir1 ]); + await sleep(250); + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/t', 'REG_SZ', '/d', dir2); + break; + + case 3: + expect(this.engine.paths).to.deep.equal([ dir1, dir2 ]); + await sleep(250); + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/t', 'REG_SZ', '/d', dir3, '/f'); + break; + + case 5: + expect(this.engine.paths).to.deep.equal([ dir1, dir3 ]); + done(); + break; + } + } catch (err) { + done(err); + } + }, + paths: [ dir1 ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test', + value: 'foo' + } + ], + watch: true + }); + + this.engine.start(); + }); + + it('should get and transform existing value', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir1 = makeTempDir(); + const dir2 = makeTempDir(); + const dir3 = makeTempDir(); + let counter = 0; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test'); + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/t', 'REG_SZ', '/d', dir2); + + this.engine = new DetectEngine({ + checkDir: async dir => { + // log(`${counter + 1}: ${dir}`); + + try { + switch (++counter) { + case 2: + expect(this.engine.paths).to.deep.equal([ dir1, dir3 ]); + done(); + break; + } + } catch (err) { + done(err); + } + }, + paths: [ dir1 ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test', + transform(obj) { + obj.value = dir3; + }, + value: 'foo' + } + ], + watch: true + }); + + this.engine.start(); + }); + }); + + describe('Filtering', () => { + afterEach(async function () { + if (this.engine) { + await this.engine.stop(); + this.engine = null; + } + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + }); + + it('should filter out subkeys by string', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir = makeTempDir(); + let counter = 0; + let nogo = false; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test'); + + this.engine = new DetectEngine({ + checkDir: dir => { + // log(`${counter + 1}: ${dir}`); + + if (nogo) { + done(new Error('Did not expect any events!')); + return; + } + + switch (++counter) { + case 2: + nogo = true; + reg('add', 'HKCU\\Software\\appcd-detect-test\\bar'); + setTimeout(() => { + nogo = false; + reg('delete', 'HKCU\\Software\\appcd-detect-test\\foo', '/f'); + }, 1000); + break; + + case 3: + reg('add', 'HKCU\\Software\\appcd-detect-test\\foo'); + break; + + case 4: + done(); + break; + } + }, + paths: [ dir ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test', + filter: { + subkeys: 'foo' + } + } + ], + watch: true + }); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('add', 'HKCU\\Software\\appcd-detect-test\\foo')) + .catch(done); + }); + + it('should filter out subkeys by regex', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir = makeTempDir(); + let counter = 0; + let nogo = false; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test'); + + this.engine = new DetectEngine({ + checkDir: dir => { + // log(`${counter + 1}: ${dir}`); + + if (nogo) { + done(new Error('Did not expect any events!')); + return; + } + + switch (++counter) { + case 2: + nogo = true; + reg('add', 'HKCU\\Software\\appcd-detect-test\\bar'); + setTimeout(() => { + nogo = false; + reg('add', 'HKCU\\Software\\appcd-detect-test\\foo2'); + }, 1000); + break; + + case 3: + done(); + break; + } + }, + paths: [ dir ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test', + filter: { + subkeys: /^foo/ + } + } + ], + watch: true + }); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('add', 'HKCU\\Software\\appcd-detect-test\\foo')) + .catch(done); + }); + + it('should filter out values by string', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir = makeTempDir(); + let counter = 0; + let nogo = false; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test'); + + this.engine = new DetectEngine({ + checkDir: dir => { + // log(`${counter + 1}: ${dir}`); + + if (nogo) { + done(new Error('Did not expect any events!')); + return; + } + + switch (++counter) { + case 2: + nogo = true; + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'bar', '/t', 'REG_SZ', '/d', 'test2'); + setTimeout(() => { + nogo = false; + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/f'); + }, 1000); + break; + + case 3: + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/t', 'REG_SZ', '/d', 'test3', '/f'); + break; + + case 4: + done(); + break; + } + }, + paths: [ dir ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test', + filter: { + values: 'foo' + } + } + ], + watch: true + }); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/t', 'REG_SZ', '/d', 'test1')) + .catch(done); + }); + + it('should filter out values by regex', function (done) { + this.timeout(10000); + this.slow(10000); + + const dir = makeTempDir(); + let counter = 0; + let nogo = false; + + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/f'); + reg('add', 'HKCU\\Software\\appcd-detect-test'); + + this.engine = new DetectEngine({ + checkDir: dir => { + // log(`${counter + 1}: ${dir}`); + + if (nogo) { + done(new Error('Did not expect any events!')); + return; + } + + switch (++counter) { + case 2: + nogo = true; + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'bar', '/t', 'REG_SZ', '/d', 'test2'); + setTimeout(() => { + nogo = false; + reg('delete', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/f'); + }, 1000); + break; + + case 3: + reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo2', '/t', 'REG_SZ', '/d', 'test3', '/f'); + break; + + case 4: + done(); + break; + } + }, + paths: [ dir ], + registryKeys: [ + { + key: 'HKCU\\Software\\appcd-detect-test', + filter: { + values: /^foo/ + } + } + ], + watch: true + }); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('add', 'HKCU\\Software\\appcd-detect-test', '/v', 'foo', '/t', 'REG_SZ', '/d', 'test1')) + .catch(done); + }); + }); + }); }); + +/* + +filtering!!!! + +WINDOWS + +visual studio: + +export const registryKeys = { + 'HKCU\\Software\\Microsoft\\VisualStudio': {}, + 'HKCU\\Software\\Microsoft\\VSCommon': {}, + 'HKLM\\Software\\RegisteredApplications': { values: /^VisualStudio.+/ }, + 'HKLM\\Software\\Microsoft\\VisualStudio': {}, + 'HKLM\\Software\\WOW6432Node\\Microsoft': { subkeys: /^VisualStudio.+/ }, + 'HKLM\\Software\\WOW6432Node\\Microsoft\\VisualStudio': {} +}; + +registryKeys: Object.entries(windowslib.vs.registrykeys).map(([ key, filter ]) => ({ filter, key })) +*/ diff --git a/packages/appcd-dispatcher/CHANGELOG.md b/packages/appcd-dispatcher/CHANGELOG.md index 1e33b452c..e4486b0d0 100644 --- a/packages/appcd-dispatcher/CHANGELOG.md +++ b/packages/appcd-dispatcher/CHANGELOG.md @@ -1,3 +1,8 @@ +# v2.0.1 + + * chore: Fixed eslint `hasOwnProperty` warnings. + * chore: Updated dependencies. + # v2.0.0 (Jun 13, 2019) * BREAKING CHANGE: Updated to `appcd-response@2.0.0`. diff --git a/packages/appcd-dispatcher/package.json b/packages/appcd-dispatcher/package.json index 4ec101855..b224bcc2e 100644 --- a/packages/appcd-dispatcher/package.json +++ b/packages/appcd-dispatcher/package.json @@ -18,10 +18,10 @@ "dependencies": { "appcd-logger": "^2.0.2", "appcd-response": "^2.0.0", - "gawk": "^4.6.3", + "gawk": "^4.6.4", "path-to-regexp": "^3.0.0", "pluralize": "^8.0.0", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "uuid": "^3.3.2" }, "devDependencies": { diff --git a/packages/appcd-dispatcher/src/data-service-dispatcher.js b/packages/appcd-dispatcher/src/data-service-dispatcher.js index 6a55c6e06..2e42009c0 100644 --- a/packages/appcd-dispatcher/src/data-service-dispatcher.js +++ b/packages/appcd-dispatcher/src/data-service-dispatcher.js @@ -134,7 +134,7 @@ export default class DataServiceDispatcher extends ServiceDispatcher { if (filter) { for (let i = 0, len = filter.length; result && typeof result === 'object' && i < len; i++) { - if (!result.hasOwnProperty(filter[i])) { + if (!Object.prototype.hasOwnProperty.call(result, filter[i])) { return null; } result = result[filter[i]]; diff --git a/packages/appcd-dispatcher/src/dispatcher.js b/packages/appcd-dispatcher/src/dispatcher.js index da992bf74..28145caaa 100644 --- a/packages/appcd-dispatcher/src/dispatcher.js +++ b/packages/appcd-dispatcher/src/dispatcher.js @@ -432,7 +432,7 @@ export default class Dispatcher { */ normalize(path, handler) { // check if the `path` is a ServiceDispatcher or any object with a path and handler callback - if (path && typeof path === 'object' && path.hasOwnProperty('path') && typeof path.handler === 'function') { + if (path && typeof path === 'object' && Object.prototype.hasOwnProperty.call(path, 'path') && typeof path.handler === 'function') { handler = path.handler; path = path.path; } diff --git a/packages/appcd-dispatcher/src/service-dispatcher.js b/packages/appcd-dispatcher/src/service-dispatcher.js index 5b98193f9..ce573958f 100644 --- a/packages/appcd-dispatcher/src/service-dispatcher.js +++ b/packages/appcd-dispatcher/src/service-dispatcher.js @@ -232,7 +232,7 @@ export default class ServiceDispatcher { return; } - if (!this.subscriptions.hasOwnProperty(subscriptionId)) { + if (!Object.prototype.hasOwnProperty.call(this.subscriptions, subscriptionId)) { logger.log('%s No such subscription found', note(`[${subscriptionId}]`)); // double check that no topics have this subscription id diff --git a/packages/appcd-fs/package.json b/packages/appcd-fs/package.json index 3101f7b83..727578a07 100644 --- a/packages/appcd-fs/package.json +++ b/packages/appcd-fs/package.json @@ -16,7 +16,7 @@ "test": "gulp test" }, "dependencies": { - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-fswatch-manager/CHANGELOG.md b/packages/appcd-fswatch-manager/CHANGELOG.md index 925c1fa69..2dbe6da7f 100644 --- a/packages/appcd-fswatch-manager/CHANGELOG.md +++ b/packages/appcd-fswatch-manager/CHANGELOG.md @@ -1,3 +1,8 @@ +# v2.0.1 + + * chore: Updated dependencies. + * chore: Commented out debug log output of FS watcher tree state because it was too noisy. + # v2.0.0 (Jun 13, 2019) * BREAKING CHANGE: Updated to `appcd-dispatche@2.0.0` and `appcd-response@2.0.0`. diff --git a/packages/appcd-fswatch-manager/package.json b/packages/appcd-fswatch-manager/package.json index 0e8475cc6..1ca70e888 100644 --- a/packages/appcd-fswatch-manager/package.json +++ b/packages/appcd-fswatch-manager/package.json @@ -20,13 +20,13 @@ "appcd-fswatcher": "^1.2.2", "appcd-logger": "^2.0.2", "appcd-response": "^2.0.0", - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1", "appcd-path": "^1.1.6", "appcd-util": "^1.1.7", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "tmp": "^0.1.0" }, "homepage": "https://github.com/appcelerator/appc-daemon/tree/master/packages/appcd-fswatch-manager", diff --git a/packages/appcd-fswatch-manager/src/fswatch-manager.js b/packages/appcd-fswatch-manager/src/fswatch-manager.js index c88e30035..dd08a2370 100644 --- a/packages/appcd-fswatch-manager/src/fswatch-manager.js +++ b/packages/appcd-fswatch-manager/src/fswatch-manager.js @@ -9,7 +9,7 @@ import Dispatcher, { DispatcherError, ServiceDispatcher } from 'appcd-dispatcher import { codes } from 'appcd-response'; import { EventEmitter } from 'events'; import { expandPath } from 'appcd-path'; -import { FSWatcher, renderTree, rootEmitter, status as fsStatus, tree as fsTree } from 'appcd-fswatcher'; +import { FSWatcher, /* renderTree, */ rootEmitter, status as fsStatus, tree as fsTree } from 'appcd-fswatcher'; const logger = appcdLogger('appcd:fswatcher:manager'); const { highlight } = appcdLogger.styles; @@ -82,7 +82,7 @@ export default class FSWatchManager extends ServiceDispatcher { watcher.on('change', publish); this.watchers[sid] = watcher; - logger.log(renderTree()); + // logger.log(renderTree()); } /** @@ -101,7 +101,7 @@ export default class FSWatchManager extends ServiceDispatcher { logger.log('Stopping FSWatcher: %s', highlight(sid)); watcher.close(); delete this.watchers[sid]; - logger.log(renderTree()); + // logger.log(renderTree()); } } diff --git a/packages/appcd-fswatcher/CHANGELOG.md b/packages/appcd-fswatcher/CHANGELOG.md index c6ecaf693..40b78822f 100644 --- a/packages/appcd-fswatcher/CHANGELOG.md +++ b/packages/appcd-fswatcher/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.2.3 + + * chore: Updated dependencies. + # v1.2.2 (Jun 4, 2019) * chore: Updated dependencies. diff --git a/packages/appcd-fswatcher/package.json b/packages/appcd-fswatcher/package.json index d5732694b..23ab4a422 100644 --- a/packages/appcd-fswatcher/package.json +++ b/packages/appcd-fswatcher/package.json @@ -18,14 +18,14 @@ "dependencies": { "appcd-logger": "^2.0.2", "appcd-util": "^1.1.7", - "gawk": "^4.6.3", + "gawk": "^4.6.4", "pluralize": "^8.0.0", - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1", "appcd-path": "^1.1.6", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "tmp": "^0.1.0" }, "homepage": "https://github.com/appcelerator/appc-daemon/tree/master/packages/appcd-fswatcher", diff --git a/packages/appcd-fswatcher/src/fswatcher.js b/packages/appcd-fswatcher/src/fswatcher.js index 6d9c90a83..25c98d725 100644 --- a/packages/appcd-fswatcher/src/fswatcher.js +++ b/packages/appcd-fswatcher/src/fswatcher.js @@ -636,7 +636,7 @@ export class Node { && evt.action === 'change' && isDir ) { - log('Dropping Windows event for change to contents of a directory'); + // log('Dropping Windows event for change to contents of a directory'); return; } } catch (e) { diff --git a/packages/appcd-gulp/CHANGELOG.md b/packages/appcd-gulp/CHANGELOG.md index 91f1133c5..c35bb85f8 100644 --- a/packages/appcd-gulp/CHANGELOG.md +++ b/packages/appcd-gulp/CHANGELOG.md @@ -1,5 +1,10 @@ # v2.2.0 + * feat: Added Node 12 Babel profile. + [(DAEMON-275)](https://jira.appcelerator.org/browse/DAEMON-275) + * chore: Updated to `eslint-config-axway@4.3.0` which added eslint 6 support and added Node.js + eslint rules. + * chore: Disabled `require-atomic-updates` rule. * chore: Removed deprecated @babel/polyfill * chore: Updated dependencies diff --git a/packages/appcd-gulp/package.json b/packages/appcd-gulp/package.json index 921ac62fc..668c3373c 100644 --- a/packages/appcd-gulp/package.json +++ b/packages/appcd-gulp/package.json @@ -9,15 +9,15 @@ ], "license": "Apache-2.0", "dependencies": { - "@babel/core": "^7.4.5", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-class-properties": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/register": "^7.4.4", - "ansi-colors": "^4.0.1", + "@babel/register": "^7.5.5", + "ansi-colors": "^4.1.1", "babel-eslint": "^10.0.2", "babel-loader": "^8.0.6", "babel-plugin-dynamic-import-node": "^2.3.0", @@ -27,26 +27,27 @@ "esdoc": "^1.1.0", "esdoc-ecmascript-proposal-plugin": "^1.0.0", "esdoc-standard-plugin": "^1.0.0", - "eslint": "^6.0.1", - "eslint-config-axway": "^4.2.2", + "eslint": "^6.1.0", + "eslint-config-axway": "^4.3.0", "eslint-plugin-chai-friendly": "^0.4.1", - "eslint-plugin-mocha": "^5.3.0", + "eslint-plugin-mocha": "^6.0.0", + "eslint-plugin-node": "^9.1.0", "fancy-log": "^1.3.3", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "gulp": "^4.0.2", "gulp-babel": "^8.0.0", "gulp-chug": "^0.5.1", "gulp-debug": "^4.0.0", - "gulp-eslint": "^5.0.0", - "gulp-load-plugins": "^1.6.0", + "gulp-eslint": "^6.0.0", + "gulp-load-plugins": "^2.0.0", "gulp-plumber": "^1.2.1", "gulp-sourcemaps": "^2.6.5", - "mocha": "^6.1.4", - "mocha-jenkins-reporter": "^0.4.1", + "mocha": "^6.2.0", + "mocha-jenkins-reporter": "^0.4.2", "nyc": "^14.1.1", - "sinon": "^7.3.2", + "sinon": "^7.4.1", "sinon-chai": "^3.3.0", - "webpack": "^4.35.0" + "webpack": "^4.39.1" }, "homepage": "https://github.com/appcelerator/appc-daemon/tree/master/packages/appcd-gulp", "bugs": "https://github.com/appcelerator/appc-daemon/issues", diff --git a/packages/appcd-gulp/src/babel.js b/packages/appcd-gulp/src/babel.js index 8c4ff80f7..14c7cace5 100644 --- a/packages/appcd-gulp/src/babel.js +++ b/packages/appcd-gulp/src/babel.js @@ -50,6 +50,13 @@ const profiles = { '@babel/plugin-transform-modules-commonjs', 'dynamic-import-node' ] + }, + + node12: { + plugins: [ + '@babel/plugin-transform-modules-commonjs', + 'dynamic-import-node' + ] } }; diff --git a/packages/appcd-gulp/src/eslint-tests.json b/packages/appcd-gulp/src/eslint-tests.json index 4c16a19dc..a1096113e 100644 --- a/packages/appcd-gulp/src/eslint-tests.json +++ b/packages/appcd-gulp/src/eslint-tests.json @@ -15,6 +15,8 @@ "sinon": false }, "rules": { - "promise/always-return": "off" + "node/no-unsupported-features/es-syntax": "off", + "promise/always-return": "off", + "require-atomic-updates": "off" } } diff --git a/packages/appcd-gulp/src/eslint.json b/packages/appcd-gulp/src/eslint.json index 3608b9c14..e562be219 100644 --- a/packages/appcd-gulp/src/eslint.json +++ b/packages/appcd-gulp/src/eslint.json @@ -2,5 +2,9 @@ "extends": [ "axway/env-node", "axway/+babel" ], "globals": { "appcd": false + }, + "rules": { + "node/no-unsupported-features/es-syntax": "off", + "require-atomic-updates": "off" } } diff --git a/packages/appcd-http/package.json b/packages/appcd-http/package.json index bdb168ff2..13310680d 100644 --- a/packages/appcd-http/package.json +++ b/packages/appcd-http/package.json @@ -23,8 +23,8 @@ "koa-helmet": "^4.2.0", "koa-send": "^5.0.0", "path-to-regexp": "^3.0.0", - "source-map-support": "^0.5.12", - "ws": "^7.0.1" + "source-map-support": "^0.5.13", + "ws": "^7.1.1" }, "devDependencies": { "appcd-gulp": "^2.1.1", diff --git a/packages/appcd-logger/CHANGELOG.md b/packages/appcd-logger/CHANGELOG.md index 95cc6b309..cbb6dbc87 100644 --- a/packages/appcd-logger/CHANGELOG.md +++ b/packages/appcd-logger/CHANGELOG.md @@ -1,3 +1,7 @@ +# v2.0.3 + + * chore: Updated dependencies. + # v2.0.2 (Jun 4, 2019) * chore: Updated dependencies. diff --git a/packages/appcd-logger/package.json b/packages/appcd-logger/package.json index 1997a8760..8607be5fd 100644 --- a/packages/appcd-logger/package.json +++ b/packages/appcd-logger/package.json @@ -16,8 +16,8 @@ "test": "gulp test" }, "dependencies": { - "snooplogg": "^2.0.1", - "source-map-support": "^0.5.12" + "snooplogg": "^2.1.0", + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-machine-id/CHANGELOG.md b/packages/appcd-machine-id/CHANGELOG.md index 18497bd8c..c0456d260 100644 --- a/packages/appcd-machine-id/CHANGELOG.md +++ b/packages/appcd-machine-id/CHANGELOG.md @@ -1,3 +1,7 @@ +# v2.0.2 + + * chore: Updated dependencies. + # v2.0.1 (Jun 13, 2019) * chore: Updated to `appcd-subprocess@2.0.1`. diff --git a/packages/appcd-machine-id/package.json b/packages/appcd-machine-id/package.json index b10b5e596..49f5e5d2c 100644 --- a/packages/appcd-machine-id/package.json +++ b/packages/appcd-machine-id/package.json @@ -21,11 +21,11 @@ "appcd-path": "^1.1.6", "appcd-subprocess": "^2.0.1", "appcd-util": "^1.1.7", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "macaddress": "^0.2.9", "simple-plist": "^1.0.0", - "source-map-support": "^0.5.12", - "winreglib": "^1.0.2" + "source-map-support": "^0.5.13", + "winreglib": "^1.0.5" }, "devDependencies": { "appcd-gulp": "^2.1.1", diff --git a/packages/appcd-nodejs/CHANGELOG.md b/packages/appcd-nodejs/CHANGELOG.md index fca31a836..0a2e44673 100644 --- a/packages/appcd-nodejs/CHANGELOG.md +++ b/packages/appcd-nodejs/CHANGELOG.md @@ -1,3 +1,7 @@ +# v2.0.2 + + * chore: Updated dependencies. + # v2.0.1 (Jun 13, 2019) * chore: Updated to `appcd-nodejs@2.0.0`. diff --git a/packages/appcd-nodejs/package.json b/packages/appcd-nodejs/package.json index 8d95682ac..4730cd586 100644 --- a/packages/appcd-nodejs/package.json +++ b/packages/appcd-nodejs/package.json @@ -20,10 +20,10 @@ "appcd-logger": "^2.0.2", "appcd-request": "^2.0.0", "appcd-util": "^1.1.7", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "pluralize": "^8.0.0", "progress": "^2.0.3", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "tar-stream": "^2.1.0", "yauzl": "^2.10.0" }, diff --git a/packages/appcd-path/package.json b/packages/appcd-path/package.json index da862d518..561b22ed1 100644 --- a/packages/appcd-path/package.json +++ b/packages/appcd-path/package.json @@ -16,7 +16,7 @@ "test": "gulp test" }, "dependencies": { - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1", diff --git a/packages/appcd-plugin/CHANGELOG.md b/packages/appcd-plugin/CHANGELOG.md index 7273928ee..7dc105cc0 100644 --- a/packages/appcd-plugin/CHANGELOG.md +++ b/packages/appcd-plugin/CHANGELOG.md @@ -1,6 +1,7 @@ # v2.2.1 - * chore: Updated dependencies + * chore: Fixed eslint `hasOwnProperty` warnings. + * chore: Updated dependencies. # v2.2.0 (Jun 25, 2019) diff --git a/packages/appcd-plugin/package.json b/packages/appcd-plugin/package.json index 838ca9ef6..309a19c4e 100644 --- a/packages/appcd-plugin/package.json +++ b/packages/appcd-plugin/package.json @@ -36,22 +36,22 @@ "appcd-util": "^1.1.7", "appcd-winreg": "^1.1.6", "builtin-modules": "^3.1.0", - "findup-sync": "^3.0.0", - "gawk": "^4.6.3", + "findup-sync": "^4.0.0", + "gawk": "^4.6.4", "globule": "^1.2.1", - "hook-emitter": "^3.1.2", + "hook-emitter": "^4.0.0", "ignore": "^5.1.2", "pluralize": "^8.0.0", "pretty-ms": "^5.0.0", - "semver": "^6.1.2", + "semver": "^6.3.0", "slugg": "^1.2.1", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "uuid": "^3.3.2" }, "devDependencies": { "appcd-fswatch-manager": "^2.0.0", "appcd-gulp": "^2.1.1", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "tmp": "^0.1.0" }, "homepage": "https://github.com/appcelerator/appc-daemon/tree/master/packages/appcd-plugin", diff --git a/packages/appcd-plugin/src/plugin.js b/packages/appcd-plugin/src/plugin.js index 48429ae6f..c046f99a0 100644 --- a/packages/appcd-plugin/src/plugin.js +++ b/packages/appcd-plugin/src/plugin.js @@ -65,7 +65,7 @@ export default class Plugin extends EventEmitter { return new Proxy(this, { get(target, name) { - if (target.info.hasOwnProperty(name)) { + if (Object.prototype.hasOwnProperty.call(target.info, name)) { return target.info[name]; } else { return target[name]; @@ -76,7 +76,7 @@ export default class Plugin extends EventEmitter { if (name === 'info') { throw new Error('The "info" property is readonly'); } - if (target.info.hasOwnProperty(name)) { + if (Object.prototype.hasOwnProperty.call(target.info, name)) { target.info[name] = value; } else { target[name] = value; diff --git a/packages/appcd-request/CHANGELOG.md b/packages/appcd-request/CHANGELOG.md index 208d3b5c4..d5192fac2 100644 --- a/packages/appcd-request/CHANGELOG.md +++ b/packages/appcd-request/CHANGELOG.md @@ -1,3 +1,9 @@ +# v2.1.0 + + * fix: Fixed request config setting precedence such that environment variables override config + settings. + * chore: Updated dependencies. + # v2.0.0 (Jun 13, 2019) * BREAKING CHANGE: Updated to `appcd-dispatcher@2.0.0`. diff --git a/packages/appcd-request/package.json b/packages/appcd-request/package.json index ff8b206c7..1038dc1f5 100644 --- a/packages/appcd-request/package.json +++ b/packages/appcd-request/package.json @@ -21,7 +21,7 @@ "appcd-logger": "^2.0.2", "humanize": "^0.0.9", "request": "^2.88.0", - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-request/src/request.js b/packages/appcd-request/src/request.js index e43d29e75..784e9be82 100644 --- a/packages/appcd-request/src/request.js +++ b/packages/appcd-request/src/request.js @@ -69,47 +69,49 @@ export default function request(params, callback) { conf = Object.assign({ method: 'GET' }, conf, params); + // ca file if (APPCD_NETWORK_CA_FILE && isFile(APPCD_NETWORK_CA_FILE)) { conf.ca = fs.readFileSync(APPCD_NETWORK_CA_FILE).toString(); - } - - if (APPCD_NETWORK_PROXY) { - conf.proxy = APPCD_NETWORK_PROXY; - } - - if (APPCD_NETWORK_STRICT_SSL !== undefined && APPCD_NETWORK_STRICT_SSL !== 'false') { - conf.strictSSL = true; - } - - // ca file - const caFile = conf.caFile && typeof conf.caFile === 'string' && path.resolve(conf.caFile); - if (isFile(caFile)) { - conf.ca = fs.readFileSync(caFile); - delete conf.caFile; + } else { + const caFile = conf.caFile && typeof conf.caFile === 'string' && path.resolve(conf.caFile); + if (isFile(caFile)) { + conf.ca = fs.readFileSync(caFile); + } } // cert file const certFile = conf.certFile && typeof conf.certFile === 'string' && path.resolve(conf.certFile); if (isFile(certFile)) { conf.cert = fs.readFileSync(certFile); - delete conf.certFile; } // key file const keyFile = conf.keyFile && typeof conf.keyFile === 'string' && path.resolve(conf.keyFile); if (isFile(keyFile)) { conf.key = fs.readFileSync(keyFile); - delete conf.keyFile; } // configure proxy - const proxyType = conf.url && conf.url.indexOf('https') === 0 ? 'httpsProxy' : 'httpProxy'; - if (conf[proxyType]) { - conf.proxy = conf[proxyType]; + if (APPCD_NETWORK_PROXY) { + conf.proxy = APPCD_NETWORK_PROXY; + } else { + const proxyType = conf.url && conf.url.indexOf('https') === 0 ? 'httpsProxy' : 'httpProxy'; + if (conf[proxyType]) { + conf.proxy = conf[proxyType]; + } } + + // remove unused props + delete conf.caFile; + delete conf.certFile; + delete conf.keyFile; delete conf.httpProxy; delete conf.httpsProxy; + if (APPCD_NETWORK_STRICT_SSL !== undefined && APPCD_NETWORK_STRICT_SSL !== 'false') { + conf.strictSSL = true; + } + // console.log(conf); const req = _request(conf, callback) @@ -120,7 +122,7 @@ export default function request(params, callback) { note(conf.method), conf.url, statusCode < 400 ? ok(statusCode) : alert(statusCode), - headers.hasOwnProperty('content-length') ? note(`(${humanize.filesize(headers['content-length'])})`) : '' + Object.prototype.hasOwnProperty.call(headers, 'content-length') ? note(`(${humanize.filesize(headers['content-length'])})`) : '' ); }) .on('error', () => {}); diff --git a/packages/appcd-response/CHANGELOG.md b/packages/appcd-response/CHANGELOG.md index 3f4a20d5d..23261811d 100644 --- a/packages/appcd-response/CHANGELOG.md +++ b/packages/appcd-response/CHANGELOG.md @@ -1,3 +1,8 @@ +# v2.0.1 + + * chore: Fixed eslint `hasOwnProperty` warnings. + * chore: Updated dependencies. + # v2.0.0 (Jun 4, 2019) * BREAKING CHANGE: Bumped minimum required Node.js version to v8.12.0. diff --git a/packages/appcd-response/package.json b/packages/appcd-response/package.json index b014a1672..c87a5b763 100644 --- a/packages/appcd-response/package.json +++ b/packages/appcd-response/package.json @@ -18,9 +18,9 @@ "dependencies": { "appcd-fs": "^1.1.7", "appcd-path": "^1.1.6", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "sprintf-js": "^1.1.2", - "winreglib": "^1.0.2" + "winreglib": "^1.0.5" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-response/src/appcd-error.js b/packages/appcd-response/src/appcd-error.js index eedc271aa..506677c06 100644 --- a/packages/appcd-response/src/appcd-error.js +++ b/packages/appcd-response/src/appcd-error.js @@ -115,11 +115,11 @@ export function createErrorClass(className, opts = {}) { throw new TypeError('Expected options to be an object'); } - if (opts.hasOwnProperty('defaultStatus') && typeof opts.defaultStatus !== 'number') { + if (Object.prototype.hasOwnProperty.call(opts, 'defaultStatus') && typeof opts.defaultStatus !== 'number') { throw new TypeError('Expected default status to be a number'); } - if (opts.hasOwnProperty('defaultStatusCode') && typeof opts.defaultStatusCode !== 'number' && typeof opts.defaultStatusCode !== 'string') { + if (Object.prototype.hasOwnProperty.call(opts, 'defaultStatusCode') && typeof opts.defaultStatusCode !== 'number' && typeof opts.defaultStatusCode !== 'string') { throw new TypeError('Expected default status code to be a string or number'); } } diff --git a/packages/appcd-response/src/message.js b/packages/appcd-response/src/message.js index 19784e8ee..de97dd40f 100644 --- a/packages/appcd-response/src/message.js +++ b/packages/appcd-response/src/message.js @@ -170,7 +170,7 @@ export function i18n(locales) { */ function loadCodeFile(locales, cls, code) { for (let locale of locales) { - if (codesCache[locale] && codesCache[locale].hasOwnProperty(code)) { + if (codesCache[locale] && Object.prototype.hasOwnProperty.call(codesCache[locale], code)) { return codesCache[locale][code]; } diff --git a/packages/appcd-subprocess/CHANGELOG.md b/packages/appcd-subprocess/CHANGELOG.md index f22571912..4e2e20a88 100644 --- a/packages/appcd-subprocess/CHANGELOG.md +++ b/packages/appcd-subprocess/CHANGELOG.md @@ -1,3 +1,8 @@ +# v2.0.1 + + * chore: Fixed eslint `hasOwnProperty` warnings. + * chore: Updated dependencies. + # v2.0.0 (Jun 13, 2019) * BREAKING CHANGE: Updated to `appcd-response@2.0.0`. diff --git a/packages/appcd-subprocess/package.json b/packages/appcd-subprocess/package.json index 491877458..7cfb0e8a9 100644 --- a/packages/appcd-subprocess/package.json +++ b/packages/appcd-subprocess/package.json @@ -22,9 +22,9 @@ "appcd-path": "^1.1.6", "appcd-response": "^2.0.0", "appcd-util": "^1.1.7", - "gawk": "^4.6.3", + "gawk": "^4.6.4", "ps-tree": "^1.2.0", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "which": "^1.3.1" }, "devDependencies": { diff --git a/packages/appcd-subprocess/src/subprocess.js b/packages/appcd-subprocess/src/subprocess.js index ce9d0465e..ac9e91320 100644 --- a/packages/appcd-subprocess/src/subprocess.js +++ b/packages/appcd-subprocess/src/subprocess.js @@ -42,7 +42,7 @@ export function run(cmd, args, opts) { opts = {}; } - if (!opts.hasOwnProperty('windowsHide')) { + if (!Object.prototype.hasOwnProperty.call(opts, 'windowsHide')) { opts.windowsHide = true; } @@ -87,7 +87,7 @@ export function spawn(params = {}) { throw new TypeError('Expected params to be an object'); } - if (!params.hasOwnProperty('command')) { + if (!Object.prototype.hasOwnProperty.call(params, 'command')) { throw new SubprocessError(codes.MISSING_ARGUMENT, 'Missing required argument "%s"', 'command'); } if (!params.command || typeof params.command !== 'string') { @@ -95,7 +95,7 @@ export function spawn(params = {}) { } let args = []; - if (params.hasOwnProperty('args')) { + if (Object.prototype.hasOwnProperty.call(params, 'args')) { if (Array.isArray(params.args)) { args = params.args; } else if (params.args) { @@ -110,13 +110,13 @@ export function spawn(params = {}) { windowsHide: true }; - if (params.hasOwnProperty('options')) { + if (Object.prototype.hasOwnProperty.call(params, 'options')) { if (!params.options || typeof params.options !== 'object') { throw new SubprocessError(codes.INVALID_ARGUMENT, 'Spawn "options" must be an object'); } for (const prop of [ 'cwd', 'env', 'stdio', 'windowsHide' ]) { - if (params.options.hasOwnProperty(prop)) { + if (Object.prototype.hasOwnProperty.call(params.options, prop)) { options[prop] = params.options[prop]; } } diff --git a/packages/appcd-telemetry/CHANGELOG.md b/packages/appcd-telemetry/CHANGELOG.md index fecc4fa0d..0d13aed8b 100644 --- a/packages/appcd-telemetry/CHANGELOG.md +++ b/packages/appcd-telemetry/CHANGELOG.md @@ -1,3 +1,12 @@ +# v2.0.2 + + * fix: Fixed bug where events were sent out-of-order if there was a connection error sending a + batch of data. + * fix: Fixed bug where the next schuduled sending of events was stopped if shutdown prior to + scheduling. + * fix: Fixed live config changes for environment name. + * chore: Updated dependencies. + # v2.0.1 (Jun 13, 2019) * chore: Updated to `appcd-dispatcher@2.0.0`, `appcd-machine-id@2.0.1`, and `appcd-request@2.0.0`. diff --git a/packages/appcd-telemetry/package.json b/packages/appcd-telemetry/package.json index e46c698ae..dfb476125 100644 --- a/packages/appcd-telemetry/package.json +++ b/packages/appcd-telemetry/package.json @@ -25,8 +25,8 @@ "appcd-request": "^2.0.0", "appcd-response": "^2.0.0", "appcd-util": "^1.1.7", - "fs-extra": "^8.0.1", - "source-map-support": "^0.5.12", + "fs-extra": "^8.1.0", + "source-map-support": "^0.5.13", "uuid": "^3.3.2" }, "devDependencies": { diff --git a/packages/appcd-telemetry/src/telemetry.js b/packages/appcd-telemetry/src/telemetry.js index a249d9ec1..a5dc7d7a2 100644 --- a/packages/appcd-telemetry/src/telemetry.js +++ b/packages/appcd-telemetry/src/telemetry.js @@ -30,6 +30,56 @@ const jsonRegExp = /\.json$/; * Records and sends telemetry data. */ export default class Telemetry extends Dispatcher { + /** + * The daemon config instance. + * @type {Config} + */ + config = { + enabled: false, + eventsDir: null, + sendBatchSize: 10, + sendInterval: 60000, // 1 minute + sendTimeout: 60000, // 1 minute + url: null + }; + + /** + * The time, in milliseconds, that the last send was fired. + * @type {Number} + */ + lastSend = null; + + /** + * The machine id. This value is used to also determine if the telemetry system has been + * initialized. + * @type {String} + */ + hardwareId = null; + + /** + * A promise that is resolved when telemetry data is not being sent to the server. + * @type {Promise} + */ + pending = Promise.resolve(); + + /** + * A flag that indicates if the telemetry system is running. + * @type {Boolean} + */ + running = false; + + /** + * The timer for sending telemetry data. + * @type {Timer} + */ + sendTimer = null; + + /** + * The session id. + * @type {String} + */ + sessionId = uuid.v4(); + /** * Constructs an analytics instance. * @@ -56,56 +106,6 @@ export default class Telemetry extends Dispatcher { */ this.app = app; - /** - * The daemon config instance. - * @type {Config} - */ - this.config = { - enabled: false, - eventsDir: null, - sendBatchSize: 10, - sendInterval: 60000, // 1 minute - sendTimeout: 60000, // 1 minute - url: null - }; - - /** - * The deploy type for the events. - * @type {String} - */ - this.environment = cfg.get('telemetry.environment') || 'production'; - - /** - * The time, in milliseconds, that the last send was fired. - * @type {Number} - */ - this.lastSend = null; - - /** - * The machine id. This value is used to also determine if the telemetry system has been - * initialized. - * @type {String} - */ - this.hardwareId = null; - - /** - * A promise that is resolved when telemetry data is not being sent to the server. - * @type {Promise} - */ - this.pending = Promise.resolve(); - - /** - * The timer for sending telemetry data. - * @type {Timer} - */ - this.sendTimer = null; - - /** - * The session id. - * @type {String} - */ - this.sessionId = uuid.v4(); - /** * The app version. * @type {String} @@ -180,7 +180,7 @@ export default class Telemetry extends Dispatcher { id: this.sessionId }, distribution: { - environment: this.environment, + environment: this.config.environment, version: this.version } }; @@ -213,7 +213,7 @@ export default class Telemetry extends Dispatcher { * @access private */ addCrash(ctx) { - if (this.environment !== 'production') { + if (this.config.environment !== 'production') { return; } if (!ctx.request.message) { @@ -233,7 +233,7 @@ export default class Telemetry extends Dispatcher { * @access public */ async init(homeDir) { - if (this.hardwareId) { + if (this.hardwareId || this.running) { return; } @@ -245,6 +245,8 @@ export default class Telemetry extends Dispatcher { this.hardwareId = await getMachineId(path.join(homeDir, '.mid')); + this.running = true; + // send any unsent events this.sendEvents(); @@ -298,7 +300,7 @@ export default class Telemetry extends Dispatcher { const scheduleSendEvents = () => { // when flushing, we don't schedule a send - if (!flush) { + if (!flush && this.running) { this.sendTimer = setTimeout(() => this.sendEvents(), 1000); } }; @@ -309,29 +311,32 @@ export default class Telemetry extends Dispatcher { } let batch = []; + let files = fs.readdirSync(eventsDir).filter(name => jsonRegExp.test(name)); let counter = 0; - for (const name of fs.readdirSync(eventsDir)) { - if (jsonRegExp.test(name)) { - const file = path.join(eventsDir, name); - - try { - batch.push({ - evt: await fs.readJson(file), - file - }); - counter++; - } catch (e) { - // Rather then squelch the error we'll remove here - log(`Failed to read ${highlight(file)}, removing`); - await fs.remove(file); - } - - // send batch if full - if (batch.length >= sendBatchSize) { - await this.sendBatch(batch); - batch = []; - } + for (let i = 0; i < files.length; i++) { + const file = path.join(eventsDir, files[i]); + + try { + batch.push({ + evt: await fs.readJson(file), + file + }); + counter++; + } catch (e) { + // Rather then squelch the error we'll remove here + log(`Failed to read ${highlight(file)}, removing`); + await fs.remove(file); + } + + // send batch if full + if (batch.length >= sendBatchSize) { + await this.sendBatch(batch); + + // reset + batch = []; + i = -1; + files = fs.readdirSync(eventsDir).filter(name => jsonRegExp.test(name)); } } @@ -359,6 +364,7 @@ export default class Telemetry extends Dispatcher { */ async shutdown() { clearTimeout(this.sendTimer); + this.running = false; // wait for the pending post to finish await this.pending; @@ -382,6 +388,10 @@ export default class Telemetry extends Dispatcher { // copy over the config Object.assign(this.config, config); + if (!this.config.environment) { + this.config.environment = 'production'; + } + // make sure things are sane if (this.config.sendBatchSize) { this.config.sendBatchSize = Math.max(this.config.sendBatchSize, 1); diff --git a/packages/appcd-telemetry/test/test-telemetry.js b/packages/appcd-telemetry/test/test-telemetry.js index c7754535d..25e675bc7 100644 --- a/packages/appcd-telemetry/test/test-telemetry.js +++ b/packages/appcd-telemetry/test/test-telemetry.js @@ -289,6 +289,8 @@ describe('telemetry', () => { describe('Sending Events', () => { afterEach(async function () { + this.timeout(10000); + if (this.telemetry) { await this.telemetry.shutdown(); this.telemetry = null; diff --git a/packages/appcd-util/CHANGELOG.md b/packages/appcd-util/CHANGELOG.md index 6b014ee86..c889b836f 100644 --- a/packages/appcd-util/CHANGELOG.md +++ b/packages/appcd-util/CHANGELOG.md @@ -1,5 +1,7 @@ -# v1.1.8 +# v2.0.0 + * BREAKING CHANGE: Bumped minimum supported Node.js version from `>=8.0.0` to `>=8.1.0` to fix + issue where 8.0.x didn't support `async_hooks.createHook()`, yet `appcd-util` was using it. * chore: Updated dependencies # v1.1.7 (Jun 4, 2019) diff --git a/packages/appcd-util/package.json b/packages/appcd-util/package.json index 9b97a7481..e3d0dda48 100644 --- a/packages/appcd-util/package.json +++ b/packages/appcd-util/package.json @@ -18,8 +18,8 @@ "dependencies": { "appcd-fs": "^1.1.7", "lodash.get": "^4.4.2", - "semver": "^6.1.2", - "source-map-support": "^0.5.12" + "semver": "^6.3.0", + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" @@ -28,6 +28,6 @@ "bugs": "https://github.com/appcelerator/appc-daemon/issues", "repository": "https://github.com/appcelerator/appc-daemon", "engines": { - "node": ">=8.0.0" + "node": ">=8.1.0" } } diff --git a/packages/appcd-util/src/util.js b/packages/appcd-util/src/util.js index 8aaaf32b9..e38fca979 100644 --- a/packages/appcd-util/src/util.js +++ b/packages/appcd-util/src/util.js @@ -1,3 +1,5 @@ +/* eslint-disable node/no-deprecated-api */ + /* istanbul ignore if */ if (!Error.prepareStackTrace) { require('source-map-support/register'); diff --git a/packages/appcd-winreg/package.json b/packages/appcd-winreg/package.json index a6022d5fd..d474d2eba 100644 --- a/packages/appcd-winreg/package.json +++ b/packages/appcd-winreg/package.json @@ -16,7 +16,7 @@ "test": "gulp test" }, "dependencies": { - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "winreg": "^1.2.4" }, "devDependencies": { diff --git a/packages/appcd/CHANGELOG.md b/packages/appcd/CHANGELOG.md index 9055a7437..68146751f 100644 --- a/packages/appcd/CHANGELOG.md +++ b/packages/appcd/CHANGELOG.md @@ -1,5 +1,6 @@ # v2.7.1 + * chore: Fixed eslint `hasOwnProperty` warnings. * chore: Updated dependencies # v2.7.0 (Jun 24, 2019) diff --git a/packages/appcd/package.json b/packages/appcd/package.json index 6a84ae8a0..cdf71d80f 100644 --- a/packages/appcd/package.json +++ b/packages/appcd/package.json @@ -37,11 +37,11 @@ "appcd-nodejs": "^2.0.0", "appcd-path": "^1.1.6", "appcd-util": "^1.1.7", - "cli-kit": "^0.11.1", + "cli-kit": "^0.11.2", "cli-table2": "^0.2.0", "humanize": "^0.0.9", - "source-map-support": "^0.5.12", - "v8-compile-cache": "^2.0.3" + "source-map-support": "^0.5.13", + "v8-compile-cache": "^2.1.0" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd/src/cli.js b/packages/appcd/src/cli.js index be98af76b..98f70eee0 100644 --- a/packages/appcd/src/cli.js +++ b/packages/appcd/src/cli.js @@ -6,7 +6,7 @@ import { getAppcdVersion } from './common'; const version = getAppcdVersion(); let banner; -if (!process.env.hasOwnProperty('APPC_NPM_VERSION')) { +if (!Object.prototype.hasOwnProperty.call(process.env, 'APPC_NPM_VERSION')) { banner = `${appcdLogger.styles.highlight('Appcelerator Daemon')}, version ${version}\n` + 'Copyright (c) 2015-2019, Axway, Inc. All Rights Reserved.'; } diff --git a/yarn.lock b/yarn.lock index 3b522d9d5..f1a700297 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,41 +2,41 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" - integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== +"@babel/core@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" + integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.5" + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.5.5" + "@babel/helpers" "^7.5.5" + "@babel/parser" "^7.5.5" "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.5" - "@babel/types" "^7.4.4" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" - lodash "^4.17.11" + lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" - integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== +"@babel/generator@^7.4.0", "@babel/generator@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" + integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.5.5" jsesc "^2.5.1" - lodash "^4.17.11" + lodash "^4.17.13" source-map "^0.5.0" trim-right "^1.0.1" @@ -56,16 +56,16 @@ "@babel/traverse" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/helper-create-class-features-plugin@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" - integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA== +"@babel/helper-create-class-features-plugin@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4" + integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg== dependencies: "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-member-expression-to-functions" "^7.5.5" "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-replace-supers" "^7.5.5" "@babel/helper-split-export-declaration" "^7.4.4" "@babel/helper-function-name@^7.1.0": @@ -91,12 +91,12 @@ dependencies: "@babel/types" "^7.4.4" -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== +"@babel/helper-member-expression-to-functions@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" + integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.5.5" "@babel/helper-module-imports@^7.0.0": version "7.0.0" @@ -106,16 +106,16 @@ "@babel/types" "^7.0.0" "@babel/helper-module-transforms@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" - integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" + integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" "@babel/helper-split-export-declaration" "^7.4.4" "@babel/template" "^7.4.4" - "@babel/types" "^7.4.4" - lodash "^4.17.11" + "@babel/types" "^7.5.5" + lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.0.0": version "7.0.0" @@ -140,15 +140,15 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-replace-supers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" - integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== +"@babel/helper-replace-supers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" + integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-member-expression-to-functions" "^7.5.5" "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" "@babel/helper-simple-access@^7.1.0": version "7.1.0" @@ -175,41 +175,41 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" - integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== +"@babel/helpers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" + integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== dependencies: "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" "@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" - integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== +"@babel/parser@^7.0.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" + integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== -"@babel/plugin-proposal-class-properties@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" - integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== +"@babel/plugin-proposal-class-properties@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" + integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" + "@babel/helper-create-class-features-plugin" "^7.5.5" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-object-rest-spread@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" - integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== +"@babel/plugin-proposal-object-rest-spread@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58" + integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" @@ -221,30 +221,31 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" - integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== +"@babel/plugin-transform-async-to-generator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" + integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" -"@babel/plugin-transform-destructuring@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" - integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== +"@babel/plugin-transform-destructuring@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a" + integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-commonjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" - integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== +"@babel/plugin-transform-modules-commonjs@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" + integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== dependencies: "@babel/helper-module-transforms" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" + babel-plugin-dynamic-import-node "^2.3.0" "@babel/plugin-transform-parameters@^7.4.4": version "7.4.4" @@ -255,14 +256,14 @@ "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/register@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.4.4.tgz#370a68ba36f08f015a8b35d4864176c6b65d7a23" - integrity sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA== +"@babel/register@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.5.5.tgz#40fe0d474c8c8587b28d6ae18a03eddad3dac3c1" + integrity sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ== dependencies: core-js "^3.0.0" find-cache-dir "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.13" mkdirp "^0.5.1" pirates "^4.0.0" source-map-support "^0.5.9" @@ -276,47 +277,47 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" - integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" + integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.5.5" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/types" "^7.4.4" + "@babel/parser" "^7.5.5" + "@babel/types" "^7.5.5" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.11" + lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" - integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" + integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== dependencies: esutils "^2.0.2" - lodash "^4.17.11" + lodash "^4.17.13" to-fast-properties "^2.0.0" -"@evocateur/libnpmaccess@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.0.tgz#e546ee4e4bedca54ed9303948ec54c985cec33e4" - integrity sha512-bfrqZ0v+Il5TJBsgF2oyepeJg34K2pBItapzP+UT1QMIGpUh/Zc1pQql4jrafamZTqP3ZvdJxaElat8B5K3ICA== +"@evocateur/libnpmaccess@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" + integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== dependencies: - "@evocateur/npm-registry-fetch" "^3.9.1" + "@evocateur/npm-registry-fetch" "^4.0.0" aproba "^2.0.0" figgy-pudding "^3.5.1" get-stream "^4.0.0" npm-package-arg "^6.1.0" -"@evocateur/libnpmpublish@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.0.tgz#3e0d79fdc0a75f212adabb7c7e341b017effeac2" - integrity sha512-sezhX9FSnPIyrBBvxVocVJVO1uIWPczf6rOmUZSntCWfQMraO8pWTFlDJbroFqPbEqFFHf3eyw8NQ0Eb7OLd1g== +"@evocateur/libnpmpublish@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" + integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== dependencies: - "@evocateur/npm-registry-fetch" "^3.9.1" + "@evocateur/npm-registry-fetch" "^4.0.0" aproba "^2.0.0" figgy-pudding "^3.5.1" get-stream "^4.0.0" @@ -326,49 +327,49 @@ semver "^5.5.1" ssri "^6.0.1" -"@evocateur/npm-registry-fetch@^3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-3.9.1.tgz#75b3917320e559f6c91e26af17e62b085ec457a2" - integrity sha512-6v1bHbcAypQ+te/1RGSNL4JkK6mcMtcZrUusqo5iKRtYSAig9UJXlOaCcBR+eLywt2DQMNpEwAj24jwWDX5G/w== +"@evocateur/npm-registry-fetch@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" + integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" figgy-pudding "^3.4.1" - lru-cache "^4.1.3" - make-fetch-happen "^4.0.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" npm-package-arg "^6.1.0" safe-buffer "^5.1.2" -"@evocateur/pacote@^9.6.0": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.0.tgz#3f0d08fb81c572289a2dfa981e7f97b6dd83cef2" - integrity sha512-nKx8EPxXhzqNfePbqC6603z7Kkf6GBS2q+SNGtBS/bCgS5Q+p3OVR6MXKOkpvC3WHse98W2WLu8QaV9axtfxyw== +"@evocateur/pacote@^9.6.3": + version "9.6.3" + resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.3.tgz#bcd7adbd3c2ef303aa89bd24166f06dd9c080d89" + integrity sha512-ExqNqcbdHQprEgKnY/uQz7WRtyHRbQxRl4JnVkSkmtF8qffRrF9K+piZKNLNSkRMOT/3H0e3IP44QVCHaXMWOQ== dependencies: - "@evocateur/npm-registry-fetch" "^3.9.1" + "@evocateur/npm-registry-fetch" "^4.0.0" bluebird "^3.5.3" - cacache "^11.3.2" + cacache "^12.0.0" figgy-pudding "^3.5.1" get-stream "^4.1.0" - glob "^7.1.3" + glob "^7.1.4" lru-cache "^5.1.1" - make-fetch-happen "^4.0.1" + make-fetch-happen "^5.0.0" minimatch "^3.0.4" minipass "^2.3.5" mississippi "^3.0.0" mkdirp "^0.5.1" - normalize-package-data "^2.4.0" + normalize-package-data "^2.5.0" npm-package-arg "^6.1.0" - npm-packlist "^1.1.12" + npm-packlist "^1.4.4" npm-pick-manifest "^2.2.3" osenv "^0.1.5" promise-inflight "^1.0.1" promise-retry "^1.1.1" protoduck "^5.0.1" - rimraf "^2.6.2" - safe-buffer "^5.1.2" - semver "^5.6.0" + rimraf "^2.6.3" + safe-buffer "^5.2.0" + semver "^5.7.0" ssri "^6.0.1" - tar "^4.4.8" + tar "^4.4.10" unique-filename "^1.1.1" which "^1.3.1" @@ -391,70 +392,70 @@ normalize-path "^2.0.1" through2 "^2.0.3" -"@lerna/add@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.15.0.tgz#10be562f43cde59b60f299083d54ac39520ec60a" - integrity sha512-+KrG4GFy/6FISZ+DwWf5Fj5YB4ESa4VTnSn/ujf3VEda6dxngHPN629j+TcPbsdOxUYVah+HuZbC/B8NnkrKpQ== - dependencies: - "@evocateur/pacote" "^9.6.0" - "@lerna/bootstrap" "3.15.0" - "@lerna/command" "3.15.0" - "@lerna/filter-options" "3.14.2" - "@lerna/npm-conf" "3.13.0" +"@lerna/add@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.16.2.tgz#90ecc1be7051cfcec75496ce122f656295bd6e94" + integrity sha512-RAAaF8aODPogj2Ge9Wj3uxPFIBGpog9M+HwSuq03ZnkkO831AmasCTJDqV+GEpl1U2DvnhZQEwHpWmTT0uUeEw== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/bootstrap" "3.16.2" + "@lerna/command" "3.16.0" + "@lerna/filter-options" "3.16.0" + "@lerna/npm-conf" "3.16.0" "@lerna/validation-error" "3.13.0" dedent "^0.7.0" npm-package-arg "^6.1.0" - p-map "^1.2.0" - semver "^5.5.0" + p-map "^2.1.0" + semver "^6.2.0" -"@lerna/batch-packages@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.14.0.tgz#0208663bab3ddbf57956b370aaec4c9ebee6c800" - integrity sha512-RlBkQVNTqk1qvn6PFWiWNiskllUHh6tXbTVm43mZRNd+vhAyvrQC8RWJxH0ECVvnFAt9rSNGRIVbEJ31WnNQLg== +"@lerna/batch-packages@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.16.0.tgz#1c16cb697e7d718177db744cbcbdac4e30253c8c" + integrity sha512-7AdMkANpubY/FKFI01im01tlx6ygOBJ/0JcixMUWoWP/7Ds3SWQF22ID6fbBr38jUWptYLDs2fagtTDL7YUPuA== dependencies: - "@lerna/package-graph" "3.14.0" + "@lerna/package-graph" "3.16.0" npmlog "^4.1.2" -"@lerna/bootstrap@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.15.0.tgz#f53e0bbbbfb8367e609a06378409bfc673ff2930" - integrity sha512-4AxsPKKbgj2Ju03qDddQTpOHvpqnwd0yaiEU/aCcWv/4tDTe79NqUne2Z3+P2WZY0Zzb8+nUKcskwYBMTeq+Mw== - dependencies: - "@lerna/batch-packages" "3.14.0" - "@lerna/command" "3.15.0" - "@lerna/filter-options" "3.14.2" - "@lerna/has-npm-version" "3.14.2" - "@lerna/npm-install" "3.14.2" - "@lerna/package-graph" "3.14.0" +"@lerna/bootstrap@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.16.2.tgz#be268d940221d3c3270656b9b791b492559ad9d8" + integrity sha512-I+gs7eh6rv9Vyd+CwqL7sftRfOOsSzCle8cv/CGlMN7/p7EAVhxEdAw8SYoHIKHzipXszuqqy1Y3opyleD0qdA== + dependencies: + "@lerna/batch-packages" "3.16.0" + "@lerna/command" "3.16.0" + "@lerna/filter-options" "3.16.0" + "@lerna/has-npm-version" "3.16.0" + "@lerna/npm-install" "3.16.0" + "@lerna/package-graph" "3.16.0" "@lerna/pulse-till-done" "3.13.0" "@lerna/rimraf-dir" "3.14.2" - "@lerna/run-lifecycle" "3.14.0" - "@lerna/run-parallel-batches" "3.13.0" - "@lerna/symlink-binary" "3.14.2" - "@lerna/symlink-dependencies" "3.14.2" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-parallel-batches" "3.16.0" + "@lerna/symlink-binary" "3.16.2" + "@lerna/symlink-dependencies" "3.16.2" "@lerna/validation-error" "3.13.0" dedent "^0.7.0" - get-port "^3.2.0" - multimatch "^2.1.0" + get-port "^4.2.0" + multimatch "^3.0.0" npm-package-arg "^6.1.0" npmlog "^4.1.2" p-finally "^1.0.0" - p-map "^1.2.0" + p-map "^2.1.0" p-map-series "^1.0.0" p-waterfall "^1.0.0" read-package-tree "^5.1.6" - semver "^5.5.0" + semver "^6.2.0" -"@lerna/changed@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.15.0.tgz#20db9d992d697e4288c260aa38b989dcb93f4b40" - integrity sha512-Hns1ssI9T9xOTGVc7PT2jUaqzsSkxV3hV/Y7iFO0uKTk+fduyTwGTHU9A/ybQ/xi/9iaJbvaXyjxKiGoEnzmhg== +"@lerna/changed@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.16.4.tgz#c3e727d01453513140eee32c94b695de577dc955" + integrity sha512-NCD7XkK744T23iW0wqKEgF4R9MYmReUbyHCZKopFnsNpQdqumc3SOIvQUAkKCP6hQJmYvxvOieoVgy/CVDpZ5g== dependencies: - "@lerna/collect-updates" "3.14.2" - "@lerna/command" "3.15.0" - "@lerna/listable" "3.14.0" + "@lerna/collect-updates" "3.16.0" + "@lerna/command" "3.16.0" + "@lerna/listable" "3.16.0" "@lerna/output" "3.13.0" - "@lerna/version" "3.15.0" + "@lerna/version" "3.16.4" "@lerna/check-working-tree@3.14.2": version "3.14.2" @@ -474,17 +475,17 @@ execa "^1.0.0" strong-log-transformer "^2.0.0" -"@lerna/clean@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.15.0.tgz#a94da50908a80ba443a0a682706aca79ac2ecf27" - integrity sha512-D1BN7BnJk6YjrSR7E7RiCmWiFVWDo3L+OSe6zDq6rNNYexPBtSi2JOCeF/Dibi3jd2luVu0zkVpUtuEEdPiD+A== +"@lerna/clean@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.16.0.tgz#1c134334cacea1b1dbeacdc580e8b9240db8efa1" + integrity sha512-5P9U5Y19WmYZr7UAMGXBpY7xCRdlR7zhHy8MAPDKVx70rFIBS6nWXn5n7Kntv74g7Lm1gJ2rsiH5tj1OPcRJgg== dependencies: - "@lerna/command" "3.15.0" - "@lerna/filter-options" "3.14.2" + "@lerna/command" "3.16.0" + "@lerna/filter-options" "3.16.0" "@lerna/prompt" "3.13.0" "@lerna/pulse-till-done" "3.13.0" "@lerna/rimraf-dir" "3.14.2" - p-map "^1.2.0" + p-map "^2.1.0" p-map-series "^1.0.0" p-waterfall "^1.0.0" @@ -508,78 +509,79 @@ figgy-pudding "^3.5.1" npmlog "^4.1.2" -"@lerna/collect-updates@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.14.2.tgz#396201f6568ec5916bf2c11e7a29b0931fcd3e5b" - integrity sha512-+zSQ2ZovH8Uc0do5dR+sk8VvRJc6Xl+ZnJJGESIl17KSpEw/lVjcOyt6f3BP+WHn+iSOjMWcGvUVA601FIEdZw== +"@lerna/collect-updates@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.16.0.tgz#6db3ce8a740a4e2b972c033a63bdfb77f2553d8c" + integrity sha512-HwAIl815X2TNlmcp28zCrSdXfoZWNP7GJPEqNWYk7xDJTYLqQ+SrmKUePjb3AMGBwYAraZSEJLbHdBpJ5+cHmQ== dependencies: "@lerna/child-process" "3.14.2" "@lerna/describe-ref" "3.14.2" minimatch "^3.0.4" npmlog "^4.1.2" - slash "^1.0.0" + slash "^2.0.0" -"@lerna/command@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.15.0.tgz#e1dc1319054f1cf0b135aa0c5730f3335641a0ca" - integrity sha512-dZqr4rKFN+veuXakIQ1DcGUpzBgcWKaYFNN4O6/skOdVQaEfGefzo1sZET+q7k/BkypxkhXHXpv5UqqSuL/EHQ== +"@lerna/command@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.16.0.tgz#ba3dba49cb5ce4d11b48269cf95becd86e30773f" + integrity sha512-u7tE4GC4/gfbPA9eQg+0ulnoJ+PMoMqomx033r/IxqZrHtmJR9+pF/37S0fsxJ2hX/RMFPC7c9Q/i8NEufSpdQ== dependencies: "@lerna/child-process" "3.14.2" - "@lerna/package-graph" "3.14.0" - "@lerna/project" "3.15.0" + "@lerna/package-graph" "3.16.0" + "@lerna/project" "3.16.0" "@lerna/validation-error" "3.13.0" "@lerna/write-log-file" "3.13.0" dedent "^0.7.0" execa "^1.0.0" - is-ci "^1.0.10" - lodash "^4.17.5" + is-ci "^2.0.0" + lodash "^4.17.14" npmlog "^4.1.2" -"@lerna/conventional-commits@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.14.0.tgz#24f643550dc29d4f1249cc26d0eb453d7a1c513d" - integrity sha512-hGZ2qQZ9uEGf2eeIiIpEodSs9Qkkf/2uYEtNT7QN1RYISPUh6/lKGBssc5dpbCF64aEuxmemWLdlDf1ogG6++w== +"@lerna/conventional-commits@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.16.4.tgz#bf464f11b2f6534dad204db00430e1651b346a04" + integrity sha512-QSZJ0bC9n6FVaf+7KDIq5zMv8WnHXnwhyL5jG1Nyh3SgOg9q2uflqh7YsYB+G6FwaRfnPaKosh6obijpYg0llA== dependencies: "@lerna/validation-error" "3.13.0" conventional-changelog-angular "^5.0.3" conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^4.0.4" - fs-extra "^7.0.0" + conventional-recommended-bump "^5.0.0" + fs-extra "^8.1.0" get-stream "^4.0.0" + lodash.template "^4.5.0" npm-package-arg "^6.1.0" npmlog "^4.1.2" - pify "^3.0.0" - semver "^5.5.0" + pify "^4.0.1" + semver "^6.2.0" -"@lerna/create-symlink@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.14.0.tgz#f40ae06e8cebe70c694368ebf9a4af5ab380fbea" - integrity sha512-Kw51HYOOi6UfCKncqkgEU1k/SYueSBXgkNL91FR8HAZH7EPSRTEtp9mnJo568g0+Hog5C+3cOaWySwhHpRG29A== +"@lerna/create-symlink@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" + integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== dependencies: - cmd-shim "^2.0.2" - fs-extra "^7.0.0" + "@zkochan/cmd-shim" "^3.1.0" + fs-extra "^8.1.0" npmlog "^4.1.2" -"@lerna/create@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.15.0.tgz#27bfadcbdf71d34226aa82432293f5290f7ab1aa" - integrity sha512-doXGt0HTwTQl8GkC2tOrraA/5OWbz35hJqi7Dsl3Fl0bAxiv9XmF3LykHFJ+YTDHfGpdoJ8tKu66f/VKP16G0w== +"@lerna/create@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.16.0.tgz#4de841ec7d98b29bb19fb7d6ad982e65f7a150e8" + integrity sha512-OZApR1Iz7awutbmj4sAArwhqCyKgcrnw9rH0aWAUrkYWrD1w4TwkvAcYAsfx5GpQGbLQwoXhoyyPwPfZRRWz3Q== dependencies: - "@evocateur/pacote" "^9.6.0" + "@evocateur/pacote" "^9.6.3" "@lerna/child-process" "3.14.2" - "@lerna/command" "3.15.0" - "@lerna/npm-conf" "3.13.0" + "@lerna/command" "3.16.0" + "@lerna/npm-conf" "3.16.0" "@lerna/validation-error" "3.13.0" camelcase "^5.0.0" dedent "^0.7.0" - fs-extra "^7.0.0" - globby "^8.0.1" + fs-extra "^8.1.0" + globby "^9.2.0" init-package-json "^1.10.3" npm-package-arg "^6.1.0" p-reduce "^1.0.0" - pify "^3.0.0" - semver "^5.5.0" - slash "^1.0.0" + pify "^4.0.1" + semver "^6.2.0" + slash "^2.0.0" validate-npm-package-license "^3.0.3" validate-npm-package-name "^3.0.0" whatwg-url "^7.0.0" @@ -592,44 +594,44 @@ "@lerna/child-process" "3.14.2" npmlog "^4.1.2" -"@lerna/diff@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.15.0.tgz#573d6f58f6809d16752dcfab74c5e286b6678371" - integrity sha512-N1Pr0M554Bt+DlVoD+DXWGh92gcq6G9icn8sH5GSqfwi0XCpPNJ2i1BNEZpUQ6ulLWOMa1YHR4PypPxecRGBjA== +"@lerna/diff@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.16.0.tgz#6d09a786f9f5b343a2fdc460eb0be08a05b420aa" + integrity sha512-QUpVs5TPl8vBIne10/vyjUxanQBQQp7Lk3iaB8MnCysKr0O+oy7trWeFVDPEkBTCD177By7yPGyW5Yey1nCBbA== dependencies: "@lerna/child-process" "3.14.2" - "@lerna/command" "3.15.0" + "@lerna/command" "3.16.0" "@lerna/validation-error" "3.13.0" npmlog "^4.1.2" -"@lerna/exec@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.15.0.tgz#b31510f47255367eb0d3e4a4f7b6ef8f7e41b985" - integrity sha512-YuXPd64TNG9wbb3lRvyMARQbdlbMZ1bJZ+GCm0enivnIWUyg0qtBDcfPY2dWpIgOif04zx+K/gmOX4lCaGM4UQ== +"@lerna/exec@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.16.0.tgz#2b6c033cee46181b6eede0eb12aad5c2c0181e89" + integrity sha512-mH3O5NXf/O88jBaBBTUf+d56CUkxpg782s3Jxy7HWbVuSUULt3iMRPTh+zEXO5/555etsIVVDDyUR76meklrJA== dependencies: "@lerna/child-process" "3.14.2" - "@lerna/command" "3.15.0" - "@lerna/filter-options" "3.14.2" - "@lerna/run-topologically" "3.14.0" + "@lerna/command" "3.16.0" + "@lerna/filter-options" "3.16.0" + "@lerna/run-topologically" "3.16.0" "@lerna/validation-error" "3.13.0" - p-map "^1.2.0" + p-map "^2.1.0" -"@lerna/filter-options@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.14.2.tgz#7ba91cb54ff3fd9f4650ad8d7c40bc1075e44c2d" - integrity sha512-Ct8oYvRttbYB9JalngHhirb8o9ZVyLm5a9MpXNevXoHiu6j0vNhI19BQCwNnrL6wZvEHJnzPuUl/jO23tWxemg== +"@lerna/filter-options@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.16.0.tgz#b1660b4480c02a5c6efa4d0cd98b9afde4ed0bba" + integrity sha512-InIi1fF8+PxpCwir9bIy+pGxrdE6hvN0enIs1eNGCVS1TTE8osNgiZXa838bMQ1yaEccdcnVX6Z03BNKd56kNg== dependencies: - "@lerna/collect-updates" "3.14.2" - "@lerna/filter-packages" "3.13.0" + "@lerna/collect-updates" "3.16.0" + "@lerna/filter-packages" "3.16.0" dedent "^0.7.0" -"@lerna/filter-packages@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.13.0.tgz#f5371249e7e1a15928e5e88c544a242e0162c21c" - integrity sha512-RWiZWyGy3Mp7GRVBn//CacSnE3Kw82PxE4+H6bQ3pDUw/9atXn7NRX+gkBVQIYeKamh7HyumJtyOKq3Pp9BADQ== +"@lerna/filter-packages@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.16.0.tgz#7d34dc8530c71016263d6f67dc65308ecf11c9fc" + integrity sha512-eGFzQTx0ogkGDCnbTuXqssryR6ilp8+dcXt6B+aq1MaqL/vOJRZyqMm4TY3CUOUnzZCi9S2WWyMw3PnAJOF+kg== dependencies: "@lerna/validation-error" "3.13.0" - multimatch "^2.1.0" + multimatch "^3.0.0" npmlog "^4.1.2" "@lerna/get-npm-exec-opts@3.13.0": @@ -639,23 +641,23 @@ dependencies: npmlog "^4.1.2" -"@lerna/get-packed@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.13.0.tgz#335e40d77f3c1855aa248587d3e0b2d8f4b06e16" - integrity sha512-EgSim24sjIjqQDC57bgXD9l22/HCS93uQBbGpkzEOzxAVzEgpZVm7Fm1t8BVlRcT2P2zwGnRadIvxTbpQuDPTg== +"@lerna/get-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" + integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== dependencies: - fs-extra "^7.0.0" + fs-extra "^8.1.0" ssri "^6.0.1" tar "^4.4.8" -"@lerna/github-client@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.14.2.tgz#a743792b51cd9bdfb785186e429568827a6372eb" - integrity sha512-+2Xh7t4qVmXiXE2utPnh5T7YwSltG74JP7c+EiooRY5+3zjh9MpPOcTKxVY3xKclzpsyXMohk2KpTF4tzA5rrg== +"@lerna/github-client@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.0.tgz#619874e461641d4f59ab1b3f1a7ba22dba88125d" + integrity sha512-IVJjcKjkYaUEPJsDyAblHGEFFNKCRyMagbIDm14L7Ab94ccN6i4TKOqAFEJn2SJHYvKKBdp3Zj2zNlASOMe3DA== dependencies: "@lerna/child-process" "3.14.2" - "@octokit/plugin-enterprise-rest" "^2.1.1" - "@octokit/rest" "^16.16.0" + "@octokit/plugin-enterprise-rest" "^3.6.1" + "@octokit/rest" "^16.28.4" git-url-parse "^11.1.2" npmlog "^4.1.2" @@ -673,124 +675,124 @@ resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== -"@lerna/has-npm-version@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.14.2.tgz#ac17f7c68e92114b8332b95ae6cffec9c0d67a7b" - integrity sha512-cG+z5bB8JPd5f+nT2eLN2LmKg06O11AxlnUxgw2W7cLyc7cnsmMSp/rxt2JBMwW2r4Yn+CLLJIRwJZ2Es8jFSw== +"@lerna/has-npm-version@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.0.tgz#55764a4ce792f0c8553cf996a17f554b9e843288" + integrity sha512-TIY036dA9J8OyTrZq9J+it2DVKifL65k7hK8HhkUPpitJkw6jwbMObA/8D40LOGgWNPweJWqmlrTbRSwsR7DrQ== dependencies: "@lerna/child-process" "3.14.2" - semver "^5.5.0" + semver "^6.2.0" -"@lerna/import@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.15.0.tgz#47f2da52059a96bb08a4c09e18d985258fce9ce1" - integrity sha512-4GKQgeTXBTwMbZNkYyPdQIVA41HIISD7D6XRNrDaG0falUfvoPsknijQPCBmGqeh66u1Fcn2+4lkL3OCTj2FMg== +"@lerna/import@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.16.0.tgz#b57cb453f4acfc60f6541fcbba10674055cb179d" + integrity sha512-trsOmGHzw0rL/f8BLNvd+9PjoTkXq2Dt4/V2UCha254hMQaYutbxcYu8iKPxz9x86jSPlH7FpbTkkHXDsoY7Yg== dependencies: "@lerna/child-process" "3.14.2" - "@lerna/command" "3.15.0" + "@lerna/command" "3.16.0" "@lerna/prompt" "3.13.0" "@lerna/pulse-till-done" "3.13.0" "@lerna/validation-error" "3.13.0" dedent "^0.7.0" - fs-extra "^7.0.0" + fs-extra "^8.1.0" p-map-series "^1.0.0" -"@lerna/init@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.15.0.tgz#bda36de44c365972f87cbd287fe85b6fb7bb1070" - integrity sha512-VOqH6kFbFtfUbXxhSqXKY6bjnVp9nLuLRI6x9tVHOANX2LmSlXm17OUGBnNt+eM4uJLuiUsAR8nTlpCiz//lPQ== +"@lerna/init@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.16.0.tgz#31e0d66bbededee603338b487a42674a072b7a7d" + integrity sha512-Ybol/x5xMtBgokx4j7/Y3u0ZmNh0NiSWzBFVaOs2NOJKvuqrWimF67DKVz7yYtTYEjtaMdug64ohFF4jcT/iag== dependencies: "@lerna/child-process" "3.14.2" - "@lerna/command" "3.15.0" - fs-extra "^7.0.0" - p-map "^1.2.0" - write-json-file "^2.3.0" - -"@lerna/link@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.15.0.tgz#718b4116a8eacb3fc73414ae8d97f8fdaf8125da" - integrity sha512-yKHuifADINobvDOLljBGkVGpVwy6J3mg5p9lQXBdOLXBoIKC8o/UKBR9JvZMFvT/Iy6zn6FPy1v5lz9iU1Ib0Q== - dependencies: - "@lerna/command" "3.15.0" - "@lerna/package-graph" "3.14.0" - "@lerna/symlink-dependencies" "3.14.2" - p-map "^1.2.0" - slash "^1.0.0" - -"@lerna/list@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.15.0.tgz#4e401c1ad990bb12bd38298cb61d21136420ff68" - integrity sha512-8SvxnlfAnbEzQDf2NL0IxWyUuqWTykF9cHt5/f5TOzgESClpaOkDtqwh/UlE8nVTzWMnxnQUPQi3UTKyJD3i3g== - dependencies: - "@lerna/command" "3.15.0" - "@lerna/filter-options" "3.14.2" - "@lerna/listable" "3.14.0" + "@lerna/command" "3.16.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + write-json-file "^3.2.0" + +"@lerna/link@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.16.2.tgz#6c3a5658f6448a64dddca93d9348ac756776f6f6" + integrity sha512-eCPg5Lo8HT525fIivNoYF3vWghO3UgEVFdbsiPmhzwI7IQyZro5HWYzLtywSAdEog5XZpd2Bbn0CsoHWBB3gww== + dependencies: + "@lerna/command" "3.16.0" + "@lerna/package-graph" "3.16.0" + "@lerna/symlink-dependencies" "3.16.2" + p-map "^2.1.0" + slash "^2.0.0" + +"@lerna/list@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.16.0.tgz#883c00b2baf1e03c93e54391372f67a01b773c2f" + integrity sha512-TkvstoPsgKqqQ0KfRumpsdMXfRSEhdXqOLq519XyI5IRWYxhoqXqfi8gG37UoBPhBNoe64japn5OjphF3rOmQA== + dependencies: + "@lerna/command" "3.16.0" + "@lerna/filter-options" "3.16.0" + "@lerna/listable" "3.16.0" "@lerna/output" "3.13.0" -"@lerna/listable@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.14.0.tgz#08f4c78e0466568e8e8a57d4ad09537f2bb7bbb9" - integrity sha512-ZK44Mo8xf/N97eQZ236SPSq0ek6+gk4HqHIx05foEMZVV1iIDH4a/nblLsJNjGQVsIdMYFPaqNJ0z+ZQfiJazQ== +"@lerna/listable@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.16.0.tgz#e6dc47a2d5a6295222663486f50e5cffc580f043" + integrity sha512-mtdAT2EEECqrJSDm/aXlOUFr1MRE4p6hppzY//Klp05CogQy6uGaKk+iKG5yyCLaOXFFZvG4HfO11CmoGSDWzw== dependencies: - "@lerna/query-graph" "3.14.0" + "@lerna/query-graph" "3.16.0" chalk "^2.3.1" columnify "^1.5.4" -"@lerna/log-packed@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.13.0.tgz#497b5f692a8d0e3f669125da97b0dadfd9e480f3" - integrity sha512-Rmjrcz+6aM6AEcEVWmurbo8+AnHOvYtDpoeMMJh9IZ9SmZr2ClXzmD7wSvjTQc8BwOaiWjjC/ukcT0UYA2m7wg== +"@lerna/log-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" + integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== dependencies: - byte-size "^4.0.3" + byte-size "^5.0.1" columnify "^1.5.4" has-unicode "^2.0.1" npmlog "^4.1.2" -"@lerna/npm-conf@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.13.0.tgz#6b434ed75ff757e8c14381b9bbfe5d5ddec134a7" - integrity sha512-Jg2kANsGnhg+fbPEzE0X9nX5oviEAvWj0nYyOkcE+cgWuT7W0zpnPXC4hA4C5IPQGhwhhh0IxhWNNHtjTuw53g== +"@lerna/npm-conf@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" + integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== dependencies: config-chain "^1.1.11" - pify "^3.0.0" + pify "^4.0.1" -"@lerna/npm-dist-tag@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.15.0.tgz#262dd1e67a4cf82ae78fadfe02622ebce4add078" - integrity sha512-lnbdwc4Ebs7/EI9fTIgbH3dxXnP+SuCcGhG7P5ZjOqo67SY09sRZGcygEzabpvIwXvKpBF8vCd4xxzjnF2u+PA== +"@lerna/npm-dist-tag@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.16.0.tgz#b2184cee5e1f291277396854820e1117a544b7ee" + integrity sha512-MQrBkqJJB9+eNphuj9w90QPMOs4NQXMuSRk9NqzeFunOmdDopPCV0Q7IThSxEuWnhJ2n3B7G0vWUP7tNMPdqIQ== dependencies: - "@evocateur/npm-registry-fetch" "^3.9.1" - "@lerna/otplease" "3.14.0" + "@evocateur/npm-registry-fetch" "^4.0.0" + "@lerna/otplease" "3.16.0" figgy-pudding "^3.5.1" npm-package-arg "^6.1.0" npmlog "^4.1.2" -"@lerna/npm-install@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.14.2.tgz#fd22ff432f8b7cbe05bedfd36b0506482f1a4732" - integrity sha512-JYJJRtLETrGpcQZa8Rj16vbye399RqnaXmJlZuZ2twjJ2DYVYtwkfsGEOdvdaKw5KVOEpWcAxBA9OMmKQtCLQw== +"@lerna/npm-install@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.0.tgz#8ec76a7a13b183bde438fd46296bf7a0d6f86017" + integrity sha512-APUOIilZCzDzce92uLEwzt1r7AEMKT/hWA1ThGJL+PO9Rn8A95Km3o2XZAYG4W0hR+P4O2nSVuKbsjQtz8CjFQ== dependencies: "@lerna/child-process" "3.14.2" "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^7.0.0" + fs-extra "^8.1.0" npm-package-arg "^6.1.0" npmlog "^4.1.2" signal-exit "^3.0.2" write-pkg "^3.1.0" -"@lerna/npm-publish@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.15.0.tgz#89126d74ec97186475767b852954a5f55b732a71" - integrity sha512-G7rcNcSGjG0La8eHPXDvCvoNXbwNnP6XJ+GPh3CH5xiR/nikfLOa+Bfm4ytdjVWWxnKfCT4qyMTCoV1rROlqQQ== +"@lerna/npm-publish@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.16.2.tgz#a850b54739446c4aa766a0ceabfa9283bb0be676" + integrity sha512-tGMb9vfTxP57vUV5svkBQxd5Tzc+imZbu9ZYf8Mtwe0+HYfDjNiiHLIQw7G95w4YRdc5KsCE8sQ0uSj+f2soIg== dependencies: - "@evocateur/libnpmpublish" "^1.2.0" - "@lerna/otplease" "3.14.0" - "@lerna/run-lifecycle" "3.14.0" + "@evocateur/libnpmpublish" "^1.2.2" + "@lerna/otplease" "3.16.0" + "@lerna/run-lifecycle" "3.16.2" figgy-pudding "^3.5.1" - fs-extra "^7.0.0" + fs-extra "^8.1.0" npm-package-arg "^6.1.0" npmlog "^4.1.2" - pify "^3.0.0" + pify "^4.0.1" read-package-json "^2.0.13" "@lerna/npm-run-script@3.14.2": @@ -802,10 +804,10 @@ "@lerna/get-npm-exec-opts" "3.13.0" npmlog "^4.1.2" -"@lerna/otplease@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.14.0.tgz#b539fd3e7a08452fc0db3b10010ca3cf0e4a73e7" - integrity sha512-rYAWzaYZ81bwnrmTkYWGgcc13bl/6DlG7pjWQWNGAJNLzO5zzj0xmXN5sMFJnNvDpSiS/ZS1sIuPvb4xnwLUkg== +"@lerna/otplease@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.16.0.tgz#de66aec4f3e835a465d7bea84b58a4ab6590a0fa" + integrity sha512-uqZ15wYOHC+/V0WnD2iTLXARjvx3vNrpiIeyIvVlDB7rWse9mL4egex/QSgZ+lDx1OID7l2kgvcUD9cFpbqB7Q== dependencies: "@lerna/prompt" "3.13.0" figgy-pudding "^3.5.1" @@ -817,64 +819,64 @@ dependencies: npmlog "^4.1.2" -"@lerna/pack-directory@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.14.2.tgz#577b8ebf867c9b636a2e4659a27552ee24d83b9d" - integrity sha512-b3LnJEmIml3sDj94TQT8R+kVyrDlmE7Su0WwcBYZDySXPMSZ38WA2/2Xjy/EWhXlFxp/nUJKyUG78nDrZ/00Uw== +"@lerna/pack-directory@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" + integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== dependencies: - "@lerna/get-packed" "3.13.0" - "@lerna/package" "3.14.2" - "@lerna/run-lifecycle" "3.14.0" + "@lerna/get-packed" "3.16.0" + "@lerna/package" "3.16.0" + "@lerna/run-lifecycle" "3.16.2" figgy-pudding "^3.5.1" - npm-packlist "^1.4.1" + npm-packlist "^1.4.4" npmlog "^4.1.2" - tar "^4.4.8" + tar "^4.4.10" temp-write "^3.4.0" -"@lerna/package-graph@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.14.0.tgz#4ccdf446dccedfbbeb4efff3eb720cb6fcb109fc" - integrity sha512-dNpA/64STD5YXhaSlg4gT6Z474WPJVCHoX1ibsVIFu0fVgH609Y69bsdmbvTRdI7r6Dcu4ZfGxdR636RTrH+Eg== +"@lerna/package-graph@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.16.0.tgz#909c90fb41e02f2c19387342d2a5eefc36d56836" + integrity sha512-A2mum/gNbv7zCtAwJqoxzqv89As73OQNK2MgSX1SHWya46qoxO9a9Z2c5lOFQ8UFN5ZxqWMfFYXRCz7qzwmFXw== dependencies: - "@lerna/prerelease-id-from-version" "3.14.0" + "@lerna/prerelease-id-from-version" "3.16.0" "@lerna/validation-error" "3.13.0" npm-package-arg "^6.1.0" npmlog "^4.1.2" - semver "^5.5.0" + semver "^6.2.0" -"@lerna/package@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.14.2.tgz#f893cb42e26c869df272dafbe1dd5a3473b0bd4d" - integrity sha512-YR/+CzYdufJYfsUlrfuhTjA35iSZpXK7mVOZmeR9iRWhSaqesm4kq2zfxm9vCpZV2oAQQZOwi4eo5h0rQBtdiw== +"@lerna/package@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" + integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== dependencies: - load-json-file "^4.0.0" + load-json-file "^5.3.0" npm-package-arg "^6.1.0" write-pkg "^3.1.0" -"@lerna/prerelease-id-from-version@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.14.0.tgz#d5da9c26ac4a0d0ecde09018f06e41ca4dd444c2" - integrity sha512-Ap3Z/dNhqQuSrKmK+JmzYvQYI2vowxHvUVxZJiDVilW8dyNnxkCsYFmkuZytk5sxVz4VeGLNPS2RSsU5eeSS+Q== +"@lerna/prerelease-id-from-version@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" + integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== dependencies: - semver "^5.5.0" + semver "^6.2.0" -"@lerna/project@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.15.0.tgz#733b0993a849dcf5b68fcd0ec11d8f7de38a6999" - integrity sha512-eNGUWiMbQ9kh9kGkomtMnsLypS0rfLqxKgZP2+VnNVtIXjnLv4paeTm+1lkL+naNJUwhnpMk2NSLEeoxT/20QA== +"@lerna/project@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.16.0.tgz#2469a4e346e623fd922f38f5a12931dfb8f2a946" + integrity sha512-NrKcKK1EqXqhrGvslz6Q36+ZHuK3zlDhGdghRqnxDcHxMPT01NgLcmsnymmQ+gjMljuLRmvKYYCuHrknzX8VrA== dependencies: - "@lerna/package" "3.14.2" + "@lerna/package" "3.16.0" "@lerna/validation-error" "3.13.0" cosmiconfig "^5.1.0" dedent "^0.7.0" dot-prop "^4.2.0" - glob-parent "^3.1.0" - globby "^8.0.1" - load-json-file "^4.0.0" + glob-parent "^5.0.0" + globby "^9.2.0" + load-json-file "^5.3.0" npmlog "^4.1.2" - p-map "^1.2.0" + p-map "^2.1.0" resolve-from "^4.0.0" - write-json-file "^2.3.0" + write-json-file "^3.2.0" "@lerna/prompt@3.13.0": version "3.13.0" @@ -884,40 +886,41 @@ inquirer "^6.2.0" npmlog "^4.1.2" -"@lerna/publish@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.15.0.tgz#54f93f8f0820d2d419d0b65df1eb55d8277090c9" - integrity sha512-6tRRBJ8olLSXfrUsR4f7vSfx0cT1oPi6/v06yI3afDSsUX6eQ3ooZh7gMY4RWmd+nM/IJHTUzhlKF6WhTvo+9g== +"@lerna/publish@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.16.4.tgz#4cd55d8be9943d9a68e316e930a90cda8590500e" + integrity sha512-XZY+gRuF7/v6PDQwl7lvZaGWs8CnX6WIPIu+OCcyFPSL/rdWegdN7HieKBHskgX798qRQc2GrveaY7bNoTKXAw== dependencies: - "@evocateur/libnpmaccess" "^3.1.0" - "@evocateur/npm-registry-fetch" "^3.9.1" - "@evocateur/pacote" "^9.6.0" + "@evocateur/libnpmaccess" "^3.1.2" + "@evocateur/npm-registry-fetch" "^4.0.0" + "@evocateur/pacote" "^9.6.3" "@lerna/check-working-tree" "3.14.2" "@lerna/child-process" "3.14.2" - "@lerna/collect-updates" "3.14.2" - "@lerna/command" "3.15.0" + "@lerna/collect-updates" "3.16.0" + "@lerna/command" "3.16.0" "@lerna/describe-ref" "3.14.2" - "@lerna/log-packed" "3.13.0" - "@lerna/npm-conf" "3.13.0" - "@lerna/npm-dist-tag" "3.15.0" - "@lerna/npm-publish" "3.15.0" + "@lerna/log-packed" "3.16.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/npm-dist-tag" "3.16.0" + "@lerna/npm-publish" "3.16.2" + "@lerna/otplease" "3.16.0" "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.14.2" - "@lerna/prerelease-id-from-version" "3.14.0" + "@lerna/pack-directory" "3.16.4" + "@lerna/prerelease-id-from-version" "3.16.0" "@lerna/prompt" "3.13.0" "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.14.0" - "@lerna/run-topologically" "3.14.0" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.16.0" "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.15.0" + "@lerna/version" "3.16.4" figgy-pudding "^3.5.1" - fs-extra "^7.0.0" + fs-extra "^8.1.0" npm-package-arg "^6.1.0" npmlog "^4.1.2" p-finally "^1.0.0" - p-map "^1.2.0" + p-map "^2.1.0" p-pipe "^1.2.0" - semver "^5.5.0" + semver "^6.2.0" "@lerna/pulse-till-done@3.13.0": version "3.13.0" @@ -926,20 +929,20 @@ dependencies: npmlog "^4.1.2" -"@lerna/query-graph@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.14.0.tgz#2abb36f445bd924d0f85ac7aec1445e9ef1e2c6c" - integrity sha512-6YTh3vDMW2hUxHdKeRvx4bosc9lZClKaN+DzC1XKTkwDbWrsjmEzLcemKL6QnyyeuryN2f/eto7P9iSe3z3pQQ== +"@lerna/query-graph@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.16.0.tgz#e6a46ebcd9d5b03f018a06eca2b471735353953c" + integrity sha512-p0RO+xmHDO95ChJdWkcy9TNLysLkoDARXeRHzY5U54VCwl3Ot/2q8fMCVlA5UeGXDutEyyByl3URqEpcQCWI7Q== dependencies: - "@lerna/package-graph" "3.14.0" + "@lerna/package-graph" "3.16.0" figgy-pudding "^3.5.1" -"@lerna/resolve-symlink@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.13.0.tgz#3e6809ef53b63fe914814bfa071cd68012e22fbb" - integrity sha512-Lc0USSFxwDxUs5JvIisS8JegjA6SHSAWJCMvi2osZx6wVRkEDlWG2B1JAfXUzCMNfHoZX0/XX9iYZ+4JIpjAtg== +"@lerna/resolve-symlink@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" + integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== dependencies: - fs-extra "^7.0.0" + fs-extra "^8.1.0" npmlog "^4.1.2" read-cmd-shim "^1.0.1" @@ -953,68 +956,68 @@ path-exists "^3.0.0" rimraf "^2.6.2" -"@lerna/run-lifecycle@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.14.0.tgz#0499eca0e7f393faf4e24e6c8737302a9059c22b" - integrity sha512-GUM3L9MzGRSW0WQ8wbLW1+SYStU1OFjW0GBzShhBnFrO4nGRrU7VchsLpcLu0hk2uCzyhsrDKzifEdOdUyMoEQ== +"@lerna/run-lifecycle@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" + integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== dependencies: - "@lerna/npm-conf" "3.13.0" + "@lerna/npm-conf" "3.16.0" figgy-pudding "^3.5.1" - npm-lifecycle "^2.1.1" + npm-lifecycle "^3.1.2" npmlog "^4.1.2" -"@lerna/run-parallel-batches@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.13.0.tgz#0276bb4e7cd0995297db82d134ca2bd08d63e311" - integrity sha512-bICFBR+cYVF1FFW+Tlm0EhWDioTUTM6dOiVziDEGE1UZha1dFkMYqzqdSf4bQzfLS31UW/KBd/2z8jy2OIjEjg== +"@lerna/run-parallel-batches@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.16.0.tgz#5ace7911a2dd31dfd1e53c61356034e27df0e1fb" + integrity sha512-2J/Nyv+MvogmQEfC7VcS21ifk7w0HVvzo2yOZRPvkCzGRu/rducxtB4RTcr58XCZ8h/Bt1aqQYKExu3c/3GXwg== dependencies: - p-map "^1.2.0" + p-map "^2.1.0" p-map-series "^1.0.0" -"@lerna/run-topologically@3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.14.0.tgz#2a560cb657f0ef1565c680b6001b4b01b872dc07" - integrity sha512-y+KBpC1YExFzGynovt9MY4O/bc3RrJaKeuXieiPfKGKxrdtmZe/r33oj/xePTXZq65jnw3SaU3H8S5CrrdkwDg== +"@lerna/run-topologically@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.16.0.tgz#39e29cfc628bbc8e736d8e0d0e984997ac01bbf5" + integrity sha512-4Hlpv4zDtKWa5Z0tPkeu0sK+bxZEKgkNESMGmWrUCNfj7xwvAJurcraK8+a2Y0TFYwf0qjSLY/MzX+ZbJA3Cgw== dependencies: - "@lerna/query-graph" "3.14.0" + "@lerna/query-graph" "3.16.0" figgy-pudding "^3.5.1" p-queue "^4.0.0" -"@lerna/run@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.15.0.tgz#465028b5b561a050bd760924e4a0749de3f43172" - integrity sha512-KQBkzZYoEKmzILKjbjsm1KKVWFBXwAdwzqJWj/lfxxd3V5LRF8STASk8aiw8bSpB0bUL9TU/pbXakRxiNzjDwQ== +"@lerna/run@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.16.0.tgz#1ea568c6f303e47fa00b3403a457836d40738fd2" + integrity sha512-woTeLlB1OAAz4zzjdI6RyIxSGuxiUPHJZm89E1pDEPoWwtQV6HMdMgrsQd9ATsJ5Ez280HH4bF/LStAlqW8Ufg== dependencies: - "@lerna/command" "3.15.0" - "@lerna/filter-options" "3.14.2" + "@lerna/command" "3.16.0" + "@lerna/filter-options" "3.16.0" "@lerna/npm-run-script" "3.14.2" "@lerna/output" "3.13.0" - "@lerna/run-topologically" "3.14.0" + "@lerna/run-topologically" "3.16.0" "@lerna/timer" "3.13.0" "@lerna/validation-error" "3.13.0" - p-map "^1.2.0" - -"@lerna/symlink-binary@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.14.2.tgz#a832fdc6c4b1e5aaf9e6ac9c7e6c322746965eb0" - integrity sha512-tqMwuWi6z1da0AFFbleWyu3H9fqayiV50rjj4anFTfayel9jSjlA1xPG+56sGIP6zUUNuUSc9kLh7oRRmlauoA== - dependencies: - "@lerna/create-symlink" "3.14.0" - "@lerna/package" "3.14.2" - fs-extra "^7.0.0" - p-map "^1.2.0" - -"@lerna/symlink-dependencies@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.14.2.tgz#e6b2a9544ff26addc1f4324734595e2f71dfc795" - integrity sha512-Ox7WKXnHZ7IwWlejcCq3n0Hd/yMLv8AwIryhvWxM/RauAge+ML4wg578SsdCyKob8ecgm/R0ytHiU06j81iL1w== - dependencies: - "@lerna/create-symlink" "3.14.0" - "@lerna/resolve-symlink" "3.13.0" - "@lerna/symlink-binary" "3.14.2" - fs-extra "^7.0.0" + p-map "^2.1.0" + +"@lerna/symlink-binary@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.16.2.tgz#f98a3d9da9e56f1d302dc0d5c2efeb951483ee66" + integrity sha512-kz9XVoFOGSF83gg4gBqH+mG6uxfJfTp8Uy+Cam40CvMiuzfODrGkjuBEFoM/uO2QOAwZvbQDYOBpKUa9ZxHS1Q== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/package" "3.16.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + +"@lerna/symlink-dependencies@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.16.2.tgz#91d9909d35897aebd76a03644a00cd03c4128240" + integrity sha512-wnZqGJQ+Jvr1I3inxrkffrFZfmQI7Ta8gySw/UWCy95QtZWF/f5yk8zVIocCAsjzD0wgb3jJE3CFJ9W5iwWk1A== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/resolve-symlink" "3.16.0" + "@lerna/symlink-binary" "3.16.2" + fs-extra "^8.1.0" p-finally "^1.0.0" - p-map "^1.2.0" + p-map "^2.1.0" p-map-series "^1.0.0" "@lerna/timer@3.13.0": @@ -1029,34 +1032,34 @@ dependencies: npmlog "^4.1.2" -"@lerna/version@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.15.0.tgz#3c65d223d94f211312995266abb07ee6606d5f73" - integrity sha512-vReYX1NMXZ9PwzTZm97wAl/k3bmRnRZhnQi3mq/m49xTnDavq7p4sbUdFpvu8cVZNKnYS02pNIVGHrQw+K8ZCw== +"@lerna/version@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.16.4.tgz#b5cc37f3ad98358d599c6196c30b6efc396d42bf" + integrity sha512-ikhbMeIn5ljCtWTlHDzO4YvTmpGTX1lWFFIZ79Vd1TNyOr+OUuKLo/+p06mCl2WEdZu0W2s5E9oxfAAQbyDxEg== dependencies: "@lerna/check-working-tree" "3.14.2" "@lerna/child-process" "3.14.2" - "@lerna/collect-updates" "3.14.2" - "@lerna/command" "3.15.0" - "@lerna/conventional-commits" "3.14.0" - "@lerna/github-client" "3.14.2" + "@lerna/collect-updates" "3.16.0" + "@lerna/command" "3.16.0" + "@lerna/conventional-commits" "3.16.4" + "@lerna/github-client" "3.16.0" "@lerna/gitlab-client" "3.15.0" "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.14.0" + "@lerna/prerelease-id-from-version" "3.16.0" "@lerna/prompt" "3.13.0" - "@lerna/run-lifecycle" "3.14.0" - "@lerna/run-topologically" "3.14.0" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.16.0" "@lerna/validation-error" "3.13.0" chalk "^2.3.1" dedent "^0.7.0" minimatch "^3.0.4" npmlog "^4.1.2" - p-map "^1.2.0" + p-map "^2.1.0" p-pipe "^1.2.0" p-reduce "^1.0.0" p-waterfall "^1.0.0" - semver "^5.5.0" - slash "^1.0.0" + semver "^6.2.0" + slash "^2.0.0" temp-write "^3.4.0" "@lerna/write-log-file@3.13.0": @@ -1081,19 +1084,19 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@octokit/endpoint@^5.1.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.2.0.tgz#acd569cb7152549998454aa5658532eb24a0987e" - integrity sha512-g4r1MKr8GJ8qubJQp3HP3JrxDY+ZeVqjYBTgtu1lPEDLhfQDY6rOhyZOoHKOw+gaIF6aAcmuvPPNZUro2OwmOg== + version "5.3.2" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.3.2.tgz#2deda2d869cac9ba7f370287d55667be2a808d4b" + integrity sha512-gRjteEM9I6f4D8vtwU2iGUTn9RX/AJ0SVXiqBUEuYEWVGGAVjSXdT0oNmghH5lvQNWs8mwt6ZaultuG6yXivNw== dependencies: - deepmerge "3.3.0" + deepmerge "4.0.0" is-plain-object "^3.0.0" - universal-user-agent "^2.1.0" + universal-user-agent "^3.0.0" url-template "^2.0.8" -"@octokit/plugin-enterprise-rest@^2.1.1": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.2.2.tgz#c0e22067a043e19f96ff9c7832e2a3019f9be75c" - integrity sha512-CTZr64jZYhGWNTDGlSJ2mvIlFsm9OEO3LqWn9I/gmoHI4jRBp4kpHoFYNemG4oA75zUAcmbuWblb7jjP877YZw== +"@octokit/plugin-enterprise-rest@^3.6.1": + version "3.6.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" + integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== "@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": version "1.0.4" @@ -1103,10 +1106,10 @@ deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^4.0.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-4.1.1.tgz#614262214f48417b4d3b14e047d09a9c8e2f7a09" - integrity sha512-LOyL0i3oxRo418EXRSJNk/3Q4I0/NKawTn6H/CQp+wnrG1UFLGu080gSsgnWobhPo5BpUNgSQ5BRk5FOOJhD1Q== +"@octokit/request@^5.0.0": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.0.2.tgz#59a920451f24811c016ddc507adcc41aafb2dca5" + integrity sha512-z1BQr43g4kOL4ZrIVBMHwi68Yg9VbkRUyuAgqCp1rU3vbYa69+2gIld/+gHclw15bJWQnhqqyEb7h5a5EqgZ0A== dependencies: "@octokit/endpoint" "^5.1.0" "@octokit/request-error" "^1.0.1" @@ -1114,17 +1117,17 @@ is-plain-object "^3.0.0" node-fetch "^2.3.0" once "^1.4.0" - universal-user-agent "^2.1.0" + universal-user-agent "^3.0.0" -"@octokit/rest@^16.16.0": - version "16.28.2" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.28.2.tgz#3fc3b8700046ab29ab1e2a4bdf49f89e94f7ba27" - integrity sha512-csuYiHvJ1P/GFDadVn0QhwO83R1+YREjcwCY7ZIezB6aJTRIEidJZj+R7gAkUhT687cqYb4cXTZsDVu9F+Fmug== +"@octokit/rest@^16.28.4": + version "16.28.7" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.28.7.tgz#a2c2db5b318da84144beba82d19c1a9dbdb1a1fa" + integrity sha512-cznFSLEhh22XD3XeqJw51OLSfyL2fcFKUO+v2Ep9MTAFfFLS1cK1Zwd1yEgQJmJoDnj4/vv3+fGGZweG+xsbIA== dependencies: - "@octokit/request" "^4.0.1" + "@octokit/request" "^5.0.0" "@octokit/request-error" "^1.0.2" atob-lite "^2.0.0" - before-after-hook "^1.4.0" + before-after-hook "^2.0.0" btoa-lite "^1.0.0" deprecation "^2.0.0" lodash.get "^4.4.2" @@ -1132,7 +1135,7 @@ lodash.uniq "^4.5.0" octokit-pagination-methods "^1.1.0" once "^1.4.0" - universal-user-agent "^2.0.0" + universal-user-agent "^3.0.0" url-template "^2.0.8" "@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.4.0": @@ -1142,7 +1145,7 @@ dependencies: type-detect "4.0.8" -"@sinonjs/formatio@^3.1.0", "@sinonjs/formatio@^3.2.1": +"@sinonjs/formatio@^3.2.1": version "3.2.1" resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e" integrity sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ== @@ -1150,7 +1153,7 @@ "@sinonjs/commons" "^1" "@sinonjs/samsam" "^3.1.0" -"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.1": +"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.2.tgz#63942e3d5eb0b79f6de3bef9abfad15fb4b6401b" integrity sha512-ILO/rR8LfAb60Y1Yfp9vxfYAASK43NFC2mLzpvLUbCQY/Qu8YwReboseu8aheCEkyElZF2L2T9mHcR2bgdvZyA== @@ -1164,10 +1167,29 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + "@types/node@*": - version "12.0.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" - integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ== + version "12.7.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.0.tgz#545dde2a1a5c27d281cfb8308d6736e0708f5d6c" + integrity sha512-vqcj1MVm2Sla4PpMfYKh1MyDN4D2f/mPIZD7RdAGqEsbE+JxfeqQHHVbRDQ0Nqn8i73gJa1HQ1Pu3+nH4Q0Yiw== "@webassemblyjs/ast@1.8.5": version "1.8.5" @@ -1325,6 +1347,15 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +"@zkochan/cmd-shim@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" + integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== + dependencies: + is-windows "^1.0.0" + mkdirp-promise "^5.0.1" + mz "^2.5.0" + JSONStream@^1.0.4, JSONStream@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -1351,11 +1382,6 @@ accepts@^1.3.5, accepts@^1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - acorn-globals@^1.0.4: version "1.0.9" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" @@ -1378,12 +1404,12 @@ acorn@^2.1.0, acorn@^2.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc= -acorn@^6.0.5, acorn@^6.0.7: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +acorn@^6.0.7, acorn@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" + integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== -agent-base@4, agent-base@^4.1.0: +agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== @@ -1409,15 +1435,15 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" - integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.5.5, ajv@^6.9.1: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -1436,10 +1462,10 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" -ansi-colors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.0.1.tgz#3dc29301836c6152f617a71466bde162a2e42582" - integrity sha512-1Qs1jdXEMSYwcVooLRfnCc5+e3365pw38v4AVkSsCxsjXRGKDTem5VLCl53SpHSpLnEy8O5DofJHZJELaRiJbg== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-cyan@^0.1.1: version "0.1.1" @@ -1627,6 +1653,11 @@ array-differ@^1.0.0: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= +array-differ@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== + array-each@^1.0.0, array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" @@ -1689,7 +1720,7 @@ array-sort@^1.0.0: get-value "^2.0.6" kind-of "^5.0.2" -array-union@^1.0.1: +array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= @@ -1701,17 +1732,12 @@ array-uniq@^1.0.1, array-uniq@^1.0.2: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arrify@^1.0.0, arrify@^1.0.1: +arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= @@ -1781,9 +1807,9 @@ async-each@^1.0.1: integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async-limiter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async-settle@^1.0.0: version "1.0.0" @@ -1954,9 +1980,9 @@ balanced-match@^1.0.0: integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== base@^0.11.1: version "0.11.2" @@ -1983,10 +2009,10 @@ beeper@^1.0.0: resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" integrity sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak= -before-after-hook@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.4.0.tgz#2b6bf23dca4f32e628fd2747c10a37c74a4b484d" - integrity sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg== +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== big-integer@^1.6.7: version "1.6.44" @@ -2074,6 +2100,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -2150,10 +2183,10 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -bryt@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bryt/-/bryt-1.0.0.tgz#fd883a1c496c95323bcd06164395705417b1239c" - integrity sha512-/nhjJl363E6mi4uNqY8AKnVPU7TAady2NEMADJ02vdcaog6YZGAQ/gNO6KXyujjSy1YNLSgc6ikU8nghD7J4hA== +bryt@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bryt/-/bryt-1.0.1.tgz#1f349604894e7858ecdc29b1439ca9019d9beb2b" + integrity sha512-8q5DgK7LK0NP1I5HTlAjcJzrFFPedJqhaqAU8pr1afG/LKbUwhmoLTbxL0Xd0hCEiofXyQn3CwlcmwF4MKEDdg== dependencies: brotli "^1.3.2" @@ -2211,26 +2244,27 @@ byline@^5.0.0: resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= -byte-size@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.4.tgz#29d381709f41aae0d89c631f1c81aec88cd40b23" - integrity sha512-82RPeneC6nqCdSwCX2hZUz3JPOvN5at/nTEw/CMf05Smu3Hrpo9Psb7LjN+k+XndNArG1EY8L4+BM3aTM4BCvw== +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^11.0.1, cacache@^11.3.2: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== +cacache@^12.0.0, cacache@^12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" + integrity sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg== dependencies: bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" glob "^7.1.4" graceful-fs "^4.1.15" + infer-owner "^1.0.3" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" @@ -2380,7 +2414,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2466,21 +2500,21 @@ chokidar@^2.0.0, chokidar@^2.0.2: fsevents "^1.2.7" chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== -chrome-trace-event@^1.0.0: +chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== dependencies: tslib "^1.9.0" -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -2507,20 +2541,20 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-kit@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/cli-kit/-/cli-kit-0.11.1.tgz#268cf977156c1a5a70fcc8f46b6130ca9ae69236" - integrity sha512-4mf4uY/wVFVvIkT2sR4l6GiAZ0d85uytxQW+RZpZT04Liyrz3BikC36nNQItwVMyFjRdvAkd7XAvG0hI/8B9oA== +cli-kit@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/cli-kit/-/cli-kit-0.11.2.tgz#7d22ad03b074833e5265de3454f8e28400ba76be" + integrity sha512-3j58Q9wq+wnyOIt0gCxmNIqpc2t7w+F3azVcn1uKogKS2bhfnbS0QNTwdzK34wVDmIm7qxbfr2KW6sv0/01XvA== dependencies: argv-split "^2.0.1" fast-levenshtein "^2.0.6" - fs-extra "^8.0.1" - hook-emitter "^3.1.2" + fs-extra "^8.1.0" + hook-emitter "^4.0.0" lodash.camelcase "^4.3.0" pkg-dir "^4.2.0" pluralize "^8.0.0" - semver "^6.1.1" - snooplogg "^2.0.1" + semver "^6.2.0" + snooplogg "^2.1.0" source-map-support "^0.5.12" which "^1.3.1" @@ -2719,7 +2753,7 @@ commander@2.5.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.5.1.tgz#23c61f6e47be143cc02e7ad4bb1c47f5cd5a2883" integrity sha1-I8Yfbke+FDzALnrUuxxH9c1aKIM= -commander@^2.19.0, commander@~2.20.0: +commander@^2.20.0, commander@~2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== @@ -2811,10 +2845,10 @@ content-disposition@~0.5.2: dependencies: safe-buffer "5.1.2" -content-security-policy-builder@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz#8749a1d542fcbe82237281ea9f716ce68b394dd2" - integrity sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w== +content-security-policy-builder@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz#0a2364d769a3d7014eec79ff7699804deb8cfcbb" + integrity sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ== content-type@^1.0.4: version "1.0.4" @@ -2830,17 +2864,17 @@ conventional-changelog-angular@^5.0.3: q "^1.5.1" conventional-changelog-core@^3.1.6: - version "3.2.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz#de41e6b4a71011a18bcee58e744f6f8f0e7c29c0" - integrity sha512-cssjAKajxaOX5LNAJLB+UOcoWjAIBvXtDMedv/58G+YEmAXMNfC16mmPl0JDOuVJVfIqM0nqQiZ8UCm8IXbE0g== + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" + integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== dependencies: - conventional-changelog-writer "^4.0.5" - conventional-commits-parser "^3.0.2" + conventional-changelog-writer "^4.0.6" + conventional-commits-parser "^3.0.3" dateformat "^3.0.0" get-pkg-repo "^1.0.0" git-raw-commits "2.0.0" git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.2" + git-semver-tags "^2.0.3" lodash "^4.2.1" normalize-package-data "^2.3.5" q "^1.5.1" @@ -2849,19 +2883,19 @@ conventional-changelog-core@^3.1.6: through2 "^3.0.0" conventional-changelog-preset-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz#65bb600547c56d5627d23135154bcd9a907668c4" - integrity sha512-K4avzGMLm5Xw0Ek/6eE3vdOXkqnpf9ydb68XYmCc16cJ99XMMbc2oaNMuPwAsxVK6CC1yA4/I90EhmWNj0Q6HA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc" + integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== -conventional-changelog-writer@^4.0.5: - version "4.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.6.tgz#24db578ac8e7c89a409ef9bba12cf3c095990148" - integrity sha512-ou/sbrplJMM6KQpR5rKFYNVQYesFjN7WpNGdudQSWNi6X+RgyFUcSv871YBYkrUYV9EX8ijMohYVzn9RUb+4ag== +conventional-changelog-writer@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz#e4b7d9cbea902394ad671f67108a71fa90c7095f" + integrity sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw== dependencies: compare-func "^1.3.1" conventional-commits-filter "^2.0.2" dateformat "^3.0.0" - handlebars "^4.1.0" + handlebars "^4.1.2" json-stringify-safe "^5.0.1" lodash "^4.2.1" meow "^4.0.0" @@ -2877,7 +2911,7 @@ conventional-commits-filter@^2.0.2: lodash.ismatch "^4.4.0" modify-values "^1.0.0" -conventional-commits-parser@^3.0.2: +conventional-commits-parser@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg== @@ -2890,17 +2924,17 @@ conventional-commits-parser@^3.0.2: through2 "^3.0.0" trim-off-newlines "^1.0.0" -conventional-recommended-bump@^4.0.4: - version "4.1.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-4.1.1.tgz#37014fadeda267d0607e2fc81124da840a585127" - integrity sha512-JT2vKfSP9kR18RXXf55BRY1O3AHG8FPg5btP3l7LYfcWJsiXI6MCf30DepQ98E8Qhowvgv7a8iev0J1bEDkTFA== +conventional-recommended-bump@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" + integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== dependencies: concat-stream "^2.0.0" conventional-changelog-preset-loader "^2.1.1" conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.2" + conventional-commits-parser "^3.0.3" git-raw-commits "2.0.0" - git-semver-tags "^2.0.2" + git-semver-tags "^2.0.3" meow "^4.0.0" q "^1.5.1" @@ -3083,9 +3117,9 @@ css@2.X, css@^2.2.1: urix "^0.1.0" cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": - version "0.3.6" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" - integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== "cssstyle@>= 0.2.29 < 0.3.0": version "0.2.37" @@ -3235,10 +3269,10 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" - integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== +deepmerge@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" + integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww== default-compare@^1.0.0: version "1.0.0" @@ -3266,7 +3300,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -3377,16 +3411,16 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" -diff@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.0.7.tgz#24bbb001c4a7d5522169e7cabdb2c2814ed91cf4" - integrity sha1-JLuwAcSn1VIhaefKvbLCgU7ZHPQ= - diff@3.5.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3396,18 +3430,17 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== dependencies: - arrify "^1.0.1" path-type "^3.0.0" -dns-prefetch-control@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz#60ddb457774e178f1f9415f0cabb0e85b0b300b2" - integrity sha1-YN20V3dOF48flBXwyrsOhbCzALI= +dns-prefetch-control@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz#73988161841f3dcc81f47686d539a2c702c88624" + integrity sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q== doctrine@1.5.0: version "1.5.0" @@ -3424,7 +3457,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@0, dom-serializer@~0.1.0: +dom-serializer@0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb" + integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== @@ -3442,6 +3483,11 @@ domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + domhandler@2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" @@ -3472,10 +3518,10 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -dont-sniff-mimetype@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz#5932890dc9f4e2f19e5eb02a20026e5e5efc8f58" - integrity sha1-WTKJDcn04vGeXrAqIAJuXl78j1g= +dont-sniff-mimetype@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz#c7d0427f8bcb095762751252af59d148b0a623b2" + integrity sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug== dot-prop@^3.0.0: version "3.0.0" @@ -3535,9 +3581,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= elliptic@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" - integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== + version "6.5.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" + integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -3590,6 +3636,16 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + +env-paths@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" + integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= + err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" @@ -3614,7 +3670,7 @@ error-inject@^1.0.0: resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" integrity sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc= -es-abstract@^1.5.1, es-abstract@^1.7.0: +es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -3816,17 +3872,18 @@ esdoc@^1.1.0: minimist "1.2.0" taffydb "2.7.3" -eslint-config-axway@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/eslint-config-axway/-/eslint-config-axway-4.2.2.tgz#5a64162c4b27e6840e640c225d3ce4141c4eb29e" - integrity sha512-Cbj0VaBBARh81rc6Q4oEYLDKe6/sZA3Lb56ibvbLWftt0/V3zt3wvd4yaat23fBf8T8sjy0B9HfyNVafgF9xsw== +eslint-config-axway@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-axway/-/eslint-config-axway-4.3.0.tgz#7e4e164a458240db49812202f218dd4a02a1f742" + integrity sha512-y+8VF65J2JenubwqEn0OGeINQQm1z1OTf+o5e0ApxQaGztRnH0OvWoCrSa7y3xGzsd6MWEWrUnhBR6iZFEyZOQ== dependencies: eslint-plugin-chai-expect "^2.0.1" - eslint-plugin-import "^2.16.0" - eslint-plugin-promise "^4.0.1" + eslint-plugin-import "^2.18.2" + eslint-plugin-node "^9.1.0" + eslint-plugin-promise "^4.2.1" eslint-plugin-security "^1.4.0" find-root "^1.1.0" - semver "^5.6.0" + semver "^6.3.0" eslint-import-resolver-node@^0.3.2: version "0.3.2" @@ -3837,9 +3894,9 @@ eslint-import-resolver-node@^0.3.2: resolve "^1.5.0" eslint-module-utils@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a" - integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw== + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" + integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== dependencies: debug "^2.6.8" pkg-dir "^2.0.0" @@ -3854,10 +3911,18 @@ eslint-plugin-chai-friendly@^0.4.1: resolved "https://registry.yarnpkg.com/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-0.4.1.tgz#9eeb17f92277ba80bb64f0e946c6936a3ae707b4" integrity sha512-hkpLN7VVoGGsofZjUhcQ+sufC3FgqMJwD0DvAcRfxY1tVRyQyVsqpaKnToPHJQOrRo0FQ0fSEDwW2gr4rsNdGA== -eslint-plugin-import@^2.16.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.0.tgz#7a5ba8d32622fb35eb9c8db195c2090bd18a3678" - integrity sha512-PZpAEC4gj/6DEMMoU2Df01C5c50r7zdGIN52Yfi7CvvWaYssG7Jt5R9nFG5gmqodxNOz9vQS87xk6Izdtpdrig== +eslint-plugin-es@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" + integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== + dependencies: + eslint-utils "^1.3.0" + regexpp "^2.0.1" + +eslint-plugin-import@^2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== dependencies: array-includes "^3.0.3" contains-path "^0.1.0" @@ -3866,19 +3931,31 @@ eslint-plugin-import@^2.16.0: eslint-import-resolver-node "^0.3.2" eslint-module-utils "^2.4.0" has "^1.0.3" - lodash "^4.17.11" minimatch "^3.0.4" + object.values "^1.1.0" read-pkg-up "^2.0.0" resolve "^1.11.0" -eslint-plugin-mocha@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-5.3.0.tgz#cf3eb18ae0e44e433aef7159637095a7cb19b15b" - integrity sha512-3uwlJVLijjEmBeNyH60nzqgA1gacUWLUmcKV8PIGNvj1kwP/CTgAWQHn2ayyJVwziX+KETkr9opNwT1qD/RZ5A== +eslint-plugin-mocha@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-6.0.0.tgz#0a2af057280962e9deab929361141865b2b8a761" + integrity sha512-Qgy1q64cTKqiHiYP3ZPAcMlEoPejeM7GLKDs2pvYG/fXbVDYDJw7ELlHlbn3147SL9+cPSqat7uCCbbNmVpc1g== dependencies: ramda "^0.26.1" -eslint-plugin-promise@^4.0.1: +eslint-plugin-node@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz#f2fd88509a31ec69db6e9606d76dabc5adc1b91a" + integrity sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw== + dependencies: + eslint-plugin-es "^1.4.0" + eslint-utils "^1.3.1" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== @@ -3898,7 +3975,7 @@ eslint-scope@3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^4.0.0, eslint-scope@^4.0.3: +eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== @@ -3906,62 +3983,30 @@ eslint-scope@^4.0.0, eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.0, eslint-utils@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.0.tgz#e2c3c8dba768425f897cf0f9e51fe2e241485d4c" + integrity sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ== + dependencies: + eslint-visitor-keys "^1.0.0" eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@^5.0.1: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - -eslint@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.0.1.tgz#4a32181d72cb999d6f54151df7d337131f81cda7" - integrity sha512-DyQRaMmORQ+JsWShYsSg4OPTjY56u1nCjAmICrE8vLWqyLKxhFXOthwMj1SA8xwfrv0CofLNVnqbfyhwCkaO0w== +eslint@^6.0.0, eslint@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" + integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -3969,7 +4014,7 @@ eslint@^6.0.1: cross-spawn "^6.0.5" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^4.0.3" + eslint-scope "^5.0.0" eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" espree "^6.0.0" @@ -3977,37 +4022,29 @@ eslint@^6.0.1: esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^3.1.0" + glob-parent "^5.0.0" globals "^11.7.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.2.2" + inquirer "^6.4.1" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.11" + lodash "^4.17.14" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" progress "^2.0.0" regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" table "^5.2.3" text-table "^0.2.0" - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" + v8-compile-cache "^2.0.3" espree@^6.0.0: version "6.0.0" @@ -4048,9 +4085,9 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== event-emitter@^0.3.5: version "0.3.5" @@ -4162,9 +4199,9 @@ extend@^3.0.0, extend@~3.0.2: integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" @@ -4209,7 +4246,7 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= -fast-glob@^2.0.2: +fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== @@ -4282,6 +4319,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -4351,6 +4395,16 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" + fined@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" @@ -4422,9 +4476,9 @@ forever-agent@~0.6.1: integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.4.0.tgz#4902b831b051e0db5612a35e1a098376f7b13ad8" - integrity sha512-4FinE8RfqYnNim20xDwZZE0V2kOs/AuElIjFUbPuegQSaoZM+vUT5FnwSl10KPugH4voTg1bEQlcbCG9ka75TA== + version "2.5.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.0.tgz#094ec359dc4b55e7d62e0db4acd76e89fe874d37" + integrity sha512-WXieX3G/8side6VIqx44ablyULoGruSde5PNTxoUyo5CeyAMX6nVWUd0rgist/EuX655cjhUhTo1Fo3tRYqbcA== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" @@ -4497,21 +4551,12 @@ fs-extra@5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.0.1.tgz#90294081f978b1f182f347a440a209154344285b" - integrity sha512-W+XLrggcDzlle47X/XnS7FXrXu9sDo+Ze9zpndeBxdgv88FHLm1HtmkhEwavruS6koanBjp098rUpHs65EmG7A== +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: - graceful-fs "^4.1.2" + graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" @@ -4586,13 +4631,13 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gawk@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/gawk/-/gawk-4.6.3.tgz#6c4c0cc09df3130c951ba9f33fa43da1f7c09518" - integrity sha512-Er80uXBfbpkq4urzr9kD0/5QOyo8YBQrzs+hTmK7Xk+aBWyh4w4t1EGhEzTI8JzWRguFGdQnwNRKcZmj/E5qvA== +gawk@^4.6.4: + version "4.6.4" + resolved "https://registry.yarnpkg.com/gawk/-/gawk-4.6.4.tgz#c97fffacf6366a474bf1ff09af6d6e5c934fd48d" + integrity sha512-CN2OBU1iF4QV0EjS/ZFVxODmcqXlNlW364evtYjZxXsZ0ibfKJwwd0neLX9sxb6MArGREOczstGkte4CPskpXw== dependencies: fast-deep-equal "^2.0.1" - source-map-support "^0.5.9" + source-map-support "^0.5.12" genfun@^5.0.0: version "5.0.0" @@ -4644,10 +4689,10 @@ get-pkg-repo@^1.0.0: parse-github-repo-url "^1.3.0" through2 "^2.0.0" -get-port@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= +get-port@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" + integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== get-stdin@^4.0.1: version "4.0.1" @@ -4692,13 +4737,13 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.2.tgz#f506ec07caade191ac0c8d5a21bdb8131b4934e3" - integrity sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w== +git-semver-tags@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" + integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== dependencies: meow "^4.0.0" - semver "^5.5.0" + semver "^6.0.0" git-up@^4.0.0: version "4.0.1" @@ -4730,6 +4775,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== + dependencies: + is-glob "^4.0.1" + glob-stream@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" @@ -4787,7 +4839,7 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -4845,18 +4897,19 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -globby@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" - integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== dependencies: - array-union "^1.0.1" - dir-glob "2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" globule@^1.2.1: version "1.2.1" @@ -4874,10 +4927,10 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" + integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -4945,26 +4998,26 @@ gulp-debug@^4.0.0: through2 "^2.0.0" tildify "^1.1.2" -gulp-eslint@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gulp-eslint/-/gulp-eslint-5.0.0.tgz#2a2684095f774b2cf79310262078c56cc7a12b52" - integrity sha512-9GUqCqh85C7rP9120cpxXuZz2ayq3BZc85pCTuPJS03VQYxne0aWPIXWx6LSvsGPa3uRqtSO537vaugOh+5cXg== +gulp-eslint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gulp-eslint/-/gulp-eslint-6.0.0.tgz#7d402bb45f8a67652b868277011812057370a832" + integrity sha512-dCVPSh1sA+UVhn7JSQt7KEb4An2sQNbOdB3PA8UCfxsoPlAKjJHxYHGXdXC7eb+V1FAnilSFFqslPrq037l1ig== dependencies: - eslint "^5.0.1" + eslint "^6.0.0" fancy-log "^1.3.2" plugin-error "^1.0.1" -gulp-load-plugins@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/gulp-load-plugins/-/gulp-load-plugins-1.6.0.tgz#2d060c42faf481141ef638431572923d8701bd0d" - integrity sha512-HlCODki0WHJvQIgAsJYOTkyo0c7TsDCetvfhrdGz9JYPL6A4mFRMGmKfoi6JmXjA/vvzg+fkT91c9FBh7rnkyg== +gulp-load-plugins@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/gulp-load-plugins/-/gulp-load-plugins-2.0.0.tgz#98c471292c6777f7fbb554ba1588dc64c88ddd61" + integrity sha512-/tYScCootRAlSv2mIiwazDodp8p2DILyoNP+6QjCvYpLtfEuuNqVGv/lfhZhWD6cWtfqiFdVYfSjzL4MLIcM1w== dependencies: - array-unique "^0.2.1" + array-unique "^0.3.2" fancy-log "^1.2.0" findup-sync "^3.0.0" gulplog "^1.0.0" has-gulplog "^0.1.0" - micromatch "^3.1.10" + micromatch "^4.0.2" resolve "^1.1.7" gulp-plumber@^1.2.1: @@ -5035,7 +5088,7 @@ gulplog@^1.0.0: dependencies: glogg "^1.0.0" -handlebars@^4.1.0, handlebars@^4.1.2: +handlebars@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== @@ -5071,6 +5124,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" @@ -5159,46 +5217,46 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -helmet-crossdomain@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz#707e2df930f13ad61f76ed08e1bb51ab2b2e85fa" - integrity sha512-YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg== +helmet-crossdomain@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz#5f1fe5a836d0325f1da0a78eaa5fd8429078894e" + integrity sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA== -helmet-csp@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.7.1.tgz#e8e0b5186ffd4db625cfcce523758adbfadb9dca" - integrity sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ== +helmet-csp@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.8.0.tgz#746d329e24ef39c4ebc00278a48abd3c209e0378" + integrity sha512-MlCPeM0Sm3pS9RACRihx70VeTHmkQwa7sum9EK1tfw1VZyvFU0dBWym9nHh3CRkTRNlyNm/WFCMvuh9zXkOjNw== dependencies: camelize "1.0.0" - content-security-policy-builder "2.0.0" + content-security-policy-builder "2.1.0" dasherize "2.0.0" platform "1.3.5" helmet@^3.18.0: - version "3.18.0" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.18.0.tgz#37666f7c861bd1ff3015e0cdb903a43501e3da3e" - integrity sha512-TsKlGE5UVkV0NiQ4PllV9EVfZklPjyzcMEMjWlyI/8S6epqgRT+4s4GHVgc25x0TixsKvp3L7c91HQQt5l0+QA== + version "3.20.0" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.20.0.tgz#8a9383bf8230a461cafe8bc763423fbde110d2fc" + integrity sha512-Ob+TqmQFZ5f7WgP8kBbAzNPsbf6p1lOj5r+327/ymw/IILWih3wcx9u/u/S8Mwv5wbBkO7Li6x5s23t3COhUKw== dependencies: depd "2.0.0" - dns-prefetch-control "0.1.0" - dont-sniff-mimetype "1.0.0" + dns-prefetch-control "0.2.0" + dont-sniff-mimetype "1.1.0" expect-ct "0.2.0" feature-policy "0.3.0" frameguard "3.1.0" - helmet-crossdomain "0.3.0" - helmet-csp "2.7.1" - hide-powered-by "1.0.0" + helmet-crossdomain "0.4.0" + helmet-csp "2.8.0" + hide-powered-by "1.1.0" hpkp "2.0.0" hsts "2.2.0" ienoopen "1.1.0" nocache "2.1.0" referrer-policy "1.2.0" - x-xss-protection "1.1.0" + x-xss-protection "1.2.0" -hide-powered-by@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.0.0.tgz#4a85ad65881f62857fc70af7174a1184dccce32b" - integrity sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys= +hide-powered-by@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.1.0.tgz#be3ea9cab4bdb16f8744be873755ca663383fa7a" + integrity sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg== hmac-drbg@^1.0.0: version "1.0.1" @@ -5216,18 +5274,19 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -hook-emitter@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/hook-emitter/-/hook-emitter-3.1.2.tgz#73637605f78f2898c4b6131b41f33ff0145d5f81" - integrity sha512-Rhzpb3juaYJwGIdopkyzvqULXMcLFyk3aQkTEw/bDVlmcl+3qe+ccvWPUO8f38x3LvnEtHHTphSq4+aSeiw7dA== +hook-emitter@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hook-emitter/-/hook-emitter-4.0.0.tgz#b1c93980605472fe3eb192f68df72f41b046ce9d" + integrity sha512-roFcnj7+sOsmidVkfpl8YdAQ9RReCHmRYi4rsvWCHA2oB7/MJJ9Tac7gip8HYwUEsxmDVNwuWPWfVzFlunYVIw== dependencies: - snooplogg "^2.0.0" - source-map-support "^0.5.9" + source-map-support "^0.5.12" hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + version "2.8.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.2.tgz#a35c3f355ac1249f1093c0c2a542ace8818c171a" + integrity sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w== + dependencies: + lru-cache "^5.1.1" hpkp@2.0.0: version "2.0.0" @@ -5277,18 +5336,7 @@ http-cache-semantics@^3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@^1.6.3, http-errors@~1.7.2: +http-errors@1.7.3, http-errors@^1.6.3, http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== @@ -5332,11 +5380,11 @@ https-browserify@^1.0.0: integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz#271ea8e90f836ac9f119daccd39c19ff7dfb0793" + integrity sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg== dependencies: - agent-base "^4.1.0" + agent-base "^4.3.0" debug "^3.1.0" humanize-ms@^1.2.1: @@ -5388,17 +5436,12 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.6: +ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.2: +ignore@^5.1.1, ignore@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.2.tgz#e28e584d43ad7e92f96995019cc43b9e1ac49558" integrity sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ== @@ -5412,19 +5455,19 @@ import-fresh@^2.0.0: resolve-from "^3.0.0" import-fresh@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" - integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" + integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: - pkg-dir "^2.0.0" + pkg-dir "^3.0.0" resolve-cwd "^2.0.0" imurmurhash@^0.1.4: @@ -5444,6 +5487,11 @@ indent-string@^3.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflation@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" @@ -5491,10 +5539,10 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" -inquirer@^6.2.0, inquirer@^6.2.2: - version "6.4.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.4.1.tgz#7bd9e5ab0567cd23b41b0180b68e0cfa82fc3c0b" - integrity sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw== +inquirer@^6.2.0, inquirer@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== dependencies: ansi-escapes "^3.2.0" chalk "^2.4.2" @@ -5502,7 +5550,7 @@ inquirer@^6.2.0, inquirer@^6.2.2: cli-width "^2.0.0" external-editor "^3.0.3" figures "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.12" mute-stream "0.0.7" run-async "^2.2.0" rxjs "^6.4.0" @@ -5596,12 +5644,12 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: - ci-info "^1.5.0" + ci-info "^2.0.0" is-data-descriptor@^0.1.4: version "0.1.4" @@ -5693,7 +5741,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -5717,6 +5765,11 @@ is-number@^4.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -5813,7 +5866,7 @@ is-valid-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -5922,7 +5975,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.13.1, js-yaml@^3.13.0, js-yaml@^3.13.1: +js-yaml@3.13.1, js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -6201,27 +6254,27 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" -lerna@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.15.0.tgz#b044dba8138d7a1a8dd48ac1d80e7541bdde0d1f" - integrity sha512-kRIQ3bgzkmew5/WZQ0C9WjH0IUf3ZmTNnBwTHfXgLkVY7td0lbwMQFD7zehflUn0zG4ou54o/gn+IfjF0ti/5A== +lerna@^3.16.4: + version "3.16.4" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.16.4.tgz#158cb4f478b680f46f871d5891f531f3a2cb31ec" + integrity sha512-0HfwXIkqe72lBLZcNO9NMRfylh5Ng1l8tETgYQ260ZdHRbPuaLKE3Wqnd2YYRRkWfwPyEyZO8mZweBR+slVe1A== dependencies: - "@lerna/add" "3.15.0" - "@lerna/bootstrap" "3.15.0" - "@lerna/changed" "3.15.0" - "@lerna/clean" "3.15.0" + "@lerna/add" "3.16.2" + "@lerna/bootstrap" "3.16.2" + "@lerna/changed" "3.16.4" + "@lerna/clean" "3.16.0" "@lerna/cli" "3.13.0" - "@lerna/create" "3.15.0" - "@lerna/diff" "3.15.0" - "@lerna/exec" "3.15.0" - "@lerna/import" "3.15.0" - "@lerna/init" "3.15.0" - "@lerna/link" "3.15.0" - "@lerna/list" "3.15.0" - "@lerna/publish" "3.15.0" - "@lerna/run" "3.15.0" - "@lerna/version" "3.15.0" - import-local "^1.0.0" + "@lerna/create" "3.16.0" + "@lerna/diff" "3.16.0" + "@lerna/exec" "3.16.0" + "@lerna/import" "3.16.0" + "@lerna/init" "3.16.0" + "@lerna/link" "3.16.2" + "@lerna/list" "3.16.0" + "@lerna/publish" "3.16.4" + "@lerna/run" "3.16.0" + "@lerna/version" "3.16.4" + import-local "^2.0.0" npmlog "^4.1.2" levn@^0.3.0, levn@~0.3.0: @@ -6232,41 +6285,41 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpm@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-2.0.1.tgz#a48fcdee3c25e13c77eb7c60a0efe561d7fb0d8f" - integrity sha512-qTKoxyJvpBxHZQB6k0AhSLajyXq9ZE/lUsZzuHAplr2Bpv9G+k4YuYlExYdUCeVRRGqcJt8hvkPh4tBwKoV98w== +libnpm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" + integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ== dependencies: bin-links "^1.1.2" bluebird "^3.5.3" find-npm-prefix "^1.0.2" - libnpmaccess "^3.0.1" + libnpmaccess "^3.0.2" libnpmconfig "^1.2.1" - libnpmhook "^5.0.2" - libnpmorg "^1.0.0" - libnpmpublish "^1.1.0" - libnpmsearch "^2.0.0" - libnpmteam "^1.0.1" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmpublish "^1.1.2" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" lock-verify "^2.0.2" - npm-lifecycle "^2.1.0" + npm-lifecycle "^3.0.0" npm-logical-tree "^1.2.1" npm-package-arg "^6.1.0" - npm-profile "^4.0.1" - npm-registry-fetch "^3.8.0" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.0" npmlog "^4.1.2" - pacote "^9.2.3" + pacote "^9.5.3" read-package-json "^2.0.13" stringify-package "^1.0.0" -libnpmaccess@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.1.tgz#5b3a9de621f293d425191aa2e779102f84167fa8" - integrity sha512-RlZ7PNarCBt+XbnP7R6PoVgOq9t+kou5rvhaInoNibhPO7eMlRfS0B8yjatgn2yaHIwWNyoJDolC/6Lc5L/IQA== +libnpmaccess@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" + integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ== dependencies: aproba "^2.0.0" get-stream "^4.0.0" npm-package-arg "^6.1.0" - npm-registry-fetch "^3.8.0" + npm-registry-fetch "^4.0.0" libnpmconfig@^1.2.1: version "1.2.1" @@ -6277,30 +6330,30 @@ libnpmconfig@^1.2.1: find-up "^3.0.0" ini "^1.3.5" -libnpmhook@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.2.tgz#d12817b0fb893f36f1d5be20017f2aea25825d94" - integrity sha512-vLenmdFWhRfnnZiNFPNMog6CK7Ujofy2TWiM2CrpZUjBRIhHkJeDaAbJdYCT6W4lcHtyrJR8yXW8KFyq6UAp1g== +libnpmhook@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA== dependencies: aproba "^2.0.0" figgy-pudding "^3.4.1" get-stream "^4.0.0" - npm-registry-fetch "^3.8.0" + npm-registry-fetch "^4.0.0" -libnpmorg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.0.tgz#979b868c48ba28c5820e3bb9d9e73c883c16a232" - integrity sha512-o+4eVJBoDGMgRwh2lJY0a8pRV2c/tQM/SxlqXezjcAg26Qe9jigYVs+Xk0vvlYDWCDhP0g74J8UwWeAgsB7gGw== +libnpmorg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" + integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww== dependencies: aproba "^2.0.0" figgy-pudding "^3.4.1" get-stream "^4.0.0" - npm-registry-fetch "^3.8.0" + npm-registry-fetch "^4.0.0" -libnpmpublish@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.1.tgz#ff0c6bb0b4ad2bda2ad1f5fba6760a4af37125f0" - integrity sha512-nefbvJd/wY38zdt+b9SHL6171vqBrMtZ56Gsgfd0duEKb/pB8rDT4/ObUQLrHz1tOfht1flt2zM+UGaemzAG5g== +libnpmpublish@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.2.tgz#4201cfc4a69c44e6f454ec548fa1cd90f10df0a0" + integrity sha512-2yIwaXrhTTcF7bkJKIKmaCV9wZOALf/gsTDxVSu/Gu/6wiG3fA8ce8YKstiWKTxSFNC0R7isPUb6tXTVFZHt2g== dependencies: aproba "^2.0.0" figgy-pudding "^3.5.1" @@ -6308,28 +6361,28 @@ libnpmpublish@^1.1.0: lodash.clonedeep "^4.5.0" normalize-package-data "^2.4.0" npm-package-arg "^6.1.0" - npm-registry-fetch "^3.8.0" + npm-registry-fetch "^4.0.0" semver "^5.5.1" ssri "^6.0.1" -libnpmsearch@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.1.tgz#eccc73a8fbf267d765d18082b85daa2512501f96" - integrity sha512-K0yXyut9MHHCAH+DOiglQCpmBKPZXSUu76+BE2maSEfQN15OwNaA/Aiioe9lRFlVFOr7WcuJCY+VSl+gLi9NTA== +libnpmsearch@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" + integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg== dependencies: figgy-pudding "^3.5.1" get-stream "^4.0.0" - npm-registry-fetch "^3.8.0" + npm-registry-fetch "^4.0.0" -libnpmteam@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.1.tgz#ff704b1b6c06ea674b3b1101ac3e305f5114f213" - integrity sha512-gDdrflKFCX7TNwOMX1snWojCoDE5LoRWcfOC0C/fqF7mBq8Uz9zWAX4B2RllYETNO7pBupBaSyBDkTAC15cAMg== +libnpmteam@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" + integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA== dependencies: aproba "^2.0.0" figgy-pudding "^3.4.1" get-stream "^4.0.0" - npm-registry-fetch "^3.8.0" + npm-registry-fetch "^4.0.0" liftoff@^3.1.0: version "3.1.0" @@ -6376,12 +6429,23 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-runner@^2.3.0: +load-json-file@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + +loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@^1.0.2, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -6485,7 +6549,7 @@ lodash._reevaluate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" integrity sha1-WLx0xAZklTrgsSTYBpltrKQx4u0= -lodash._reinterpolate@^3.0.0, lodash._reinterpolate@~3.0.0: +lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= @@ -6626,9 +6690,9 @@ lodash.merge@^3.3.2: lodash.toplainobject "^3.0.0" lodash.merge@^4.4.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" - integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.pick@^4.2.1: version "4.4.0" @@ -6680,12 +6744,12 @@ lodash.template@^3.0.0: lodash.restparam "^3.0.0" lodash.templatesettings "^3.0.0" -lodash.template@^4.0.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" - integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A= +lodash.template@^4.0.2, lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== dependencies: - lodash._reinterpolate "~3.0.0" + lodash._reinterpolate "^3.0.0" lodash.templatesettings "^4.0.0" lodash.templatesettings@^3.0.0: @@ -6697,11 +6761,11 @@ lodash.templatesettings@^3.0.0: lodash.escape "^3.0.0" lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" - integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY= + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== dependencies: - lodash._reinterpolate "~3.0.0" + lodash._reinterpolate "^3.0.0" lodash.toplainobject@^3.0.0: version "3.0.0" @@ -6721,10 +6785,10 @@ lodash@^3.10.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.10: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.10: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== log-symbols@2.2.0: version "2.2.0" @@ -6733,10 +6797,10 @@ log-symbols@2.2.0: dependencies: chalk "^2.0.1" -lolex@^4.0.1, lolex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.1.0.tgz#ecdd7b86539391d8237947a3419aa8ac975f0fe1" - integrity sha512-BYxIEXiVq5lGIXeVHnsFzqa1TxN5acnKnPCdlZSpzm8viNEOhiigupA4vTQ9HEFQ6nLTQ9wQOgBknJgzUYQ9Aw== +lolex@^4.1.0, lolex@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" + integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== loose-envify@^1.0.0: version "1.4.0" @@ -6753,7 +6817,7 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.3: +lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -6800,17 +6864,17 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-fetch-happen@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" - integrity sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ== +make-fetch-happen@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz#a8e3fe41d3415dd656fe7b8e8172e1fb4458b38d" + integrity sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA== dependencies: agentkeepalive "^3.4.1" - cacache "^11.0.1" + cacache "^12.0.0" http-cache-semantics "^3.8.1" http-proxy-agent "^2.1.0" https-proxy-agent "^2.2.1" - lru-cache "^4.1.2" + lru-cache "^5.1.1" mississippi "^3.0.0" node-fetch-npm "^2.0.2" promise-retry "^1.1.1" @@ -6915,7 +6979,7 @@ memoizee@0.4.X: next-tick "1" timers-ext "^0.1.5" -memory-fs@^0.4.0, memory-fs@~0.4.1: +memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -6969,16 +7033,16 @@ merge-source-map@^1.1.0: source-map "^0.6.1" merge2@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== + version "1.2.4" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3" + integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A== methods@^1.1.1, methods@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -6997,6 +7061,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -7042,7 +7114,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -7111,19 +7183,26 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*, mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" -mocha-jenkins-reporter@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mocha-jenkins-reporter/-/mocha-jenkins-reporter-0.4.1.tgz#d944ce5f7fb157f4bbcea8de8d535db50ade2823" - integrity sha512-IqnIylrkKJG0lxeoawRkhv/uiYojMEw3o9TQOpDFarPYKVq4ymngVPwsyfMB0XMDqtDbOTOCviFg8xOLHb80/Q== +mocha-jenkins-reporter@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/mocha-jenkins-reporter/-/mocha-jenkins-reporter-0.4.2.tgz#122023651b13b9b99b915940950608f833655540" + integrity sha512-ofQ41SUX5Uh3eHLn/ki4UTsh/7Yuk6p8N3RbxB275TLPErjkJGXuiT5i0haJ51UdJ+bkUhdyIpcCOHS3XSNVsg== dependencies: - diff "1.0.7" + diff "4.0.1" mkdirp "0.5.1" mocha "^5.2.0" xml "^1.0.1" @@ -7145,10 +7224,10 @@ mocha@^5.2.0: mkdirp "0.5.1" supports-color "5.4.0" -mocha@^6.1.4: - version "6.1.4" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.1.4.tgz#e35fada242d5434a7e163d555c705f6875951640" - integrity sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg== +mocha@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.0.tgz#f896b642843445d1bb8bca60eabd9206b8916e56" + integrity sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ== dependencies: ansi-colors "3.2.3" browser-stdout "1.3.1" @@ -7216,15 +7295,15 @@ msgpack-lite@^0.1.26: int64-buffer "^0.1.9" isarray "^1.0.0" -multimatch@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= +multimatch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" + array-differ "^2.0.3" + array-union "^1.0.2" + arrify "^1.0.1" + minimatch "^3.0.4" multipipe@^0.1.2: version "0.1.2" @@ -7248,7 +7327,7 @@ mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.7.0: +mz@^2.5.0, mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== @@ -7262,12 +7341,12 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== -nanobuffer@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/nanobuffer/-/nanobuffer-1.1.4.tgz#43dba1eaf2b95f3025ae4fb6b20d86429ebe0160" - integrity sha512-yy07+we+tsT1P+4kNzoHhfn5GcnZjb7OM62W2jRSdQf/VpB0QB6x5+5k3OKc5i2Fxprs2+P4EgxujUvhsp8TkQ== +nanobuffer@^1.1.4, nanobuffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/nanobuffer/-/nanobuffer-1.1.5.tgz#2da4b706f4627c298fb4610eac35ca8fa2c9b174" + integrity sha512-zhDz+zPssav2UCIBb4GhzoFq6+DupybuOR9am44XmpWafRBLNficoDMhhBKM2Q+2IZG2SqL6eC7KWf05qVsghA== dependencies: - source-map-support "^0.5.9" + source-map-support "^0.5.12" nanomatch@^1.2.9: version "1.2.13" @@ -7286,10 +7365,10 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -napi-macros@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-1.8.2.tgz#299265c1d8aa401351ad0675107d751228c03eda" - integrity sha512-Tr0DNY4RzTaBG2W2m3l7ZtFuJChTH6VZhXVhkGGjF/4cZTt+i8GcM9ozD+30Lmr4mDoZ5Xx34t2o4GJqYWDGcg== +napi-macros@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== natural-compare@^1.4.0: version "1.4.0" @@ -7310,7 +7389,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -7330,12 +7409,12 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nise@^1.4.10: - version "1.5.0" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.0.tgz#d03ea0e6c1b75c638015aa3585eddc132949a50d" - integrity sha512-Z3sfYEkLFzFmL8KY6xnSJLRxwQwYBjOXi/24lb62ZnZiGA0JUzGGTI6TBIgfCSMIDl9Jlu8SRmHNACLTemDHww== +nise@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.1.tgz#de61d99a1d3b46b5233be4531569b9a8e27372b2" + integrity sha512-edFWm0fsFG2n318rfEnKlTZTkjlbVOFF9XIA+fj+Ed+Qz1laYW2lobwavWoMzGrYDHH1EpiNJgDfvGnkZztR/g== dependencies: - "@sinonjs/formatio" "^3.1.0" + "@sinonjs/formatio" "^3.2.1" "@sinonjs/text-encoding" "^0.7.1" just-extend "^4.0.2" lolex "^4.1.0" @@ -7373,24 +7452,24 @@ node-gyp-build@^4.1.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.0.tgz#3bc3dd7dd4aafecaf64a2e3729e785bc3cdea565" integrity sha512-rGLv++nK20BG8gc0MzzcYe1Nl3p3mtwJ74Q2QD0HTEDKZ6NvOFSelY6s2QBPWIHRR8h7hpad0LiwajfClBJfNg== -node-gyp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-4.0.0.tgz#972654af4e5dd0cd2a19081b4b46fe0442ba6f45" - integrity sha512-2XiryJ8sICNo6ej8d0idXDEMKfVfFK7kekGCtJAuelGsYHQxhj13KTf95swTCN2dZ/4lTfZ84Fu31jqJEEgjWA== +node-gyp@^5.0.2, node-gyp@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.3.tgz#80d64c23790244991b6d44532f0a351bedd3dd45" + integrity sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ== dependencies: + env-paths "^1.0.0" glob "^7.0.3" graceful-fs "^4.1.2" mkdirp "^0.5.0" nopt "2 || 3" npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" request "^2.87.0" rimraf "2" semver "~5.3.0" tar "^4.4.8" which "1" -node-libs-browser@^2.0.0: +node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== @@ -7455,7 +7534,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0: +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -7494,14 +7573,14 @@ npm-bundled@^1.0.1: resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== -npm-lifecycle@^2.1.0, npm-lifecycle@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.1.1.tgz#0027c09646f0fd346c5c93377bdaba59c6748fdf" - integrity sha512-+Vg6I60Z75V/09pdcH5iUo/99Q/vop35PaI99elvxk56azSVVsdsSsS/sXqKDNwbRRNN1qSxkcO45ZOu0yOWew== +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.2.tgz#06f2253ea3b9e122ce3e55e3496670a810afcc84" + integrity sha512-nhfOcoTHrW1lJJlM2o77vTE2RWR4YOVyj7YzmY0y5itsMjEuoJHteio/ez0BliENEPsNxIUQgwhyEW9dShj3Ww== dependencies: byline "^5.0.0" graceful-fs "^4.1.15" - node-gyp "^4.0.0" + node-gyp "^5.0.2" resolve-from "^4.0.0" slide "^1.1.6" uid-number "0.0.6" @@ -7523,10 +7602,10 @@ npm-logical-tree@^1.2.1: semver "^5.5.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== +npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -7540,25 +7619,25 @@ npm-pick-manifest@^2.2.3: npm-package-arg "^6.0.0" semver "^5.4.1" -npm-profile@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.1.tgz#d350f7a5e6b60691c7168fbb8392c3603583f5aa" - integrity sha512-NQ1I/1Q7YRtHZXkcuU1/IyHeLy6pd+ScKg4+DQHdfsm769TGq6HPrkbuNJVJS4zwE+0mvvmeULzQdWn2L2EsVA== +npm-profile@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.2.tgz#8272a71c19634d0dce9c35a5daf8ee589cbb0f52" + integrity sha512-VRsC04pvRH+9cF+PoVh2nTmJjiG21yu59IHpsBpkxk+jaGAV8lxx96G4SDc0jOHAkfWLXbc6kIph3dGAuRnotQ== dependencies: aproba "^1.1.2 || 2" figgy-pudding "^3.4.1" - npm-registry-fetch "^3.8.0" + npm-registry-fetch "^4.0.0" -npm-registry-fetch@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz#44d841780e2833f06accb34488f8c7450d1a6856" - integrity sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw== +npm-registry-fetch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#5ef75845b605855c7964472542c25da172af8677" + integrity sha512-Jllq35Jag8dtv0M17ue74XtdQTyqKzuAYGiX9mAjOhkmNjib3bBUgK6mUY61+AHnXeSRobQkpY3/xIOS/omptw== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" figgy-pudding "^3.4.1" - lru-cache "^4.1.3" - make-fetch-happen "^4.0.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" npm-package-arg "^6.1.0" npm-run-path@^2.0.0: @@ -7713,6 +7792,16 @@ object.reduce@^1.0.0: for-own "^1.0.0" make-iterator "^1.0.0" +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + octokit-pagination-methods@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" @@ -7817,7 +7906,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0, osenv@^0.1.4, osenv@^0.1.5: +osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -7882,10 +7971,10 @@ p-map-series@^1.0.0: dependencies: p-reduce "^1.0.0" -p-map@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-pipe@^1.2.0: version "1.2.0" @@ -7931,18 +8020,18 @@ package-hash@^3.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -pacote@^9.2.3, pacote@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.1.tgz#adb0d23daeef6d0b813ab5891d0c6459ccec998d" - integrity sha512-Zqvczvf/zZ7QNosdE9uTC7SRuvSs9tFqRkF6cJl+2HH7COBnx4BRAGpeXJlrbN+mM0CMHpbi620xdEHhCflghA== +pacote@^9.5.3, pacote@^9.5.4: + version "9.5.4" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.4.tgz#8baa26f3d1326d13dc2fe0fe84040a364ae30aad" + integrity sha512-nWr0ari6E+apbdoN0hToTKZElO5h4y8DGFa2pyNA5GQIdcP0imC96bA0bbPw1gpeguVIiUgHHaAlq/6xfPp8Qw== dependencies: bluebird "^3.5.3" - cacache "^11.3.2" + cacache "^12.0.0" figgy-pudding "^3.5.1" get-stream "^4.1.0" glob "^7.1.3" lru-cache "^5.1.1" - make-fetch-happen "^4.0.1" + make-fetch-happen "^5.0.0" minimatch "^3.0.4" minipass "^2.3.5" mississippi "^3.0.0" @@ -7951,7 +8040,7 @@ pacote@^9.2.3, pacote@^9.5.1: npm-package-arg "^6.1.0" npm-packlist "^1.1.12" npm-pick-manifest "^2.2.3" - npm-registry-fetch "^3.8.0" + npm-registry-fetch "^4.0.0" osenv "^0.1.5" promise-inflight "^1.0.1" promise-retry "^1.1.1" @@ -8213,6 +8302,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" + integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8426,9 +8520,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.1.33" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.33.tgz#5533d9384ca7aab86425198e10e8053ebfeab661" - integrity sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw== + version "1.3.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" + integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== public-encrypt@^4.0.0: version "4.0.3" @@ -8533,12 +8627,12 @@ randomfill@^1.0.3: safe-buffer "^5.1.0" raw-body@^2.3.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== dependencies: bytes "3.1.0" - http-errors "1.7.2" + http-errors "1.7.3" iconv-lite "0.4.24" unpipe "1.0.0" @@ -8586,15 +8680,13 @@ read-installed@^4.0.3: graceful-fs "^4.1.2" read-package-tree@^5.1.6: - version "5.2.2" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.2.tgz#4b6a0ef2d943c1ea36a578214c9a7f6b7424f7a8" - integrity sha512-rW3XWUUkhdKmN2JKB4FL563YAgtINifso5KShykufR03nJ5loGFlkUMe1g/yxmqX073SoYYTsgXu7XdDinKZuA== + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - once "^1.3.0" read-package-json "^2.0.0" readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" read-pkg-up@^1.0.1: version "1.0.1" @@ -8715,9 +8807,9 @@ readable-stream@~1.1.9: string_decoder "~0.10.x" readdir-scoped-modules@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" - integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -8937,10 +9029,10 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: path-parse "^1.0.6" @@ -8957,7 +9049,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retire@^2.0.2: +retire@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/retire/-/retire-2.0.3.tgz#93abe4ae012486c405534bc7680d9d836c00218e" integrity sha512-HeAGDZ2iLENYerTM/sfs2Rcrk++WaLX76RpP89ARTmlkIAAWrhC8KcEfi845czV22pLXAlcnmgz9xESGafjXBg== @@ -9009,11 +9101,16 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -9052,10 +9149,10 @@ semver-greatest-satisfied-range@^1.1.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.2.tgz#079960381376a3db62eb2edc8a3bfb10c7cfe318" - integrity sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ== +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@~5.3.0: version "5.3.0" @@ -9136,17 +9233,17 @@ sinon-chai@^3.3.0: resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.3.0.tgz#8084ff99451064910fbe2c2cb8ab540c00b740ea" integrity sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA== -sinon@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.3.2.tgz#82dba3a6d85f6d2181e1eca2c10d8657c2161f28" - integrity sha512-thErC1z64BeyGiPvF8aoSg0LEnptSaWE7YhdWWbWXgelOyThent7uKOnnEh9zBxDbKixtr5dEko+ws1sZMuFMA== +sinon@^7.4.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.4.1.tgz#bcd0c63953893e87fa0cc502f52489c32a83d4d9" + integrity sha512-7s9buHGHN/jqoy/v4bJgmt0m1XEkCEd/tqdHXumpBp0JSujaT4Ng84JU5wDdK4E85ZMq78NuDe0I3NAqXY8TFg== dependencies: "@sinonjs/commons" "^1.4.0" "@sinonjs/formatio" "^3.2.1" - "@sinonjs/samsam" "^3.3.1" + "@sinonjs/samsam" "^3.3.2" diff "^3.5.0" - lolex "^4.0.1" - nise "^1.4.10" + lolex "^4.2.0" + nise "^1.5.1" supports-color "^5.5.0" slash@^1.0.0: @@ -9154,6 +9251,11 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -9218,16 +9320,16 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -snooplogg@^2.0.0, snooplogg@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/snooplogg/-/snooplogg-2.0.1.tgz#f8fd5bda1eef47e807c067d0a8d57e0514855805" - integrity sha512-F92r3ccDB4mnzZ3eFFPXDnG10iIj6eiShCiDmO4hQLNhV8rpOtUBl2VbGW1BKIOSDCXJuhFxj6yWtK6MCGa4rw== +snooplogg@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/snooplogg/-/snooplogg-2.1.0.tgz#3ea78698b21222f0d2e8ca51c3084a3cc89efe6b" + integrity sha512-cRrUOZdQCxoDqMtV9u9ss1psSTdysXkLyRHWriFO7DqSQN2FbP2RGoLkyLiq2OJ+9+XxNVjdAl6F/5IuBsNZLw== dependencies: - bryt "^1.0.0" - chalk "^2.4.1" + bryt "^1.0.1" + chalk "^2.4.2" nanobuffer "^1.1.4" - source-map-support "^0.5.9" - supports-color "^5.5.0" + source-map-support "^0.5.12" + supports-color "^7.0.0" socks-proxy-agent@^4.0.0: version "4.0.2" @@ -9268,10 +9370,10 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.12, source-map-support@^0.5.9, source-map-support@~0.5.10: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== +source-map-support@^0.5.12, source-map-support@^0.5.13, source-map-support@^0.5.9, source-map-support@~0.5.12: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9330,9 +9432,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" - integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -9580,11 +9682,16 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + strong-log-transformer@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -9651,6 +9758,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.0.0.tgz#f2392c50ab35bb3cae7beebf24d254a19f880c06" + integrity sha512-WRt32iTpYEZWYOpcetGm0NPeSvaebccx7hhS/5M6sAiqnhedtFCHFxkjzZlJvFNCPowiKSFGiZk5USQDFy83vQ== + dependencies: + has-flag "^4.0.0" + sver-compat@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" @@ -9665,12 +9779,12 @@ sver-compat@^1.5.0: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^5.2.3: - version "5.4.1" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.1.tgz#0691ae2ebe8259858efb63e550b6d5f9300171e8" - integrity sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w== + version "5.4.5" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.5.tgz#c8f4ea2d8fee08c0027fac27b0ec0a4fe01dfa42" + integrity sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA== dependencies: - ajv "^6.9.1" - lodash "^4.17.11" + ajv "^6.10.2" + lodash "^4.17.14" slice-ansi "^2.1.0" string-width "^3.0.0" @@ -9684,7 +9798,7 @@ taffydb@2.7.3: resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.7.3.tgz#2ad37169629498fca5bc84243096d3cde0ec3a34" integrity sha1-KtNxaWKUmPylvIQkMJbTzeDsOjQ= -tapable@^1.0.0, tapable@^1.1.0: +tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== @@ -9700,7 +9814,7 @@ tar-stream@^2.1.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4, tar@^4.4.8: +tar@^4, tar@^4.4.10, tar@^4.4.8: version "4.4.10" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== @@ -9730,30 +9844,29 @@ temp-write@^3.4.0: temp-dir "^1.0.0" uuid "^3.0.1" -terser-webpack-plugin@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" - integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== +terser-webpack-plugin@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" + integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== dependencies: - cacache "^11.3.2" - find-cache-dir "^2.0.0" + cacache "^12.0.2" + find-cache-dir "^2.1.0" is-wsl "^1.1.0" - loader-utils "^1.2.3" schema-utils "^1.0.0" serialize-javascript "^1.7.0" source-map "^0.6.1" - terser "^4.0.0" - webpack-sources "^1.3.0" + terser "^4.1.2" + webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374" - integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA== +terser@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.3.tgz#6074fbcf3517561c3272ea885f422c7a8c32d689" + integrity sha512-on13d+cnpn5bMouZu+J8tPYQecsdRJCJuxFJ+FVoPBoLJgk5bCBkp+Uen2hWyi0KIUm6eDarnlAlH+KgIx/PuQ== dependencies: - commander "^2.19.0" + commander "^2.20.0" source-map "~0.6.1" - source-map-support "~0.5.10" + source-map-support "~0.5.12" test-exclude@^5.2.3: version "5.2.3" @@ -9896,6 +10009,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -10013,6 +10133,11 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + type-is@^1.6.16: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -10022,9 +10147,9 @@ type-is@^1.6.16: mime-types "~2.1.24" type@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/type/-/type-1.0.1.tgz#084c9a17fcc9151a2cdb1459905c2e45e4bb7d61" - integrity sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179" + integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg== typedarray@^0.0.6: version "0.0.6" @@ -10106,10 +10231,10 @@ unique-stream@^2.0.2: json-stable-stringify-without-jsonify "^1.0.1" through2-filter "^3.0.0" -universal-user-agent@^2.0.0, universal-user-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.1.0.tgz#5abfbcc036a1ba490cb941f8fd68c46d3669e8e4" - integrity sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q== +universal-user-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-3.0.0.tgz#4cc88d68097bffd7ac42e3b7c903e7481424b4b9" + integrity sha512-T3siHThqoj5X0benA5H0qcDnrKGXzU8TKoX15x/tQHw1hQBvIEBHjxQ2klizYsqBOO/Q+WuxoQUihadeeqDnoA== dependencies: os-name "^3.0.0" @@ -10176,6 +10301,13 @@ util-extend@^1.0.1: resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -10195,10 +10327,10 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -v8-compile-cache@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== v8flags@^3.0.1: version "3.1.3" @@ -10325,7 +10457,7 @@ walkdir@0.0.7: resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.0.7.tgz#04da0270a87a778540173cdbf0a2db499a8d9e29" integrity sha1-BNoCcKh6d4VAFzzb8KLbSZqNnik= -watchpack@^1.5.0: +watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== @@ -10351,43 +10483,42 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-sources@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.35.0: - version "4.35.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.35.0.tgz#ad3f0f8190876328806ccb7a36f3ce6e764b8378" - integrity sha512-M5hL3qpVvtr8d4YaJANbAQBc4uT01G33eDpl/psRTBCfjxFTihdhin1NtAKB1ruDwzeVdcsHHV3NX+QsAgOosw== +webpack@^4.39.1: + version "4.39.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.1.tgz#60ed9fb2b72cd60f26ea526c404d2a4cc97a1bd8" + integrity sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" "@webassemblyjs/wasm-edit" "1.8.5" "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.0.5" - acorn-dynamic-import "^4.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^1.0.0" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" enhanced-resolve "^4.1.0" - eslint-scope "^4.0.0" + eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" - node-libs-browser "^2.0.0" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" schema-utils "^1.0.0" - tapable "^1.1.0" - terser-webpack-plugin "^1.1.0" - watchpack "^1.5.0" - webpack-sources "^1.3.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.1" + watchpack "^1.6.0" + webpack-sources "^1.4.1" whatwg-url-compat@~0.6.5: version "0.6.5" @@ -10441,14 +10572,14 @@ winreg@^1.2.4: resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b" integrity sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs= -winreglib@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/winreglib/-/winreglib-1.0.2.tgz#09d915a940eb8321a29dab56977ae4f8627bc44d" - integrity sha512-SwwJJllsf62CHK8Gt0RC5osNJjg/jepmrVB61+D17a+3C6MjDjjiaA4pLsTMN9bCLpw8Ydyp3JXk8CVPJGR4iw== +winreglib@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/winreglib/-/winreglib-1.0.5.tgz#a3ed6d3b0b8b1a2e9b84c46b0bd7ce4833487edf" + integrity sha512-mm7h162Tih+ymQHKgfs1YQagfUimHemm12QYAcFBxeAaX7WS6e6xdUl2wcwOMDK6ZFWxgM+EtqQOXlGpOdgKfg== dependencies: - napi-macros "^1.8.2" + napi-macros "^2.0.0" node-gyp-build "^4.1.0" - snooplogg "^2.0.1" + snooplogg "^2.1.0" wordwrap@~0.0.2: version "0.0.3" @@ -10498,7 +10629,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-json-file@^2.2.0, write-json-file@^2.3.0: +write-json-file@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= @@ -10510,6 +10641,18 @@ write-json-file@^2.2.0, write-json-file@^2.3.0: sort-keys "^2.0.0" write-file-atomic "^2.0.0" +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + write-pkg@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" @@ -10525,17 +10668,17 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.0.1.tgz#1a04e86cc3a57c03783f4910fdb090cf31b8e165" - integrity sha512-ILHfMbuqLJvnSgYXLgy4kMntroJpe8hT41dOVWM8bxRuw6TK4mgMp9VJUNsZTEc5Bh+Mbs0DJT4M0N+wBG9l9A== +ws@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.1.tgz#f9942dc868b6dffb72c14fd8f2ba05f77a4d5983" + integrity sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A== dependencies: async-limiter "^1.0.0" -x-xss-protection@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.1.0.tgz#4f1898c332deb1e7f2be1280efb3e2c53d69c1a7" - integrity sha512-rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg== +x-xss-protection@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.2.0.tgz#3170498ff8e7e8159f4896b27fa4d4810c2ff486" + integrity sha512-xN0kV+8XfOQM2OPPBdEbGtbvJNNP1pvZR7sE6d44cjJFQG4OiGDdienPg5iOUGswBTiGbBvtYDURd30BMJwwqg== "xml-name-validator@>= 2.0.1 < 3.0.0": version "2.0.1" @@ -10558,9 +10701,9 @@ xmldom@0.1.x: integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^3.2.1: version "3.2.1" @@ -10598,7 +10741,7 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.0.0, yargs-parser@^13.1.0: +yargs-parser@^13.0.0, yargs-parser@^13.1.1: version "13.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== @@ -10658,21 +10801,20 @@ yargs@^12.0.1, yargs@^12.0.5: yargs-parser "^11.1.1" yargs@^13.2.2: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== dependencies: cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" - os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.0" + yargs-parser "^13.1.1" yargs@^7.1.0: version "7.1.0" @@ -10693,6 +10835,11 @@ yargs@^7.1.0: y18n "^3.2.1" yargs-parser "^5.0.0" +yarn@^1.17.3: + version "1.17.3" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.17.3.tgz#60e0b77d079eb78e753bb616f7592b51b6a9adce" + integrity sha512-CgA8o7nRZaQvmeF/WBx2FC7f9W/0X59T2IaLYqgMo6637wfp5mMEsM3YXoJtKUspnpmDJKl/gGFhnqS+sON7hA== + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"