From b00e4efd6581a62cef76bb7c6867d308791df80e Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Thu, 27 Jun 2019 00:02:17 -0500 Subject: [PATCH 01/23] BREAKING CHANGE(appcd-default-plugins): Switched to installing default plugins at runtime to avoid user permissions. chore(appcd-default-plugins): v4.0.0 --- packages/appcd-core/CHANGELOG.md | 3 +- packages/appcd-core/package.json | 2 +- packages/appcd-core/src/server.js | 4 + packages/appcd-default-plugins/.npmignore | 1 - packages/appcd-default-plugins/CHANGELOG.md | 6 +- packages/appcd-default-plugins/README.md | 23 +- packages/appcd-default-plugins/gulpfile.js | 8 + packages/appcd-default-plugins/package.json | 21 +- packages/appcd-default-plugins/postinstall.js | 122 --------- packages/appcd-default-plugins/src/index.js | 240 ++++++++++++++++++ .../test/test-default-plugins.js | 51 ++++ yarn.lock | 55 ++-- 12 files changed, 365 insertions(+), 171 deletions(-) create mode 100644 packages/appcd-default-plugins/gulpfile.js delete mode 100644 packages/appcd-default-plugins/postinstall.js create mode 100644 packages/appcd-default-plugins/src/index.js create mode 100644 packages/appcd-default-plugins/test/test-default-plugins.js diff --git a/packages/appcd-core/CHANGELOG.md b/packages/appcd-core/CHANGELOG.md index 728475c83..7ac6cd448 100644 --- a/packages/appcd-core/CHANGELOG.md +++ b/packages/appcd-core/CHANGELOG.md @@ -1,5 +1,6 @@ -# v2.8.1 +# v2.9.0 + * chore: Updated to `appcd-default-plugins@4.0.0`, * chore: Updated dependencies # v2.8.0 (Jun 25, 2019) diff --git a/packages/appcd-core/package.json b/packages/appcd-core/package.json index 71500a8a2..f21263b5e 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", diff --git a/packages/appcd-core/src/server.js b/packages/appcd-core/src/server.js index 296f013e3..61b2d5dc6 100644 --- a/packages/appcd-core/src/server.js +++ b/packages/appcd-core/src/server.js @@ -5,6 +5,7 @@ import fs from 'fs-extra'; import FSWatcher from 'appcd-fswatcher'; import FSWatchManager from 'appcd-fswatch-manager'; import globalModules from 'global-modules'; +import installDefaultPlugins from 'appcd-default-plugins'; import os from 'os'; import path from 'path'; import PluginManager from 'appcd-plugin'; @@ -188,6 +189,9 @@ export default class Server { this.systems.subprocessManager = new SubprocessManager(); Dispatcher.register('/appcd/subprocess', this.systems.subprocessManager); + // install default plugins + await installDefaultPlugins(path.join(homeDir, 'plugins')); + // init the plugin manager this.systems.pluginManager = new PluginManager({ paths: [ 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..6fdbbe1cb 100644 --- a/packages/appcd-default-plugins/CHANGELOG.md +++ b/packages/appcd-default-plugins/CHANGELOG.md @@ -1,5 +1,6 @@ -# v3.0.1 +# v4.0.0 + * BREAKING CHANGE: Default plugins are now installed at runtime instead of postinstall. * chore: Updated dependencies # v3.0.0 (Jun 25, 2019) @@ -9,6 +10,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..a8ee82222 100644 --- a/packages/appcd-default-plugins/README.md +++ b/packages/appcd-default-plugins/README.md @@ -5,22 +5,21 @@ user's appcd home directrory (e.g. `"~/.appcelerator/appcd/plugins"`). Visit https://github.com/appcelerator/appc-daemon for more information. -## Overview +## Usage -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. +```js +import installDefaultPlugins from 'appcd-default-plugins'; -If any of the plugins match locally linked packages using _yarn_, then it will use those instead of -installing from _npm_. +await installDefaultPlugins('/path/to/plugins/dir'); +``` -A list of packages to be installed is used to create a monorepo in the `plugins` directory, then -it runs `lerna` to initialize it. +`installDefaultPlugins()` will download all default plugins if not already installed. If any of the +plugins match locally linked packages using _yarn_, then it will use those instead of installing +from _npm_. -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. +The default plugins are installed into a `packages` directory inside the specified plugins +directory, then it initializes the plugins directory as a monorepo and runs `lerna bootstrap` using +`yarn`. ## 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..0b1248fd7 100644 --- a/packages/appcd-default-plugins/package.json +++ b/packages/appcd-default-plugins/package.json @@ -1,18 +1,32 @@ { "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", + "prepare": "gulp build", + "test": "gulp test" + }, "dependencies": { + "appcd-logger": "^2.0.2", "fs-extra": "^8.0.1", + "globule": "^1.2.1", "lerna": "^3.15.0", "pacote": "^9.5.1", "semver": "^6.1.2", - "which": "^1.3.1" + "yarn": "^1.16.0" + }, + "devDependencies": { + "appcd-gulp": "^2.1.1", + "tmp": "^0.1.0" }, "plugins": { "@appcd/plugin-android": [ @@ -37,9 +51,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 deleted file mode 100644 index 7c057cd96..000000000 --- a/packages/appcd-default-plugins/postinstall.js +++ /dev/null @@ -1,122 +0,0 @@ -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; - } - } - 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); - } -})(); diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js new file mode 100644 index 000000000..14fc3c3ab --- /dev/null +++ b/packages/appcd-default-plugins/src/index.js @@ -0,0 +1,240 @@ +import appcdLogger from 'appcd-logger'; +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 = appcdLogger('appcd:default-plugins'); +const { highlight } = appcdLogger.styles; + +/** + * ? + * + * @param {String} pluginsDir - Path to the plugins directory. + * @returns {Promise} + */ +export default 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'); + } + + // 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 packagesDir = path.join(pluginsDir, 'packages'); + const invalidDir = path.join(pluginsDir, 'invalid'); + const linksDir = path.join(os.homedir(), '.config', 'yarn', 'link'); + const workspaces = []; + const { plugins } = fs.readJsonSync(path.resolve(__dirname, '..', 'package.json')); + const installed = {}; + + // make sure the plugins/packages directory exists + fs.mkdirsSync(packagesDir); + + // 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 { name, version } = fs.readJsonSync(pkgJsonFile); + + const nameDir = path.dirname(path.dirname(rel)); + const versionDir = path.basename(src); + + if (name !== nameDir) { + if (fs.lstatSync(src).isSymbolicLink()) { + logger.warn(`Plugin directory name mismatch: ${highlight(`${name}@${version}`)} found in ${highlight(nameDir)}, unlinking...`); + fs.unlinkSync(src); + } else { + logger.warn(`Plugin directory name mismatch: ${highlight(`${name}@${version}`)} found in ${highlight(nameDir)}, invalidating...`); + fs.moveSync(src, path.join(invalidDir, path.dirname(rel)), { overwrite: true }); + } + continue; + } + + if (version !== versionDir) { + logger.warn(`Plugin directory version mismatch: ${highlight(`${name}@${version}`)} found in ${highlight(versionDir)}, invalidating...`); + fs.moveSync(src, path.join(invalidDir, path.dirname(rel)), { overwrite: true }); + continue; + } + + if (installed[name]) { + installed[name].push(version); + } else { + installed[name] = [ version ]; + } + } + + // a function that installs/link a single plugin/version + const processPlugin = async (name, spec) => { + let link; + let manifest; + + // check for a local yarn link first + try { + const dir = path.join(linksDir, name); + const { name, version } = await fs.readJson(dir, 'package.json'); + if (semver.satisfies(version, spec)) { + link = { name, version, path: dir }; + } + } catch (e) { + // link does not exist, oh well + } + + // query npm + try { + manifest = await pacote.manifest(`${name}@${spec}`); + } catch (e) { + logger.warn(`Unable to find default plugin on npm: ${highlight(`${name}@${spec}`)}`); + } + + // either download from npm or symlink + if (manifest && (!link || semver.gt(manifest.version, link.version))) { + if (installed[name] && installed[name].includes(manifest.version)) { + logger.log(`Default plugin already installed: ${highlight(`${manifest.name}@${manifest.version}`)}`); + } else { + logger.log(`Downloading ${highlight(`${manifest.name}@${manifest.version}`)}`); + await pacote.extract(`${manifest.name}@${manifest.version}`, path.join(packagesDir, manifest.name, manifest.version)); + } + workspaces.push(`packages/${manifest.name}/${manifest.version}`); + } else if (link) { + if (installed[name] && installed[name].includes(link.version)) { + logger.log(`Default plugin already linked: ${highlight(`${link.name}@${link.version}`)}`); + } else { + const dest = path.join(packagesDir, link.name, link.version); + logger.log(`Symlinking ${highlight(link.path)} => ${highlight(path.relative(pluginsDir, dest))}`); + fs.symlinkSync(link.path, dest, 'dir'); + } + workspaces.push(`packages/${link.name}/${link.version}`); + } else { + logger.error(`Failed to install default plugin: ${highlight(`${name}@${spec}`)}`); + } + }; + + // build the list of process plugin promises + const pluginsList = []; + for (const [ name, versions ] of Object.entries(plugins)) { + for (const spec of versions) { + pluginsList.push(processPlugin(name, spec)); + } + } + + // loop over each required plugin and install/link them + await Promise.all(pluginsList); + + // write the json files + logger.log(`Writing ${highlight('plugins/package.json')}`); + fs.writeFileSync(path.join(pluginsDir, 'package.json'), JSON.stringify({ + name: 'root', + private: true, + version: '0.0.0', + workspaces + }, null, 2)); + + logger.log(`Writing ${highlight('plugins/lerna.json')}`); + fs.writeFileSync(path.join(pluginsDir, 'lerna.json'), JSON.stringify({ + npmClient: 'yarn', + npmClientArgs: [ + '--emoji=false', + '--ignore-engines', + '--no-lockfile', + '--no-progress', + '--production' + ], + useWorkspaces: true, + version: 'independent' + }, null, 2)); + + // run lerna and add yarn to the system path + logger.log(`Executing: ${highlight(`${process.execPath} lerna bootstrap`)}`); + const child = spawn(process.execPath, [ lerna, 'bootstrap', '--no-progress' ], { + 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(); + }); + }); + + logger.log(`Finished in ${highlight(((new Date() - start) / 1000).toFixed(1))} seconds`); +} + +/** + * 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))) { + 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..d6eb43468 --- /dev/null +++ b/packages/appcd-default-plugins/test/test-default-plugins.js @@ -0,0 +1,51 @@ +import fs from 'fs-extra'; +import installDefaultPlugins from '../dist/index'; +import path from 'path'; +import tmp from 'tmp'; + +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/yarn.lock b/yarn.lock index 3b522d9d5..7c1c3d15c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3535,9 +3535,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" @@ -4875,9 +4875,9 @@ glogg@^1.0.0: 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== + version "4.2.0" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" + integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -5277,18 +5277,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== @@ -8533,12 +8522,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 +8575,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.0" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.0.tgz#4f95472e45e7145fb77f4069d12844b139f5ea12" + integrity sha512-Gi64+EWmi4515E1rPR77ae/Ip8cjFQTlsWytSYJj974U0tSnxm67pyXltbDjB1lvLw4dc85HbtidGL1K2c/oxw== 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" @@ -10176,6 +10163,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" @@ -10693,6 +10687,11 @@ yargs@^7.1.0: y18n "^3.2.1" yargs-parser "^5.0.0" +yarn@^1.16.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.16.0.tgz#5701b58ac555ff91f7b889b7d791b3dc86f8f999" + integrity sha512-cfemyGlnWKA1zopUUgebTPf8C4WkPIZ+TJmklwcEAJ4u6oWPtJeAzrsamaGGh/+b1XWe8W51yzAImC4AWbWR1g== + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" From 8e6dc98bca3f881bfc3acaa0571c643744447a00 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Thu, 27 Jun 2019 00:18:58 -0500 Subject: [PATCH 02/23] fix(appcd-default-plugins): Fixed spawning lerna on Windows. --- packages/appcd-default-plugins/src/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js index 14fc3c3ab..4b26ac00e 100644 --- a/packages/appcd-default-plugins/src/index.js +++ b/packages/appcd-default-plugins/src/index.js @@ -165,8 +165,10 @@ export default async function installDefaultPlugins(pluginsDir) { }, null, 2)); // run lerna and add yarn to the system path - logger.log(`Executing: ${highlight(`${process.execPath} lerna bootstrap`)}`); - const child = spawn(process.execPath, [ lerna, 'bootstrap', '--no-progress' ], { + 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, From f72734b8f68b9317304ea8f715e69e2686591aae Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Thu, 27 Jun 2019 00:24:04 -0500 Subject: [PATCH 03/23] fix(appcd-default-plugins): Fixed spawning lerna on Windows again. --- packages/appcd-default-plugins/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js index 4b26ac00e..209adaa38 100644 --- a/packages/appcd-default-plugins/src/index.js +++ b/packages/appcd-default-plugins/src/index.js @@ -234,7 +234,7 @@ export default async function installDefaultPlugins(pluginsDir) { */ 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))) { + if (fs.existsSync(bin = path.join(cur, 'node_modules', '.bin', name + (process.platform === 'win32' ? '.cmd' : '')))) { return bin; } } From f9c2edb45a3d93985e946bc9ac401c2899a19302 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 2 Jul 2019 02:30:50 -0500 Subject: [PATCH 04/23] feat: Attempt to install plugins postinstall and optionally at runtime. fix: Properly handle file permission errors. fix: Add support for installed plugins. --- packages/appcd-core/src/server.js | 65 ++-- packages/appcd-default-plugins/CHANGELOG.md | 3 +- packages/appcd-default-plugins/README.md | 50 ++- packages/appcd-default-plugins/package.json | 1 + packages/appcd-default-plugins/postinstall.js | 24 ++ packages/appcd-default-plugins/src/index.js | 366 +++++++++++------- .../test/test-default-plugins.js | 2 +- 7 files changed, 330 insertions(+), 181 deletions(-) create mode 100644 packages/appcd-default-plugins/postinstall.js diff --git a/packages/appcd-core/src/server.js b/packages/appcd-core/src/server.js index 61b2d5dc6..23e4c7722 100644 --- a/packages/appcd-core/src/server.js +++ b/packages/appcd-core/src/server.js @@ -5,7 +5,6 @@ import fs from 'fs-extra'; import FSWatcher from 'appcd-fswatcher'; import FSWatchManager from 'appcd-fswatch-manager'; import globalModules from 'global-modules'; -import installDefaultPlugins from 'appcd-default-plugins'; import os from 'os'; import path from 'path'; import PluginManager from 'appcd-plugin'; @@ -18,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'; @@ -89,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 @@ -123,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 }) => { @@ -132,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 { @@ -152,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(); @@ -189,9 +203,6 @@ export default class Server { this.systems.subprocessManager = new SubprocessManager(); Dispatcher.register('/appcd/subprocess', this.systems.subprocessManager); - // install default plugins - await installDefaultPlugins(path.join(homeDir, 'plugins')); - // init the plugin manager this.systems.pluginManager = new PluginManager({ paths: [ diff --git a/packages/appcd-default-plugins/CHANGELOG.md b/packages/appcd-default-plugins/CHANGELOG.md index 6fdbbe1cb..c48cf45bb 100644 --- a/packages/appcd-default-plugins/CHANGELOG.md +++ b/packages/appcd-default-plugins/CHANGELOG.md @@ -1,6 +1,7 @@ # v4.0.0 - * BREAKING CHANGE: Default plugins are now installed at runtime instead of postinstall. + * BREAKING CHANGE: `appcd-default-plugins` supports both postinstall and runtime installation of + default plugins. * chore: Updated dependencies # v3.0.0 (Jun 25, 2019) diff --git a/packages/appcd-default-plugins/README.md b/packages/appcd-default-plugins/README.md index a8ee82222..d522cfce5 100644 --- a/packages/appcd-default-plugins/README.md +++ b/packages/appcd-default-plugins/README.md @@ -1,25 +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. ## Usage ```js -import installDefaultPlugins from 'appcd-default-plugins'; +import { installDefaultPlugins } from 'appcd-default-plugins'; await installDefaultPlugins('/path/to/plugins/dir'); ``` -`installDefaultPlugins()` will download all default plugins if not already installed. If any of the -plugins match locally linked packages using _yarn_, then it will use those instead of installing -from _npm_. - -The default plugins are installed into a `packages` directory inside the specified plugins -directory, then it initializes the plugins directory as a monorepo and runs `lerna bootstrap` using -`yarn`. +## 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/package.json b/packages/appcd-default-plugins/package.json index 0b1248fd7..b83179154 100644 --- a/packages/appcd-default-plugins/package.json +++ b/packages/appcd-default-plugins/package.json @@ -12,6 +12,7 @@ "build": "gulp build", "coverage": "gulp coverage", "docs": "gulp docs", + "postinstall": "node postinstall.js", "prepare": "gulp build", "test": "gulp test" }, diff --git a/packages/appcd-default-plugins/postinstall.js b/packages/appcd-default-plugins/postinstall.js new file mode 100644 index 000000000..85c2e679e --- /dev/null +++ b/packages/appcd-default-plugins/postinstall.js @@ -0,0 +1,24 @@ +const os = require('os'); +const { createInstanceWithDefaults, StdioStream } = require('appcd-logger'); +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); + } + }); diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js index 209adaa38..8decea876 100644 --- a/packages/appcd-default-plugins/src/index.js +++ b/packages/appcd-default-plugins/src/index.js @@ -12,18 +12,36 @@ const logger = appcdLogger('appcd:default-plugins'); const { highlight } = appcdLogger.styles; /** - * ? + * Ensures the default appcd plugins are installed. * * @param {String} pluginsDir - Path to the plugins directory. * @returns {Promise} */ -export default async function installDefaultPlugins(pluginsDir) { +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_${Math.random()*1e6.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) { @@ -41,190 +59,254 @@ export default async function installDefaultPlugins(pluginsDir) { return; } - const packagesDir = path.join(pluginsDir, 'packages'); - const invalidDir = path.join(pluginsDir, 'invalid'); const linksDir = path.join(os.homedir(), '.config', 'yarn', 'link'); - const workspaces = []; const { plugins } = fs.readJsonSync(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 + } - // make sure the plugins/packages directory exists - fs.mkdirsSync(packagesDir); + 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 { name, version } = fs.readJsonSync(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) { - if (fs.lstatSync(src).isSymbolicLink()) { - logger.warn(`Plugin directory name mismatch: ${highlight(`${name}@${version}`)} found in ${highlight(nameDir)}, unlinking...`); - fs.unlinkSync(src); - } else { - logger.warn(`Plugin directory name mismatch: ${highlight(`${name}@${version}`)} found in ${highlight(nameDir)}, invalidating...`); - fs.moveSync(src, path.join(invalidDir, path.dirname(rel)), { overwrite: true }); + 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] = {}; } - continue; + installed[name][version] = path.dirname(pkgJsonFile); + newWorkspaces.add(`packages/${name}/${version}`); } + } - if (version !== versionDir) { - logger.warn(`Plugin directory version mismatch: ${highlight(`${name}@${version}`)} found in ${highlight(versionDir)}, invalidating...`); - fs.moveSync(src, path.join(invalidDir, path.dirname(rel)), { overwrite: true }); - continue; + // 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) { + 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]) { - installed[name].push(version); - } else { - installed[name] = [ version ]; + 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}`); } } - // a function that installs/link a single plugin/version - const processPlugin = async (name, spec) => { - let link; + // install missing plugins + await Promise.all(install.map(async pkg => { let manifest; - // check for a local yarn link first + // query npm try { - const dir = path.join(linksDir, name); - const { name, version } = await fs.readJson(dir, 'package.json'); - if (semver.satisfies(version, spec)) { - link = { name, version, path: dir }; - } + manifest = await pacote.manifest(pkg); } catch (e) { - // link does not exist, oh well + logger.warn(`Unable to find default plugin on npm: ${highlight(pkg)}`); + return; } - // query npm + 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 { - manifest = await pacote.manifest(`${name}@${spec}`); - } catch (e) { - logger.warn(`Unable to find default plugin on npm: ${highlight(`${name}@${spec}`)}`); - } + // 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 }); - // either download from npm or symlink - if (manifest && (!link || semver.gt(manifest.version, link.version))) { - if (installed[name] && installed[name].includes(manifest.version)) { - logger.log(`Default plugin already installed: ${highlight(`${manifest.name}@${manifest.version}`)}`); - } else { - logger.log(`Downloading ${highlight(`${manifest.name}@${manifest.version}`)}`); - await pacote.extract(`${manifest.name}@${manifest.version}`, path.join(packagesDir, manifest.name, manifest.version)); - } - workspaces.push(`packages/${manifest.name}/${manifest.version}`); - } else if (link) { - if (installed[name] && installed[name].includes(link.version)) { - logger.log(`Default plugin already linked: ${highlight(`${link.name}@${link.version}`)}`); - } else { - const dest = path.join(packagesDir, link.name, link.version); - logger.log(`Symlinking ${highlight(link.path)} => ${highlight(path.relative(pluginsDir, dest))}`); - fs.symlinkSync(link.path, dest, 'dir'); - } - workspaces.push(`packages/${link.name}/${link.version}`); - } else { - logger.error(`Failed to install default plugin: ${highlight(`${name}@${spec}`)}`); - } - }; + 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 }); - // build the list of process plugin promises - const pluginsList = []; - for (const [ name, versions ] of Object.entries(plugins)) { - for (const spec of versions) { - pluginsList.push(processPlugin(name, spec)); - } - } + // 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) /; - // loop over each required plugin and install/link them - await Promise.all(pluginsList); - - // write the json files - logger.log(`Writing ${highlight('plugins/package.json')}`); - fs.writeFileSync(path.join(pluginsDir, 'package.json'), JSON.stringify({ - name: 'root', - private: true, - version: '0.0.0', - workspaces - }, null, 2)); - - logger.log(`Writing ${highlight('plugins/lerna.json')}`); - fs.writeFileSync(path.join(pluginsDir, 'lerna.json'), JSON.stringify({ - npmClient: 'yarn', - npmClientArgs: [ - '--emoji=false', - '--ignore-engines', - '--no-lockfile', - '--no-progress', - '--production' - ], - useWorkspaces: true, - version: 'independent' - }, null, 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, '')); + // 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, '')); + 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'); + // 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(); + await new Promise(resolve => { + child.on('close', code => { + out.flush(); + err.flush(); - if (code) { - logger.warn(`lerna exited with code ${highlight(code)}`); - } - resolve(); - }); - }); + 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. diff --git a/packages/appcd-default-plugins/test/test-default-plugins.js b/packages/appcd-default-plugins/test/test-default-plugins.js index d6eb43468..1c5d20b2e 100644 --- a/packages/appcd-default-plugins/test/test-default-plugins.js +++ b/packages/appcd-default-plugins/test/test-default-plugins.js @@ -1,7 +1,7 @@ import fs from 'fs-extra'; -import installDefaultPlugins from '../dist/index'; import path from 'path'; import tmp from 'tmp'; +import { installDefaultPlugins } from '../dist/index'; const tmpDir = tmp.dirSync({ mode: '755', From f7b036368cb587c0cdeb5feb2ab93966862f833f Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 2 Jul 2019 02:32:26 -0500 Subject: [PATCH 05/23] chore: Async cleanup. --- packages/appcd-default-plugins/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js index 8decea876..f607d95a6 100644 --- a/packages/appcd-default-plugins/src/index.js +++ b/packages/appcd-default-plugins/src/index.js @@ -60,7 +60,7 @@ export async function installDefaultPlugins(pluginsDir) { } const linksDir = path.join(os.homedir(), '.config', 'yarn', 'link'); - const { plugins } = fs.readJsonSync(path.resolve(__dirname, '..', 'package.json')); + const { plugins } = await fs.readJson(path.resolve(__dirname, '..', 'package.json')); const installed = {}; const install = []; const newWorkspaces = new Set(); From bd4228a2e991b0e68f5a12c3421f6e42afe74cd3 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 2 Jul 2019 10:17:26 -0500 Subject: [PATCH 06/23] fix: Switched from appcd-logger to snooplogg to fix chicken and egg problem. --- packages/appcd-default-plugins/package.json | 2 +- packages/appcd-default-plugins/postinstall.js | 2 +- packages/appcd-default-plugins/src/index.js | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/appcd-default-plugins/package.json b/packages/appcd-default-plugins/package.json index b83179154..3fb5d707a 100644 --- a/packages/appcd-default-plugins/package.json +++ b/packages/appcd-default-plugins/package.json @@ -17,12 +17,12 @@ "test": "gulp test" }, "dependencies": { - "appcd-logger": "^2.0.2", "fs-extra": "^8.0.1", "globule": "^1.2.1", "lerna": "^3.15.0", "pacote": "^9.5.1", "semver": "^6.1.2", + "snooplogg": "^2.0.1", "yarn": "^1.16.0" }, "devDependencies": { diff --git a/packages/appcd-default-plugins/postinstall.js b/packages/appcd-default-plugins/postinstall.js index 85c2e679e..ea5ee6141 100644 --- a/packages/appcd-default-plugins/postinstall.js +++ b/packages/appcd-default-plugins/postinstall.js @@ -1,5 +1,5 @@ const os = require('os'); -const { createInstanceWithDefaults, StdioStream } = require('appcd-logger'); +const { createInstanceWithDefaults, StdioStream } = require('snooplogg'); const { installDefaultPlugins } = require('./dist/index'); const logger = createInstanceWithDefaults() diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js index f607d95a6..53e457b67 100644 --- a/packages/appcd-default-plugins/src/index.js +++ b/packages/appcd-default-plugins/src/index.js @@ -1,4 +1,4 @@ -import appcdLogger from 'appcd-logger'; +import snooplogg from 'snooplogg'; import fs from 'fs-extra'; import globule from 'globule'; import os from 'os'; @@ -8,8 +8,8 @@ import semver from 'semver'; import { spawn } from 'child_process'; -const logger = appcdLogger('appcd:default-plugins'); -const { highlight } = appcdLogger.styles; +const logger = snooplogg('appcd:default-plugins'); +const { highlight } = snooplogg.styles; /** * Ensures the default appcd plugins are installed. From 7e377cec0e7d4c6c1298b503bb982bcdacd0e051 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 2 Jul 2019 10:32:20 -0500 Subject: [PATCH 07/23] fix: Wrapped the entire postinstall script in a try/catch since it could fail if gulp build hasn't been run when working from the monorepo. --- packages/appcd-default-plugins/postinstall.js | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/packages/appcd-default-plugins/postinstall.js b/packages/appcd-default-plugins/postinstall.js index ea5ee6141..709fcb56b 100644 --- a/packages/appcd-default-plugins/postinstall.js +++ b/packages/appcd-default-plugins/postinstall.js @@ -1,24 +1,26 @@ -const os = require('os'); -const { createInstanceWithDefaults, StdioStream } = require('snooplogg'); -const { installDefaultPlugins } = require('./dist/index'); +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'); + 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); - } - }); + installDefaultPlugins(`${os.homedir()}/.appcelerator/appcd/plugins`) + .catch(err => { + if (err.code === 'EACCES') { + logger.warn(err); + } else { + logger.error(err); + process.exit(1); + } + }); +} catch (e) {} From 777069c56bfc7928b50be03ed908633d9dd19ef0 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 2 Jul 2019 18:05:05 -0500 Subject: [PATCH 08/23] fix(appcd-default-plugins): Fixed yarn link dir for Windows. --- packages/appcd-default-plugins/src/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js index 53e457b67..1258e94a5 100644 --- a/packages/appcd-default-plugins/src/index.js +++ b/packages/appcd-default-plugins/src/index.js @@ -31,7 +31,7 @@ export async function installDefaultPlugins(pluginsDir) { // make sure the plugins/packages directory exists await fs.mkdirs(packagesDir); - const testFile = path.join(packagesDir, 'test_${Math.random()*1e6.txt'); + const testFile = path.join(packagesDir, `test_${Date.now()}.txt`); fs.writeFileSync(testFile, 'delete me'); await fs.remove(testFile); } catch (e) { @@ -59,7 +59,9 @@ export async function installDefaultPlugins(pluginsDir) { return; } - const linksDir = path.join(os.homedir(), '.config', 'yarn', 'link'); + 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 = []; From b4de7dfc940275f833d3379273d66a9be5b689a1 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Wed, 3 Jul 2019 22:52:29 -0500 Subject: [PATCH 09/23] feat(appcd-default-plugins): Only install plugins compatible with current platform. --- packages/appcd-default-plugins/src/index.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js index 53e457b67..be727b88d 100644 --- a/packages/appcd-default-plugins/src/index.js +++ b/packages/appcd-default-plugins/src/index.js @@ -124,7 +124,7 @@ export async function installDefaultPlugins(pluginsDir) { logger.warn(`Failed to parse link package.json: ${pkgJsonFile}`); } - if (appcd) { + if (appcd && (!appcd.os || appcd.os.includes(process.platform))) { const linkPath = path.dirname(pkgJsonFile); if (!installed[name]) { @@ -166,12 +166,22 @@ export async function installDefaultPlugins(pluginsDir) { // query npm try { - manifest = await pacote.manifest(pkg); + 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(`Package manifest missing "appcd" property: ${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)); From f9eae953b1036ee4e3f857c9717d5e045fa2da21 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Wed, 3 Jul 2019 23:28:37 -0500 Subject: [PATCH 10/23] fix(appcd-default-plugins): Fixed plugin platform check. --- packages/appcd-default-plugins/src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/appcd-default-plugins/src/index.js b/packages/appcd-default-plugins/src/index.js index 37b291c76..0cdf5cb0e 100644 --- a/packages/appcd-default-plugins/src/index.js +++ b/packages/appcd-default-plugins/src/index.js @@ -179,8 +179,8 @@ export async function installDefaultPlugins(pluginsDir) { return; } - if (!manifest.appcd.os || manifest.appcd.os.includes(process.platform)) { - logger.warn(`Package manifest missing "appcd" property: ${highlight(pkg)}`); + if (manifest.appcd.os && !manifest.appcd.os.includes(process.platform)) { + logger.warn(`Skipping incompatible plugin: ${highlight(pkg)}`); return; } From 59306b027a678e74b113a71a7df7687668548ff7 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Wed, 10 Jul 2019 10:29:24 -0500 Subject: [PATCH 11/23] chore: Updated npm deps. chore: Fixed eslint warnings. --- package.json | 6 +- packages/appcd-agent/CHANGELOG.md | 5 + packages/appcd-agent/package.json | 2 +- packages/appcd-agent/src/agent.js | 2 +- packages/appcd-client/package.json | 4 +- packages/appcd-config/CHANGELOG.md | 6 + packages/appcd-config/package.json | 10 +- packages/appcd-config/src/config.js | 10 +- packages/appcd-config/test/test-config.js | 6 + packages/appcd-core/package.json | 4 +- packages/appcd-default-plugins/package.json | 6 +- packages/appcd-detect/CHANGELOG.md | 5 + packages/appcd-detect/package.json | 6 +- packages/appcd-dispatcher/CHANGELOG.md | 5 + packages/appcd-dispatcher/package.json | 2 +- .../src/data-service-dispatcher.js | 2 +- packages/appcd-dispatcher/src/dispatcher.js | 2 +- .../src/service-dispatcher.js | 2 +- packages/appcd-fswatch-manager/CHANGELOG.md | 4 + packages/appcd-fswatch-manager/package.json | 2 +- packages/appcd-fswatcher/CHANGELOG.md | 4 + packages/appcd-fswatcher/package.json | 4 +- packages/appcd-gulp/CHANGELOG.md | 3 + packages/appcd-gulp/package.json | 22 +- packages/appcd-gulp/src/babel.js | 7 + packages/appcd-gulp/src/eslint-tests.json | 3 +- packages/appcd-gulp/src/eslint.json | 3 + packages/appcd-http/package.json | 2 +- packages/appcd-logger/CHANGELOG.md | 4 + packages/appcd-logger/package.json | 2 +- packages/appcd-machine-id/CHANGELOG.md | 4 + packages/appcd-machine-id/package.json | 4 +- packages/appcd-nodejs/CHANGELOG.md | 4 + packages/appcd-nodejs/package.json | 2 +- packages/appcd-plugin/CHANGELOG.md | 3 +- packages/appcd-plugin/package.json | 8 +- packages/appcd-plugin/src/plugin.js | 4 +- packages/appcd-request/src/request.js | 2 +- packages/appcd-response/CHANGELOG.md | 5 + packages/appcd-response/package.json | 2 +- packages/appcd-response/src/appcd-error.js | 4 +- packages/appcd-response/src/message.js | 2 +- packages/appcd-subprocess/CHANGELOG.md | 5 + packages/appcd-subprocess/package.json | 2 +- packages/appcd-subprocess/src/subprocess.js | 10 +- packages/appcd-telemetry/CHANGELOG.md | 4 + packages/appcd-telemetry/package.json | 2 +- packages/appcd-util/package.json | 2 +- packages/appcd/CHANGELOG.md | 1 + packages/appcd/src/cli.js | 2 +- yarn.lock | 598 +++++++++--------- 51 files changed, 449 insertions(+), 366 deletions(-) diff --git a/package.json b/package.json index 6916f0f1c..1ab486d80 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", @@ -21,7 +21,7 @@ "progress": "^2.0.3", "promise-limit": "^2.7.0", "retire": "^2.0.2", - "semver": "^6.1.2", + "semver": "^6.2.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..6983fa231 100644 --- a/packages/appcd-agent/package.json +++ b/packages/appcd-agent/package.json @@ -16,7 +16,7 @@ "test": "gulp test" }, "dependencies": { - "nanobuffer": "^1.1.4", + "nanobuffer": "^1.1.5", "source-map-support": "^0.5.12" }, "devDependencies": { 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..9594ffc97 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", "uuid": "^3.3.2", "which": "^1.3.1", - "ws": "^7.0.1" + "ws": "^7.1.0" }, "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..5dbff93be 100644 --- a/packages/appcd-config/package.json +++ b/packages/appcd-config/package.json @@ -16,15 +16,15 @@ "test": "gulp test" }, "dependencies": { - "@babel/parser": "^7.4.5", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/parser": "^7.5.0", + "@babel/traverse": "^7.5.0", + "@babel/types": "^7.5.0", "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", + "fs-extra": "^8.1.0", + "gawk": "^4.6.4", "source-map-support": "^0.5.12" }, "devDependencies": { 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/package.json b/packages/appcd-core/package.json index f21263b5e..ed0bad718 100644 --- a/packages/appcd-core/package.json +++ b/packages/appcd-core/package.json @@ -35,8 +35,8 @@ "appcd-telemetry": "^2.0.1", "appcd-util": "^1.1.7", "cli-kit": "^0.11.1", - "fs-extra": "^8.0.1", - "gawk": "^4.6.3", + "fs-extra": "^8.1.0", + "gawk": "^4.6.4", "global-modules": "^2.0.0", "humanize": "^0.0.9", "msgpack-lite": "^0.1.26" diff --git a/packages/appcd-default-plugins/package.json b/packages/appcd-default-plugins/package.json index 3fb5d707a..9bbe794e7 100644 --- a/packages/appcd-default-plugins/package.json +++ b/packages/appcd-default-plugins/package.json @@ -17,12 +17,12 @@ "test": "gulp test" }, "dependencies": { - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "globule": "^1.2.1", "lerna": "^3.15.0", "pacote": "^9.5.1", - "semver": "^6.1.2", - "snooplogg": "^2.0.1", + "semver": "^6.2.0", + "snooplogg": "^2.1.0", "yarn": "^1.16.0" }, "devDependencies": { diff --git a/packages/appcd-detect/CHANGELOG.md b/packages/appcd-detect/CHANGELOG.md index a4cbf6516..d22064d98 100644 --- a/packages/appcd-detect/CHANGELOG.md +++ b/packages/appcd-detect/CHANGELOG.md @@ -1,3 +1,8 @@ +# v2.2.0 + + * feat: Added new `watchRegistryKeys` option for more advanced Windows Registry change detection. + * 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/package.json b/packages/appcd-detect/package.json index c28584144..5829992f9 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" + "winreglib": "^1.0.3" }, "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-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..78c121d3d 100644 --- a/packages/appcd-dispatcher/package.json +++ b/packages/appcd-dispatcher/package.json @@ -18,7 +18,7 @@ "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", 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-fswatch-manager/CHANGELOG.md b/packages/appcd-fswatch-manager/CHANGELOG.md index 925c1fa69..3eb00892c 100644 --- a/packages/appcd-fswatch-manager/CHANGELOG.md +++ b/packages/appcd-fswatch-manager/CHANGELOG.md @@ -1,3 +1,7 @@ +# v2.0.1 + + * chore: Updated dependencies. + # 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..09061dc10 100644 --- a/packages/appcd-fswatch-manager/package.json +++ b/packages/appcd-fswatch-manager/package.json @@ -26,7 +26,7 @@ "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-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..39af8ab29 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" }, "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-gulp/CHANGELOG.md b/packages/appcd-gulp/CHANGELOG.md index 91f1133c5..a1fe5cef1 100644 --- a/packages/appcd-gulp/CHANGELOG.md +++ b/packages/appcd-gulp/CHANGELOG.md @@ -1,5 +1,8 @@ # v2.2.0 + * feat: Added Node 12 Babel profile. + [(DAEMON-275)](https://jira.appcelerator.org/browse/DAEMON-275) + * 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..62594b27c 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.4", + "@babel/plugin-proposal-class-properties": "^7.5.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.4", + "@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", + "ansi-colors": "^4.1.1", "babel-eslint": "^10.0.2", "babel-loader": "^8.0.6", "babel-plugin-dynamic-import-node": "^2.3.0", @@ -32,13 +32,13 @@ "eslint-plugin-chai-friendly": "^0.4.1", "eslint-plugin-mocha": "^5.3.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", @@ -46,7 +46,7 @@ "nyc": "^14.1.1", "sinon": "^7.3.2", "sinon-chai": "^3.3.0", - "webpack": "^4.35.0" + "webpack": "^4.35.3" }, "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..85ac21689 100644 --- a/packages/appcd-gulp/src/eslint-tests.json +++ b/packages/appcd-gulp/src/eslint-tests.json @@ -15,6 +15,7 @@ "sinon": false }, "rules": { - "promise/always-return": "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..57bea1680 100644 --- a/packages/appcd-gulp/src/eslint.json +++ b/packages/appcd-gulp/src/eslint.json @@ -2,5 +2,8 @@ "extends": [ "axway/env-node", "axway/+babel" ], "globals": { "appcd": false + }, + "rules": { + "require-atomic-updates": "off" } } diff --git a/packages/appcd-http/package.json b/packages/appcd-http/package.json index bdb168ff2..8000975a7 100644 --- a/packages/appcd-http/package.json +++ b/packages/appcd-http/package.json @@ -24,7 +24,7 @@ "koa-send": "^5.0.0", "path-to-regexp": "^3.0.0", "source-map-support": "^0.5.12", - "ws": "^7.0.1" + "ws": "^7.1.0" }, "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..6f8c47fd6 100644 --- a/packages/appcd-logger/package.json +++ b/packages/appcd-logger/package.json @@ -16,7 +16,7 @@ "test": "gulp test" }, "dependencies": { - "snooplogg": "^2.0.1", + "snooplogg": "^2.1.0", "source-map-support": "^0.5.12" }, "devDependencies": { 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..88e9f0b52 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" + "winreglib": "^1.0.3" }, "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..ab55227a2 100644 --- a/packages/appcd-nodejs/package.json +++ b/packages/appcd-nodejs/package.json @@ -20,7 +20,7 @@ "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", 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..05d97d6a9 100644 --- a/packages/appcd-plugin/package.json +++ b/packages/appcd-plugin/package.json @@ -37,13 +37,13 @@ "appcd-winreg": "^1.1.6", "builtin-modules": "^3.1.0", "findup-sync": "^3.0.0", - "gawk": "^4.6.3", + "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.2.0", "slugg": "^1.2.1", "source-map-support": "^0.5.12", "uuid": "^3.3.2" @@ -51,7 +51,7 @@ "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/src/request.js b/packages/appcd-request/src/request.js index e43d29e75..1bdbeaea3 100644 --- a/packages/appcd-request/src/request.js +++ b/packages/appcd-request/src/request.js @@ -120,7 +120,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..e96f0b474 100644 --- a/packages/appcd-response/package.json +++ b/packages/appcd-response/package.json @@ -20,7 +20,7 @@ "appcd-path": "^1.1.6", "source-map-support": "^0.5.12", "sprintf-js": "^1.1.2", - "winreglib": "^1.0.2" + "winreglib": "^1.0.3" }, "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..bfd4e4fe1 100644 --- a/packages/appcd-subprocess/package.json +++ b/packages/appcd-subprocess/package.json @@ -22,7 +22,7 @@ "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", "which": "^1.3.1" 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..dd36aee9b 100644 --- a/packages/appcd-telemetry/CHANGELOG.md +++ b/packages/appcd-telemetry/CHANGELOG.md @@ -1,3 +1,7 @@ +# v2.0.2 + + * 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..839ad9db8 100644 --- a/packages/appcd-telemetry/package.json +++ b/packages/appcd-telemetry/package.json @@ -25,7 +25,7 @@ "appcd-request": "^2.0.0", "appcd-response": "^2.0.0", "appcd-util": "^1.1.7", - "fs-extra": "^8.0.1", + "fs-extra": "^8.1.0", "source-map-support": "^0.5.12", "uuid": "^3.3.2" }, diff --git a/packages/appcd-util/package.json b/packages/appcd-util/package.json index 9b97a7481..34df44144 100644 --- a/packages/appcd-util/package.json +++ b/packages/appcd-util/package.json @@ -18,7 +18,7 @@ "dependencies": { "appcd-fs": "^1.1.7", "lodash.get": "^4.4.2", - "semver": "^6.1.2", + "semver": "^6.2.0", "source-map-support": "^0.5.12" }, "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/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 7c1c3d15c..0350dfcc9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,18 +9,18 @@ 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.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.4.tgz#4c32df7ad5a58e9ea27ad025c11276324e0b4ddd" + integrity sha512-+DaeBEpYq6b2+ZmHx3tHspC+ZRflrvLqwfv8E3hNr5LVQoyBnL8RPKSBCg+rK2W2My9PWlujBiqd0ZPsR9Q6zQ== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.5" + "@babel/generator" "^7.5.0" + "@babel/helpers" "^7.5.4" + "@babel/parser" "^7.5.0" "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.5" - "@babel/types" "^7.4.4" + "@babel/traverse" "^7.5.0" + "@babel/types" "^7.5.0" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" @@ -29,12 +29,12 @@ 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.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.0.tgz#f20e4b7a91750ee8b63656073d843d2a736dca4a" + integrity sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.5.0" jsesc "^2.5.1" lodash "^4.17.11" source-map "^0.5.0" @@ -56,10 +56,10 @@ "@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.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.0.tgz#02edb97f512d44ba23b3227f1bf2ed43454edac5" + integrity sha512-EAoMc3hE5vE5LNhMqDOwB1usHvmRjCDAnH8CD4PVkX9/Yr3W/tcz8xE8QvdZxfsFBDICwZnF2UTHIqslRpvxmA== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-member-expression-to-functions" "^7.0.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.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.4.tgz#2f00608aa10d460bde0ccf665d6dcf8477357cf0" + integrity sha512-6LJ6xwUEJP51w0sIgKyfvFMJvIb9mWAfohJp0+m6eHJigkFdcH8duZ1sfhn0ltJRzwUIT/yqqhdSfRpCpL7oow== dependencies: "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/traverse" "^7.5.0" + "@babel/types" "^7.5.0" "@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.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.0.tgz#3e0713dff89ad6ae37faec3b29dcfc5c979770b7" + integrity sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA== -"@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.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.0.tgz#5bc6a0537d286fcb4fd4e89975adbca334987007" + integrity sha512-9L/JfPCT+kShiiTTzcnBJ8cOwdKVmlC1RcCf9F0F9tERVrM4iWtWnXtjWCRqNm2la2BxO1MPArWNsU9zsSJWSQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" + "@babel/helper-create-class-features-plugin" "^7.5.0" "@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.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.4.tgz#250de35d867ce8260a31b1fdac6c4fc1baa99331" + integrity sha512-KCx0z3y7y8ipZUMAEEJOyNi11lMb/FOPUjjB113tfowgw0c16EGYos7worCKBcUAh2oG+OBnoUhsnTSoLpV9uA== 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" @@ -276,25 +277,25 @@ "@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.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.0.tgz#4216d6586854ef5c3c4592dab56ec7eb78485485" + integrity sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" + "@babel/generator" "^7.5.0" "@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.0" + "@babel/types" "^7.5.0" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.11" -"@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.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.0.tgz#e47d43840c2e7f9105bc4d3a2c371b4d0c7832ab" + integrity sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ== dependencies: esutils "^2.0.2" lodash "^4.17.11" @@ -1081,11 +1082,11 @@ 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.2.1" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.2.1.tgz#e5ef98bc4a41fad62b17e71af1a1710f6076b8df" + integrity sha512-GoUsRSRhtbCQugRY8eDWg5BnsczUZNq00qArrP7tKPHFmvz2KzJ8DoEq6IAQhLGwAOBHbZQ/Zml3DiaEKAWwkA== dependencies: - deepmerge "3.3.0" + deepmerge "4.0.0" is-plain-object "^3.0.0" universal-user-agent "^2.1.0" url-template "^2.0.8" @@ -1103,10 +1104,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.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.0.0.tgz#d044d6e049aaa0580f78249c688a78a3cfab758b" + integrity sha512-eAknm2Aq+/uQDLHUn7KHHpXB7A/NFfWgaVN+ZhC6mQlCNRzCv242eLYgt6cC4h2DZL7mM+QidS/UtZVwYvQXBw== dependencies: "@octokit/endpoint" "^5.1.0" "@octokit/request-error" "^1.0.1" @@ -1117,14 +1118,14 @@ universal-user-agent "^2.1.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== + version "16.28.3" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.28.3.tgz#bf0fe6b3c50b0cc7838cfd4bf19701f763efbf9f" + integrity sha512-hzM2VvVn9o0+sS08y2pp33UF5tKy0XdR2z+/AFD583TjhHlX/9Lmdv3SmRiz0UC6rNqNXe1X7BiZ/QNUwVm27Q== 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" @@ -1165,9 +1166,9 @@ integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== "@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.6.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.2.tgz#a5ccec6abb6060d5f20d256fb03ed743e9774999" + integrity sha512-gojym4tX0FWeV2gsW4Xmzo5wxGjXGm550oVUII7f7G5o4BV6c7DBdiG1RRQd+y1bvqRyYtPfMK85UM95vsapqQ== "@webassemblyjs/ast@1.8.5": version "1.8.5" @@ -1351,11 +1352,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 +1374,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.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" + integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== -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== @@ -1410,14 +1406,14 @@ ajv-errors@^1.0.0: 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== + 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== + version "6.10.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.1.tgz#ebf8d3af22552df9dd049bfbe50cc2390e823593" + integrity sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -1436,10 +1432,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" @@ -1701,11 +1697,6 @@ 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" @@ -1983,10 +1974,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.0.1" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.0.1.tgz#a21dc15582fee3f035c39dcbb77f6892a99ada36" + integrity sha512-dpgMHA51KZyCu7uuxF6FCkN+scfGd/6aLxEr/14vKUo/1nPxcd2fhFv4BgYCbWxKt7JfgpbjJq9nc30Ip/p2uw== big-integer@^1.6.7: version "1.6.44" @@ -2074,6 +2065,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 +2148,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" @@ -2221,7 +2219,7 @@ bytes@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: +cacache@^11.3.2, cacache@^11.3.3: version "11.3.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== @@ -2380,7 +2378,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,9 +2464,9 @@ 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: version "1.0.2" @@ -2719,7 +2717,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== @@ -3083,9 +3081,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 +3233,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" @@ -3916,49 +3914,7 @@ eslint-visitor-keys@^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: +eslint@^6.0.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== @@ -4000,15 +3956,6 @@ eslint@^6.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" - espree@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" @@ -4162,9 +4109,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" @@ -4282,6 +4229,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" @@ -4422,9 +4376,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" @@ -4506,12 +4460,12 @@ fs-extra@^7.0.0: 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.0.1, 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 +4540,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" @@ -4874,7 +4828,7 @@ 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: +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.0" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== @@ -4945,26 +4899,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: @@ -5071,6 +5025,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" @@ -5224,6 +5183,13 @@ hook-emitter@^3.1.2: snooplogg "^2.0.0" source-map-support "^0.5.9" +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: + 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" @@ -5321,11 +5287,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: @@ -5401,9 +5367,9 @@ 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" @@ -5706,6 +5672,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" @@ -5911,7 +5882,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== @@ -6474,7 +6445,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= @@ -6615,9 +6586,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" @@ -6670,11 +6641,11 @@ lodash.template@^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= + 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: @@ -6686,11 +6657,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" @@ -6711,9 +6682,9 @@ lodash@^3.10.1: 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== + version "4.17.13" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" + integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== log-symbols@2.2.0: version "2.2.0" @@ -6742,7 +6713,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, lru-cache@^4.1.3: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -6789,17 +6760,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@^4.0.1, make-fetch-happen@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.2.tgz#2d156b11696fb32bffbafe1ac1bc085dd6c78a79" + integrity sha512-YMJrAjHSb/BordlsDEcVcPyTbiJKkzqMf48N8dAJZT9Zjctrkb6Yg4TY9Sq2AwSIQJFn5qBBKVTYt3vP5FMIHA== dependencies: agentkeepalive "^3.4.1" - cacache "^11.0.1" + cacache "^11.3.3" 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" @@ -6986,6 +6957,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" @@ -7251,12 +7230,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" @@ -7275,10 +7254,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" @@ -7513,9 +7492,9 @@ npm-logical-tree@^1.2.1: 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== + 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" @@ -7539,15 +7518,15 @@ npm-profile@^4.0.1: npm-registry-fetch "^3.8.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== + version "3.9.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.9.1.tgz#00ff6e4e35d3f75a172b332440b53e93f4cb67de" + integrity sha512-VQCEZlydXw4AwLROAXWUR7QDfe2Y8Id/vpAgp6TI1/H78a4SiQ1kQrKZALm5/zxM5n4HIi+aYb+idUAV/RuY0Q== 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 "^4.0.2" npm-package-arg "^6.1.0" npm-run-path@^2.0.0: @@ -8202,6 +8181,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" @@ -8415,9 +8399,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.2.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" + integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== public-encrypt@^4.0.0: version "4.0.3" @@ -8575,9 +8559,9 @@ read-installed@^4.0.3: graceful-fs "^4.1.2" read-package-tree@^5.1.6: - version "5.3.0" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.0.tgz#4f95472e45e7145fb77f4069d12844b139f5ea12" - integrity sha512-Gi64+EWmi4515E1rPR77ae/Ip8cjFQTlsWytSYJj974U0tSnxm67pyXltbDjB1lvLw4dc85HbtidGL1K2c/oxw== + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== dependencies: read-package-json "^2.0.0" readdir-scoped-modules "^1.0.0" @@ -8702,9 +8686,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" @@ -8996,11 +8980,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: + 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" @@ -9039,10 +9028,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.1, semver@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" + integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== semver@~5.3.0: version "5.3.0" @@ -9205,16 +9194,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.0.0, snooplogg@^2.0.1, 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" @@ -9255,7 +9244,7 @@ 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: +source-map-support@^0.5.12, source-map-support@^0.5.9, source-map-support@~0.5.12: 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== @@ -9638,6 +9627,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" @@ -9734,13 +9730,13 @@ terser-webpack-plugin@^1.1.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== + version "4.1.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391" + integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw== 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" @@ -9883,6 +9879,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" @@ -10353,17 +10356,16 @@ webpack-sources@^1.3.0: 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.35.3: + version "4.35.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.35.3.tgz#66bc35ef215a7b75e8790f84d560013ffecf0ca3" + integrity sha512-xggQPwr9ILlXzz61lHzjvgoqGU08v5+Wnut19Uv3GaTtzN4xBTcwnobodrXE142EL1tOiS5WVEButooGzcQzTA== 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" + acorn "^6.2.0" ajv "^6.1.0" ajv-keywords "^3.1.0" chrome-trace-event "^1.0.0" @@ -10435,12 +10437,12 @@ 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.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/winreglib/-/winreglib-1.0.3.tgz#14e16deb523c53a43b56c67e9edf1ccd72fff05e" + integrity sha512-2XxdJGvPvQacot1wz19JheIwh6Ap0RIdjR91aOuoUqSXBYZq0hpJ72yBkM+L8eYcXONlDL/Q5ubYAe8Bp/W2hw== dependencies: - napi-macros "^1.8.2" + napi-macros "^2.0.0" node-gyp-build "^4.1.0" snooplogg "^2.0.1" @@ -10519,10 +10521,10 @@ 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.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.0.tgz#0395646c6fcc3ac56abf61ce1a42039637a6bd98" + integrity sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g== dependencies: async-limiter "^1.0.0" @@ -10552,9 +10554,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" From acea60ae534be5f55faf61fdbb2577bf436c89fd Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Thu, 11 Jul 2019 16:29:37 -0500 Subject: [PATCH 12/23] feat: Added initial work of the registry watcher. --- packages/appcd-detect/CHANGELOG.md | 2 +- packages/appcd-detect/README.md | 252 ++++++++++++++++++ packages/appcd-detect/src/detect-engine.js | 204 +++++++++++--- packages/appcd-detect/src/registry-watcher.js | 34 +++ .../appcd-detect/test/test-detect-engine.js | 173 ++++++------ packages/appcd-fswatch-manager/CHANGELOG.md | 1 + .../src/fswatch-manager.js | 6 +- yarn.lock | 22 +- 8 files changed, 562 insertions(+), 132 deletions(-) create mode 100644 packages/appcd-detect/src/registry-watcher.js diff --git a/packages/appcd-detect/CHANGELOG.md b/packages/appcd-detect/CHANGELOG.md index d22064d98..804db2552 100644 --- a/packages/appcd-detect/CHANGELOG.md +++ b/packages/appcd-detect/CHANGELOG.md @@ -1,6 +1,6 @@ # v2.2.0 - * feat: Added new `watchRegistryKeys` option for more advanced Windows Registry change detection. + * feat: Updated `registryKeys` option for more advanced Windows Registry handling. * chore: Updated dependencies. # v2.1.0 (Jun 13, 2019) diff --git a/packages/appcd-detect/README.md b/packages/appcd-detect/README.md index 3db52bbfe..32918c508 100644 --- a/packages/appcd-detect/README.md +++ b/packages/appcd-detect/README.md @@ -39,6 +39,258 @@ 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', + type: 'rescan' + } + ], + watch: true +}); +``` + +The watch parameters vary by `type`. There are two types of param objects: + + * `path` - Gets and watches keys containing paths + * `rescan` - Triggers a rescan when specific keys are changed + +#### Paths + +This is the default `type`. It requires either a `key` or array of `keys`. If both a `key` and an +array of `keys` are defined, then an error is thrown. + +Each `key` is an object that requires a `value` (or value `name`) for the specified key containing +the path. A `key` may specify the `hive` separate from the `key`, however the detect engine will +just combine them. + +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. + +The following are the same: + +```js +{ + hive: 'HKLM', // not preferred, prepend to `key`, supported for legacy reasons + key: 'SOFTWARE\\Android Studio', + name: 'SdkPath' // prefer "value" instead of "name", supported for legacy reasons +} +``` + +```js +{ + key: 'HKLM\\SOFTWARE\\Android Studio', + value: 'SdkPath' +} +``` + +```js +{ + key: 'HKLM\\SOFTWARE\\Android Studio', + type: 'path', // optional as "path" is the default + value: 'SdkPath' +} +``` + +```js +{ + keys: [ + { + key: 'HKLM\\SOFTWARE\\Android Studio', + value: 'SdkPath' + } + ] +} +``` + +Optionally, a `key` may contain a `callback` which is invoked after activity for the specified key. +When `keys` is specified, a top-level `callback` is called after processing the activity for a +specified key. + +A callback may return a `Promise`. The resolved value must be either a falsey value to use the +initial `value`, a new `value`, or an object containing the `value` and an optional `isDefault` +flag. + +The following is an example of how callbacks are invoked: + +```js +{ + async callback(value, engine) { + // "value" contains the registry key value + return value; + }, + key: 'HKLM\\SOFTWARE\\Android Studio', + value: 'SdkPath' +} +``` + +Note that the following are all the same: + +```js +callback(value, engine) { + // return undefined to use initial `value` +} +``` + +```js +callback(value, engine) { + return value; +} +``` + +```js +callback(value, engine) { + return { value }; +} +``` + +```js +callback(value, engine) { + return { isDefault: false, value }; +} +``` + +When specifying multiple `keys`, `callback` at the `key` level works the same as above. However, +`callback` at the top-level is invoked with an array of `values`. + +```js +{ + async callback(values, engine) { + return { + paths: values, + defaultPath: values[0] + }; + }, + keys: [ + { + async callback(value, engine) { + // "value" contains the registry key value + return value; + }, + key: 'HKLM\\SOFTWARE\\Android Studio', + value: 'SdkPath' + } + ] +} +``` + +Note that the following top-level callbacks are all the same: + + +```js +callback(values, engine) { + // return `undefined` to use initial values +} +``` + +```js +callback(values, engine) { + return values; +} +``` + +```js +callback(values, engine) { + return { + paths: values + }; +} +``` + +```js +callback(values, engine) { + return { + paths: values, + defaultPath: values[0] + }; +} +``` + +#### Rescan + +Rescan type watchers simply watch the specified keys for changes, optionally run the change event +through filters, and trigger a rescan on change. + +```js +{ + key: 'HKLM\\Software\\Microsoft\\Microsoft SDKs\\Windows', + type: 'rescan' // "type" is required +} +``` + +```js +{ + filter: { + values: /^VisualStudio.+/ + }, + key: 'HKLM\\Software\\RegisteredApplications', + type: 'rescan' +} +``` + +```js +{ + filter: { + subkeys: /^VisualStudio.+/ + }, + key: 'HKLM\\Software\\WOW6432Node\\Microsoft', + type: 'rescan' +} +``` + +The `filter` property is an object with `values` and/or `subkeys` containing a string or regex. +If `filter` is not specified, is an empty object, or does not contain a non-empty string or regex, +then no filtering is performed. + ## Legal This project is open source under the [Apache Public License v2][1] and is developed by diff --git a/packages/appcd-detect/src/detect-engine.js b/packages/appcd-detect/src/detect-engine.js index 7dfa0d01d..10059f133 100644 --- a/packages/appcd-detect/src/detect-engine.js +++ b/packages/appcd-detect/src/detect-engine.js @@ -3,6 +3,7 @@ import Detector from './detector'; import gawk from 'gawk'; import path from 'path'; import pluralize from 'pluralize'; +import RegistryWatcher from './registry-watcher'; import { arrayify, debounce, randomBytes, tailgate } from 'appcd-util'; import { EventEmitter } from 'events'; @@ -11,8 +12,6 @@ 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 watch handles. + * @type {Array.} + */ + registryWatchHandles = []; + /** * 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,110 @@ 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(); + const registryKeys = arrayify(opts.registryKeys, true); + opts.registryKeys = []; + + // validate and normalize registry keys + for (const params of registryKeys) { + if (typeof params !== 'object' || Array.isArray(params)) { + throw new TypeError('Expected "registryKeys" option to be an object or array of registry watch parameters'); + } + + const type = params.type || 'paths'; + if (type !== 'paths' && type !== 'rescan') { + throw new Error(`Invalid "registryKeys" param type "${type}", expected "paths" or "rescan"`); + } + + const obj = { + keys: [], + type + }; + + const addKey = obj => { + const p = { + key: obj.key, + value: obj.value || obj.name + }; + if (!p.key || typeof p.key !== 'string') { + throw new TypeError('Expected "registryKeys" option\'s watch param to have a "key"'); + } + if (!p.value || typeof p.value !== 'string') { + throw new TypeError('Expected "registryKeys" option\'s watch param to have a "value" name'); + } + if (obj.hive !== undefined) { + if (!obj.hive || typeof obj.hive !== 'string') { + throw new TypeError('Expected "registryKeys" option\'s watch param "hive" to be a non-empty string'); + } + p.key = `${obj.hive}\\${p.key}`; + } + if (obj.filter) { + if (type !== 'rescan') { + throw new Error('Expected "registryKeys" option\'s watch param "filter" to only be set when type is "rescan"') + } + if (typeof obj.filter !== 'object' || Array.isArray(obj.filter)) { + throw new TypeError('Expected "registryKeys" option\'s watch param "filter" to be an object'); + } + if (obj.filter.values && (typeof obj.filter.values === 'string' || obj.filter.values instanceof RegExp)) { + p.filter = { + values + }; + } + if (obj.filter.subkeys && (typeof obj.filter.subkeys === 'string' || obj.filter.subkeys instanceof RegExp)) { + if (!p.filter) { + p.filter = {}; + } + p.filter.subkeys = subkeys; + } + } + if (obj.callback !== undefined) { + if (typeof obj.callback !== 'function') { + throw new TypeError('Expected "registryKeys" option\'s watch param "callback" to be a function'); + } + p.callback = obj.callback; + } + obj.keys.push(p); + }; + + if (params.key !== undefined && params.keys !== undefined) { + throw new Error('Expected "registryKeys" option\'s watch param to have either "key" or "keys", not both'); + } else if (params.key !== undefined) { + addKey(params); + } else if (params.keys !== undefined) { + if (!Array.isArray(params.keys)) { + throw new TypeError('Expected "registryKeys" option\'s watch param "keys" to be an array of objects'); + } + + for (const param of params.keys) { + if (param) { + if (typeof param !== 'object') { + throw new TypeError('Expected "registryKeys" option\'s watch param "keys" to be an array of objects'); + } + addKey(param); + } + } + + if (param.callback !== undefined) { + if (typeof param.callback !== 'function') { + throw new TypeError('Expected "registryKeys" option\'s watch param "callback" to be a function'); + } + obj.callback = param.callback; + } + } + + if (obj.keys.length) { + opts.registryKeys.push(obj); + } + } + } this.opts = opts; @@ -215,10 +321,10 @@ export default class DetectEngine extends EventEmitter { } } - if (process.platform === 'win32') { - await Promise.all(this.opts.registryKeys.map(async (obj) => { + if (this.winreglib) { + 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))); + searchPaths.add(real(this.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); } @@ -242,6 +348,15 @@ export default class DetectEngine extends EventEmitter { this.logger.warn('Registry callback threw error: %s', e.message); } } + + await Promise.all(this.opts.watchRegistryKeys.map(async obj => { + // obj.key + // obj.type + // obj.value + // obj.filter + // obj.callback + // obj.keys + })); } return { @@ -291,22 +406,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 +514,20 @@ export default class DetectEngine extends EventEmitter { */ async start() { try { + if (this.winreglib && this.opts.watch) { + for (const params of this.opts.registryKeys) { + if (params.type === 'rescan') { + registryWatchHandles.push(new RegistryWatcher(params, this)); + } + } + } + await this.rescan(); - if (this.opts.watch) { + + if (this.winreglib) { this.refreshPaths(); } + return this.opts.multiple ? this.results : this.results[0]; } catch (err) { this.emit('error', err); @@ -422,6 +549,11 @@ export default class DetectEngine extends EventEmitter { this.refreshPathsTimer = null; } + let handle; + while (handle = this.registryWatchHandles.shift()) { + handle.destroy(); + } + 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/registry-watcher.js b/packages/appcd-detect/src/registry-watcher.js new file mode 100644 index 000000000..3ff166c65 --- /dev/null +++ b/packages/appcd-detect/src/registry-watcher.js @@ -0,0 +1,34 @@ +import { debounce } from 'appcd-util'; + +export default class RegistryWatcher { + /** + * ? + * + * @param {Object} params - ? + * @param {Array.} params.keys - ? + * @param {Function} params.callback - ? + * @param {DetectEngine} engine - ? + * @access public + */ + constructor({ keys, callback }, engine) { + this.engine = engine; + + for (const { key, value, filter, callback } of keys) { + // + } + } + + destroy() { + this.engine = null; + } +} + +// const onChange = debounce(async () => { +// await this.rescan(); +// }); +// keys +// - key +// - value +// - filter +// - callback +// callback diff --git a/packages/appcd-detect/test/test-detect-engine.js b/packages/appcd-detect/test/test-detect-engine.js index 6044c45b5..9461beaac 100644 --- a/packages/appcd-detect/test/test-detect-engine.js +++ b/packages/appcd-detect/test/test-detect-engine.js @@ -16,6 +16,8 @@ import { status } from 'appcd-fswatcher'; const { log } = appcdLogger('test:appcd:detect'); const { highlight } = appcdLogger.styles; +const isWindows = process.platform === 'win32'; + const _tmpDir = tmp.dirSync({ mode: '755', prefix: 'appcd-detect-test-', @@ -134,87 +136,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 +672,94 @@ describe('Detect', () => { expect(results).to.deep.equal([ { foo: 'bar' } ]); }); }); + + (isWindows ? describe : describe.skip)('Windows Registry', () => { + 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 fire callback every 1 second', function () { + this.timeout(10000); + this.slow(10000); + + // + }); + }); }); diff --git a/packages/appcd-fswatch-manager/CHANGELOG.md b/packages/appcd-fswatch-manager/CHANGELOG.md index 3eb00892c..2dbe6da7f 100644 --- a/packages/appcd-fswatch-manager/CHANGELOG.md +++ b/packages/appcd-fswatch-manager/CHANGELOG.md @@ -1,6 +1,7 @@ # 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) 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/yarn.lock b/yarn.lock index 0350dfcc9..f34d95f76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5447,9 +5447,9 @@ init-package-json@^1.10.3: 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== + 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" @@ -5457,7 +5457,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" @@ -6681,10 +6681,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.13" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" - integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== +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.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.10: + version "4.17.14" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" + integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== log-symbols@2.2.0: version "2.2.0" @@ -9306,9 +9306,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" From 0fbe06c48eb8baa7647c2b58fa655fc76adec666 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Thu, 11 Jul 2019 16:58:44 -0500 Subject: [PATCH 13/23] More work on the RegistryWatcher. --- packages/appcd-detect/src/detect-engine.js | 7 +++-- packages/appcd-detect/src/index.js | 1 + packages/appcd-detect/src/registry-watcher.js | 26 ++++++++++--------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/packages/appcd-detect/src/detect-engine.js b/packages/appcd-detect/src/detect-engine.js index 10059f133..e1e6ef2c4 100644 --- a/packages/appcd-detect/src/detect-engine.js +++ b/packages/appcd-detect/src/detect-engine.js @@ -237,6 +237,9 @@ export default class DetectEngine extends EventEmitter { if (typeof param.callback !== 'function') { throw new TypeError('Expected "registryKeys" option\'s watch param "callback" to be a function'); } + if (type === 'rescan') { + throw new Error('Expected "registryKeys" option\'s watch param "callback" to only be set per key when type is "rescan"'); + } obj.callback = param.callback; } } @@ -517,7 +520,7 @@ export default class DetectEngine extends EventEmitter { if (this.winreglib && this.opts.watch) { for (const params of this.opts.registryKeys) { if (params.type === 'rescan') { - registryWatchHandles.push(new RegistryWatcher(params, this)); + registryWatchHandles.push(new RegistryWatcher(params.keys, () => this.rescan())); } } } @@ -551,7 +554,7 @@ export default class DetectEngine extends EventEmitter { let handle; while (handle = this.registryWatchHandles.shift()) { - handle.destroy(); + handle.stop(); } this.logger.log(pluralize(` Stopping ${highlight(this.detectors.size)} detector`, this.detectors.size)); 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 index 3ff166c65..4baec494d 100644 --- a/packages/appcd-detect/src/registry-watcher.js +++ b/packages/appcd-detect/src/registry-watcher.js @@ -1,25 +1,27 @@ import { debounce } from 'appcd-util'; export default class RegistryWatcher { + /** + * A reference to the `winreglib` module. Only available on Windows machines. + * @type {Object} + */ + winreglib = process.platform === 'win32' ? require('winreglib') : null; + /** * ? * - * @param {Object} params - ? - * @param {Array.} params.keys - ? - * @param {Function} params.callback - ? - * @param {DetectEngine} engine - ? + * @param {Array.} keys - ? + * @param {Function} callback - ? * @access public */ - constructor({ keys, callback }, engine) { - this.engine = engine; - - for (const { key, value, filter, callback } of keys) { - // - } + constructor(keys, callback) { + // for (const { key, value, filter, callback } of keys) { + // // + // } } - destroy() { - this.engine = null; + stop() { + // } } From f9103ca230e8983f196c834298bb989a66c3c929 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 6 Aug 2019 18:07:47 -0500 Subject: [PATCH 14/23] feat(appcd-detect): Added ability to recursively watch registry keys for changes. --- package.json | 3 +- packages/appcd-core/package.json | 2 +- packages/appcd-default-plugins/package.json | 4 +- packages/appcd-detect/README.md | 192 +---- packages/appcd-detect/package.json | 2 +- packages/appcd-detect/src/detect-engine.js | 145 +--- packages/appcd-detect/src/registry-watcher.js | 347 +++++++- .../appcd-detect/test/test-detect-engine.js | 810 ++++++++++++++++-- packages/appcd-machine-id/package.json | 2 +- packages/appcd-plugin/package.json | 2 +- packages/appcd-response/package.json | 2 +- packages/appcd/package.json | 2 +- yarn.lock | 141 ++- 13 files changed, 1234 insertions(+), 420 deletions(-) diff --git a/package.json b/package.json index 1ab486d80..030d9a517 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "istanbul-lib-report": "^2.0.8", "istanbul-reports": "^2.2.6", "lerna": "^3.15.0", - "libnpm": "^2.0.1", + "libnpm": "^3.0.0", + "node-gyp": "^5.0.2", "pretty-log": "^0.1.0", "progress": "^2.0.3", "promise-limit": "^2.7.0", diff --git a/packages/appcd-core/package.json b/packages/appcd-core/package.json index ed0bad718..6baf592f8 100644 --- a/packages/appcd-core/package.json +++ b/packages/appcd-core/package.json @@ -34,7 +34,7 @@ "appcd-subprocess": "^2.0.1", "appcd-telemetry": "^2.0.1", "appcd-util": "^1.1.7", - "cli-kit": "^0.11.1", + "cli-kit": "^0.11.2", "fs-extra": "^8.1.0", "gawk": "^4.6.4", "global-modules": "^2.0.0", diff --git a/packages/appcd-default-plugins/package.json b/packages/appcd-default-plugins/package.json index 9bbe794e7..bcd6ddf27 100644 --- a/packages/appcd-default-plugins/package.json +++ b/packages/appcd-default-plugins/package.json @@ -20,10 +20,10 @@ "fs-extra": "^8.1.0", "globule": "^1.2.1", "lerna": "^3.15.0", - "pacote": "^9.5.1", + "pacote": "^9.5.2", "semver": "^6.2.0", "snooplogg": "^2.1.0", - "yarn": "^1.16.0" + "yarn": "^1.17.3" }, "devDependencies": { "appcd-gulp": "^2.1.1", diff --git a/packages/appcd-detect/README.md b/packages/appcd-detect/README.md index 32918c508..01fb369f2 100644 --- a/packages/appcd-detect/README.md +++ b/packages/appcd-detect/README.md @@ -91,206 +91,64 @@ new DetectEngine({ value: 'SdkPath' }, { - key: 'HKLM\\Software\\Microsoft\\Microsoft SDKs\\Windows', - type: 'rescan' + 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 watch parameters vary by `type`. There are two types of param objects: +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. - * `path` - Gets and watches keys containing paths - * `rescan` - Triggers a rescan when specific keys are changed +A `key` may specify the `hive` separate from the `key`, however the detect engine will just combine +them. -#### Paths - -This is the default `type`. It requires either a `key` or array of `keys`. If both a `key` and an -array of `keys` are defined, then an error is thrown. - -Each `key` is an object that requires a `value` (or value `name`) for the specified key containing -the path. 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. -The following are the same: +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. -```js -{ - hive: 'HKLM', // not preferred, prepend to `key`, supported for legacy reasons - key: 'SOFTWARE\\Android Studio', - name: 'SdkPath' // prefer "value" instead of "name", supported for legacy reasons -} -``` +The `depth` specifies how many subkeys deep it should watch for changes. Defaults to zero. -```js -{ - key: 'HKLM\\SOFTWARE\\Android Studio', - value: 'SdkPath' -} -``` +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', - type: 'path', // optional as "path" is the default value: 'SdkPath' } ``` ```js { - keys: [ - { - key: 'HKLM\\SOFTWARE\\Android Studio', - value: 'SdkPath' - } - ] -} -``` + callback(state, keyWatcher) { + // `state.value` contains the registry key value -Optionally, a `key` may contain a `callback` which is invoked after activity for the specified key. -When `keys` is specified, a top-level `callback` is called after processing the activity for a -specified key. + // if needed, you can use `keyWatcher.winreglib.get()` to fetch additional info -A callback may return a `Promise`. The resolved value must be either a falsey value to use the -initial `value`, a new `value`, or an object containing the `value` and an optional `isDefault` -flag. - -The following is an example of how callbacks are invoked: + // optionally, you can set `state.isDefault` to help the detect engine prioritize results -```js -{ - async callback(value, engine) { - // "value" contains the registry key value - return value; + return state; // optional }, key: 'HKLM\\SOFTWARE\\Android Studio', value: 'SdkPath' } ``` -Note that the following are all the same: - -```js -callback(value, engine) { - // return undefined to use initial `value` -} -``` - -```js -callback(value, engine) { - return value; -} -``` - -```js -callback(value, engine) { - return { value }; -} -``` - -```js -callback(value, engine) { - return { isDefault: false, value }; -} -``` - -When specifying multiple `keys`, `callback` at the `key` level works the same as above. However, -`callback` at the top-level is invoked with an array of `values`. - -```js -{ - async callback(values, engine) { - return { - paths: values, - defaultPath: values[0] - }; - }, - keys: [ - { - async callback(value, engine) { - // "value" contains the registry key value - return value; - }, - key: 'HKLM\\SOFTWARE\\Android Studio', - value: 'SdkPath' - } - ] -} -``` - -Note that the following top-level callbacks are all the same: - - -```js -callback(values, engine) { - // return `undefined` to use initial values -} -``` - -```js -callback(values, engine) { - return values; -} -``` - -```js -callback(values, engine) { - return { - paths: values - }; -} -``` - -```js -callback(values, engine) { - return { - paths: values, - defaultPath: values[0] - }; -} -``` - -#### Rescan - -Rescan type watchers simply watch the specified keys for changes, optionally run the change event -through filters, and trigger a rescan on change. - -```js -{ - key: 'HKLM\\Software\\Microsoft\\Microsoft SDKs\\Windows', - type: 'rescan' // "type" is required -} -``` - -```js -{ - filter: { - values: /^VisualStudio.+/ - }, - key: 'HKLM\\Software\\RegisteredApplications', - type: 'rescan' -} -``` - -```js -{ - filter: { - subkeys: /^VisualStudio.+/ - }, - key: 'HKLM\\Software\\WOW6432Node\\Microsoft', - type: 'rescan' -} -``` - -The `filter` property is an object with `values` and/or `subkeys` containing a string or regex. -If `filter` is not specified, is an empty object, or does not contain a non-empty string or regex, -then no filtering is performed. - ## 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 5829992f9..949f912c8 100644 --- a/packages/appcd-detect/package.json +++ b/packages/appcd-detect/package.json @@ -25,7 +25,7 @@ "gawk": "^4.6.4", "pluralize": "^8.0.0", "source-map-support": "^0.5.12", - "winreglib": "^1.0.3" + "winreglib": "^1.0.5" }, "devDependencies": { "appcd-fswatch-manager": "^2.0.0", diff --git a/packages/appcd-detect/src/detect-engine.js b/packages/appcd-detect/src/detect-engine.js index e1e6ef2c4..a0b22d338 100644 --- a/packages/appcd-detect/src/detect-engine.js +++ b/packages/appcd-detect/src/detect-engine.js @@ -3,11 +3,11 @@ import Detector from './detector'; import gawk from 'gawk'; import path from 'path'; import pluralize from 'pluralize'; -import RegistryWatcher from './registry-watcher'; 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; @@ -43,10 +43,10 @@ export default class DetectEngine extends EventEmitter { refreshPathsTimer = null; /** - * A list of active Windows Registry watch handles. - * @type {Array.} + * A list of active Windows Registry watchers. + * @type {Array.} */ - registryWatchHandles = []; + registryWatchers = []; /** * A gawked array containing the results from the scan. @@ -151,102 +151,9 @@ export default class DetectEngine extends EventEmitter { throw new TypeError('Expected "registryCallback" option to be a function'); } - const registryKeys = arrayify(opts.registryKeys, true); - opts.registryKeys = []; - // validate and normalize registry keys - for (const params of registryKeys) { - if (typeof params !== 'object' || Array.isArray(params)) { - throw new TypeError('Expected "registryKeys" option to be an object or array of registry watch parameters'); - } - - const type = params.type || 'paths'; - if (type !== 'paths' && type !== 'rescan') { - throw new Error(`Invalid "registryKeys" param type "${type}", expected "paths" or "rescan"`); - } - - const obj = { - keys: [], - type - }; - - const addKey = obj => { - const p = { - key: obj.key, - value: obj.value || obj.name - }; - if (!p.key || typeof p.key !== 'string') { - throw new TypeError('Expected "registryKeys" option\'s watch param to have a "key"'); - } - if (!p.value || typeof p.value !== 'string') { - throw new TypeError('Expected "registryKeys" option\'s watch param to have a "value" name'); - } - if (obj.hive !== undefined) { - if (!obj.hive || typeof obj.hive !== 'string') { - throw new TypeError('Expected "registryKeys" option\'s watch param "hive" to be a non-empty string'); - } - p.key = `${obj.hive}\\${p.key}`; - } - if (obj.filter) { - if (type !== 'rescan') { - throw new Error('Expected "registryKeys" option\'s watch param "filter" to only be set when type is "rescan"') - } - if (typeof obj.filter !== 'object' || Array.isArray(obj.filter)) { - throw new TypeError('Expected "registryKeys" option\'s watch param "filter" to be an object'); - } - if (obj.filter.values && (typeof obj.filter.values === 'string' || obj.filter.values instanceof RegExp)) { - p.filter = { - values - }; - } - if (obj.filter.subkeys && (typeof obj.filter.subkeys === 'string' || obj.filter.subkeys instanceof RegExp)) { - if (!p.filter) { - p.filter = {}; - } - p.filter.subkeys = subkeys; - } - } - if (obj.callback !== undefined) { - if (typeof obj.callback !== 'function') { - throw new TypeError('Expected "registryKeys" option\'s watch param "callback" to be a function'); - } - p.callback = obj.callback; - } - obj.keys.push(p); - }; - - if (params.key !== undefined && params.keys !== undefined) { - throw new Error('Expected "registryKeys" option\'s watch param to have either "key" or "keys", not both'); - } else if (params.key !== undefined) { - addKey(params); - } else if (params.keys !== undefined) { - if (!Array.isArray(params.keys)) { - throw new TypeError('Expected "registryKeys" option\'s watch param "keys" to be an array of objects'); - } - - for (const param of params.keys) { - if (param) { - if (typeof param !== 'object') { - throw new TypeError('Expected "registryKeys" option\'s watch param "keys" to be an array of objects'); - } - addKey(param); - } - } - - if (param.callback !== undefined) { - if (typeof param.callback !== 'function') { - throw new TypeError('Expected "registryKeys" option\'s watch param "callback" to be a function'); - } - if (type === 'rescan') { - throw new Error('Expected "registryKeys" option\'s watch param "callback" to only be set per key when type is "rescan"'); - } - obj.callback = param.callback; - } - } - - if (obj.keys.length) { - opts.registryKeys.push(obj); - } + for (const params of arrayify(opts.registryKeys, true)) { + this.registryWatchers.push(new RegistryWatcher(params)); } } @@ -325,14 +232,6 @@ export default class DetectEngine extends EventEmitter { } if (this.winreglib) { - await Promise.all(this.opts.registryKeys.map(async obj => { - try { - searchPaths.add(real(this.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 (typeof this.opts.registryCallback === 'function') { try { const result = await this.opts.registryCallback(); @@ -352,14 +251,15 @@ export default class DetectEngine extends EventEmitter { } } - await Promise.all(this.opts.watchRegistryKeys.map(async obj => { - // obj.key - // obj.type - // obj.value - // obj.filter - // obj.callback - // obj.keys - })); + 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 { @@ -517,11 +417,11 @@ export default class DetectEngine extends EventEmitter { */ async start() { try { - if (this.winreglib && this.opts.watch) { - for (const params of this.opts.registryKeys) { - if (params.type === 'rescan') { - registryWatchHandles.push(new RegistryWatcher(params.keys, () => this.rescan())); - } + if (this.opts.watch) { + for (const watcher of this.registryWatchers) { + watcher + .on('change', () => this.rescan()) + .start(); } } @@ -552,9 +452,8 @@ export default class DetectEngine extends EventEmitter { this.refreshPathsTimer = null; } - let handle; - while (handle = this.registryWatchHandles.shift()) { - handle.stop(); + for (const watcher of this.registryWatchers) { + watcher.stop(); } this.logger.log(pluralize(` Stopping ${highlight(this.detectors.size)} detector`, this.detectors.size)); diff --git a/packages/appcd-detect/src/registry-watcher.js b/packages/appcd-detect/src/registry-watcher.js index 4baec494d..959038560 100644 --- a/packages/appcd-detect/src/registry-watcher.js +++ b/packages/appcd-detect/src/registry-watcher.js @@ -1,36 +1,341 @@ +/* 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 = {}; -export default class RegistryWatcher { /** - * A reference to the `winreglib` module. Only available on Windows machines. + * The state of the key being watched. * @type {Object} */ - winreglib = process.platform === 'win32' ? require('winreglib') : null; + 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 {Array.} keys - ? - * @param {Function} callback - ? + * @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(keys, callback) { - // for (const { key, value, filter, callback } of keys) { - // // - // } + 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(); } - stop() { - // + /** + * 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. + * + * @returns {*} + * @access private + */ + initSubkeys() { + if (this.depth) { + // 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; } } -// const onChange = debounce(async () => { -// await this.rescan(); -// }); -// keys -// - key -// - value -// - filter -// - callback -// callback +/** + * 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 9461beaac..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,17 @@ 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({ @@ -674,92 +682,764 @@ describe('Detect', () => { }); (isWindows ? describe : describe.skip)('Windows Registry', () => { - 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'); + 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'); + }); }); - it('should reject if registryKeys is not a function or object', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: 'foo' + 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 }); - }).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' ] + 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 }); - }).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' } ] + 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 }); - }).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' } ] + 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 }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); + + this.engine.start() + .then(() => sleep(100)) + .then(() => reg('add', 'HKCU\\Software\\appcd-detect-test\\foo\\bar\\baz')) + .catch(done); + }); }); - it('should reject if registryKeys is an array with object missing a name', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: [ { hive: 'HKLM', key: 'foo' } ] + 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 }); - }).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' } + 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 }); - }).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' } + 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 }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); + + this.engine.start(); + }); }); - it('should reject if registryKeys is an object missing a name', () => { - expect(() => { - new DetectEngine({ - checkDir() {}, - registryKeys: { hive: 'HKLM', key: 'foo' } + 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 }); - }).to.throw(TypeError, 'Expected "registryKeys" option to be an object or array of objects with a "hive", "key", and "name"'); - }); - it('should fire callback every 1 second', function () { - this.timeout(10000); - this.slow(10000); + 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-machine-id/package.json b/packages/appcd-machine-id/package.json index 88e9f0b52..6b122d0c5 100644 --- a/packages/appcd-machine-id/package.json +++ b/packages/appcd-machine-id/package.json @@ -25,7 +25,7 @@ "macaddress": "^0.2.9", "simple-plist": "^1.0.0", "source-map-support": "^0.5.12", - "winreglib": "^1.0.3" + "winreglib": "^1.0.5" }, "devDependencies": { "appcd-gulp": "^2.1.1", diff --git a/packages/appcd-plugin/package.json b/packages/appcd-plugin/package.json index 05d97d6a9..d18051274 100644 --- a/packages/appcd-plugin/package.json +++ b/packages/appcd-plugin/package.json @@ -36,7 +36,7 @@ "appcd-util": "^1.1.7", "appcd-winreg": "^1.1.6", "builtin-modules": "^3.1.0", - "findup-sync": "^3.0.0", + "findup-sync": "^4.0.0", "gawk": "^4.6.4", "globule": "^1.2.1", "hook-emitter": "^4.0.0", diff --git a/packages/appcd-response/package.json b/packages/appcd-response/package.json index e96f0b474..9f963a727 100644 --- a/packages/appcd-response/package.json +++ b/packages/appcd-response/package.json @@ -20,7 +20,7 @@ "appcd-path": "^1.1.6", "source-map-support": "^0.5.12", "sprintf-js": "^1.1.2", - "winreglib": "^1.0.3" + "winreglib": "^1.0.5" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd/package.json b/packages/appcd/package.json index 6a84ae8a0..6f8df6582 100644 --- a/packages/appcd/package.json +++ b/packages/appcd/package.json @@ -37,7 +37,7 @@ "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", diff --git a/yarn.lock b/yarn.lock index f34d95f76..029d61140 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2505,20 +2505,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" @@ -3588,6 +3588,11 @@ 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== +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" @@ -4305,6 +4310,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" @@ -4460,7 +4475,7 @@ fs-extra@^7.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1, fs-extra@^8.1.0: +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== @@ -5175,14 +5190,6 @@ 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== - dependencies: - snooplogg "^2.0.0" - source-map-support "^0.5.9" - hook-emitter@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/hook-emitter/-/hook-emitter-4.0.0.tgz#b1c93980605472fe3eb192f68df72f41b046ce9d" @@ -6192,10 +6199,10 @@ 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.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.0.tgz#9a4b5e1b1d4af68c168c9cbfbc4364529cb0a8dc" + integrity sha512-H8N3GiytH6rtrBSIyWIL9/kOK5eGp3y8uKvoB8m/fR0UUzRpmJasTkQ4c/E/wwI5adL9l49rf/K7cUctcTHmRw== dependencies: bin-links "^1.1.2" bluebird "^3.5.3" @@ -6208,7 +6215,7 @@ libnpm@^2.0.1: libnpmsearch "^2.0.0" libnpmteam "^1.0.1" 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" @@ -7358,6 +7365,23 @@ node-gyp@^4.0.0: tar "^4.4.8" which "1" +node-gyp@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.2.tgz#422f7b7550d2c37952ac184e2a5a2d9fe49a8b77" + integrity sha512-sNcb5O7eJ9XiNAhWZ/UE2bWsBJn3Jb7rayMqMP4wjenlr1DwzZxUmbtmIrl04EU0p5fN2rU9WIDV+u0EbsI8oQ== + 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" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^4.4.8" + which "1" + node-libs-browser@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -7462,7 +7486,7 @@ 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: +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== @@ -7476,6 +7500,20 @@ npm-lifecycle@^2.1.0, npm-lifecycle@^2.1.1: umask "^1.1.0" which "^1.3.1" +npm-lifecycle@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.0.0.tgz#a3018cb8f1bc5e63a7f85d79f58f7701b2699ac2" + integrity sha512-/x/8zxo5Tn3qWj1eSUXgyr2pLBnEoFkpJQE/8pRwrEpJI4irZM0+YSp7W8NGDLzN6SaBOGOPaJV9O2dhY1IWwQ== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + npm-logical-tree@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" @@ -7899,7 +7937,7 @@ package-hash@^3.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -pacote@^9.2.3, pacote@^9.5.1: +pacote@^9.2.3: version "9.5.1" resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.1.tgz#adb0d23daeef6d0b813ab5891d0c6459ccec998d" integrity sha512-Zqvczvf/zZ7QNosdE9uTC7SRuvSs9tFqRkF6cJl+2HH7COBnx4BRAGpeXJlrbN+mM0CMHpbi620xdEHhCflghA== @@ -7932,6 +7970,39 @@ pacote@^9.2.3, pacote@^9.5.1: unique-filename "^1.1.1" which "^1.3.1" +pacote@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.2.tgz#6132afe7a53bb6fa189df72572c87bb03ab2cc5f" + integrity sha512-KVxalD57jaHnWIBQKPeU/eFU4UoMqUOj3h5AXvVMp9oJd8BZvIdTm8qmazy4jpYBf7RX9xCFmeFcU3ebvrUSZQ== + dependencies: + bluebird "^3.5.3" + cacache "^11.3.2" + 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" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^2.2.3" + npm-registry-fetch "^3.8.0" + 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" + ssri "^6.0.1" + tar "^4.4.8" + unique-filename "^1.1.1" + which "^1.3.1" + pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -9028,7 +9099,7 @@ 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.2.0: +semver@^6.0.0, semver@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== @@ -9194,7 +9265,7 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -snooplogg@^2.0.0, snooplogg@^2.0.1, snooplogg@^2.1.0: +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== @@ -10437,14 +10508,14 @@ winreg@^1.2.4: resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b" integrity sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs= -winreglib@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/winreglib/-/winreglib-1.0.3.tgz#14e16deb523c53a43b56c67e9edf1ccd72fff05e" - integrity sha512-2XxdJGvPvQacot1wz19JheIwh6Ap0RIdjR91aOuoUqSXBYZq0hpJ72yBkM+L8eYcXONlDL/Q5ubYAe8Bp/W2hw== +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 "^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" @@ -10689,10 +10760,10 @@ yargs@^7.1.0: y18n "^3.2.1" yargs-parser "^5.0.0" -yarn@^1.16.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.16.0.tgz#5701b58ac555ff91f7b889b7d791b3dc86f8f999" - integrity sha512-cfemyGlnWKA1zopUUgebTPf8C4WkPIZ+TJmklwcEAJ4u6oWPtJeAzrsamaGGh/+b1XWe8W51yzAImC4AWbWR1g== +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" From 695d24eea9fde48e17942578ae5ae162741a02b1 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 6 Aug 2019 18:11:32 -0500 Subject: [PATCH 15/23] chore: Updated deps. --- package.json | 10 +- packages/appcd-agent/package.json | 2 +- packages/appcd-client/package.json | 4 +- packages/appcd-config-service/package.json | 2 +- packages/appcd-config/package.json | 8 +- packages/appcd-default-plugins/package.json | 6 +- packages/appcd-detect/package.json | 2 +- packages/appcd-dispatcher/package.json | 2 +- packages/appcd-fs/package.json | 2 +- packages/appcd-fswatch-manager/package.json | 2 +- packages/appcd-fswatcher/package.json | 2 +- packages/appcd-gulp/package.json | 21 +- packages/appcd-http/package.json | 4 +- packages/appcd-logger/package.json | 2 +- packages/appcd-machine-id/package.json | 2 +- packages/appcd-nodejs/package.json | 2 +- packages/appcd-path/package.json | 2 +- packages/appcd-plugin/package.json | 4 +- packages/appcd-request/package.json | 2 +- packages/appcd-response/package.json | 2 +- packages/appcd-subprocess/package.json | 2 +- packages/appcd-telemetry/package.json | 2 +- packages/appcd-util/package.json | 4 +- packages/appcd-winreg/package.json | 2 +- packages/appcd/package.json | 4 +- yarn.lock | 1974 ++++++++++--------- 26 files changed, 1073 insertions(+), 998 deletions(-) diff --git a/package.json b/package.json index 030d9a517..2d5c30145 100644 --- a/package.json +++ b/package.json @@ -15,14 +15,14 @@ "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-report": "^2.0.8", "istanbul-reports": "^2.2.6", - "lerna": "^3.15.0", - "libnpm": "^3.0.0", - "node-gyp": "^5.0.2", + "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.2.0", + "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/package.json b/packages/appcd-agent/package.json index 6983fa231..4c5aee25d 100644 --- a/packages/appcd-agent/package.json +++ b/packages/appcd-agent/package.json @@ -17,7 +17,7 @@ }, "dependencies": { "nanobuffer": "^1.1.5", - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-client/package.json b/packages/appcd-client/package.json index 9594ffc97..18b02a191 100644 --- a/packages/appcd-client/package.json +++ b/packages/appcd-client/package.json @@ -27,10 +27,10 @@ "appcd-util": "^1.1.7", "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.1.0" + "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/package.json b/packages/appcd-config/package.json index 5dbff93be..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.5.0", - "@babel/traverse": "^7.5.0", - "@babel/types": "^7.5.0", + "@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.1.0", "gawk": "^4.6.4", - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1", diff --git a/packages/appcd-default-plugins/package.json b/packages/appcd-default-plugins/package.json index bcd6ddf27..06dc6a428 100644 --- a/packages/appcd-default-plugins/package.json +++ b/packages/appcd-default-plugins/package.json @@ -19,9 +19,9 @@ "dependencies": { "fs-extra": "^8.1.0", "globule": "^1.2.1", - "lerna": "^3.15.0", - "pacote": "^9.5.2", - "semver": "^6.2.0", + "lerna": "^3.16.4", + "pacote": "^9.5.4", + "semver": "^6.3.0", "snooplogg": "^2.1.0", "yarn": "^1.17.3" }, diff --git a/packages/appcd-detect/package.json b/packages/appcd-detect/package.json index 949f912c8..e667b5245 100644 --- a/packages/appcd-detect/package.json +++ b/packages/appcd-detect/package.json @@ -24,7 +24,7 @@ "appcd-util": "^1.1.7", "gawk": "^4.6.4", "pluralize": "^8.0.0", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "winreglib": "^1.0.5" }, "devDependencies": { diff --git a/packages/appcd-dispatcher/package.json b/packages/appcd-dispatcher/package.json index 78c121d3d..b224bcc2e 100644 --- a/packages/appcd-dispatcher/package.json +++ b/packages/appcd-dispatcher/package.json @@ -21,7 +21,7 @@ "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-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/package.json b/packages/appcd-fswatch-manager/package.json index 09061dc10..1ca70e888 100644 --- a/packages/appcd-fswatch-manager/package.json +++ b/packages/appcd-fswatch-manager/package.json @@ -20,7 +20,7 @@ "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", diff --git a/packages/appcd-fswatcher/package.json b/packages/appcd-fswatcher/package.json index 39af8ab29..23ab4a422 100644 --- a/packages/appcd-fswatcher/package.json +++ b/packages/appcd-fswatcher/package.json @@ -20,7 +20,7 @@ "appcd-util": "^1.1.7", "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", diff --git a/packages/appcd-gulp/package.json b/packages/appcd-gulp/package.json index 62594b27c..3c3bdfb17 100644 --- a/packages/appcd-gulp/package.json +++ b/packages/appcd-gulp/package.json @@ -9,14 +9,14 @@ ], "license": "Apache-2.0", "dependencies": { - "@babel/core": "^7.5.4", - "@babel/plugin-proposal-class-properties": "^7.5.0", - "@babel/plugin-proposal-object-rest-spread": "^7.5.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", + "@babel/register": "^7.5.5", "ansi-colors": "^4.1.1", "babel-eslint": "^10.0.2", "babel-loader": "^8.0.6", @@ -27,10 +27,11 @@ "esdoc": "^1.1.0", "esdoc-ecmascript-proposal-plugin": "^1.0.0", "esdoc-standard-plugin": "^1.0.0", - "eslint": "^6.0.1", + "eslint": "^6.1.0", "eslint-config-axway": "^4.2.2", "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.1.0", "gulp": "^4.0.2", @@ -41,12 +42,12 @@ "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.3" + "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-http/package.json b/packages/appcd-http/package.json index 8000975a7..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.1.0" + "source-map-support": "^0.5.13", + "ws": "^7.1.1" }, "devDependencies": { "appcd-gulp": "^2.1.1", diff --git a/packages/appcd-logger/package.json b/packages/appcd-logger/package.json index 6f8c47fd6..8607be5fd 100644 --- a/packages/appcd-logger/package.json +++ b/packages/appcd-logger/package.json @@ -17,7 +17,7 @@ }, "dependencies": { "snooplogg": "^2.1.0", - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" diff --git a/packages/appcd-machine-id/package.json b/packages/appcd-machine-id/package.json index 6b122d0c5..49f5e5d2c 100644 --- a/packages/appcd-machine-id/package.json +++ b/packages/appcd-machine-id/package.json @@ -24,7 +24,7 @@ "fs-extra": "^8.1.0", "macaddress": "^0.2.9", "simple-plist": "^1.0.0", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "winreglib": "^1.0.5" }, "devDependencies": { diff --git a/packages/appcd-nodejs/package.json b/packages/appcd-nodejs/package.json index ab55227a2..4730cd586 100644 --- a/packages/appcd-nodejs/package.json +++ b/packages/appcd-nodejs/package.json @@ -23,7 +23,7 @@ "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/package.json b/packages/appcd-plugin/package.json index d18051274..309a19c4e 100644 --- a/packages/appcd-plugin/package.json +++ b/packages/appcd-plugin/package.json @@ -43,9 +43,9 @@ "ignore": "^5.1.2", "pluralize": "^8.0.0", "pretty-ms": "^5.0.0", - "semver": "^6.2.0", + "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": { 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-response/package.json b/packages/appcd-response/package.json index 9f963a727..c87a5b763 100644 --- a/packages/appcd-response/package.json +++ b/packages/appcd-response/package.json @@ -18,7 +18,7 @@ "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.5" }, diff --git a/packages/appcd-subprocess/package.json b/packages/appcd-subprocess/package.json index bfd4e4fe1..7cfb0e8a9 100644 --- a/packages/appcd-subprocess/package.json +++ b/packages/appcd-subprocess/package.json @@ -24,7 +24,7 @@ "appcd-util": "^1.1.7", "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-telemetry/package.json b/packages/appcd-telemetry/package.json index 839ad9db8..dfb476125 100644 --- a/packages/appcd-telemetry/package.json +++ b/packages/appcd-telemetry/package.json @@ -26,7 +26,7 @@ "appcd-response": "^2.0.0", "appcd-util": "^1.1.7", "fs-extra": "^8.1.0", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "uuid": "^3.3.2" }, "devDependencies": { diff --git a/packages/appcd-util/package.json b/packages/appcd-util/package.json index 34df44144..052d5b423 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.2.0", - "source-map-support": "^0.5.12" + "semver": "^6.3.0", + "source-map-support": "^0.5.13" }, "devDependencies": { "appcd-gulp": "^2.1.1" 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/package.json b/packages/appcd/package.json index 6f8df6582..cdf71d80f 100644 --- a/packages/appcd/package.json +++ b/packages/appcd/package.json @@ -40,8 +40,8 @@ "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/yarn.lock b/yarn.lock index 029d61140..0980834ef 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.5.4": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.4.tgz#4c32df7ad5a58e9ea27ad025c11276324e0b4ddd" - integrity sha512-+DaeBEpYq6b2+ZmHx3tHspC+ZRflrvLqwfv8E3hNr5LVQoyBnL8RPKSBCg+rK2W2My9PWlujBiqd0ZPsR9Q6zQ== +"@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.5.0" - "@babel/helpers" "^7.5.4" - "@babel/parser" "^7.5.0" + "@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.5.0" - "@babel/types" "^7.5.0" + "@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.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.0.tgz#f20e4b7a91750ee8b63656073d843d2a736dca4a" - integrity sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA== +"@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.5.0" + "@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.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.0.tgz#02edb97f512d44ba23b3227f1bf2ed43454edac5" - integrity sha512-EAoMc3hE5vE5LNhMqDOwB1usHvmRjCDAnH8CD4PVkX9/Yr3W/tcz8xE8QvdZxfsFBDICwZnF2UTHIqslRpvxmA== +"@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,14 +175,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.5.4": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.4.tgz#2f00608aa10d460bde0ccf665d6dcf8477357cf0" - integrity sha512-6LJ6xwUEJP51w0sIgKyfvFMJvIb9mWAfohJp0+m6eHJigkFdcH8duZ1sfhn0ltJRzwUIT/yqqhdSfRpCpL7oow== +"@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.5.0" - "@babel/types" "^7.5.0" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" "@babel/highlight@^7.0.0": version "7.5.0" @@ -193,23 +193,23 @@ 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.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.0.tgz#3e0713dff89ad6ae37faec3b29dcfc5c979770b7" - integrity sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA== +"@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.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.0.tgz#5bc6a0537d286fcb4fd4e89975adbca334987007" - integrity sha512-9L/JfPCT+kShiiTTzcnBJ8cOwdKVmlC1RcCf9F0F9tERVrM4iWtWnXtjWCRqNm2la2BxO1MPArWNsU9zsSJWSQ== +"@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.5.0" + "@babel/helper-create-class-features-plugin" "^7.5.5" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-object-rest-spread@^7.5.4": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.4.tgz#250de35d867ce8260a31b1fdac6c4fc1baa99331" - integrity sha512-KCx0z3y7y8ipZUMAEEJOyNi11lMb/FOPUjjB113tfowgw0c16EGYos7worCKBcUAh2oG+OBnoUhsnTSoLpV9uA== +"@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" @@ -256,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" @@ -277,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.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.0.tgz#4216d6586854ef5c3c4592dab56ec7eb78485485" - integrity sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg== +"@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.5.0" + "@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.5.0" - "@babel/types" "^7.5.0" + "@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", "@babel/types@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.0.tgz#e47d43840c2e7f9105bc4d3a2c371b4d0c7832ab" - integrity sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ== +"@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" @@ -327,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" @@ -392,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" @@ -475,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" @@ -509,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" @@ -593,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": @@ -640,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" @@ -674,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": @@ -803,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" @@ -818,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" @@ -885,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" @@ -927,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" @@ -954,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" + p-map "^2.1.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== +"@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.14.0" - "@lerna/package" "3.14.2" - fs-extra "^7.0.0" - p-map "^1.2.0" + "@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.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== +"@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.14.0" - "@lerna/resolve-symlink" "3.13.0" - "@lerna/symlink-binary" "3.14.2" - fs-extra "^7.0.0" + "@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": @@ -1030,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": @@ -1082,19 +1084,19 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@octokit/endpoint@^5.1.0": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.2.1.tgz#e5ef98bc4a41fad62b17e71af1a1710f6076b8df" - integrity sha512-GoUsRSRhtbCQugRY8eDWg5BnsczUZNq00qArrP7tKPHFmvz2KzJ8DoEq6IAQhLGwAOBHbZQ/Zml3DiaEKAWwkA== + version "5.3.2" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.3.2.tgz#2deda2d869cac9ba7f370287d55667be2a808d4b" + integrity sha512-gRjteEM9I6f4D8vtwU2iGUTn9RX/AJ0SVXiqBUEuYEWVGGAVjSXdT0oNmghH5lvQNWs8mwt6ZaultuG6yXivNw== dependencies: 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" @@ -1105,9 +1107,9 @@ once "^1.4.0" "@octokit/request@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.0.0.tgz#d044d6e049aaa0580f78249c688a78a3cfab758b" - integrity sha512-eAknm2Aq+/uQDLHUn7KHHpXB7A/NFfWgaVN+ZhC6mQlCNRzCv242eLYgt6cC4h2DZL7mM+QidS/UtZVwYvQXBw== + 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" @@ -1115,12 +1117,12 @@ 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.3" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.28.3.tgz#bf0fe6b3c50b0cc7838cfd4bf19701f763efbf9f" - integrity sha512-hzM2VvVn9o0+sS08y2pp33UF5tKy0XdR2z+/AFD583TjhHlX/9Lmdv3SmRiz0UC6rNqNXe1X7BiZ/QNUwVm27Q== +"@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" "^5.0.0" "@octokit/request-error" "^1.0.2" @@ -1133,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": @@ -1143,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== @@ -1151,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== @@ -1165,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.6.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.2.tgz#a5ccec6abb6060d5f20d256fb03ed743e9774999" - integrity sha512-gojym4tX0FWeV2gsW4Xmzo5wxGjXGm550oVUII7f7G5o4BV6c7DBdiG1RRQd+y1bvqRyYtPfMK85UM95vsapqQ== + 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" @@ -1326,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" @@ -1374,10 +1404,10 @@ 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.7, acorn@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" - integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== +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.3.0: version "4.3.0" @@ -1405,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: +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.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.1.tgz#ebf8d3af22552df9dd049bfbe50cc2390e823593" - integrity sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ== +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" @@ -1623,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" @@ -1685,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= @@ -1702,7 +1737,7 @@ array-unique@^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= @@ -1772,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" @@ -1945,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" @@ -1975,9 +2010,9 @@ beeper@^1.0.0: integrity sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak= before-after-hook@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.0.1.tgz#a21dc15582fee3f035c39dcbb77f6892a99ada36" - integrity sha512-dpgMHA51KZyCu7uuxF6FCkN+scfGd/6aLxEr/14vKUo/1nPxcd2fhFv4BgYCbWxKt7JfgpbjJq9nc30Ip/p2uw== + 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" @@ -2209,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.3.2, cacache@^11.3.3: - 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" @@ -2468,17 +2504,17 @@ chownr@^1.1.1: 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" @@ -2809,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" @@ -2828,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" @@ -2847,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" @@ -2875,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== @@ -2888,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" @@ -3264,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== @@ -3375,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" @@ -3394,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" @@ -3422,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== @@ -3440,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" @@ -3470,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" @@ -3588,6 +3636,11 @@ 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" @@ -3617,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== @@ -3840,9 +3893,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" @@ -3857,10 +3910,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-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.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== + 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" @@ -3869,18 +3930,30 @@ 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-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.0.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" @@ -3901,7 +3974,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== @@ -3909,20 +3982,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@^6.0.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" @@ -3930,7 +4013,7 @@ eslint@^6.0.0, 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" @@ -3938,28 +4021,29 @@ eslint@^6.0.0, 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" + v8-compile-cache "^2.0.3" espree@^6.0.0: version "6.0.0" @@ -4000,9 +4084,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" @@ -4161,7 +4245,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== @@ -4466,15 +4550,6 @@ 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.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -4613,10 +4688,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" @@ -4661,13 +4736,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" @@ -4699,6 +4774,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" @@ -4756,7 +4838,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== @@ -4814,18 +4896,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" @@ -4844,9 +4927,9 @@ glogg@^1.0.0: 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, graceful-fs@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" - integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== + 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" @@ -5004,7 +5087,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== @@ -5133,46 +5216,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" @@ -5198,9 +5281,11 @@ hook-emitter@^4.0.0: 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" @@ -5350,17 +5435,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== @@ -5381,12 +5461,12 @@ import-fresh@^3.0.0: 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: @@ -5406,6 +5486,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" @@ -5453,7 +5538,7 @@ 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: +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== @@ -5558,12 +5643,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" @@ -5655,7 +5740,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== @@ -5780,7 +5865,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== @@ -6168,27 +6253,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: @@ -6199,41 +6284,41 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.0.tgz#9a4b5e1b1d4af68c168c9cbfbc4364529cb0a8dc" - integrity sha512-H8N3GiytH6rtrBSIyWIL9/kOK5eGp3y8uKvoB8m/fR0UUzRpmJasTkQ4c/E/wwI5adL9l49rf/K7cUctcTHmRw== +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 "^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" @@ -6244,30 +6329,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" @@ -6275,28 +6360,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" @@ -6343,12 +6428,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== @@ -6647,7 +6743,7 @@ lodash.template@^3.0.0: lodash.restparam "^3.0.0" lodash.templatesettings "^3.0.0" -lodash.template@^4.0.2: +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== @@ -6688,10 +6784,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.12, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.10: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== +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" @@ -6700,10 +6796,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" @@ -6720,7 +6816,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.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== @@ -6767,13 +6863,13 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-fetch-happen@^4.0.1, make-fetch-happen@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.2.tgz#2d156b11696fb32bffbafe1ac1bc085dd6c78a79" - integrity sha512-YMJrAjHSb/BordlsDEcVcPyTbiJKkzqMf48N8dAJZT9Zjctrkb6Yg4TY9Sq2AwSIQJFn5qBBKVTYt3vP5FMIHA== +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.3.3" + cacache "^12.0.0" http-cache-semantics "^3.8.1" http-proxy-agent "^2.1.0" https-proxy-agent "^2.2.1" @@ -6882,7 +6978,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= @@ -6936,16 +7032,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== @@ -7017,7 +7113,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== @@ -7086,19 +7182,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" @@ -7120,10 +7223,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" @@ -7191,15 +7294,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" @@ -7223,7 +7326,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== @@ -7285,7 +7388,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== @@ -7305,12 +7408,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" @@ -7348,27 +7451,10 @@ 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== - dependencies: - 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-gyp@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.2.tgz#422f7b7550d2c37952ac184e2a5a2d9fe49a8b77" - integrity sha512-sNcb5O7eJ9XiNAhWZ/UE2bWsBJn3Jb7rayMqMP4wjenlr1DwzZxUmbtmIrl04EU0p5fN2rU9WIDV+u0EbsI8oQ== +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" @@ -7382,7 +7468,7 @@ node-gyp@^5.0.2: 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== @@ -7447,7 +7533,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== @@ -7486,24 +7572,10 @@ 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.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== - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^4.0.0" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-lifecycle@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.0.0.tgz#a3018cb8f1bc5e63a7f85d79f58f7701b2699ac2" - integrity sha512-/x/8zxo5Tn3qWj1eSUXgyr2pLBnEoFkpJQE/8pRwrEpJI4irZM0+YSp7W8NGDLzN6SaBOGOPaJV9O2dhY1IWwQ== +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" @@ -7529,7 +7601,7 @@ 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: +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== @@ -7546,25 +7618,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.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.9.1.tgz#00ff6e4e35d3f75a172b332440b53e93f4cb67de" - integrity sha512-VQCEZlydXw4AwLROAXWUR7QDfe2Y8Id/vpAgp6TI1/H78a4SiQ1kQrKZALm5/zxM5n4HIi+aYb+idUAV/RuY0Q== +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 "^5.1.1" - make-fetch-happen "^4.0.2" + make-fetch-happen "^5.0.0" npm-package-arg "^6.1.0" npm-run-path@^2.0.0: @@ -7719,6 +7791,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" @@ -7823,7 +7905,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== @@ -7888,10 +7970,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" @@ -7937,51 +8019,18 @@ package-hash@^3.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -pacote@^9.2.3: - version "9.5.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.1.tgz#adb0d23daeef6d0b813ab5891d0c6459ccec998d" - integrity sha512-Zqvczvf/zZ7QNosdE9uTC7SRuvSs9tFqRkF6cJl+2HH7COBnx4BRAGpeXJlrbN+mM0CMHpbi620xdEHhCflghA== - dependencies: - bluebird "^3.5.3" - cacache "^11.3.2" - 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" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.12" - npm-pick-manifest "^2.2.3" - npm-registry-fetch "^3.8.0" - 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" - ssri "^6.0.1" - tar "^4.4.8" - unique-filename "^1.1.1" - which "^1.3.1" - -pacote@^9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.2.tgz#6132afe7a53bb6fa189df72572c87bb03ab2cc5f" - integrity sha512-KVxalD57jaHnWIBQKPeU/eFU4UoMqUOj3h5AXvVMp9oJd8BZvIdTm8qmazy4jpYBf7RX9xCFmeFcU3ebvrUSZQ== +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" @@ -7990,7 +8039,7 @@ pacote@^9.5.2: 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" @@ -8470,9 +8519,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.2.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" - integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== + 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" @@ -8979,10 +9028,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" @@ -8999,7 +9048,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== @@ -9056,7 +9105,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 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.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== @@ -9099,10 +9148,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.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" - integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== +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" @@ -9183,17 +9232,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: @@ -9201,6 +9250,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" @@ -9315,10 +9369,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.12: - 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" @@ -9627,11 +9681,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" @@ -9719,12 +9778,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" @@ -9738,7 +9797,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== @@ -9754,7 +9813,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== @@ -9784,26 +9843,25 @@ 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.1.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391" - integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw== +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.20.0" source-map "~0.6.1" @@ -10074,6 +10132,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" @@ -10083,9 +10146,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" @@ -10167,10 +10230,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" @@ -10263,10 +10326,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" @@ -10393,7 +10456,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== @@ -10419,42 +10482,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.3: - version "4.35.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.35.3.tgz#66bc35ef215a7b75e8790f84d560013ffecf0ca3" - integrity sha512-xggQPwr9ILlXzz61lHzjvgoqGU08v5+Wnut19Uv3GaTtzN4xBTcwnobodrXE142EL1tOiS5WVEButooGzcQzTA== +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.2.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" @@ -10565,7 +10628,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= @@ -10577,6 +10640,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" @@ -10592,17 +10667,17 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.0.tgz#0395646c6fcc3ac56abf61ce1a42039637a6bd98" - integrity sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g== +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" @@ -10665,7 +10740,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== @@ -10725,21 +10800,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" From 6abf3b1ce0b9fc375feb192f13f1dd426cc227e7 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 6 Aug 2019 22:11:24 -0500 Subject: [PATCH 16/23] chore(core): Updated changelog. --- packages/appcd-core/CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/appcd-core/CHANGELOG.md b/packages/appcd-core/CHANGELOG.md index 7ac6cd448..7d1d397bc 100644 --- a/packages/appcd-core/CHANGELOG.md +++ b/packages/appcd-core/CHANGELOG.md @@ -1,15 +1,16 @@ # v2.9.0 - * chore: Updated to `appcd-default-plugins@4.0.0`, + * fix: Added `sid` to WebSocketSession context so remote clients will know the subscription id. + * 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) From 7822b0836504e61ab6b294158f7397e7286084dd Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Tue, 6 Aug 2019 23:09:45 -0500 Subject: [PATCH 17/23] BREAKING CHANGE(util): 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(gulp): Updated to eslint-config-axway@4.3.0 which added eslint 6 support and added Node.js eslint rules. --- gulpfile.js | 4 +--- packages/appcd-detect/src/registry-watcher.js | 1 - packages/appcd-gulp/CHANGELOG.md | 2 ++ packages/appcd-gulp/package.json | 2 +- packages/appcd-gulp/src/eslint-tests.json | 1 + packages/appcd-gulp/src/eslint.json | 1 + packages/appcd-util/CHANGELOG.md | 4 +++- packages/appcd-util/package.json | 2 +- packages/appcd-util/src/util.js | 2 ++ yarn.lock | 19 ++++++++++--------- 10 files changed, 22 insertions(+), 16 deletions(-) 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/packages/appcd-detect/src/registry-watcher.js b/packages/appcd-detect/src/registry-watcher.js index 959038560..bb7362e48 100644 --- a/packages/appcd-detect/src/registry-watcher.js +++ b/packages/appcd-detect/src/registry-watcher.js @@ -131,7 +131,6 @@ class KeyWatcher extends EventEmitter { /** * Returns the value when `value` name is defined. * - * @returns {*} * @access private */ initSubkeys() { diff --git a/packages/appcd-gulp/CHANGELOG.md b/packages/appcd-gulp/CHANGELOG.md index a1fe5cef1..c35bb85f8 100644 --- a/packages/appcd-gulp/CHANGELOG.md +++ b/packages/appcd-gulp/CHANGELOG.md @@ -2,6 +2,8 @@ * 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 3c3bdfb17..668c3373c 100644 --- a/packages/appcd-gulp/package.json +++ b/packages/appcd-gulp/package.json @@ -28,7 +28,7 @@ "esdoc-ecmascript-proposal-plugin": "^1.0.0", "esdoc-standard-plugin": "^1.0.0", "eslint": "^6.1.0", - "eslint-config-axway": "^4.2.2", + "eslint-config-axway": "^4.3.0", "eslint-plugin-chai-friendly": "^0.4.1", "eslint-plugin-mocha": "^6.0.0", "eslint-plugin-node": "^9.1.0", diff --git a/packages/appcd-gulp/src/eslint-tests.json b/packages/appcd-gulp/src/eslint-tests.json index 85ac21689..a1096113e 100644 --- a/packages/appcd-gulp/src/eslint-tests.json +++ b/packages/appcd-gulp/src/eslint-tests.json @@ -15,6 +15,7 @@ "sinon": false }, "rules": { + "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 57bea1680..e562be219 100644 --- a/packages/appcd-gulp/src/eslint.json +++ b/packages/appcd-gulp/src/eslint.json @@ -4,6 +4,7 @@ "appcd": false }, "rules": { + "node/no-unsupported-features/es-syntax": "off", "require-atomic-updates": "off" } } 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 052d5b423..e3d0dda48 100644 --- a/packages/appcd-util/package.json +++ b/packages/appcd-util/package.json @@ -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/yarn.lock b/yarn.lock index 0980834ef..f1a700297 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3872,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" @@ -3918,7 +3919,7 @@ eslint-plugin-es@^1.4.0: eslint-utils "^1.3.0" regexpp "^2.0.1" -eslint-plugin-import@^2.16.0: +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== @@ -3954,7 +3955,7 @@ eslint-plugin-node@^9.1.0: resolve "^1.10.1" semver "^6.1.0" -eslint-plugin-promise@^4.0.1: +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== From 64bc8ca2407caf817202bfd805fdc4d9338af3b4 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Wed, 7 Aug 2019 01:01:20 -0500 Subject: [PATCH 18/23] fix(telemetry): Fixed shutdown bug and failed send handling. --- packages/appcd-telemetry/CHANGELOG.md | 4 + packages/appcd-telemetry/src/telemetry.js | 146 ++++++++++-------- .../appcd-telemetry/test/test-telemetry.js | 2 + 3 files changed, 85 insertions(+), 67 deletions(-) diff --git a/packages/appcd-telemetry/CHANGELOG.md b/packages/appcd-telemetry/CHANGELOG.md index dd36aee9b..a3d5de4f2 100644 --- a/packages/appcd-telemetry/CHANGELOG.md +++ b/packages/appcd-telemetry/CHANGELOG.md @@ -1,5 +1,9 @@ # 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. * chore: Updated dependencies. # v2.0.1 (Jun 13, 2019) diff --git a/packages/appcd-telemetry/src/telemetry.js b/packages/appcd-telemetry/src/telemetry.js index a249d9ec1..b3c81ebde 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,12 @@ 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} @@ -233,7 +239,7 @@ export default class Telemetry extends Dispatcher { * @access public */ async init(homeDir) { - if (this.hardwareId) { + if (this.hardwareId || this.running) { return; } @@ -245,6 +251,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 +306,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 +317,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 +370,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; 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; From 61fa709ec78a5004edab508249433fd3bd4da331 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Wed, 7 Aug 2019 09:12:02 -0500 Subject: [PATCH 19/23] chore: chore: Bumped Node.js version from 10.15.3 to 10.16.2. --- packages/appcd-core/CHANGELOG.md | 1 + packages/appcd-core/package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/appcd-core/CHANGELOG.md b/packages/appcd-core/CHANGELOG.md index 7d1d397bc..d30369a7e 100644 --- a/packages/appcd-core/CHANGELOG.md +++ b/packages/appcd-core/CHANGELOG.md @@ -1,6 +1,7 @@ # v2.9.0 * fix: Added `sid` to WebSocketSession context so remote clients will know the subscription id. + * 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 diff --git a/packages/appcd-core/package.json b/packages/appcd-core/package.json index 6baf592f8..e4f4b9c31 100644 --- a/packages/appcd-core/package.json +++ b/packages/appcd-core/package.json @@ -51,6 +51,6 @@ "node": ">=8.12.0" }, "appcd": { - "node": "10.15.3" + "node": "10.16.2" } } From 501bf1c2bc60d85b09277362eba0e3417c90f27e Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Wed, 7 Aug 2019 14:26:18 -0500 Subject: [PATCH 20/23] docs: Updated config related docs. --- docs/Clients/WebSocket.md | 15 +++++-- docs/Configuration.md | 85 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 5 deletions(-) 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/Configuration.md b/docs/Configuration.md index b36457c23..37cb63065 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -2,4 +2,87 @@ ## Configuration -> :warning: Under construction. +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`. + +The daemon configuration can be accessed via the CLI, WebSocket (external), appcd client +(external), or programmatically (internal). + +For information about the implementation details of the config system, please refer to the +[configuration system](Components/Configuration-System.md) page. + +## 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); +}; +``` From 5e65c9301235b9eeedc84a04b0b39bbf75ad4160 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Wed, 7 Aug 2019 15:58:30 -0500 Subject: [PATCH 21/23] fix(detect): Fixed bug referencing subkeys state if not initialized. --- packages/appcd-detect/src/registry-watcher.js | 2 +- packages/appcd-fswatcher/src/fswatcher.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/appcd-detect/src/registry-watcher.js b/packages/appcd-detect/src/registry-watcher.js index bb7362e48..a4d66a990 100644 --- a/packages/appcd-detect/src/registry-watcher.js +++ b/packages/appcd-detect/src/registry-watcher.js @@ -134,7 +134,7 @@ class KeyWatcher extends EventEmitter { * @access private */ initSubkeys() { - if (this.depth) { + if (this.depth && this.state.subkeys) { // add or change for (const subkey of this.state.subkeys) { if (!this.subkeys[subkey]) { 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) { From 436637b4be83924b1cf23b102e828886c36b154a Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Thu, 8 Aug 2019 16:50:03 -0500 Subject: [PATCH 22/23] chore(docs): Updated config docs and added config settings doc. fix(telemetry): Fixed live config changes for environment name. fix(request): Fixed request config setting precedence such that environment variables override config settings. fix(core): Fixed bug where 'server.hostname' was not being correctly referenced. --- docs/Components/Configuration-System.md | 86 ++++++++++++++++++++++ docs/Configuration-Settings.md | 72 +++++++++++++++++++ docs/Configuration.md | 88 ----------------------- docs/README.md | 6 +- packages/appcd-core/CHANGELOG.md | 1 + packages/appcd-core/conf/default.js | 54 ++++++++------ packages/appcd-core/src/server.js | 2 +- packages/appcd-request/CHANGELOG.md | 6 ++ packages/appcd-request/src/request.js | 42 +++++------ packages/appcd-telemetry/CHANGELOG.md | 1 + packages/appcd-telemetry/src/telemetry.js | 14 ++-- 11 files changed, 229 insertions(+), 143 deletions(-) create mode 100644 docs/Configuration-Settings.md delete mode 100644 docs/Configuration.md 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..b089e7b42 --- /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.provisionin.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 37cb63065..000000000 --- a/docs/Configuration.md +++ /dev/null @@ -1,88 +0,0 @@ -# ![Appc Daemon logo](images/appc-daemon.png) Daemon Project - -## Configuration - -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`. - -The daemon configuration can be accessed via the CLI, WebSocket (external), appcd client -(external), or programmatically (internal). - -For information about the implementation details of the config system, please refer to the -[configuration system](Components/Configuration-System.md) page. - -## 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); -}; -``` 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/packages/appcd-core/CHANGELOG.md b/packages/appcd-core/CHANGELOG.md index d30369a7e..087b837e4 100644 --- a/packages/appcd-core/CHANGELOG.md +++ b/packages/appcd-core/CHANGELOG.md @@ -1,6 +1,7 @@ # 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 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/src/server.js b/packages/appcd-core/src/server.js index 23e4c7722..7c07a53ed 100644 --- a/packages/appcd-core/src/server.js +++ b/packages/appcd-core/src/server.js @@ -244,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-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/src/request.js b/packages/appcd-request/src/request.js index 1bdbeaea3..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) diff --git a/packages/appcd-telemetry/CHANGELOG.md b/packages/appcd-telemetry/CHANGELOG.md index a3d5de4f2..0d13aed8b 100644 --- a/packages/appcd-telemetry/CHANGELOG.md +++ b/packages/appcd-telemetry/CHANGELOG.md @@ -4,6 +4,7 @@ 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) diff --git a/packages/appcd-telemetry/src/telemetry.js b/packages/appcd-telemetry/src/telemetry.js index b3c81ebde..a5dc7d7a2 100644 --- a/packages/appcd-telemetry/src/telemetry.js +++ b/packages/appcd-telemetry/src/telemetry.js @@ -106,12 +106,6 @@ export default class Telemetry extends Dispatcher { */ this.app = app; - /** - * The deploy type for the events. - * @type {String} - */ - this.environment = cfg.get('telemetry.environment') || 'production'; - /** * The app version. * @type {String} @@ -186,7 +180,7 @@ export default class Telemetry extends Dispatcher { id: this.sessionId }, distribution: { - environment: this.environment, + environment: this.config.environment, version: this.version } }; @@ -219,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) { @@ -394,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); From b0e16d33b7655e8008338d28a295b03bbd3b601d Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Fri, 9 Aug 2019 15:04:41 -0500 Subject: [PATCH 23/23] chore(docs): Fixed type. --- docs/Configuration-Settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Configuration-Settings.md b/docs/Configuration-Settings.md index b089e7b42..92e12dc53 100644 --- a/docs/Configuration-Settings.md +++ b/docs/Configuration-Settings.md @@ -61,7 +61,7 @@ | `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.provisionin.path` | String | `"~/Library/MobileDevice/Provisioning Profiles"` | ioslib (via @appcd/plugin-ios) | No | The path to the provisioning profiles directory. | +| `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. |