From 9a2d8af84f7328f13d8f578cf4b150b9d5f09517 Mon Sep 17 00:00:00 2001 From: isaacs Date: Thu, 22 Aug 2019 11:51:48 -0700 Subject: [PATCH 01/19] test: Clean up some flakiness and inconsistency * Get rid of a lot of usage of osenv.tmpdir in tests. * Remove unnecessary creation/deletion of common.pkg * Reduce rimraf.sync wherever possible (often collides with common-tap.js's rimraf on windows) * Use common test utilities wherever possible. * DRY tests with test templates where it makes sense. PR-URL: https://github.com/npm/cli/pull/240 Credit: @isaacs Close: #240 Reviewed-by: @ruyadorno --- test/common-tap.js | 6 +- test/tap/404-parent.js | 18 +- test/tap/access.js | 10 +- test/tap/add-remote-git-file.js | 24 +- test/tap/add-remote-git-shrinkwrap.js | 26 +- test/tap/add-remote-git-submodule.js | 15 +- test/tap/add-remote-git.js | 27 +- test/tap/all-package-metadata.js | 20 +- test/tap/bearer-token-check.js | 89 +++---- .../bitbucket-https-url-with-creds-package.js | 15 -- test/tap/bitbucket-https-url-with-creds.js | 13 - test/tap/bitbucket-shortcut-package.js | 13 - test/tap/bitbucket-shortcut.js | 13 - test/tap/build-already-built.js | 21 +- test/tap/cache-eacces-error-message.js | 9 +- test/tap/check-cpu-reqs.js | 13 - test/tap/check-engine-reqs.js | 13 - test/tap/check-install-self.js | 13 - test/tap/check-os-reqs.js | 13 - test/tap/circular-dep.js | 9 - test/tap/config-new-cafile.js | 25 +- test/tap/correct-mkdir.js | 6 +- test/tap/do-not-remove-other-bins.js | 14 - test/tap/gist-short-shortcut-package.js | 13 - test/tap/gist-short-shortcut.js | 13 - test/tap/gist-shortcut-package.js | 21 +- test/tap/gist-shortcut.js | 33 +-- test/tap/git-dependency-install-link.js | 41 ++- test/tap/git-prepare.js | 18 +- test/tap/github-shortcut-package.js | 33 +-- test/tap/github-shortcut.js | 33 +-- test/tap/gitlab-shortcut-package.js | 33 +-- test/tap/gitlab-shortcut.js | 33 +-- test/tap/graceful-restart.js | 25 -- test/tap/ignore-install-link.js | 5 +- test/tap/init-interrupt.js | 22 +- test/tap/install-at-locally.js | 19 +- test/tap/install-at-sub-path-locally.js | 36 +-- test/tap/install-bad-dep-format.js | 39 +-- test/tap/install-bad-man.js | 42 +-- test/tap/install-bin-null.js | 54 ++-- test/tap/install-cli-only-development.js | 68 ++--- test/tap/install-cli-only-production.js | 9 - test/tap/install-cli-only-shrinkwrap.js | 67 ++--- test/tap/install-cli-production-nosave.js | 39 +-- test/tap/install-cli-production.js | 9 - test/tap/install-cli-unicode.js | 16 +- test/tap/install-duplicate-deps-warning.js | 24 +- test/tap/install-from-local-multipath.js | 9 - test/tap/install-from-local.js | 9 - test/tap/install-link-scripts.js | 67 ++--- test/tap/install-man.js | 40 +-- test/tap/install-noargs-dev.js | 33 +-- test/tap/install-package-json-order.js | 43 +-- test/tap/install-property-conflicts.js | 33 +-- test/tap/install-save-consistent-newlines.js | 134 ++++------ test/tap/install-save-exact.js | 84 ++---- test/tap/install-save-local.js | 246 +++++++++--------- test/tap/install-save-prefix.js | 210 +++++++-------- test/tap/install-scoped-already-installed.js | 10 - test/tap/install-scoped-link.js | 19 +- .../install-scoped-with-peer-dependency.js | 33 +-- test/tap/install-shrinkwrapped-git.js | 63 ++--- .../install-test-cli-without-package-lock.js | 53 ++-- test/tap/install-with-dev-dep-duplicate.js | 27 +- test/tap/it.js | 66 ++--- test/tap/lifecycle-INIT_CWD.js | 38 +-- test/tap/lifecycle-order.js | 30 +-- test/tap/link.js | 63 ++--- test/tap/locker.js | 13 - test/tap/ls-depth-cli.js | 15 -- test/tap/ls-depth-unmet.js | 15 -- test/tap/ls-env.js | 15 -- test/tap/ls-l-depth-0.js | 35 +-- test/tap/ls-production-and-dev.js | 15 -- test/tap/no-global-warns.js | 31 +-- test/tap/no-scan-full-global-dir.js | 3 - .../optional-metadep-rollback-collision.js | 80 +++--- test/tap/outdated-depth.js | 15 -- test/tap/peer-deps.js | 37 +-- test/tap/publish-config.js | 3 +- test/tap/publish-invalid-semver-tag.js | 51 ++-- test/tap/scripts-whitespace-windows.js | 13 - test/tap/shrinkwrap-_auth.js | 91 +++---- test/tap/shrinkwrap-dev-dependency.js | 29 +-- test/tap/shrinkwrap-empty-deps.js | 16 -- test/tap/shrinkwrap-extra-metadata.js | 18 +- test/tap/shrinkwrap-global-auth.js | 84 +++--- test/tap/shrinkwrap-lifecycle.js | 19 +- test/tap/shrinkwrap-optional-dependency.js | 34 +-- test/tap/shrinkwrap-optional-property.js | 33 +-- test/tap/shrinkwrap-prod-dependency-also.js | 85 +++--- test/tap/shrinkwrap-prod-dependency.js | 64 ++--- .../shrinkwrap-save-dev-with-existing-deps.js | 15 -- .../shrinkwrap-save-with-existing-dev-deps.js | 33 +-- test/tap/shrinkwrap-scoped-auth.js | 84 +++--- test/tap/startstop.js | 13 - test/tap/symlink-cycle.js | 29 +-- test/tap/uninstall-package.js | 17 -- test/tap/uninstall-save.js | 32 +-- test/tap/unpack-foreign-tarball.js | 73 +++--- test/tap/unpublish-config.js | 13 +- test/tap/update-examples.js | 47 ++-- test/tap/url-dependencies.js | 108 ++------ test/tap/version-allow-same-version.js | 83 +++--- test/tap/version-commit-hooks.js | 16 +- test/tap/version-consistent-newlines.js | 11 - test/tap/version-sub-directory.js | 25 +- test/tap/view.js | 35 +-- 109 files changed, 1114 insertions(+), 2814 deletions(-) diff --git a/test/common-tap.js b/test/common-tap.js index d8dc8a10d870e..86a90571216cf 100644 --- a/test/common-tap.js +++ b/test/common-tap.js @@ -216,17 +216,15 @@ exports.readBinLink = function (path) { exports.skipIfWindows = function (why) { if (!isWindows) return - console.log('1..1') if (!why) why = 'this test not available on windows' - console.log('ok 1 # skip ' + why) + require('tap').plan(0, why) process.exit(0) } exports.pendIfWindows = function (why) { if (!isWindows) return - console.log('1..1') if (!why) why = 'this test is pending further changes on windows' - console.log('not ok 1 # todo ' + why) + require('tap').fail(' ', { todo: why, diagnostic: false }) process.exit(0) } diff --git a/test/tap/404-parent.js b/test/tap/404-parent.js index 306a4bc4bf254..ee9623c545505 100644 --- a/test/tap/404-parent.js +++ b/test/tap/404-parent.js @@ -1,7 +1,6 @@ var common = require('../common-tap.js') var test = require('tap').test var npm = require('../../') -var osenv = require('osenv') var path = require('path') var fs = require('fs') var rimraf = require('rimraf') @@ -10,20 +9,15 @@ var mr = require('npm-registry-mock') test('404-parent: if parent exists, specify parent in error message', function (t) { setup() - rimraf.sync(path.resolve(pkg, 'node_modules')) - performInstall(function (err) { - t.ok(err instanceof Error, 'error was returned') - t.equal(err.parent, '404-parent', "error's parent set") - t.end() + rimraf(path.resolve(pkg, 'node_modules'), () => { + performInstall(function (err) { + t.ok(err instanceof Error, 'error was returned') + t.equal(err.parent, '404-parent', "error's parent set") + t.end() + }) }) }) -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - t.end() -}) - function setup () { fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ author: 'Evan Lucas', diff --git a/test/tap/access.js b/test/tap/access.js index 2998bbf63b2d5..4183c46b538c0 100644 --- a/test/tap/access.js +++ b/test/tap/access.js @@ -73,8 +73,7 @@ test('npm access public when no package passed and no package.json', function (t function (er, code, stdout, stderr) { t.ifError(er, 'npm access') t.match(stderr, /no package name passed to command and no package.json found/) - rimraf.sync(missing) - t.end() + rimraf(missing, t.end) }) }) @@ -95,8 +94,7 @@ test('npm access public when no package passed and invalid package.json', functi function (er, code, stdout, stderr) { t.ifError(er, 'npm access') t.match(stderr, /Failed to parse json/) - rimraf.sync(invalid) - t.end() + rimraf(invalid, t.end) }) }) @@ -405,8 +403,7 @@ test('npm access ls-packages with no package specified or package.json', functio function (er, code, stdout, stderr) { t.ifError(er, 'npm access ls-packages') t.same(JSON.parse(stdout), clientPackages) - rimraf.sync(missing) - t.end() + rimraf(missing, t.end) } ) }) @@ -557,7 +554,6 @@ test('npm access blerg', function (t) { test('cleanup', function (t) { t.pass('cleaned up') - rimraf.sync(pkg) server.done() server.close() t.end() diff --git a/test/tap/add-remote-git-file.js b/test/tap/add-remote-git-file.js index 7d64609072dda..483c6368c6490 100644 --- a/test/tap/add-remote-git-file.js +++ b/test/tap/add-remote-git-file.js @@ -4,17 +4,16 @@ var fs = require('fs') var resolve = require('path').resolve var url = require('url') -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var test = require('tap').test var npm = require('../../lib/npm.js') var fetchPackageMetadata = require('../../lib/fetch-package-metadata.js') var common = require('../common-tap.js') -var pkg = common.pkg -var repo = common.pkg + '-repo' +var pkg = resolve(common.pkg, 'package') +var repo = resolve(common.pkg, 'repo') +mkdirp.sync(pkg) var git var cloneURL = 'git+file://' + resolve(pkg, 'child.git') @@ -25,7 +24,6 @@ var pjChild = JSON.stringify({ }, null, 2) + '\n' test('setup', function (t) { - bootstrap() setup(function (er, r) { t.ifError(er, 'git started up successfully') @@ -70,16 +68,6 @@ test('save install', function (t) { }) }) -test('clean', function (t) { - cleanup() - t.end() -}) - -function bootstrap () { - cleanup() - mkdirp.sync(pkg) -} - function setup (cb) { mkdirp.sync(repo) fs.writeFileSync(resolve(repo, 'package.json'), pjChild) @@ -95,9 +83,3 @@ function setup (cb) { }, cb) }) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(repo) - rimraf.sync(pkg) -} diff --git a/test/tap/add-remote-git-shrinkwrap.js b/test/tap/add-remote-git-shrinkwrap.js index 0daf2922e7645..01a033e89451f 100644 --- a/test/tap/add-remote-git-shrinkwrap.js +++ b/test/tap/add-remote-git-shrinkwrap.js @@ -1,16 +1,14 @@ var fs = require('fs') var resolve = require('path').resolve -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var test = require('tap').test var npm = require('../../lib/npm.js') var common = require('../common-tap.js') -var pkg = common.pkg -var repo = pkg + '-repo' +var pkg = resolve(common.pkg, 'package') +var repo = resolve(common.pkg, 'repo') var daemon var daemonPID @@ -30,7 +28,8 @@ var pjChild = JSON.stringify({ }, null, 2) + '\n' test('setup', function (t) { - bootstrap() + mkdirp.sync(pkg) + fs.writeFileSync(resolve(pkg, 'package.json'), pjParent) setup(function (er, r) { t.ifError(er, 'git started up successfully') @@ -85,19 +84,10 @@ test('shrinkwrap gets correct _from and _resolved (#7121)', function (t) { }) test('clean', function (t) { - daemon.on('close', function () { - cleanup() - t.end() - }) + daemon.on('close', t.end) process.kill(daemonPID) }) -function bootstrap () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync(resolve(pkg, 'package.json'), pjParent) -} - function setup (cb) { mkdirp.sync(repo) fs.writeFileSync(resolve(repo, 'package.json'), pjChild) @@ -145,9 +135,3 @@ function setup (cb) { }, cb) }) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(repo) - rimraf.sync(pkg) -} diff --git a/test/tap/add-remote-git-submodule.js b/test/tap/add-remote-git-submodule.js index 43b30f7a65bcb..54f2819fb330e 100644 --- a/test/tap/add-remote-git-submodule.js +++ b/test/tap/add-remote-git-submodule.js @@ -1,7 +1,7 @@ var fs = require('fs') var resolve = require('path').resolve -var osenv = require('osenv') +var cwd = process.cwd() var mkdirp = require('mkdirp') var rimraf = require('rimraf') var test = require('tap').test @@ -9,8 +9,8 @@ var test = require('tap').test var npm = require('../../lib/npm.js') var common = require('../common-tap.js') -var pkg = common.pkg -var repos = pkg + '-repos' +var pkg = resolve(common.pkg, 'package') +var repos = resolve(common.pkg, 'repos') var subwt = resolve(repos, 'subwt') var topwt = resolve(repos, 'topwt') var suburl = 'git://localhost:' + common.gitPort + '/sub.git' @@ -62,14 +62,13 @@ test('has file in submodule', function (t) { test('clean', function (t) { daemon.on('close', function () { - cleanup() t.end() }) process.kill(daemonPID) }) function bootstrap (t) { - process.chdir(osenv.tmpdir()) + process.chdir(cwd) rimraf.sync(pkg) mkdirp.sync(pkg) process.chdir(pkg) @@ -141,9 +140,3 @@ function setup (cb) { }, cb) }) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(repos) - rimraf.sync(pkg) -} diff --git a/test/tap/add-remote-git.js b/test/tap/add-remote-git.js index 44294924f15a7..2a61963439111 100644 --- a/test/tap/add-remote-git.js +++ b/test/tap/add-remote-git.js @@ -1,16 +1,14 @@ var fs = require('fs') var resolve = require('path').resolve -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var test = require('tap').test var npm = require('../../lib/npm.js') var common = require('../common-tap.js') -var pkg = common.pkg -var repo = pkg + '-repo' +var pkg = resolve(common.pkg, 'package') +var repo = resolve(pkg, 'repo') var daemon var daemonPID @@ -30,7 +28,8 @@ var pjChild = JSON.stringify({ }, null, 2) + '\n' test('setup', function (t) { - bootstrap() + mkdirp.sync(pkg) + fs.writeFileSync(resolve(pkg, 'package.json'), pjParent) setup(function (er, r) { t.ifError(er, 'git started up successfully') @@ -47,25 +46,15 @@ test('install from repo', function (t) { process.chdir(pkg) npm.commands.install('.', [], function (er) { t.ifError(er, 'npm installed via git') - t.end() }) }) test('clean', function (t) { - daemon.on('close', function () { - cleanup() - t.end() - }) + daemon.on('close', t.end) process.kill(daemonPID) }) -function bootstrap () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync(resolve(pkg, 'package.json'), pjParent) -} - function setup (cb) { mkdirp.sync(repo) fs.writeFileSync(resolve(repo, 'package.json'), pjChild) @@ -113,9 +102,3 @@ function setup (cb) { }, cb) }) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(repo) - rimraf.sync(pkg) -} diff --git a/test/tap/all-package-metadata.js b/test/tap/all-package-metadata.js index 153878500acba..75afa9bad2c0c 100644 --- a/test/tap/all-package-metadata.js +++ b/test/tap/all-package-metadata.js @@ -26,8 +26,8 @@ function setup () { mkdirp.sync(cacheBase) } -function cleanup () { - rimraf.sync(PKG_DIR) +function cleanup (cb) { + rimraf(PKG_DIR, cb) } test('setup', function (t) { @@ -88,8 +88,7 @@ test('allPackageMetadata full request', function (t) { } }, 'cache contents based on what was written') server.done() - cleanup() - t.end() + cleanup(t.end) }) }) @@ -126,8 +125,7 @@ test('allPackageMetadata cache only', function (t) { t.ok(fileData, 'cache contents written to the right file') t.deepEquals(fileData, cacheContents, 'cacheContents written directly') server.done() - cleanup() - t.end() + cleanup(t.end) }) }) @@ -188,8 +186,7 @@ test('createEntryStream merged stream', function (t) { t.ok(fileData, 'cache contents written to the right file') t.deepEquals(fileData, cacheContents, 'cache updated correctly') server.done() - cleanup() - t.end() + cleanup(t.end) }) }) @@ -205,14 +202,11 @@ test('allPackageMetadata no sources', function (t) { t.ok(err, 'no sources, got an error') t.match(err.message, /No search sources available/, 'useful error message') server.done() - cleanup() - t.end() + cleanup(t.end) }) }) test('cleanup', function (t) { - cleanup() server.close() - t.pass('all done') - t.done() + cleanup(t.end) }) diff --git a/test/tap/bearer-token-check.js b/test/tap/bearer-token-check.js index 21c6b0beb2c2f..86602b303c9f0 100644 --- a/test/tap/bearer-token-check.js +++ b/test/tap/bearer-token-check.js @@ -4,9 +4,7 @@ var writeFileSync = require('graceful-fs').writeFileSync var fs = require('fs') var mkdirp = require('mkdirp') var http = require('http') -var osenv = require('osenv') -var rimraf = require('rimraf') -var test = require('tap').test +const t = require('tap') var common = require('../common-tap.js') var toNerfDart = require('../../lib/config/nerf-dart.js') @@ -38,14 +36,42 @@ server.on('request', (req, res) => { } }) -test('setup', function (t) { - server.listen(common.port, () => { - setup() - t.done() - }) +var contents = '@scoped:registry=' + common.registry + '\n' + + toNerfDart(common.registry) + ':_authToken=0xabad1dea\n' + +var json = { + name: 'test-package-install', + version: '1.0.0', + dependencies: { + '@scoped/underscore': '1.3.1' + } +} + +var shrinkwrap = { + name: 'test-package-install', + version: '1.0.0', + dependencies: { + '@scoped/underscore': { + resolved: tarballURL, + version: '1.3.1' + } + } +} + +t.teardown(() => server.close()) + +t.test('setup', function (t) { + mkdirp.sync(modules) + writeFileSync(resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') + writeFileSync(outfile, contents) + writeFileSync( + resolve(pkg, 'npm-shrinkwrap.json'), + JSON.stringify(shrinkwrap, null, 2) + '\n' + ) + server.listen(common.port, t.end) }) -test('authed npm install with tarball not on registry', function (t) { +t.test('authed npm install with tarball not on registry', function (t) { common.npm( [ 'install', @@ -81,48 +107,3 @@ test('authed npm install with tarball not on registry', function (t) { } ) }) - -test('cleanup', function (t) { - server.close(() => { - cleanup() - t.end() - }) -}) - -var contents = '@scoped:registry=' + common.registry + '\n' + - toNerfDart(common.registry) + ':_authToken=0xabad1dea\n' - -var json = { - name: 'test-package-install', - version: '1.0.0', - dependencies: { - '@scoped/underscore': '1.3.1' - } -} - -var shrinkwrap = { - name: 'test-package-install', - version: '1.0.0', - dependencies: { - '@scoped/underscore': { - resolved: tarballURL, - version: '1.3.1' - } - } -} - -function setup () { - cleanup() - mkdirp.sync(modules) - writeFileSync(resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') - writeFileSync(outfile, contents) - writeFileSync( - resolve(pkg, 'npm-shrinkwrap.json'), - JSON.stringify(shrinkwrap, null, 2) + '\n' - ) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/bitbucket-https-url-with-creds-package.js b/test/tap/bitbucket-https-url-with-creds-package.js index 4891b9886bd8b..f0f14dcb34475 100644 --- a/test/tap/bitbucket-https-url-with-creds-package.js +++ b/test/tap/bitbucket-https-url-with-creds-package.js @@ -5,10 +5,7 @@ const BB = require('bluebird') var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -64,22 +61,10 @@ test('bitbucket-https-url-with-creds-package', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - function setup () { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) process.chdir(pkg) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/bitbucket-https-url-with-creds.js b/test/tap/bitbucket-https-url-with-creds.js index 7f7e7eee4810a..703d0d9a6ab60 100644 --- a/test/tap/bitbucket-https-url-with-creds.js +++ b/test/tap/bitbucket-https-url-with-creds.js @@ -6,9 +6,7 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -61,13 +59,7 @@ test('bitbucket-https-url-with-creds', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - function setup () { - cleanup() mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -75,8 +67,3 @@ function setup () { ) process.chdir(pkg) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/bitbucket-shortcut-package.js b/test/tap/bitbucket-shortcut-package.js index ef606f4aa3e0c..a148c598c6870 100644 --- a/test/tap/bitbucket-shortcut-package.js +++ b/test/tap/bitbucket-shortcut-package.js @@ -6,9 +6,7 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -65,13 +63,7 @@ test('bitbucket-shortcut', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - function setup () { - cleanup() mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -79,8 +71,3 @@ function setup () { ) process.chdir(pkg) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/bitbucket-shortcut.js b/test/tap/bitbucket-shortcut.js index fe1c4179755c4..6d750f869a306 100644 --- a/test/tap/bitbucket-shortcut.js +++ b/test/tap/bitbucket-shortcut.js @@ -6,9 +6,7 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -62,13 +60,7 @@ test('bitbucket-shortcut', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - function setup () { - cleanup() mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -76,8 +68,3 @@ function setup () { ) process.chdir(pkg) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/build-already-built.js b/test/tap/build-already-built.js index 1e7359a558fa3..3410432ab2244 100644 --- a/test/tap/build-already-built.js +++ b/test/tap/build-already-built.js @@ -2,8 +2,6 @@ // message "already built" should not be error var test = require('tap').test var path = require('path') -var osenv = require('osenv') -var rimraf = require('rimraf') var npmlog = require('npmlog') var mkdirp = require('mkdirp') var requireInject = require('require-inject') @@ -12,13 +10,7 @@ var npm = require('../../lib/npm.js') const common = require('../common-tap.js') var PKG_DIR = common.pkg -var fakePkg = 'foo' - -test('setup', function (t) { - cleanup() - - t.end() -}) +var fakePkg = path.resolve(PKG_DIR, 'foo') test("issue #6735 build 'already built' message", function (t) { npm.load({ loglevel: 'warn' }, function () { @@ -66,14 +58,3 @@ test("issue #6735 build 'already built' message", function (t) { t.end() }) }) - -test('cleanup', function (t) { - cleanup() - - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(PKG_DIR) -} diff --git a/test/tap/cache-eacces-error-message.js b/test/tap/cache-eacces-error-message.js index aa112eba43921..fe76875c3e024 100644 --- a/test/tap/cache-eacces-error-message.js +++ b/test/tap/cache-eacces-error-message.js @@ -1,14 +1,11 @@ const npm = require('../../lib/npm.js') const t = require('tap') -if (process.platform === 'win32') { - t.plan(0, 'this is a unix-only thing') - process.exit(0) -} +const common = require('../common-tap.js') -const errorMessage = require('../../lib/utils/error-message.js') +common.skipIfWindows('this is a unix-only thing') -const common = require('../common-tap.js') +const errorMessage = require('../../lib/utils/error-message.js') t.plan(1) diff --git a/test/tap/check-cpu-reqs.js b/test/tap/check-cpu-reqs.js index 0a36492430bad..d70660b05887f 100644 --- a/test/tap/check-cpu-reqs.js +++ b/test/tap/check-cpu-reqs.js @@ -2,9 +2,7 @@ var path = require('path') var fs = require('fs') var test = require('tap').test -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var common = require('../common-tap.js') var base = common.pkg @@ -41,18 +39,7 @@ test('force install bad cpu', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(base) -} - function setup () { - cleanup() mkdirp.sync(path.resolve(installFrom, 'node_modules')) fs.writeFileSync( path.join(installFrom, 'package.json'), diff --git a/test/tap/check-engine-reqs.js b/test/tap/check-engine-reqs.js index fa25e28dd60ed..eec07562885c9 100644 --- a/test/tap/check-engine-reqs.js +++ b/test/tap/check-engine-reqs.js @@ -2,9 +2,7 @@ var path = require('path') var fs = require('fs') var test = require('tap').test -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var common = require('../common-tap.js') var base = common.pkg @@ -54,18 +52,7 @@ test('warns on bad engine not strict', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(base) -} - function setup () { - cleanup() mkdirp.sync(path.resolve(installFrom, 'node_modules')) fs.writeFileSync( path.join(installFrom, 'package.json'), diff --git a/test/tap/check-install-self.js b/test/tap/check-install-self.js index e7591b55e0939..63901a12df671 100644 --- a/test/tap/check-install-self.js +++ b/test/tap/check-install-self.js @@ -2,9 +2,7 @@ var path = require('path') var fs = require('fs') var test = require('tap').test -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var common = require('../common-tap.js') var base = common.pkg @@ -43,18 +41,7 @@ test('force install self', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(base) -} - function setup () { - cleanup() mkdirp.sync(path.resolve(installFrom, 'node_modules')) fs.writeFileSync( path.join(installFrom, 'package.json'), diff --git a/test/tap/check-os-reqs.js b/test/tap/check-os-reqs.js index 6c43fa61aa637..66dcbd5328e06 100644 --- a/test/tap/check-os-reqs.js +++ b/test/tap/check-os-reqs.js @@ -2,9 +2,7 @@ var path = require('path') var fs = require('fs') var test = require('tap').test -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var common = require('../common-tap.js') var base = common.pkg @@ -41,18 +39,7 @@ test('force install bad os', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(base) -} - function setup () { - cleanup() mkdirp.sync(path.resolve(installFrom, 'node_modules')) fs.writeFileSync( path.join(installFrom, 'package.json'), diff --git a/test/tap/circular-dep.js b/test/tap/circular-dep.js index 624ea3800a906..f7e018d02346c 100644 --- a/test/tap/circular-dep.js +++ b/test/tap/circular-dep.js @@ -4,8 +4,6 @@ var existsSync = fs.existsSync || path.existsSync var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -75,13 +73,11 @@ test('installing a package that depends on the current package', function (t) { }) test('cleanup', function (t) { - cleanup() server.close() t.end() }) function setup (cb) { - cleanup() mkdirp.sync(minimist) fs.writeFileSync( path.join(minimist, 'package.json'), @@ -95,8 +91,3 @@ function setup (cb) { cb() }) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/config-new-cafile.js b/test/tap/config-new-cafile.js index bd5792f3e3ff7..e4cc65ec747a6 100644 --- a/test/tap/config-new-cafile.js +++ b/test/tap/config-new-cafile.js @@ -3,22 +3,17 @@ const common = require('../common-tap.js') var path = require('path') var fs = require('graceful-fs') var test = require('tap').test -var mkdirp = require('mkdirp') var rimraf = require('rimraf') -var osenv = require('osenv') var npmconf = require('../../lib/config/core.js') var dir = common.pkg var beep = path.resolve(dir, 'beep.pem') var npmrc = path.resolve(dir, 'npmrc') -test('setup', function (t) { - bootstrap() - t.end() -}) - test('can set new cafile when old is gone', function (t) { t.plan(5) + fs.writeFileSync(npmrc, '') + fs.writeFileSync(beep, '') npmconf.load({ userconfig: npmrc }, function (error, conf) { npmconf.loaded = false t.ifError(error) @@ -40,19 +35,3 @@ test('can set new cafile when old is gone', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function bootstrap () { - mkdirp.sync(dir) - fs.writeFileSync(npmrc, '') - fs.writeFileSync(beep, '') -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(dir) -} diff --git a/test/tap/correct-mkdir.js b/test/tap/correct-mkdir.js index 30907d725ca08..175fb34a003bc 100644 --- a/test/tap/correct-mkdir.js +++ b/test/tap/correct-mkdir.js @@ -5,11 +5,7 @@ var assert = require('assert') var requireInject = require('require-inject') const common = require('../common-tap.js') var cache_dir = common.pkg - -if (process.platform === 'win32') { - t.plan(0, 'windows does not use correct-mkdir behavior') - process.exit(0) -} +common.skipIfWindows('windows does not use correct-mkdir behavior') test('correct-mkdir: no race conditions', function (t) { var mock_fs = {} diff --git a/test/tap/do-not-remove-other-bins.js b/test/tap/do-not-remove-other-bins.js index 4e6b0d27b2f53..a614043221f0d 100644 --- a/test/tap/do-not-remove-other-bins.js +++ b/test/tap/do-not-remove-other-bins.js @@ -3,8 +3,6 @@ var fs = require('fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -41,7 +39,6 @@ var EXEC_OPTS = { } test('setup', function (t) { - cleanup() mkdirp.sync(path.join(installPath, 'node_modules')) mkdirp.sync(packageApath) fs.writeFileSync( @@ -118,14 +115,3 @@ test('verify postremoval bins', function (t) { t.is(bin, path.join(installPath, 'node_modules', 'b')) t.end() }) - -test('cleanup', function (t) { - cleanup() - t.pass('cleaned up') - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(base) -} diff --git a/test/tap/gist-short-shortcut-package.js b/test/tap/gist-short-shortcut-package.js index e5e67f21a05dc..601d53a827666 100644 --- a/test/tap/gist-short-shortcut-package.js +++ b/test/tap/gist-short-shortcut-package.js @@ -3,9 +3,7 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -63,13 +61,7 @@ test('gist-short-shortcut-package', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - function setup () { - cleanup() mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -77,8 +69,3 @@ function setup () { ) process.chdir(pkg) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/gist-short-shortcut.js b/test/tap/gist-short-shortcut.js index 2fcf63d53ede1..82c9ae17502dd 100644 --- a/test/tap/gist-short-shortcut.js +++ b/test/tap/gist-short-shortcut.js @@ -3,9 +3,7 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -60,13 +58,7 @@ test('gist-shortcut', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - function setup () { - cleanup() mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -74,8 +66,3 @@ function setup () { ) process.chdir(pkg) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/gist-shortcut-package.js b/test/tap/gist-shortcut-package.js index 06b4383583aad..28e57357cc393 100644 --- a/test/tap/gist-shortcut-package.js +++ b/test/tap/gist-shortcut-package.js @@ -2,10 +2,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -20,12 +17,8 @@ var json = { } } -test('setup', function (t) { - setup() - t.end() -}) - test('gist-shortcut-package', function (t) { + setup() var cloneUrls = [ ['git://gist.github.com/deadbeef.git', 'GitHub gist shortcuts try git URLs first'], ['https://gist.github.com/deadbeef.git', 'GitHub gist shortcuts try HTTPS URLs second'], @@ -63,22 +56,10 @@ test('gist-shortcut-package', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - function setup () { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) process.chdir(pkg) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/gist-shortcut.js b/test/tap/gist-shortcut.js index e5f200f5fdeb1..ca86d6bc55058 100644 --- a/test/tap/gist-shortcut.js +++ b/test/tap/gist-shortcut.js @@ -2,10 +2,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -17,12 +14,12 @@ var json = { version: '0.0.0' } -test('setup', function (t) { - setup() - t.end() -}) - test('gist-shortcut', function (t) { + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + process.chdir(pkg) var cloneUrls = [ ['git://gist.github.com/deadbeef.git', 'GitHub gist shortcuts try git URLs first'], ['https://gist.github.com/deadbeef.git', 'GitHub gist shortcuts try HTTPS URLs second'], @@ -59,23 +56,3 @@ test('gist-shortcut', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/git-dependency-install-link.js b/test/tap/git-dependency-install-link.js index 44438e7f95825..d80beab057f4d 100644 --- a/test/tap/git-dependency-install-link.js +++ b/test/tap/git-dependency-install-link.js @@ -1,7 +1,6 @@ var fs = require('fs') var resolve = require('path').resolve -var osenv = require('osenv') var mkdirp = require('mkdirp') var rimraf = require('rimraf') var test = require('tap').test @@ -11,9 +10,9 @@ var mr = require('npm-registry-mock') var npm = require('../../lib/npm.js') var common = require('../common-tap.js') -var pkg = common.pkg -var repo = pkg + '-repo' -var prefix = pkg + '-prefix' +var pkg = resolve(common.pkg, 'package') +var repo = resolve(common.pkg, 'repo') +var prefix = resolve(common.pkg, 'prefix') var cache = common.cache var daemon @@ -42,8 +41,8 @@ var pjChild = JSON.stringify({ }, null, 2) + '\n' test('setup', function (t) { - bootstrap() - setup(function (er, r) { + t.test('bootstrap', t => bootstrap(t.end)) + t.test('setup', t => setup(function (er, r) { t.ifError(er, 'git started up successfully') if (!er) { @@ -59,7 +58,8 @@ test('setup', function (t) { t.end() }) - }) + })) + t.end() }) test('install from git repo [no --link]', function (t) { @@ -103,20 +103,20 @@ test('install from git repo [with --link]', function (t) { test('clean', function (t) { mockRegistry.close() - daemon.on('close', function () { - cleanup() - t.end() - }) + daemon.on('close', t.end) process.kill(daemonPID) }) -function bootstrap () { - rimraf.sync(repo) - rimraf.sync(pkg) - mkdirp.sync(pkg) - mkdirp.sync(cache) +function bootstrap (cb) { + rimraf(repo, () => { + rimraf(pkg, () => { + mkdirp.sync(pkg) + mkdirp.sync(cache) - fs.writeFileSync(resolve(pkg, 'package.json'), pjParent) + fs.writeFileSync(resolve(pkg, 'package.json'), pjParent) + cb() + }) + }) } function setup (cb) { @@ -170,10 +170,3 @@ function setup (cb) { }, cb) }) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(repo) - rimraf.sync(prefix) - rimraf.sync(pkg) -} diff --git a/test/tap/git-prepare.js b/test/tap/git-prepare.js index 37534fbfc430f..072f4dfc447fc 100644 --- a/test/tap/git-prepare.js +++ b/test/tap/git-prepare.js @@ -3,8 +3,6 @@ const fs = require('fs') const path = require('path') -const osenv = require('osenv') -const rimraf = require('rimraf') const test = require('tap').test const mr = require('npm-registry-mock') @@ -68,7 +66,7 @@ const fixture = new Tacks(Dir({ })) test('setup', function (t) { - bootstrap() + fixture.create(testdir) setup(function (er, r) { t.ifError(er, 'git started up successfully') @@ -115,17 +113,10 @@ test('install from git repo with prepare script', function (t) { test('clean', function (t) { mockRegistry.close() - daemon.on('close', function () { - cleanup() - t.end() - }) + daemon.on('close', t.end) process.kill(daemonPID) }) -function bootstrap () { - fixture.create(testdir) -} - function setup (cb) { npm.load({ prefix: testdir, @@ -173,8 +164,3 @@ function setup (cb) { }, cb) }) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(testdir) -} diff --git a/test/tap/github-shortcut-package.js b/test/tap/github-shortcut-package.js index db153ba352e55..444520308a245 100644 --- a/test/tap/github-shortcut-package.js +++ b/test/tap/github-shortcut-package.js @@ -2,10 +2,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -20,12 +17,12 @@ var json = { } } -test('setup', function (t) { - setup() - t.end() -}) - test('github-shortcut-package', function (t) { + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + process.chdir(pkg) var cloneUrls = [ ['git://github.com/foo/private.git', 'GitHub shortcuts try git URLs first'], ['https://github.com/foo/private.git', 'GitHub shortcuts try HTTPS URLs second'], @@ -62,23 +59,3 @@ test('github-shortcut-package', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/github-shortcut.js b/test/tap/github-shortcut.js index 0c89d428fa1af..59c7e39ea948f 100644 --- a/test/tap/github-shortcut.js +++ b/test/tap/github-shortcut.js @@ -5,10 +5,7 @@ const BB = require('bluebird') const fs = require('graceful-fs') const path = require('path') -const mkdirp = require('mkdirp') -const osenv = require('osenv') const requireInject = require('require-inject') -const rimraf = require('rimraf') const test = require('tap').test const common = require('../common-tap.js') @@ -20,12 +17,12 @@ const json = { version: '0.0.0' } -test('setup', function (t) { - setup() - t.end() -}) - test('github-shortcut', function (t) { + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + process.chdir(pkg) const cloneUrls = [ ['git://github.com/foo/private.git', 'GitHub shortcuts try git URLs first'], ['https://github.com/foo/private.git', 'GitHub shortcuts try HTTPS URLs second'], @@ -62,23 +59,3 @@ test('github-shortcut', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/gitlab-shortcut-package.js b/test/tap/gitlab-shortcut-package.js index 4f5b43851d88b..9b431ff7b66f0 100644 --- a/test/tap/gitlab-shortcut-package.js +++ b/test/tap/gitlab-shortcut-package.js @@ -2,10 +2,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -20,12 +17,12 @@ var json = { } } -test('setup', function (t) { - setup() - t.end() -}) - test('gitlab-shortcut-package', function (t) { + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + process.chdir(pkg) var cloneUrls = [ ['https://gitlab.com/foo/private.git', 'GitLab shortcuts try HTTPS URLs second'], ['ssh://git@gitlab.com/foo/private.git', 'GitLab shortcuts try SSH first'] @@ -61,23 +58,3 @@ test('gitlab-shortcut-package', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/gitlab-shortcut.js b/test/tap/gitlab-shortcut.js index e6bd54765a089..344311b45f26c 100644 --- a/test/tap/gitlab-shortcut.js +++ b/test/tap/gitlab-shortcut.js @@ -2,10 +2,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') -var osenv = require('osenv') var requireInject = require('require-inject') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -17,12 +14,12 @@ var json = { version: '0.0.0' } -test('setup', function (t) { - setup() - t.end() -}) - test('gitlab-shortcut', function (t) { + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + process.chdir(pkg) var cloneUrls = [ ['https://gitlab.com/foo/private.git', 'GitLab shortcuts try HTTPS URLs second'], ['ssh://git@gitlab.com/foo/private.git', 'GitLab shortcuts try SSH first'] @@ -58,23 +55,3 @@ test('gitlab-shortcut', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/graceful-restart.js b/test/tap/graceful-restart.js index 740561bd79efa..787aa988949b6 100644 --- a/test/tap/graceful-restart.js +++ b/test/tap/graceful-restart.js @@ -1,13 +1,7 @@ var fs = require('fs') var resolve = require('path').resolve - -var osenv = require('osenv') -var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var test = require('tap').test - var common = require('../common-tap.js') - var pkg = common.pkg var outGraceless = [ @@ -60,11 +54,6 @@ var pjGraceful = JSON.stringify({ } }, null, 2) + '\n' -test('setup', function (t) { - bootstrap() - t.end() -}) - test('graceless restart', function (t) { fs.writeFileSync(resolve(pkg, 'package.json'), pjGraceless) createChild(['run-script', 'restart'], function (err, code, out) { @@ -85,20 +74,6 @@ test('graceful restart', function (t) { }) }) -test('clean', function (t) { - cleanup() - t.end() -}) - -function bootstrap () { - mkdirp.sync(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - function createChild (args, cb) { var env = { HOME: process.env.HOME, diff --git a/test/tap/ignore-install-link.js b/test/tap/ignore-install-link.js index a2caa23dfdb56..038b9448d7817 100644 --- a/test/tap/ignore-install-link.js +++ b/test/tap/ignore-install-link.js @@ -1,8 +1,5 @@ -if (process.platform === 'win32') { - require('tap').plan(0, 'symlinks are weird on windows, skip this test') - process.exit(0) -} var common = require('../common-tap.js') +common.skipIfWindows('symlinks are weird on windows') var test = require('tap').test var path = require('path') var fs = require('fs') diff --git a/test/tap/init-interrupt.js b/test/tap/init-interrupt.js index 114bb2bacba27..38c38053e590d 100644 --- a/test/tap/init-interrupt.js +++ b/test/tap/init-interrupt.js @@ -2,21 +2,12 @@ // if 'npm init' is interrupted with ^C, don't report // 'init written successfully' var test = require('tap').test -var osenv = require('osenv') -var rimraf = require('rimraf') var npmlog = require('npmlog') var requireInject = require('require-inject') var npm = require('../../lib/npm.js') -const common = require('../common-tap.js') -var PKG_DIR = common.pkg - -test('setup', function (t) { - cleanup() - - t.end() -}) +require('../common-tap.js') test('issue #6684 remove confusing message', function (t) { var initJsonMock = function (dir, input, config, cb) { @@ -45,14 +36,3 @@ test('issue #6684 remove confusing message', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(PKG_DIR) -} diff --git a/test/tap/install-at-locally.js b/test/tap/install-at-locally.js index 705c2df119642..e4920d22d14aa 100644 --- a/test/tap/install-at-locally.js +++ b/test/tap/install-at-locally.js @@ -2,7 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') var rimraf = require('rimraf') var test = require('tap').test @@ -17,11 +16,6 @@ var json = { version: '0.0.0' } -test('setup', function (t) { - cleanup() - t.end() -}) - test('\'npm install ./package@1.2.3\' should install local pkg', function (t) { var target = './package@1.2.3' setup(target) @@ -46,18 +40,8 @@ test('\'npm install install/at/locally@./package@1.2.3\' should install local pk }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - function setup (target) { - cleanup() + rimraf.sync(pkg) var root = path.resolve(pkg, target) mkdirp.sync(root) fs.writeFileSync( @@ -65,5 +49,4 @@ function setup (target) { JSON.stringify(json, null, 2) ) mkdirp.sync(path.resolve(pkg, 'node_modules')) - process.chdir(pkg) } diff --git a/test/tap/install-at-sub-path-locally.js b/test/tap/install-at-sub-path-locally.js index 08b64746af678..931d29bbd2642 100644 --- a/test/tap/install-at-sub-path-locally.js +++ b/test/tap/install-at-sub-path-locally.js @@ -2,13 +2,11 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') -var pkg = common.pkg +var pkg = path.resolve(common.pkg, 'package') var EXEC_OPTS = { cwd: pkg, stdio: [0, 1, 2] } @@ -20,12 +18,17 @@ var json = { var target = '../package@1.2.3' test('setup', function (t) { - cleanup() + var root = path.resolve(pkg, target) + mkdirp.sync(root) + fs.writeFileSync( + path.join(root, 'package.json'), + JSON.stringify(json, null, 2) + ) + mkdirp.sync(path.resolve(pkg, 'node_modules')) t.end() }) test('\'npm install ../package@1.2.3\' should install local pkg from sub path', function (t) { - setup() common.npm(['install', '--loglevel=silent', target], EXEC_OPTS, function (err, code) { if (err) throw err var p = path.resolve(pkg, 'node_modules/install-at-sub-path-locally-mock/package.json') @@ -44,26 +47,3 @@ test('\'running npm install ../package@1.2.3\' should not break on sub path re-i t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - rimraf.sync(path.resolve(pkg, target)) -} - -function setup () { - cleanup() - var root = path.resolve(pkg, target) - mkdirp.sync(root) - fs.writeFileSync( - path.join(root, 'package.json'), - JSON.stringify(json, null, 2) - ) - mkdirp.sync(path.resolve(pkg, 'node_modules')) - process.chdir(pkg) -} diff --git a/test/tap/install-bad-dep-format.js b/test/tap/install-bad-dep-format.js index d01996f155212..9d9a41383598d 100644 --- a/test/tap/install-bad-dep-format.js +++ b/test/tap/install-bad-dep-format.js @@ -2,8 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -18,8 +16,13 @@ var json = { } test('invalid url format returns appropriate error', function (t) { - setup(json) - common.npm(['install'], {}, function (err, code, stdout, stderr) { + var pkgPath = path.resolve(common.pkg, json.name) + mkdirp.sync(pkgPath) + fs.writeFileSync( + path.join(pkgPath, 'package.json'), + JSON.stringify(json, null, 2) + ) + common.npm(['install'], {cwd: pkgPath}, function (err, code, stdout, stderr) { t.ifError(err, 'install ran without error') t.equals(code, 1, 'install exited with code 1') t.match(stderr, @@ -28,31 +31,3 @@ test('invalid url format returns appropriate error', function (t) { t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup (json) { - cleanup() - process.chdir(mkPkg(json)) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - var pkgs = [json] - pkgs.forEach(function (json) { - rimraf.sync(path.resolve(common.pkg, json.name)) - }) -} - -function mkPkg (json) { - var pkgPath = path.resolve(common.pkg, json.name) - mkdirp.sync(pkgPath) - fs.writeFileSync( - path.join(pkgPath, 'package.json'), - JSON.stringify(json, null, 2) - ) - return pkgPath -} diff --git a/test/tap/install-bad-man.js b/test/tap/install-bad-man.js index 98c8e9a7e0453..0aa83a21c541a 100644 --- a/test/tap/install-bad-man.js +++ b/test/tap/install-bad-man.js @@ -1,15 +1,13 @@ var fs = require('fs') var resolve = require('path').resolve -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') -var pkg = common.pkg -var target = pkg + '-target' +var pkg = resolve(common.pkg, 'package') +var target = resolve(common.pkg, 'target') var EXEC_OPTS = { cwd: target @@ -21,11 +19,17 @@ var json = { man: [ './install-bad-man.1.lol' ] } -common.pendIfWindows('man pages do not get installed on Windows') +common.skipIfWindows('man pages do not get installed on Windows') test('setup', function (t) { - setup() - t.pass('setup ran') + mkdirp.sync(pkg) + // make sure it installs locally + mkdirp.sync(resolve(target, 'node_modules')) + fs.writeFileSync( + resolve(pkg, 'package.json'), + JSON.stringify(json, null, 2) + '\n' + ) + fs.writeFileSync(resolve(pkg, 'install-bad-man.1.lol'), 'lol\n') t.end() }) @@ -55,27 +59,3 @@ test("install from repo on 'OS X'", function (t) { } ) }) - -test('clean', function (t) { - cleanup() - t.pass('cleaned up') - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(pkg) - // make sure it installs locally - mkdirp.sync(resolve(target, 'node_modules')) - fs.writeFileSync( - resolve(pkg, 'package.json'), - JSON.stringify(json, null, 2) + '\n' - ) - fs.writeFileSync(resolve(pkg, 'install-bad-man.1.lol'), 'lol\n') -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - rimraf.sync(target) -} diff --git a/test/tap/install-bin-null.js b/test/tap/install-bin-null.js index 7a87a2e0bbc27..2ad75eb59940a 100644 --- a/test/tap/install-bin-null.js +++ b/test/tap/install-bin-null.js @@ -2,8 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -43,49 +41,33 @@ var grandchildPkg = { var pkgs = [childPkgA, childPkgB, grandchildPkg] -test('the grandchild has bin:null', function (t) { - setup() - common.npm(['install'], EXEC_OPTS, function (err, code, stdout, stderr) { - t.ifErr(err, 'npm link finished without error') - t.equal(code, 0, 'exited ok') - t.ok(stdout, 'output indicating success') - t.notOk(stderr, 'no output stderr') - t.end() - }) -}) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -function setup () { - cleanup() +test('setup', t => { mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(parentPkg, null, 2) ) pkgs.forEach(function (json) { - process.chdir(mkPkg(json)) + var pkgPath = path.resolve(pkg, json.name) + mkdirp.sync(pkgPath) + fs.writeFileSync( + path.join(pkgPath, 'package.json'), + JSON.stringify(json, null, 2) + ) }) fs.writeFileSync( path.join(pkg, childPkgA.name, 'index.js'), '' ) -} + t.end() +}) -function mkPkg (json) { - var pkgPath = path.resolve(pkg, json.name) - mkdirp.sync(pkgPath) - fs.writeFileSync( - path.join(pkgPath, 'package.json'), - JSON.stringify(json, null, 2) - ) - return pkgPath -} +test('the grandchild has bin:null', function (t) { + common.npm(['install'], EXEC_OPTS, function (err, code, stdout, stderr) { + t.ifErr(err, 'npm link finished without error') + t.equal(code, 0, 'exited ok') + t.ok(stdout, 'output indicating success') + t.notOk(stderr, 'no output stderr') + t.end() + }) +}) diff --git a/test/tap/install-cli-only-development.js b/test/tap/install-cli-only-development.js index a68c0f8aac0a2..6f03931d80e9c 100644 --- a/test/tap/install-cli-only-development.js +++ b/test/tap/install-cli-only-development.js @@ -3,9 +3,8 @@ var path = require('path') var existsSync = fs.existsSync || path.existsSync var mkdirp = require('mkdirp') -var osenv = require('osenv') var rimraf = require('rimraf') -var test = require('tap').test +const t = require('tap') var common = require('../common-tap.js') @@ -37,13 +36,29 @@ var devDependency = { version: '0.0.0' } -test('setup', function (t) { - setup() - t.pass('setup ran') +t.test('setup', t => { + mkdirp.sync(path.join(pkg, 'dependency')) + fs.writeFileSync( + path.join(pkg, 'dependency', 'package.json'), + JSON.stringify(dependency, null, 2) + ) + + mkdirp.sync(path.join(pkg, 'dev-dependency')) + fs.writeFileSync( + path.join(pkg, 'dev-dependency', 'package.json'), + JSON.stringify(devDependency, null, 2) + ) + + mkdirp.sync(path.join(pkg, 'node_modules')) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + t.end() }) -test('\'npm install --only=development\' should only install devDependencies', function (t) { +t.test('\'npm install --only=development\' should only install devDependencies', function (t) { common.npm(['install', '--only=development'], EXEC_OPTS, function (err, code) { t.ifError(err, 'install development successful') t.equal(code, 0, 'npm install did not raise error code') @@ -57,14 +72,11 @@ test('\'npm install --only=development\' should only install devDependencies', f existsSync(path.resolve(pkg, 'node_modules/dependency/package.json')), 'dependency was NOT installed' ) - t.end() + rimraf(path.join(pkg, 'node_modules'), t.end) }) }) -test('\'npm install --only=development\' should only install devDependencies regardless of npm.config.get(\'production\')', function (t) { - cleanup() - setup() - +t.test('\'npm install --only=development\' should only install devDependencies regardless of npm.config.get(\'production\')', function (t) { common.npm(['install', '--only=development', '--production'], EXEC_OPTS, function (err, code) { t.ifError(err, 'install development successful') t.equal(code, 0, 'npm install did not raise error code') @@ -78,38 +90,6 @@ test('\'npm install --only=development\' should only install devDependencies reg existsSync(path.resolve(pkg, 'node_modules/dependency/package.json')), 'dependency was NOT installed' ) - t.end() + rimraf(path.join(pkg, 'node_modules'), t.end) }) }) - -test('cleanup', function (t) { - cleanup() - t.pass('cleaned up') - t.end() -}) - -function setup () { - mkdirp.sync(path.join(pkg, 'dependency')) - fs.writeFileSync( - path.join(pkg, 'dependency', 'package.json'), - JSON.stringify(dependency, null, 2) - ) - - mkdirp.sync(path.join(pkg, 'dev-dependency')) - fs.writeFileSync( - path.join(pkg, 'dev-dependency', 'package.json'), - JSON.stringify(devDependency, null, 2) - ) - - mkdirp.sync(path.join(pkg, 'node_modules')) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/install-cli-only-production.js b/test/tap/install-cli-only-production.js index e43692d3d7c9c..63863ff934d93 100644 --- a/test/tap/install-cli-only-production.js +++ b/test/tap/install-cli-only-production.js @@ -3,8 +3,6 @@ var path = require('path') var existsSync = fs.existsSync || path.existsSync var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -59,7 +57,6 @@ test('setup', function (t) { JSON.stringify(json, null, 2) ) - process.chdir(pkg) t.end() }) @@ -82,9 +79,3 @@ test('\'npm install --only=production\' should only install dependencies', funct t.end() }) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - t.end() -}) diff --git a/test/tap/install-cli-only-shrinkwrap.js b/test/tap/install-cli-only-shrinkwrap.js index e3a4685d9c459..004593d782c22 100644 --- a/test/tap/install-cli-only-shrinkwrap.js +++ b/test/tap/install-cli-only-shrinkwrap.js @@ -3,7 +3,6 @@ var path = require('path') var existsSync = fs.existsSync || path.existsSync var mkdirp = require('mkdirp') -var osenv = require('osenv') var rimraf = require('rimraf') var test = require('tap').test @@ -55,9 +54,27 @@ var devDependency = { } test('setup', function (t) { - cleanup() - setup() - t.pass('setup ran') + mkdirp.sync(path.join(pkg, 'dependency')) + fs.writeFileSync( + path.join(pkg, 'dependency', 'package.json'), + JSON.stringify(dependency, null, 2) + ) + + mkdirp.sync(path.join(pkg, 'dev-dependency')) + fs.writeFileSync( + path.join(pkg, 'dev-dependency', 'package.json'), + JSON.stringify(devDependency, null, 2) + ) + + mkdirp.sync(path.join(pkg, 'node_modules')) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + fs.writeFileSync( + path.join(pkg, 'npm-shrinkwrap.json'), + JSON.stringify(shrinkwrap, null, 2) + ) t.end() }) @@ -77,13 +94,11 @@ test('\'npm install --only=development\' should only install devDependencies', f existsSync(path.resolve(pkg, 'node_modules/dependency/package.json')), 'dependency was NOT installed' ) - t.end() + rimraf(path.join(pkg, 'node_modules'), t.end) }) }) test('\'npm install --only=production\' should only install dependencies', function (t) { - cleanup() - setup() common.npm(['install', '--only=production'], EXEC_OPTS, function (err, code, stdout, stderr) { if (err) throw err t.comment(stdout.trim()) @@ -99,42 +114,6 @@ test('\'npm install --only=production\' should only install dependencies', funct existsSync(path.resolve(pkg, 'node_modules/dev-dependency/package.json')), 'devDependency was NOT installed' ) - t.end() + rimraf(path.join(pkg, 'node_modules'), t.end) }) }) - -test('cleanup', function (t) { - cleanup() - t.pass('cleaned up') - t.end() -}) - -function setup () { - mkdirp.sync(path.join(pkg, 'dependency')) - fs.writeFileSync( - path.join(pkg, 'dependency', 'package.json'), - JSON.stringify(dependency, null, 2) - ) - - mkdirp.sync(path.join(pkg, 'dev-dependency')) - fs.writeFileSync( - path.join(pkg, 'dev-dependency', 'package.json'), - JSON.stringify(devDependency, null, 2) - ) - - mkdirp.sync(path.join(pkg, 'node_modules')) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - fs.writeFileSync( - path.join(pkg, 'npm-shrinkwrap.json'), - JSON.stringify(shrinkwrap, null, 2) - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/install-cli-production-nosave.js b/test/tap/install-cli-production-nosave.js index 46b3460b7232c..23f5494996473 100644 --- a/test/tap/install-cli-production-nosave.js +++ b/test/tap/install-cli-production-nosave.js @@ -3,12 +3,9 @@ var path = require('path') var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') -var test = require('tap').test +var t = require('tap') var common = require('../common-tap.js') -var server var pkg = common.pkg @@ -21,16 +18,20 @@ var PACKAGE_JSON1 = { } } -test('setup', function (t) { - setup() +t.test('setup', function (t) { + mkdirp.sync(path.resolve(pkg, 'node_modules')) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(PACKAGE_JSON1, null, 2) + ) mr({ port: common.port }, function (er, s) { t.ifError(er, 'started mock registry') - server = s + t.parent.teardown(() => s.close()) t.end() }) }) -test('install --production without --save exits successfully', function (t) { +t.test('install --production without --save exits successfully', function (t) { common.npm( [ '--registry', common.registry, @@ -45,25 +46,3 @@ test('install --production without --save exits successfully', function } ) }) - -test('cleanup', function (t) { - server.close() - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -function setup () { - cleanup() - mkdirp.sync(path.resolve(pkg, 'node_modules')) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(PACKAGE_JSON1, null, 2) - ) - - process.chdir(pkg) -} diff --git a/test/tap/install-cli-production.js b/test/tap/install-cli-production.js index 4c88add92fffc..d083b4295738b 100644 --- a/test/tap/install-cli-production.js +++ b/test/tap/install-cli-production.js @@ -3,8 +3,6 @@ var path = require('path') var existsSync = fs.existsSync || path.existsSync var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -59,7 +57,6 @@ test('setup', function (t) { JSON.stringify(json, null, 2) ) - process.chdir(pkg) t.end() }) @@ -80,9 +77,3 @@ test('\'npm install --production\' should only install dependencies', function ( t.end() }) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - t.end() -}) diff --git a/test/tap/install-cli-unicode.js b/test/tap/install-cli-unicode.js index 2691db96d0677..930066db5fe54 100644 --- a/test/tap/install-cli-unicode.js +++ b/test/tap/install-cli-unicode.js @@ -1,14 +1,10 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') -var server var pkg = common.pkg @@ -28,15 +24,13 @@ var json = { } test('setup', function (t) { - rimraf.sync(pkg) - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) mr({ port: common.port }, function (er, s) { - server = s + t.parent.teardown(() => s.close()) t.end() }) }) @@ -61,11 +55,3 @@ test('does not use unicode with --unicode false', function (t) { } ) }) - -test('cleanup', function (t) { - server.close() - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - - t.end() -}) diff --git a/test/tap/install-duplicate-deps-warning.js b/test/tap/install-duplicate-deps-warning.js index 05eccd8e43b03..869476ccd17ef 100644 --- a/test/tap/install-duplicate-deps-warning.js +++ b/test/tap/install-duplicate-deps-warning.js @@ -1,10 +1,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -21,21 +18,16 @@ var json = { } } -test('setup', function (t) { +test('npm install with duplicate dependencies, different versions', function (t) { + t.plan(1) t.comment('test for https://github.com/npm/npm/issues/6725') - cleanup() - mkdirp.sync(pkg) + fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) process.chdir(pkg) - console.dir(pkg) - t.end() -}) -test('npm install with duplicate dependencies, different versions', function (t) { - t.plan(1) mr({ port: common.port }, function (er, s) { var opts = { cache: common.cache, @@ -57,13 +49,3 @@ test('npm install with duplicate dependencies, different versions', function (t) }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/install-from-local-multipath.js b/test/tap/install-from-local-multipath.js index 83dbdadde9e55..e35794dca986c 100644 --- a/test/tap/install-from-local-multipath.js +++ b/test/tap/install-from-local-multipath.js @@ -2,8 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -115,7 +113,6 @@ var child2Lock = { } test('setup', function (t) { - rimraf.sync(pkg) mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -174,9 +171,3 @@ test('\'npm install\' should install local packages', function (t) { } ) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(root) - t.end() -}) diff --git a/test/tap/install-from-local.js b/test/tap/install-from-local.js index a3e63b359dbea..1ab94243ff3ca 100644 --- a/test/tap/install-from-local.js +++ b/test/tap/install-from-local.js @@ -2,8 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -37,7 +35,6 @@ var localDevDependency = { } test('setup', function (t) { - rimraf.sync(pkg) mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -90,9 +87,3 @@ test('\'npm install\' should install local packages', function (t) { } ) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(root) - t.end() -}) diff --git a/test/tap/install-link-scripts.js b/test/tap/install-link-scripts.js index 3553e6377370a..52e50c6e9fb0a 100644 --- a/test/tap/install-link-scripts.js +++ b/test/tap/install-link-scripts.js @@ -1,16 +1,12 @@ -if (process.platform === 'win32') { - require('tap').plan(0, 'links are weird on windows, skip this') - process.exit(0) -} var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') var rimraf = require('rimraf') -var test = require('tap').test +const t = require('tap') var common = require('../common-tap.js') +common.skipIfWindows('links are weird on windows') var pkg = common.pkg var tmp = path.join(pkg, 'tmp') @@ -40,9 +36,29 @@ console.log('hey sup') process.env.npm_config_prefix = tmp -test('plain install', function (t) { - setup() +t.beforeEach(cb => { + rimraf(pkg, er => { + if (er) { + return cb(er) + } + mkdirp.sync(tmp) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + + mkdirp.sync(path.join(dep, 'bin')) + fs.writeFileSync( + path.join(dep, 'package.json'), + JSON.stringify(dependency, null, 2) + ) + fs.writeFileSync(path.join(dep, 'bin', 'foo'), foo) + fs.chmod(path.join(dep, 'bin', 'foo'), '0755') + cb() + }) +}) +t.test('plain install', function (t) { common.npm( [ 'install', dep, @@ -59,9 +75,7 @@ test('plain install', function (t) { ) }) -test('link', function (t) { - setup() - +t.test('link', function (t) { common.npm( [ 'link', @@ -78,9 +92,7 @@ test('link', function (t) { ) }) -test('install --link', function (t) { - setup() - +t.test('install --link', function (t) { common.npm( [ 'link', @@ -107,30 +119,3 @@ test('install --link', function (t) { } ) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(tmp) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - - mkdirp.sync(path.join(dep, 'bin')) - fs.writeFileSync( - path.join(dep, 'package.json'), - JSON.stringify(dependency, null, 2) - ) - fs.writeFileSync(path.join(dep, 'bin', 'foo'), foo) - fs.chmod(path.join(dep, 'bin', 'foo'), '0755') -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/install-man.js b/test/tap/install-man.js index 720b4c217b375..8c4b89015151f 100644 --- a/test/tap/install-man.js +++ b/test/tap/install-man.js @@ -1,15 +1,13 @@ var fs = require('fs') var resolve = require('path').resolve -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') -var pkg = common.pkg -var target = pkg + '-target' +var pkg = resolve(common.pkg, 'package') +var target = resolve(common.pkg, 'target') common.pendIfWindows('man pages do not get installed on Windows') @@ -24,8 +22,14 @@ var json = { } test('setup', function (t) { - setup() - t.pass('setup ran') + mkdirp.sync(pkg) + // make sure it installs locally + mkdirp.sync(resolve(target, 'node_modules')) + fs.writeFileSync( + resolve(pkg, 'package.json'), + JSON.stringify(json, null, 2) + '\n' + ) + fs.writeFileSync(resolve(pkg, 'install-man.1'), 'THIS IS A MANPAGE\n') t.end() }) @@ -51,27 +55,3 @@ test('install man page', function (t) { } ) }) - -test('clean', function (t) { - cleanup() - t.pass('cleaned up') - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(pkg) - // make sure it installs locally - mkdirp.sync(resolve(target, 'node_modules')) - fs.writeFileSync( - resolve(pkg, 'package.json'), - JSON.stringify(json, null, 2) + '\n' - ) - fs.writeFileSync(resolve(pkg, 'install-man.1'), 'THIS IS A MANPAGE\n') -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - rimraf.sync(target) -} diff --git a/test/tap/install-noargs-dev.js b/test/tap/install-noargs-dev.js index 4716dc2243b53..53422b9b5bc23 100644 --- a/test/tap/install-noargs-dev.js +++ b/test/tap/install-noargs-dev.js @@ -3,12 +3,9 @@ var path = require('path') var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') -var server var pkg = common.pkg @@ -31,10 +28,14 @@ var PACKAGE_JSON2 = { } test('setup', function (t) { - setup() + mkdirp.sync(path.resolve(pkg, 'node_modules')) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(PACKAGE_JSON1, null, 2) + ) mr({ port: common.port }, function (er, s) { t.ifError(er, 'started mock registry') - server = s + t.parent.teardown(() => s.close()) t.end() }) }) @@ -87,25 +88,3 @@ test('install noargs installs updated devDependencies', function (t) { } ) }) - -test('cleanup', function (t) { - server.close() - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -function setup () { - cleanup() - mkdirp.sync(path.resolve(pkg, 'node_modules')) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(PACKAGE_JSON1, null, 2) - ) - - process.chdir(pkg) -} diff --git a/test/tap/install-package-json-order.js b/test/tap/install-package-json-order.js index 2e780def2696f..45ce882620c7b 100644 --- a/test/tap/install-package-json-order.js +++ b/test/tap/install-package-json-order.js @@ -1,6 +1,5 @@ var test = require('tap').test var path = require('path') -var rimraf = require('rimraf') var mkdirp = require('mkdirp') var spawn = require('child_process').spawn var npm = require.resolve('../../bin/npm-cli.js') @@ -9,20 +8,26 @@ const common = require('../common-tap.js') var pkg = common.pkg var workdir = path.join(pkg, 'workdir') var tmp = path.join(pkg, 'tmp') -var cache = common.cache var fs = require('fs') -var osenv = require('osenv') test('package.json sorting after install', function (t) { var packageJson = path.resolve(pkg, 'package.json') var installedPackage = path.resolve(workdir, 'node_modules/install-package-json-order/package.json') - cleanup() - mkdirp.sync(cache) mkdirp.sync(tmp) mkdirp.sync(workdir) - setup() + + fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ + 'name': 'install-package-json-order', + 'version': '0.0.0', + 'array': [ 'one', 'two', 'three' ] + }, null, 2), 'utf8') + + fs.writeFileSync(path.resolve(workdir, 'package.json'), JSON.stringify({ + 'name': 'install-package-json-order-work', + 'version': '0.0.0' + }, null, 2), 'utf8') var before = JSON.parse(fs.readFileSync(packageJson).toString()) var child = spawn(node, [npm, 'install', pkg], { cwd: workdir }) @@ -35,29 +40,3 @@ test('package.json sorting after install', function (t) { t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.pass('cleaned up') - t.end() -}) - -function setup () { - mkdirp.sync(pkg) - - fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ - 'name': 'install-package-json-order', - 'version': '0.0.0', - 'array': [ 'one', 'two', 'three' ] - }, null, 2), 'utf8') - fs.writeFileSync(path.resolve(workdir, 'package.json'), JSON.stringify({ - 'name': 'install-package-json-order-work', - 'version': '0.0.0' - }, null, 2), 'utf8') -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(cache) - rimraf.sync(pkg) -} diff --git a/test/tap/install-property-conflicts.js b/test/tap/install-property-conflicts.js index c8f58e139fbcc..a98f8570c62bd 100644 --- a/test/tap/install-property-conflicts.js +++ b/test/tap/install-property-conflicts.js @@ -1,9 +1,7 @@ var fs = require('fs') var resolve = require('path').resolve -var osenv = require('osenv') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -22,8 +20,12 @@ var json = { } test('setup', function (t) { - setup() - t.pass('setup ran') + // make sure it installs locally + mkdirp.sync(resolve(target, 'node_modules')) + fs.writeFileSync( + resolve(pkg, 'package.json'), + JSON.stringify(json, null, 2) + '\n' + ) t.end() }) @@ -49,26 +51,3 @@ test('install package with a `type` property', function (t) { } ) }) - -test('clean', function (t) { - cleanup() - t.pass('cleaned up') - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(pkg) - // make sure it installs locally - mkdirp.sync(resolve(target, 'node_modules')) - fs.writeFileSync( - resolve(pkg, 'package.json'), - JSON.stringify(json, null, 2) + '\n' - ) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - rimraf.sync(target) -} diff --git a/test/tap/install-save-consistent-newlines.js b/test/tap/install-save-consistent-newlines.js index acea57c987bfb..dfe41c649d2af 100644 --- a/test/tap/install-save-consistent-newlines.js +++ b/test/tap/install-save-consistent-newlines.js @@ -5,7 +5,6 @@ const path = require('path') const mkdirp = require('mkdirp') const mr = require('npm-registry-mock') -const osenv = require('osenv') const rimraf = require('rimraf') const test = require('tap').test @@ -21,102 +20,79 @@ const json = { description: 'fixture' } -var server - -test('setup', function (t) { - setup('\n') +test('mock registry', function (t) { mr({ port: common.port }, function (er, s) { - server = s + t.parent.teardown(() => s.close()) t.end() }) }) -test('\'npm install --save\' should keep the original package.json line endings (LF)', function (t) { - common.npm( - [ - '--loglevel', 'silent', - '--registry', common.registry, - '--save', - 'install', 'underscore@1.3.1' - ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm ran without issue') - t.notOk(code, 'npm install exited without raising an error code') - - const pkgPath = path.resolve(pkg, 'package.json') - const pkgStr = fs.readFileSync(pkgPath, 'utf8') - - t.match(pkgStr, '\n') - t.notMatch(pkgStr, '\r') +const runTest = (t, opts) => { + t.test('setup', setup(opts.ending)) + t.test('check', check(opts)) + t.end() +} - const pkgLockPath = path.resolve(pkg, 'package-lock.json') - const pkgLockStr = fs.readFileSync(pkgLockPath, 'utf8') +const setup = lineEnding => t => { + rimraf(pkg, er => { + if (er) { + throw er + } + mkdirp.sync(path.resolve(pkg, 'node_modules')) - t.match(pkgLockStr, '\n') - t.notMatch(pkgLockStr, '\r') + var jsonStr = JSON.stringify(json, null, 2) - t.end() + if (lineEnding === '\r\n') { + jsonStr = jsonStr.replace(/\n/g, '\r\n') } - ) -}) -test('\'npm install --save\' should keep the original package.json line endings (CRLF)', function (t) { - setup('\r\n') + fs.writeFileSync( + path.join(pkg, 'package.json'), + jsonStr + ) - common.npm( - [ - '--loglevel', 'silent', - '--registry', common.registry, - '--save', - 'install', 'underscore@1.3.1' - ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm ran without issue') - t.notOk(code, 'npm install exited without raising an error code') + t.end() + }) +} - const pkgPath = path.resolve(pkg, 'package.json') - const pkgStr = fs.readFileSync(pkgPath, 'utf8') +const check = opts => t => common.npm( + [ + '--loglevel', 'silent', + '--registry', common.registry, + '--save', + 'install', 'underscore@1.3.1' + ], + EXEC_OPTS +).then(([code, err, out]) => { + t.notOk(code, 'npm install exited without raising an error code') - t.match(pkgStr, '\r\n') - t.notMatch(pkgStr, /[^\r]\n/) + const pkgPath = path.resolve(pkg, 'package.json') + const pkgStr = fs.readFileSync(pkgPath, 'utf8') - const pkgLockPath = path.resolve(pkg, 'package-lock.json') - const pkgLockStr = fs.readFileSync(pkgLockPath, 'utf8') + t.match(pkgStr, opts.match) + t.notMatch(pkgStr, opts.notMatch) - t.match(pkgLockStr, '\r\n') - t.notMatch(pkgLockStr, /[^\r]\n/) + const pkgLockPath = path.resolve(pkg, 'package-lock.json') + const pkgLockStr = fs.readFileSync(pkgLockPath, 'utf8') - t.end() - } - ) -}) + t.match(pkgLockStr, opts.match) + t.notMatch(pkgLockStr, opts.notMatch) -test('cleanup', function (t) { - server.close() - cleanup() t.end() }) -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -function setup (lineEnding) { - cleanup() - mkdirp.sync(path.resolve(pkg, 'node_modules')) - - var jsonStr = JSON.stringify(json, null, 2) - - if (lineEnding === '\r\n') { - jsonStr = jsonStr.replace(/\n/g, '\r\n') - } +test('keep LF line endings', t => { + runTest(t, { + ending: '\n', + match: '\n', + notMatch: '\r' + }) +}) - fs.writeFileSync( - path.join(pkg, 'package.json'), - jsonStr - ) - process.chdir(pkg) -} +test('keep CRLF line endings', t => { + runTest(t, { + ending: '\r\n', + match: '\r\n', + notMatch: /[^\r]\n/ + }) +}) diff --git a/test/tap/install-save-exact.js b/test/tap/install-save-exact.js index 3d57ead361be8..efa1e636138a1 100644 --- a/test/tap/install-save-exact.js +++ b/test/tap/install-save-exact.js @@ -3,12 +3,10 @@ var path = require('path') var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') -var server var pkg = common.pkg @@ -20,53 +18,32 @@ var json = { description: 'fixture' } -test('setup', function (t) { - setup() +test('mock registry', function (t) { mr({ port: common.port }, function (er, s) { - server = s + t.parent.teardown(() => s.close()) t.end() }) }) -test('\'npm install --save --save-exact\' should install local pkg', function (t) { - common.npm( - [ - '--loglevel', 'silent', - '--registry', common.registry, - '--save', - '--save-exact', - 'install', 'underscore@1.3.1' - ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm ran without issue') - t.notOk(code, 'npm install exited without raising an error code') - - var p = path.resolve(pkg, 'node_modules/underscore/package.json') - t.ok(JSON.parse(fs.readFileSync(p))) - - p = path.resolve(pkg, 'package.json') - var pkgJson = JSON.parse(fs.readFileSync(p, 'utf8')) - - t.same( - pkgJson.dependencies, - { 'underscore': '1.3.1' }, - 'underscore dependency should specify exactly 1.3.1' - ) - - t.end() - } - ) -}) - -test('\'npm install --save-dev --save-exact\' should install local pkg', function (t) { - setup() +const setup = t => { + t.test('destroy', t => rimraf(pkg, t.end)) + t.test('create', t => { + mkdirp.sync(path.resolve(pkg, 'node_modules')) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + t.end() + }) + t.end() +} +const check = (savearg, deptype) => t => { common.npm( [ '--loglevel', 'silent', '--registry', common.registry, - '--save-dev', + savearg, '--save-exact', 'install', 'underscore@1.3.1' ], @@ -82,7 +59,7 @@ test('\'npm install --save-dev --save-exact\' should install local pkg', functio var pkgJson = JSON.parse(fs.readFileSync(p, 'utf8')) t.same( - pkgJson.devDependencies, + pkgJson[deptype], { 'underscore': '1.3.1' }, 'underscore dependency should specify exactly 1.3.1' ) @@ -90,25 +67,16 @@ test('\'npm install --save-dev --save-exact\' should install local pkg', functio t.end() } ) -}) +} -test('cleanup', function (t) { - server.close() - cleanup() +test('\'npm install --save --save-exact\' should install local pkg', function (t) { + t.test('setup', setup) + t.test('check', check('--save', 'dependencies')) t.end() }) -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -function setup () { - cleanup() - mkdirp.sync(path.resolve(pkg, 'node_modules')) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) -} +test('\'npm install --save-dev --save-exact\' should install local pkg', function (t) { + t.test('setup', setup) + t.test('check', check('--save-dev', 'devDependencies')) + t.end() +}) diff --git a/test/tap/install-save-local.js b/test/tap/install-save-local.js index 8f4f5ecb0023e..8b6597952813d 100644 --- a/test/tap/install-save-local.js +++ b/test/tap/install-save-local.js @@ -2,7 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') var rimraf = require('rimraf') var test = require('tap').test @@ -28,168 +27,155 @@ var localDevDependency = { version: '0.0.0' } -test('setup', function (t) { - setup() +test('setup deps in root', t => { + mkdirp.sync(path.join(root, 'package-local-dependency')) + fs.writeFileSync( + path.join(root, 'package-local-dependency', 'package.json'), + JSON.stringify(localDependency, null, 2) + ) + + mkdirp.sync(path.join(root, 'package-local-dev-dependency')) + fs.writeFileSync( + path.join(root, 'package-local-dev-dependency', 'package.json'), + JSON.stringify(localDevDependency, null, 2) + ) + t.end() }) test('\'npm install --save ../local/path\' should save to package.json', function (t) { - common.npm( + t.plan(2) + t.test('setup', setup) + t.test('run test', t => common.npm( [ '--loglevel', 'silent', '--save', 'install', '../package-local-dependency' ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm install ran without issue') - t.notOk(code, 'npm install exited with code 0') - - var dependencyPackageJson = path.join( - pkg, 'node_modules', 'package-local-dependency', 'package.json' - ) - t.ok(JSON.parse(fs.readFileSync(dependencyPackageJson, 'utf8'))) - - var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) - t.is(Object.keys(pkgJson.dependencies).length, 1, 'only one dep') - t.ok( - /file:.*?[/]package-local-dependency$/.test(pkgJson.dependencies['package-local-dependency']), - 'local package saved correctly' - ) - t.end() - } - ) + EXEC_OPTS + ).then(([code]) => { + t.equal(code, 0, 'npm install exited with code 0') + + var dependencyPackageJson = path.join( + pkg, 'node_modules', 'package-local-dependency', 'package.json' + ) + t.ok(JSON.parse(fs.readFileSync(dependencyPackageJson, 'utf8'))) + + var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) + t.is(Object.keys(pkgJson.dependencies).length, 1, 'only one dep') + t.ok( + /file:.*?[/]package-local-dependency$/.test(pkgJson.dependencies['package-local-dependency']), + 'local package saved correctly' + ) + })) }) test('\'npm install --save local/path\' should save to package.json', function (t) { - setup() - common.npm( + t.plan(2) + t.test('setup', setup) + t.test('run test', t => common.npm( [ '--loglevel', 'silent', '--save', 'install', 'package-local-dependency/' ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm install ran without issue') - t.notOk(code, 'npm install exited with code 0') - - var dependencyPackageJson = path.join( - pkg, 'node_modules', 'package-local-dependency', 'package.json' - ) - t.ok(JSON.parse(fs.readFileSync(dependencyPackageJson, 'utf8'))) - - var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) - t.is(Object.keys(pkgJson.dependencies).length, 1, 'only one dep') - t.ok( - /file:package-local-dependency$/.test(pkgJson.dependencies['package-local-dependency']), - 'local package saved correctly' - ) - t.end() - } - ) + EXEC_OPTS + ).then(([code, out, err]) => { + t.equal(code, 0, 'npm install exited with code 0') + + var dependencyPackageJson = path.join( + pkg, 'node_modules', 'package-local-dependency', 'package.json' + ) + t.ok(JSON.parse(fs.readFileSync(dependencyPackageJson, 'utf8'))) + + var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) + t.is(Object.keys(pkgJson.dependencies).length, 1, 'only one dep') + t.ok( + /file:package-local-dependency$/.test(pkgJson.dependencies['package-local-dependency']), + 'local package saved correctly' + ) + })) }) test('\'npm install --save-dev ../local/path\' should save to package.json', function (t) { - setup() - common.npm( + t.plan(2) + t.test('setup', setup) + t.test('run test', t => common.npm( [ '--loglevel', 'silent', '--save-dev', 'install', '../package-local-dev-dependency' ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm install ran without issue') - t.notOk(code, 'npm install exited with code 0') - - var dependencyPackageJson = path.resolve( - pkg, 'node_modules', 'package-local-dev-dependency', 'package.json' - ) - t.ok(JSON.parse(fs.readFileSync(dependencyPackageJson, 'utf8'))) - - var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) - t.is(Object.keys(pkgJson.devDependencies).length, 1, 'only one dep') - t.ok( - /file:.*?[/\\]package-local-dev-dependency$/.test(pkgJson.devDependencies['package-local-dev-dependency']), - 'local package saved correctly' - ) - - t.end() - } - ) + EXEC_OPTS + ).then(([code]) => { + t.equal(code, 0, 'npm install exited with code 0') + + var dependencyPackageJson = path.resolve( + pkg, 'node_modules', 'package-local-dev-dependency', 'package.json' + ) + t.ok(JSON.parse(fs.readFileSync(dependencyPackageJson, 'utf8'))) + + var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) + t.is(Object.keys(pkgJson.devDependencies).length, 1, 'only one dep') + t.ok( + /file:.*?[/\\]package-local-dev-dependency$/.test(pkgJson.devDependencies['package-local-dev-dependency']), + 'local package saved correctly' + ) + + t.end() + })) }) + test('\'npm install --save-dev local/path\' should save to package.json', function (t) { - setup() - common.npm( + t.plan(2) + t.test('setup', setup) + t.test('run test', t => common.npm( [ '--loglevel', 'silent', '--save-dev', 'install', 'package-local-dev-dependency/' ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm install ran without issue') - t.notOk(code, 'npm install exited with code 0') - - var dependencyPackageJson = path.resolve( - pkg, 'node_modules', 'package-local-dev-dependency', 'package.json' - ) - t.ok(JSON.parse(fs.readFileSync(dependencyPackageJson, 'utf8'))) - - var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) - t.is(Object.keys(pkgJson.devDependencies).length, 1, 'only one dep') - t.ok( - /file:package-local-dev-dependency$/.test(pkgJson.devDependencies['package-local-dev-dependency']), - 'local package saved correctly' - ) - - t.end() - } - ) + EXEC_OPTS + ).then(([code]) => { + t.equal(code, 0, 'npm install exited with code 0') + + var dependencyPackageJson = path.resolve( + pkg, 'node_modules', 'package-local-dev-dependency', 'package.json' + ) + t.ok(JSON.parse(fs.readFileSync(dependencyPackageJson, 'utf8'))) + + var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) + t.is(Object.keys(pkgJson.devDependencies).length, 1, 'only one dep') + t.ok( + /file:package-local-dev-dependency$/.test(pkgJson.devDependencies['package-local-dev-dependency']), + 'local package saved correctly' + ) + + t.end() + })) }) -test('cleanup', function (t) { - cleanup() +function setup (t) { + t.test('destroy', t => rimraf(pkg, t.end)) + t.test('create', t => { + mkdirp.sync(pkg) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + + mkdirp.sync(path.join(pkg, 'package-local-dependency')) + fs.writeFileSync( + path.join(pkg, 'package-local-dependency', 'package.json'), + JSON.stringify(localDependency, null, 2) + ) + + mkdirp.sync(path.join(pkg, 'package-local-dev-dependency')) + fs.writeFileSync( + path.join(pkg, 'package-local-dev-dependency', 'package.json'), + JSON.stringify(localDevDependency, null, 2) + ) + t.end() + }) t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - process.chdir(__dirname) - rimraf.sync(root) -} - -function setup () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - - mkdirp.sync(path.join(root, 'package-local-dependency')) - fs.writeFileSync( - path.join(root, 'package-local-dependency', 'package.json'), - JSON.stringify(localDependency, null, 2) - ) - - mkdirp.sync(path.join(root, 'package-local-dev-dependency')) - fs.writeFileSync( - path.join(root, 'package-local-dev-dependency', 'package.json'), - JSON.stringify(localDevDependency, null, 2) - ) - - mkdirp.sync(path.join(pkg, 'package-local-dependency')) - fs.writeFileSync( - path.join(pkg, 'package-local-dependency', 'package.json'), - JSON.stringify(localDependency, null, 2) - ) - - mkdirp.sync(path.join(pkg, 'package-local-dev-dependency')) - fs.writeFileSync( - path.join(pkg, 'package-local-dev-dependency', 'package.json'), - JSON.stringify(localDevDependency, null, 2) - ) - process.chdir(pkg) } diff --git a/test/tap/install-save-prefix.js b/test/tap/install-save-prefix.js index 001e24d873558..d61608e1cfd21 100644 --- a/test/tap/install-save-prefix.js +++ b/test/tap/install-save-prefix.js @@ -1,14 +1,11 @@ var fs = require('fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') -var server var pkg = common.pkg @@ -19,17 +16,18 @@ var json = { version: '0.0.1' } -test('setup', function (t) { - setup() +test('start mock reg', function (t) { mr({ port: common.port }, function (er, s) { t.ifError(er, 'started mock registry') - server = s + t.parent.teardown(() => s.close()) t.end() }) }) test('install --save with \'^\' save prefix should accept minor updates', function (t) { - common.npm( + t.plan(2) + t.test('setup', setup) + t.test('run test', t => common.npm( [ '--registry', common.registry, '--loglevel', 'silent', @@ -37,31 +35,30 @@ test('install --save with \'^\' save prefix should accept minor updates', functi '--save', 'install', 'underscore@latest' ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm install ran without issue') - t.notOk(code, 'npm install exited with code 0') - - var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') - t.ok(JSON.parse(fs.readFileSync(p))) - - var pkgJson = JSON.parse(fs.readFileSync( - path.join(pkg, 'package.json'), - 'utf8' - )) - t.deepEqual( - pkgJson.dependencies, - { 'underscore': '^1.5.1' }, - 'got expected save prefix and version of 1.5.1' - ) - t.end() - } - ) + EXEC_OPTS + ).then(([code]) => { + console.error('back from install!', code) + t.equal(code, 0, 'npm install exited with code 0') + + var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') + t.ok(JSON.parse(fs.readFileSync(p))) + + var pkgJson = JSON.parse(fs.readFileSync( + path.join(pkg, 'package.json'), + 'utf8' + )) + t.deepEqual( + pkgJson.dependencies, + { 'underscore': '^1.5.1' }, + 'got expected save prefix and version of 1.5.1' + ) + })) }) test('install --save-dev with \'^\' save prefix should accept minor dev updates', function (t) { - setup() - common.npm( + t.plan(2) + t.test('setup', setup) + t.test('run test', t => common.npm( [ '--registry', common.registry, '--loglevel', 'silent', @@ -69,31 +66,30 @@ test('install --save-dev with \'^\' save prefix should accept minor dev updates' '--save-dev', 'install', 'underscore@1.3.1' ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm install ran without issue') - t.notOk(code, 'npm install exited with code 0') - - var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') - t.ok(JSON.parse(fs.readFileSync(p))) - - var pkgJson = JSON.parse(fs.readFileSync( - path.join(pkg, 'package.json'), - 'utf8' - )) - t.deepEqual( - pkgJson.devDependencies, - { 'underscore': '^1.3.1' }, - 'got expected save prefix and version of 1.3.1' - ) - t.end() - } - ) + EXEC_OPTS + ).then(([code]) => { + t.equal(code, 0, 'npm install exited with code 0') + + var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') + t.ok(JSON.parse(fs.readFileSync(p))) + + var pkgJson = JSON.parse(fs.readFileSync( + path.join(pkg, 'package.json'), + 'utf8' + )) + t.deepEqual( + pkgJson.devDependencies, + { 'underscore': '^1.3.1' }, + 'got expected save prefix and version of 1.3.1' + ) + t.end() + })) }) test('install --save with \'~\' save prefix should accept patch updates', function (t) { - setup() - common.npm( + t.plan(2) + t.test('setup', setup) + t.test('run test', t => common.npm( [ '--registry', common.registry, '--loglevel', 'silent', @@ -101,31 +97,29 @@ test('install --save with \'~\' save prefix should accept patch updates', functi '--save', 'install', 'underscore@1.3.1' ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm install ran without issue') - t.notOk(code, 'npm install exited with code 0') - - var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') - t.ok(JSON.parse(fs.readFileSync(p))) - - var pkgJson = JSON.parse(fs.readFileSync( - path.join(pkg, 'package.json'), - 'utf8' - )) - t.deepEqual( - pkgJson.dependencies, - { 'underscore': '~1.3.1' }, - 'got expected save prefix and version of 1.3.1' - ) - t.end() - } - ) + EXEC_OPTS + ).then(([code]) => { + t.equal(code, 0, 'npm install exited with code 0') + + var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') + t.ok(JSON.parse(fs.readFileSync(p))) + + var pkgJson = JSON.parse(fs.readFileSync( + path.join(pkg, 'package.json'), + 'utf8' + )) + t.deepEqual( + pkgJson.dependencies, + { 'underscore': '~1.3.1' }, + 'got expected save prefix and version of 1.3.1' + ) + })) }) test('install --save-dev with \'~\' save prefix should accept patch updates', function (t) { - setup() - common.npm( + t.plan(2) + t.test('setup', setup) + t.test('run test', t => common.npm( [ '--registry', common.registry, '--loglevel', 'silent', @@ -133,46 +127,38 @@ test('install --save-dev with \'~\' save prefix should accept patch updates', fu '--save-dev', 'install', 'underscore@1.3.1' ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'npm install ran without issue') - t.notOk(code, 'npm install exited with code 0') - - var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') - t.ok(JSON.parse(fs.readFileSync(p))) - - var pkgJson = JSON.parse(fs.readFileSync( - path.join(pkg, 'package.json'), - 'utf8' - )) - t.deepEqual( - pkgJson.devDependencies, - { 'underscore': '~1.3.1' }, - 'got expected save prefix and version of 1.3.1' - ) - t.end() - } - ) + EXEC_OPTS + ).then(([code]) => { + t.notOk(code, 'npm install exited with code 0') + + var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') + t.ok(JSON.parse(fs.readFileSync(p))) + + var pkgJson = JSON.parse(fs.readFileSync( + path.join(pkg, 'package.json'), + 'utf8' + )) + t.deepEqual( + pkgJson.devDependencies, + { 'underscore': '~1.3.1' }, + 'got expected save prefix and version of 1.3.1' + ) + })) }) -test('cleanup', function (t) { - server.close() - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -function setup () { - cleanup() - mkdirp.sync(path.resolve(pkg, 'node_modules')) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) +function setup (t) { + t.test('destroy', t => { + t.plan(2) + rimraf(path.resolve(pkg, 'node_modules'), () => t.pass('node_modules')) + rimraf(path.resolve(pkg, 'pacakage-lock.json'), () => t.pass('lock file')) + }) + t.test('create', t => { + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + t.end() + }) - process.chdir(pkg) + t.end() } diff --git a/test/tap/install-scoped-already-installed.js b/test/tap/install-scoped-already-installed.js index 707d82a44353e..d4655f4a9a748 100644 --- a/test/tap/install-scoped-already-installed.js +++ b/test/tap/install-scoped-already-installed.js @@ -3,8 +3,6 @@ var path = require('path') var existsSync = fs.existsSync || path.existsSync var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -37,7 +35,6 @@ var scopedDependency = { } test('setup', function (t) { - rimraf.sync(root) mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -56,7 +53,6 @@ test('setup', function (t) { JSON.stringify(scopedDependency, null, 2) ) - process.chdir(pkg) t.end() }) @@ -118,12 +114,6 @@ test('installing already installed local scoped package', function (t) { ) }) -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(root) - t.end() -}) - function contains (list, element) { var matcher = new RegExp(element.replace(/\//g, '[\\\\/]') + '$') for (var i = 0; i < list.length; ++i) { diff --git a/test/tap/install-scoped-link.js b/test/tap/install-scoped-link.js index 920e7e3d4531a..a0c9c61a9843c 100644 --- a/test/tap/install-scoped-link.js +++ b/test/tap/install-scoped-link.js @@ -4,16 +4,15 @@ var path = require('path') var existsSync = fs.existsSync || path.existsSync var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var escapeExecPath = require('../../lib/utils/escape-exec-path') var common = require('../common-tap.js') -var pkg = common.pkg -var work = pkg + '-TEST' +var resolve = require('path').resolve +var pkg = resolve(common.pkg, 'package') +var work = resolve(common.pkg, 'TEST') var modules = path.join(work, 'node_modules') var EXEC_OPTS = { cwd: work } @@ -29,7 +28,6 @@ var json = { } test('setup', function (t) { - cleanup() mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -73,14 +71,3 @@ test('installing package with links', function (t) { } ) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(work) - rimraf.sync(pkg) -} diff --git a/test/tap/install-scoped-with-peer-dependency.js b/test/tap/install-scoped-with-peer-dependency.js index 477a04a1055dd..016f5f0453b31 100644 --- a/test/tap/install-scoped-with-peer-dependency.js +++ b/test/tap/install-scoped-with-peer-dependency.js @@ -2,15 +2,13 @@ var fs = require('fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') var pkg = common.pkg var local = path.join(pkg, 'package') -var EXEC_OPTS = { } +var EXEC_OPTS = { cwd: pkg } var json = { name: '@scope/package', @@ -21,8 +19,12 @@ var json = { } test('setup', function (t) { - setup() - + mkdirp.sync(local) + mkdirp.sync(path.resolve(pkg, 'node_modules')) + fs.writeFileSync( + path.join(local, 'package.json'), + JSON.stringify(json, null, 2) + ) t.end() }) @@ -36,24 +38,3 @@ test('it should install peerDependencies in same tree level as the parent packag t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(local) - mkdirp.sync(path.resolve(pkg, 'node_modules')) - fs.writeFileSync( - path.join(local, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/install-shrinkwrapped-git.js b/test/tap/install-shrinkwrapped-git.js index f74e185bfbad0..3cdc2b91291d4 100644 --- a/test/tap/install-shrinkwrapped-git.js +++ b/test/tap/install-shrinkwrapped-git.js @@ -3,7 +3,6 @@ var fs = require('fs') var path = require('path') var resolve = path.resolve -var osenv = require('osenv') var mkdirp = require('mkdirp') var rimraf = require('rimraf') var test = require('tap').test @@ -32,16 +31,31 @@ var childPackageJSON = JSON.stringify({ }) test('setup', function (t) { - cleanup() - setup(function (err, result) { - t.ifError(err, 'git started up successfully') + mkdirp.sync(parentPath) + fs.writeFileSync(resolve(parentPath, 'package.json'), parentPackageJSON) + process.chdir(parentPath) - if (!err) { - gitDaemon = result[result.length - 2] - gitDaemonPID = result[result.length - 1] - } + // Setup child + mkdirp.sync(childPath) + fs.writeFileSync(resolve(childPath, 'package.json'), childPackageJSON) + + // Setup npm and then git + npm.load({ + registry: common.registry, + loglevel: 'silent', + save: true // Always install packages with --save + }, function () { + // It's important to initialize git after npm because it uses config + initializeGit(function (err, result) { + t.ifError(err, 'git started up successfully') - t.end() + if (!err) { + gitDaemon = result[result.length - 2] + gitDaemonPID = result[result.length - 1] + } + + t.end() + }) }) }) @@ -85,39 +99,10 @@ test('shrinkwrapped git dependency got updated', function (t) { }) test('clean', function (t) { - gitDaemon.on('close', function () { - cleanup() - t.end() - }) + gitDaemon.on('close', t.end) process.kill(gitDaemonPID) }) -function setup (cb) { - // Setup parent package - mkdirp.sync(parentPath) - fs.writeFileSync(resolve(parentPath, 'package.json'), parentPackageJSON) - process.chdir(parentPath) - - // Setup child - mkdirp.sync(childPath) - fs.writeFileSync(resolve(childPath, 'package.json'), childPackageJSON) - - // Setup npm and then git - npm.load({ - registry: common.registry, - loglevel: 'silent', - save: true // Always install packages with --save - }, function () { - // It's important to initialize git after npm because it uses config - initializeGit(cb) - }) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(mockPath) -} - function prepareChildAndGetRefs (cb) { var opts = { cwd: childPath, env: { PATH: process.env.PATH } } chain([ diff --git a/test/tap/install-test-cli-without-package-lock.js b/test/tap/install-test-cli-without-package-lock.js index 468277d74d209..603043af8fd38 100644 --- a/test/tap/install-test-cli-without-package-lock.js +++ b/test/tap/install-test-cli-without-package-lock.js @@ -2,8 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -28,8 +26,23 @@ var dependency = { } test('setup', function (t) { - setup() - t.pass('setup ran') + mkdirp.sync(path.join(pkg, 'dependency')) + fs.writeFileSync( + path.join(pkg, 'dependency', 'package.json'), + JSON.stringify(dependency, null, 2) + ) + + mkdirp.sync(path.join(pkg, 'node_modules')) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + + // Disable package-lock + fs.writeFileSync( + path.join(pkg, '.npmrc'), + 'package-lock=false\n' + ) t.end() }) @@ -49,35 +62,3 @@ test('\'npm install-test\' should not generate package-lock.json.*', function (t t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.pass('cleaned up') - t.end() -}) - -function setup () { - mkdirp.sync(path.join(pkg, 'dependency')) - fs.writeFileSync( - path.join(pkg, 'dependency', 'package.json'), - JSON.stringify(dependency, null, 2) - ) - - mkdirp.sync(path.join(pkg, 'node_modules')) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - - // Disable package-lock - fs.writeFileSync( - path.join(pkg, '.npmrc'), - 'package-lock=false\n' - ) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/install-with-dev-dep-duplicate.js b/test/tap/install-with-dev-dep-duplicate.js index 01ba38a1123a9..7d8586f47d4ad 100644 --- a/test/tap/install-with-dev-dep-duplicate.js +++ b/test/tap/install-with-dev-dep-duplicate.js @@ -1,10 +1,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -42,13 +39,19 @@ test('prefers version from dependencies over devDependencies', function (t) { mr({ port: common.port }, function (er, s) { setup(function (err) { - if (err) return t.fail(err) + if (err) { + throw err + } npm.install('.', function (err) { - if (err) return t.fail(err) + if (err) { + throw err + } npm.commands.ls([], true, function (err, _, results) { - if (err) return t.fail(err) + if (err) { + throw err + } // these contain full paths so we can't do an exact match // with them @@ -63,14 +66,7 @@ test('prefers version from dependencies over devDependencies', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - function setup (cb) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) @@ -83,8 +79,3 @@ function setup (cb) { } npm.load(opts, cb) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/it.js b/test/tap/it.js index 9b716139a3814..bb59bc6f5e904 100644 --- a/test/tap/it.js +++ b/test/tap/it.js @@ -2,9 +2,7 @@ var join = require('path').join var statSync = require('graceful-fs').statSync var writeFileSync = require('graceful-fs').writeFileSync -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') var rimraf = require('rimraf') var test = require('tap').test @@ -23,55 +21,45 @@ var json = { } } -var server - test('run up the mock registry', function (t) { mr({ port: common.port }, function (err, s) { if (err) throw err - server = s + t.parent.teardown(() => s.close()) t.end() }) }) +const check = args => t => + common.npm(args.concat('--registry=' + common.registry), { cwd: pkg }) + .then(([code, stdout, stderr]) => { + t.equal(code, 0, 'command ran without error') + t.ok(statSync(installed), 'package was installed') + t.equal(require(installed).version, '1.5.1', 'underscore got installed as expected') + t.match(stdout, /hax/, 'found expected test output') + t.notOk(stderr, 'stderr should be empty') + }) + test('npm install-test', function (t) { - setup() - common.npm(['install-test', '--no-shrinkwrap', '--registry=' + common.registry], { cwd: pkg }, function (err, code, stdout, stderr) { - if (err) throw err - t.equal(code, 0, 'command ran without error') - t.ok(statSync(installed), 'package was installed') - t.equal(require(installed).version, '1.5.1', 'underscore got installed as expected') - t.match(stdout, /hax/, 'found expected test output') - t.notOk(stderr, 'stderr should be empty') - t.end() - }) + t.plan(2) + t.test('setup', setup) + t.test('check', check(['install-test', '--no-shrinkwrap'])) }) test('npm it (the form most people will use)', function (t) { - setup() - common.npm(['it', '--registry=' + common.registry], { cwd: pkg }, function (err, code, stdout, stderr) { - if (err) throw err - t.equal(code, 0, 'command ran without error') - t.ok(statSync(installed), 'package was installed') - t.equal(require(installed).version, '1.5.1', 'underscore got installed as expected') - t.match(stdout, /hax/, 'found expected test output') - t.notOk(stderr, 'stderr should be empty') - t.end() - }) + t.plan(2) + t.test('setup', setup) + t.test('check', check(['it'])) }) -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - server.close() - cleanup() +function setup (t) { + t.test('destroy', t => { + t.plan(2) + rimraf(join(pkg, 'node_modules'), () => t.pass('node_modules')) + rimraf(join(pkg, 'package-lock.json'), () => t.pass('lock file')) + }) + t.test('create', t => { + writeFileSync(join(pkg, 'package.json'), JSON.stringify(json, null, 2)) + t.end() + }) t.end() -}) - -function cleanup () { - rimraf.sync(pkg) -} - -function setup () { - cleanup() - mkdirp.sync(pkg) - writeFileSync(join(pkg, 'package.json'), JSON.stringify(json, null, 2)) } diff --git a/test/tap/lifecycle-INIT_CWD.js b/test/tap/lifecycle-INIT_CWD.js index 3e9c1c8257f46..fbedd3849c708 100644 --- a/test/tap/lifecycle-INIT_CWD.js +++ b/test/tap/lifecycle-INIT_CWD.js @@ -2,8 +2,6 @@ var fs = require('fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -20,39 +18,19 @@ var json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) mkdirp.sync(subdir) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) - - process.chdir(subdir) - t.end() -}) - -test('make sure the env.INIT_CWD is correct', function (t) { - common.npm(['run-script', 'initcwd'], { - cwd: subdir - }, function (er, code, stdout) { - if (er) throw er - t.equal(code, 0, 'exit code') - stdout = stdout.trim().split(/\r|\n/).pop() - var actual = stdout - - t.equal(actual, subdir) - t.end() - }) -}) - -test('cleanup', function (t) { - cleanup() t.end() }) -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(subdir) - rimraf.sync(pkg) -} +test('make sure the env.INIT_CWD is correct', t => + common.npm(['run-script', 'initcwd'], { cwd: subdir }) + .then(([code, stdout, stderr]) => { + t.equal(code, 0, 'exit code') + stdout = stdout.trim().split(/\r|\n/).pop() + var actual = stdout + t.equal(actual, subdir) + })) diff --git a/test/tap/lifecycle-order.js b/test/tap/lifecycle-order.js index 8f2b2ba4a70b8..ac6c07925c52b 100644 --- a/test/tap/lifecycle-order.js +++ b/test/tap/lifecycle-order.js @@ -1,13 +1,7 @@ var fs = require('graceful-fs') var path = require('path') - -var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test - var common = require('../common-tap.js') - var pkg = common.pkg var json = { @@ -21,37 +15,19 @@ var json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) - - process.chdir(pkg) t.end() }) -test('lifecycle scripts execute in the proper order', function (t) { - common.npm('install', {cwd: pkg}, function (err, code, stdout, stderr) { - if (err) throw err +test('lifecycle scripts execute in the proper order', t => + common.npm('install', {cwd: pkg}).then(([code, stdout, stderr]) => { t.is(code, 0, 'no error') // All three files should exist t.ok(fs.existsSync(path.join(pkg, 'preinstall-step')), 'preinstall ok') t.ok(fs.existsSync(path.join(pkg, 'install-step')), 'install ok') t.ok(fs.existsSync(path.join(pkg, 'postinstall-step')), 'postinstall ok') - - t.end() - }) -}) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} + })) diff --git a/test/tap/link.js b/test/tap/link.js index f0339194a2626..2d2d63de21415 100644 --- a/test/tap/link.js +++ b/test/tap/link.js @@ -1,7 +1,5 @@ var mkdirp = require('mkdirp') -var osenv = require('osenv') var path = require('path') -var rimraf = require('rimraf') var test = require('tap').test var lstatSync = require('fs').lstatSync var writeFileSync = require('fs').writeFileSync @@ -72,7 +70,28 @@ var insideInstallJSON = { } test('setup', function (t) { - setup() + mkdirp.sync(linkRoot) + mkdirp.sync(link) + writeFileSync( + path.join(link, 'package.json'), + JSON.stringify(readJSON, null, 2) + ) + mkdirp.sync(linkScoped) + writeFileSync( + path.join(linkScoped, 'package.json'), + JSON.stringify(readScopedJSON, null, 2) + ) + mkdirp.sync(linkInstall) + writeFileSync( + path.join(linkInstall, 'package.json'), + JSON.stringify(installJSON, null, 2) + ) + mkdirp.sync(linkInside) + writeFileSync( + path.join(linkInside, 'package.json'), + JSON.stringify(insideInstallJSON, null, 2) + ) + writeFileSync(configPath, config) common.npm(['ls', '-g', '--depth=0'], OPTS, function (err, c, out) { t.ifError(err) t.equal(c, 0, 'set up ok') @@ -173,50 +192,14 @@ test('ls the linked packages', function (t) { }) test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) + process.chdir(common.pkg) common.npm(['rm', 'foo'], OPTS, function (err, code) { t.ifError(err, 'npm removed the linked package without error') t.equal(code, 0, 'cleanup foo in local ok') common.npm(['rm', '-g', 'foo'], OPTS, function (err, code) { t.ifError(err, 'npm removed the global package without error') t.equal(code, 0, 'cleanup foo in global ok') - - cleanup() t.end() }) }) }) - -function cleanup () { - rimraf.sync(linkRoot) - rimraf.sync(link) - rimraf.sync(linkScoped) - rimraf.sync(linkInstall) - rimraf.sync(linkInside) -} - -function setup () { - cleanup() - mkdirp.sync(linkRoot) - mkdirp.sync(link) - writeFileSync( - path.join(link, 'package.json'), - JSON.stringify(readJSON, null, 2) - ) - mkdirp.sync(linkScoped) - writeFileSync( - path.join(linkScoped, 'package.json'), - JSON.stringify(readScopedJSON, null, 2) - ) - mkdirp.sync(linkInstall) - writeFileSync( - path.join(linkInstall, 'package.json'), - JSON.stringify(installJSON, null, 2) - ) - mkdirp.sync(linkInside) - writeFileSync( - path.join(linkInside, 'package.json'), - JSON.stringify(insideInstallJSON, null, 2) - ) - writeFileSync(configPath, config) -} diff --git a/test/tap/locker.js b/test/tap/locker.js index 5ee64196fe980..1df6fda7102dc 100644 --- a/test/tap/locker.js +++ b/test/tap/locker.js @@ -2,8 +2,6 @@ var test = require('tap').test var path = require('path') var fs = require('graceful-fs') var crypto = require('crypto') -var rimraf = require('rimraf') -var osenv = require('osenv') var mkdirp = require('mkdirp') var npm = require('../../') var locker = require('../../lib/utils/locker.js') @@ -16,13 +14,7 @@ var cache = path.join(pkg, '/cache') var tmp = path.join(pkg, '/tmp') var nm = path.join(pkg, '/node_modules') -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - test('setup', function (t) { - cleanup() mkdirp.sync(cache) mkdirp.sync(tmp) t.end() @@ -83,8 +75,3 @@ test('unlocking out of order errors out', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) diff --git a/test/tap/ls-depth-cli.js b/test/tap/ls-depth-cli.js index 6bb2f3cd124f7..55142b3ad167b 100644 --- a/test/tap/ls-depth-cli.js +++ b/test/tap/ls-depth-cli.js @@ -1,11 +1,8 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var Bluebird = require('bluebird') var mr = Bluebird.promisify(require('npm-registry-mock')) -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -29,8 +26,6 @@ var json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) @@ -199,13 +194,3 @@ test('npm ls --depth=1 --parseable --long', function (t) { } ) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/ls-depth-unmet.js b/test/tap/ls-depth-unmet.js index 7a2ed4dacc2a2..bf032efe9c9aa 100644 --- a/test/tap/ls-depth-unmet.js +++ b/test/tap/ls-depth-unmet.js @@ -1,10 +1,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -25,8 +22,6 @@ var json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) @@ -160,13 +155,3 @@ test('npm ls --depth=Infinity', function (t) { } ) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/ls-env.js b/test/tap/ls-env.js index e3fbece3b04a1..5d9d7cd06b2cf 100644 --- a/test/tap/ls-env.js +++ b/test/tap/ls-env.js @@ -1,10 +1,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -22,8 +19,6 @@ var json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) @@ -123,13 +118,3 @@ test('npm ls --only=prod', function (t) { t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/ls-l-depth-0.js b/test/tap/ls-l-depth-0.js index b2516c9fa2449..8e707a1d399b5 100644 --- a/test/tap/ls-l-depth-0.js +++ b/test/tap/ls-l-depth-0.js @@ -1,13 +1,10 @@ -var cat = require('graceful-fs').writeFileSync +var writeFileSync = require('graceful-fs').writeFileSync var resolve = require('path').resolve var mkdirp = require('mkdirp') var Bluebird = require('bluebird') var mr = Bluebird.promisify(require('npm-registry-mock')) -var rimraf = require('rimraf') var test = require('tap').test -var tmpdir = require('osenv').tmpdir - var common = require('../common-tap.js') var pkg = common.pkg @@ -25,8 +22,6 @@ var expected = ' file:glock-1.8.7.tgz\n' + '\n' -var server - var EXEC_OPTS = { cwd: pkg } var fixture = { @@ -44,9 +39,12 @@ var fixture = { var deppack test('setup', function (t) { - setup() + mkdirp.sync(modules) + mkdirp.sync(dep) + + writeFileSync(resolve(dep, 'package.json'), JSON.stringify(fixture)) return mr({ port: common.port }).then((s) => { - server = s + t.parent.teardown(() => s.close()) return common.npm(['pack', dep], EXEC_OPTS) }).spread((code, stdout) => { t.is(code, 0, 'pack') @@ -100,24 +98,3 @@ test('#6311: npm ll --depth=0 duplicates listing', function (t) { } ) }) - -test('cleanup', function (t) { - cleanup() - server.close() - - t.end() -}) - -function cleanup () { - process.chdir(tmpdir()) - rimraf.sync(pkg) -} - -function setup () { - cleanup() - - mkdirp.sync(modules) - mkdirp.sync(dep) - - cat(resolve(dep, 'package.json'), JSON.stringify(fixture)) -} diff --git a/test/tap/ls-production-and-dev.js b/test/tap/ls-production-and-dev.js index a39e643786f09..5836c8fc13714 100644 --- a/test/tap/ls-production-and-dev.js +++ b/test/tap/ls-production-and-dev.js @@ -1,10 +1,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -27,8 +24,6 @@ var json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) @@ -160,13 +155,3 @@ test('npm ls --only=prod', function (t) { t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/no-global-warns.js b/test/tap/no-global-warns.js index 538ab8b359daf..1c39fd79549c0 100644 --- a/test/tap/no-global-warns.js +++ b/test/tap/no-global-warns.js @@ -2,8 +2,6 @@ var path = require('path') var test = require('tap').test var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var writeFileSync = require('fs').writeFileSync var common = require('../common-tap.js') @@ -38,7 +36,13 @@ var installJSON = { } test('setup', function (t) { - setup() + mkdirp.sync(mockGlobal) + mkdirp.sync(toInstall) + writeFileSync( + path.join(toInstall, 'package.json'), + JSON.stringify(installJSON, null, 2) + ) + writeFileSync(configPath, config) t.end() }) @@ -59,24 +63,3 @@ test('no-global-warns', function (t) { t.end() }) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - cleanup() - t.end() -}) - -function cleanup () { - rimraf.sync(base) -} - -function setup () { - cleanup() - mkdirp.sync(mockGlobal) - mkdirp.sync(toInstall) - writeFileSync( - path.join(toInstall, 'package.json'), - JSON.stringify(installJSON, null, 2) - ) - writeFileSync(configPath, config) -} diff --git a/test/tap/no-scan-full-global-dir.js b/test/tap/no-scan-full-global-dir.js index 7856ff33f41f2..7501b881c98cc 100644 --- a/test/tap/no-scan-full-global-dir.js +++ b/test/tap/no-scan-full-global-dir.js @@ -3,7 +3,6 @@ var fs = require('fs') var path = require('path') var test = require('tap').test var requireInject = require('require-inject') -var osenv = require('osenv') var npm = require('../../lib/npm.js') // XXX update this when rpt's realpath.js is extracted out @@ -25,8 +24,6 @@ Object.keys(packages).forEach(function (name) { files[path.join(packages[name].path, 'package.json')] = packages[name].package }) -process.chdir(osenv.tmpdir()) - var mockReaddir = function (name, cb) { if (dirs[name]) return cb(null, dirs[name]) var er = new Error('No such mock: ' + name) diff --git a/test/tap/optional-metadep-rollback-collision.js b/test/tap/optional-metadep-rollback-collision.js index d665a123bff90..b62d63d7f760f 100644 --- a/test/tap/optional-metadep-rollback-collision.js +++ b/test/tap/optional-metadep-rollback-collision.js @@ -4,8 +4,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -64,7 +62,7 @@ var opdep_json = { } } -var blart = function () { /* +var blart = ` var rando = require('crypto').randomBytes var resolve = require('path').resolve @@ -116,18 +114,15 @@ mkdirp(BASEDIR, function go () { keepItGoingLouder = {} }, 3 * 1000) }) -*/ }.toString().split('\n').slice(1, -1).join('\n') +` -let badServer -let mockServer test('setup', function (t) { - cleanup() - badServer = createServer(function (req, res) { + const badServer = createServer(function (req, res) { setTimeout(function () { res.writeHead(404) res.end() }, 1000) - }).listen(serverPort) + }).listen(serverPort, () => t.parent.teardown(() => badServer.close())) mkdirp.sync(pkg) fs.writeFileSync( @@ -154,36 +149,36 @@ test('setup', function (t) { JSON.stringify(opdep_json, null, 2) ) mr({ port: common.port }, function (er, server) { - mockServer = server + t.parent.teardown(() => server.close()) t.end() }) }) -test('go go test racer', function (t) { - return common.npm( - [ - '--prefix', pkg, - '--fetch-retries', '0', - '--loglevel', 'error', - '--no-progress', - '--registry', common.registry, - '--parseable', - '--cache', cache, - 'install' - ], - { - cwd: pkg, - env: { - PATH: process.env.PATH, - Path: process.env.Path - }, - stdio: 'pipe' - }).spread((code, stdout, stderr) => { - t.comment(stdout.trim()) - t.comment(stderr.trim()) - t.is(code, 0, 'npm install exited with code 0') - t.notOk(/not ok/.test(stdout), 'should not contain the string \'not ok\'') - }) -}) + +test('go go test racer', t => common.npm( + [ + '--prefix', pkg, + '--fetch-retries', '0', + '--loglevel', 'error', + '--no-progress', + '--registry', common.registry, + '--parseable', + '--cache', cache, + 'install' + ], + { + cwd: pkg, + env: { + PATH: process.env.PATH, + Path: process.env.Path + }, + stdio: 'pipe' + } +).spread((code, stdout, stderr) => { + t.comment(stdout.trim()) + t.comment(stderr.trim()) + t.is(code, 0, 'npm install exited with code 0') + t.notOk(/not ok/.test(stdout), 'should not contain the string \'not ok\'') +})) test('verify results', function (t) { t.throws(function () { @@ -191,16 +186,3 @@ test('verify results', function (t) { }) t.end() }) - -test('cleanup', function (t) { - mockServer.close() - badServer.close() - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - - rimraf.sync(pkg) -} diff --git a/test/tap/outdated-depth.js b/test/tap/outdated-depth.js index 8e272e60027b1..368d32230abf0 100644 --- a/test/tap/outdated-depth.js +++ b/test/tap/outdated-depth.js @@ -1,10 +1,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var npm = require('../../') @@ -22,8 +19,6 @@ var json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) @@ -79,13 +74,3 @@ test('outdated depth zero', function (t) { ) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/peer-deps.js b/test/tap/peer-deps.js index 463a5ec47908d..558fe9c4e6d96 100644 --- a/test/tap/peer-deps.js +++ b/test/tap/peer-deps.js @@ -1,10 +1,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -23,6 +20,17 @@ var json = { } } +function setup (cb) { + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) + process.chdir(pkg) + + var opts = { cache: common.cache, registry: common.registry } + npm.load(opts, cb) +} + test('installs the peer dependency directory structure', function (t) { mr({ port: common.port }, function (er, s) { setup(function (err) { @@ -42,26 +50,3 @@ test('installs the peer dependency directory structure', function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup (cb) { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - process.chdir(pkg) - - var opts = { cache: common.cache, registry: common.registry } - npm.load(opts, cb) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/publish-config.js b/test/tap/publish-config.js index 7d617df2c4032..0d6406316b4a0 100644 --- a/test/tap/publish-config.js +++ b/test/tap/publish-config.js @@ -3,7 +3,6 @@ const common = require('../common-tap.js') const test = require('tap').test const fs = require('fs') -const osenv = require('osenv') const pkg = common.pkg fs.writeFileSync(pkg + '/package.json', JSON.stringify({ @@ -58,7 +57,7 @@ test(function (t) { HOME: process.env.HOME, Path: process.env.PATH, PATH: process.env.PATH, - USERPROFILE: osenv.home() + USERPROFILE: process.env.USERPROFILE } }, function (err, code, stdout, stderr) { t.comment(stdout) diff --git a/test/tap/publish-invalid-semver-tag.js b/test/tap/publish-invalid-semver-tag.js index fed064bb4e0da..b5d499f377248 100644 --- a/test/tap/publish-invalid-semver-tag.js +++ b/test/tap/publish-invalid-semver-tag.js @@ -2,54 +2,52 @@ var common = require('../common-tap.js') var test = require('tap').test var npm = require('../../lib/npm.js') var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var path = require('path') var fs = require('fs') var mr = require('npm-registry-mock') -var osenv = require('osenv') - var PKG_DIR = common.pkg -var CACHE_DIR = common.cache +let cacheIteration = 0 +let CACHE_DIR var DEFAULT_PKG = { 'name': 'examples', 'version': '1.2.3' } -var mockServer - -const chownr = require('chownr') -const fixOwner = ( - process.getuid && process.getuid() === 0 && - process.env.SUDO_UID && process.env.SUDO_GID -) ? (path) => chownr.sync(path, +process.env.SUDO_UID, +process.env.SUDO_GID) - : () => {} - +const isRoot = process.getuid && process.getuid() === 0 +const sudoUID = isRoot ? +process.env.SUDO_UID : null +const sudoGID = isRoot ? +process.env.SUDO_GID : null +const { chownSync } = require('fs') function resetPackage (options) { - rimraf.sync(CACHE_DIR) + CACHE_DIR = path.resolve(common.cache, '' + cacheIteration++) mkdirp.sync(CACHE_DIR) - fixOwner(CACHE_DIR) + npm.config.set('cache', CACHE_DIR) + + if (isRoot && sudoUID && sudoGID) { + chownSync(CACHE_DIR, sudoUID, sudoGID) + } fs.writeFileSync(path.resolve(PKG_DIR, 'package.json'), DEFAULT_PKG) } test('setup', function (t) { - process.chdir(osenv.tmpdir()) mkdirp.sync(PKG_DIR) process.chdir(PKG_DIR) - resetPackage({}) - mr({ port: common.port }, function (er, server) { + if (er) { + throw er + } + t.parent.teardown(() => server.close()) npm.load({ - cache: CACHE_DIR, + cache: common.cache, registry: common.registry, cwd: PKG_DIR }, function (err) { - t.ifError(err, 'started server') - mockServer = server - + if (err) { + throw err + } t.end() }) }) @@ -76,12 +74,3 @@ test('attempt publish with semver-like version', function (t) { t.end() }) }) - -test('cleanup', function (t) { - mockServer.close() - - process.chdir(osenv.tmpdir()) - rimraf.sync(PKG_DIR) - - t.end() -}) diff --git a/test/tap/scripts-whitespace-windows.js b/test/tap/scripts-whitespace-windows.js index 06f06e36eb2a6..9a301dca526d0 100644 --- a/test/tap/scripts-whitespace-windows.js +++ b/test/tap/scripts-whitespace-windows.js @@ -2,8 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -43,7 +41,6 @@ if (process.argv.length === 8) */ }.toString().split('\n').slice(1, -1).join('\n') test('setup', function (t) { - cleanup() mkdirp.sync(tmp) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -89,13 +86,3 @@ test('test', function (t) { t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/shrinkwrap-_auth.js b/test/tap/shrinkwrap-_auth.js index 156bd9667cb83..2987e3eec0ace 100644 --- a/test/tap/shrinkwrap-_auth.js +++ b/test/tap/shrinkwrap-_auth.js @@ -5,11 +5,10 @@ var path = require('path') var writeFileSync = require('graceful-fs').writeFileSync var mkdirp = require('mkdirp') -var osenv = require('osenv') var http = require('http') -var rimraf = require('rimraf') var ssri = require('ssri') -var test = require('tap').test +var t = require('tap') +var test = t.test var common = require('../common-tap.js') @@ -23,7 +22,34 @@ var tarball = path.resolve(__dirname, '../fixtures/scoped-underscore-1.3.1.tgz') var tarballIntegrity = ssri.fromData(fs.readFileSync(tarball)).toString() var _auth = '0xabad1dea' + +var contents = '_auth=' + _auth + '\n' + + '\'always-auth\'=true\n' + +var json = { + name: 'test-package-install', + version: '1.0.0', + dependencies: { + '@scoped/underscore': '1.0.0' + } +} + +var shrinkwrap = { + name: 'test-package-install', + version: '1.0.0', + lockfileVersion: 1, + dependencies: { + '@scoped/underscore': { + resolved: tarballURL, + integrity: tarballIntegrity, + version: '1.3.1' + } + } +} + var server = http.createServer() +t.teardown(() => server.close()) + const errors = [] server.on('request', (req, res) => { const auth = 'Basic ' + _auth @@ -44,10 +70,14 @@ server.on('request', (req, res) => { }) test('setup', function (t) { - server.listen(common.port, () => { - setup() - t.done() - }) + mkdirp.sync(modules) + writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') + writeFileSync(outfile, contents) + writeFileSync( + path.resolve(pkg, 'npm-shrinkwrap.json'), + JSON.stringify(shrinkwrap, null, 2) + '\n' + ) + server.listen(common.port, t.end) }) test('authed npm install with shrinkwrapped global package using _auth', function (t) { @@ -77,50 +107,3 @@ test('authed npm install with shrinkwrapped global package using _auth', functio } ) }) - -test('cleanup', function (t) { - server.close(() => { - cleanup() - t.end() - }) -}) - -var contents = '_auth=' + _auth + '\n' + - '\'always-auth\'=true\n' - -var json = { - name: 'test-package-install', - version: '1.0.0', - dependencies: { - '@scoped/underscore': '1.0.0' - } -} - -var shrinkwrap = { - name: 'test-package-install', - version: '1.0.0', - lockfileVersion: 1, - dependencies: { - '@scoped/underscore': { - resolved: tarballURL, - integrity: tarballIntegrity, - version: '1.3.1' - } - } -} - -function setup () { - cleanup() - mkdirp.sync(modules) - writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') - writeFileSync(outfile, contents) - writeFileSync( - path.resolve(pkg, 'npm-shrinkwrap.json'), - JSON.stringify(shrinkwrap, null, 2) + '\n' - ) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/shrinkwrap-dev-dependency.js b/test/tap/shrinkwrap-dev-dependency.js index 066372e617105..973cb5435b8f2 100644 --- a/test/tap/shrinkwrap-dev-dependency.js +++ b/test/tap/shrinkwrap-dev-dependency.js @@ -1,10 +1,7 @@ var fs = require('fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -46,26 +43,11 @@ var json = { } } -function setup () { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2)) - process.chdir(pkg) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -test('setup', function (t) { - setup() - t.end() -}) - test("shrinkwrap doesn't strip out the dependency", function (t) { t.plan(3) - setup() + + fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2)) + process.chdir(pkg) mr({port: common.port}, function (er, s) { common.npm(opts.concat(['install', '.']), {stdio: [0, 'pipe', 2]}, function (err, code) { @@ -86,8 +68,3 @@ test("shrinkwrap doesn't strip out the dependency", function (t) { }) }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) diff --git a/test/tap/shrinkwrap-empty-deps.js b/test/tap/shrinkwrap-empty-deps.js index af9b4810afaf6..3c68845745a94 100644 --- a/test/tap/shrinkwrap-empty-deps.js +++ b/test/tap/shrinkwrap-empty-deps.js @@ -2,11 +2,8 @@ const common = require('../common-tap.js') const fs = require('fs') -const mkdirp = require('mkdirp') const mr = require('npm-registry-mock') -const osenv = require('osenv') const path = require('path') -const rimraf = require('rimraf') const test = require('tap').test const pkg = common.pkg @@ -22,8 +19,6 @@ const json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) @@ -61,14 +56,3 @@ test('returns a list of removed items', function (t) { ) }) }) - -test('cleanup', function (t) { - cleanup() - - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/shrinkwrap-extra-metadata.js b/test/tap/shrinkwrap-extra-metadata.js index a5ff721a7a816..6e652e2db0714 100644 --- a/test/tap/shrinkwrap-extra-metadata.js +++ b/test/tap/shrinkwrap-extra-metadata.js @@ -2,12 +2,9 @@ const common = require('../common-tap.js') const fs = require('fs') -const mkdirp = require('mkdirp') const mr = require('npm-registry-mock') const npm = require('../../lib/npm.js') -const osenv = require('osenv') const path = require('path') -const rimraf = require('rimraf') const test = require('tap').test const pkg = common.pkg @@ -19,8 +16,6 @@ const json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) @@ -32,6 +27,7 @@ test('setup', function (t) { test('adds additional metadata fields from the pkglock spec', function (t) { mr({ port: common.port }, function (er, s) { + t.teardown(() => s.close()) common.npm( [ '--registry', common.registry, @@ -56,21 +52,9 @@ test('adds additional metadata fields from the pkglock spec', function (t) { 'shrinkwrap wrote the expected metadata fields' ) - s.close() t.end() }) } ) }) }) - -test('cleanup', function (t) { - cleanup() - - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/shrinkwrap-global-auth.js b/test/tap/shrinkwrap-global-auth.js index e860abd2fe1a8..e14a328a43a51 100644 --- a/test/tap/shrinkwrap-global-auth.js +++ b/test/tap/shrinkwrap-global-auth.js @@ -6,8 +6,6 @@ var writeFileSync = require('graceful-fs').writeFileSync var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var ssri = require('ssri') var test = require('tap').test @@ -22,7 +20,30 @@ var tarballURL = common.registry + tarballPath var tarball = path.resolve(__dirname, '../fixtures/scoped-underscore-1.3.1.tgz') var tarballIntegrity = ssri.fromData(fs.readFileSync(tarball)).toString() -var server +var contents = 'registry=' + common.registry + '\n' + + '_authToken=0xabad1dea\n' + + '\'always-auth\'=true\n' + +var json = { + name: 'test-package-install', + version: '1.0.0', + dependencies: { + '@scoped/underscore': '1.0.0' + } +} + +var shrinkwrap = { + name: 'test-package-install', + version: '1.0.0', + lockfileVersion: 1, + dependencies: { + '@scoped/underscore': { + resolved: tarballURL, + integrity: tarballIntegrity, + version: '1.3.1' + } + } +} function mocks (server) { var auth = 'Bearer 0xabad1dea' @@ -34,10 +55,16 @@ function mocks (server) { } test('setup', function (t) { + mkdirp.sync(modules) + writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') + writeFileSync(outfile, contents) + writeFileSync( + path.resolve(pkg, 'npm-shrinkwrap.json'), + JSON.stringify(shrinkwrap, null, 2) + '\n' + ) mr({ port: common.port, plugin: mocks }, function (er, s) { - server = s + t.parent.teardown(() => s.close()) t.ok(s, 'set up mock registry') - setup() t.end() }) }) @@ -68,50 +95,3 @@ test('authed npm install with shrinkwrapped global package', function (t) { } ) }) - -test('cleanup', function (t) { - server.close() - cleanup() - t.end() -}) - -var contents = 'registry=' + common.registry + '\n' + - '_authToken=0xabad1dea\n' + - '\'always-auth\'=true\n' - -var json = { - name: 'test-package-install', - version: '1.0.0', - dependencies: { - '@scoped/underscore': '1.0.0' - } -} - -var shrinkwrap = { - name: 'test-package-install', - version: '1.0.0', - lockfileVersion: 1, - dependencies: { - '@scoped/underscore': { - resolved: tarballURL, - integrity: tarballIntegrity, - version: '1.3.1' - } - } -} - -function setup () { - cleanup() - mkdirp.sync(modules) - writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') - writeFileSync(outfile, contents) - writeFileSync( - path.resolve(pkg, 'npm-shrinkwrap.json'), - JSON.stringify(shrinkwrap, null, 2) + '\n' - ) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/shrinkwrap-lifecycle.js b/test/tap/shrinkwrap-lifecycle.js index 5ed35e186843b..6e6bc4c2872b2 100644 --- a/test/tap/shrinkwrap-lifecycle.js +++ b/test/tap/shrinkwrap-lifecycle.js @@ -1,16 +1,10 @@ var fs = require('graceful-fs') var path = require('path') - -var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test - var common = require('../common-tap.js') var pkg = common.pkg test('npm shrinkwrap execution order', function (t) { - setup() fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ author: 'Simen Bekkhus', name: 'shrinkwrap-lifecycle', @@ -22,7 +16,7 @@ test('npm shrinkwrap execution order', function (t) { postshrinkwrap: 'echo this happens third' } }), 'utf8') - common.npm(['shrinkwrap', '--loglevel=error'], [], function (err, code, stdout, stderr) { + common.npm(['shrinkwrap', '--loglevel=error'], { cwd: pkg }, function (err, code, stdout, stderr) { if (err) throw err t.comment(stdout) @@ -41,14 +35,3 @@ test('npm shrinkwrap execution order', function (t) { t.end() }) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - t.end() -}) - -function setup () { - mkdirp.sync(pkg) - process.chdir(pkg) -} diff --git a/test/tap/shrinkwrap-optional-dependency.js b/test/tap/shrinkwrap-optional-dependency.js index 621e6c4c595e1..a08d1538490db 100644 --- a/test/tap/shrinkwrap-optional-dependency.js +++ b/test/tap/shrinkwrap-optional-dependency.js @@ -3,8 +3,6 @@ var path = require('path') var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -22,17 +20,17 @@ test('shrinkwrap does not fail on missing optional dependency', function (t) { } mr({port: common.port, mocks: mocks}, function (er, s) { - function fail (err) { - s.close() // Close on failure to allow node to exit - t.fail(err) - } - + t.parent.teardown(() => s.close()) setup(function (err) { - if (err) return fail(err) + if (err) { + throw err + } // Install without the optional dependency npm.install('.', function (err) { - if (err) return fail(err) + if (err) { + throw err + } // Pretend the optional dependency was specified, but somehow failed to load: json.optionalDependencies = { @@ -41,7 +39,9 @@ test('shrinkwrap does not fail on missing optional dependency', function (t) { writePackage() npm.commands.shrinkwrap([], true, function (err, results) { - if (err) return fail(err) + if (err) { + throw err + } t.deepEqual(results.dependencies, desired.dependencies) s.close() @@ -52,11 +52,6 @@ test('shrinkwrap does not fail on missing optional dependency', function (t) { }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - var desired = { name: 'npm-test-shrinkwrap-optional-dependency', version: '0.0.0', @@ -83,19 +78,14 @@ function writePackage () { } function setup (cb) { - cleanup() mkdirp.sync(pkg) writePackage() process.chdir(pkg) var opts = { cache: common.cache, - registry: common.registry + registry: common.registry, + cwd: pkg } npm.load(opts, cb) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/shrinkwrap-optional-property.js b/test/tap/shrinkwrap-optional-property.js index f9b37f2f30e19..c2dc8585aec1c 100644 --- a/test/tap/shrinkwrap-optional-property.js +++ b/test/tap/shrinkwrap-optional-property.js @@ -1,10 +1,7 @@ var fs = require('fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -16,22 +13,24 @@ test('shrinkwrap adds optional property when optional dependency', function (t) t.plan(1) mr({port: common.port}, function (er, s) { - function fail (err) { - s.close() // Close on failure to allow node to exit - t.fail(err) - } - + t.parent.teardown(() => s.close()) setup(function (err) { - if (err) return fail(err) + if (err) { + throw err + } // Install with the optional dependency npm.install('.', function (err) { - if (err) return fail(err) + if (err) { + throw err + } writePackage() npm.commands.shrinkwrap([], true, function (err, results) { - if (err) return fail(err) + if (err) { + throw err + } t.deepEqual(results.dependencies, desired.dependencies) s.close() @@ -42,11 +41,6 @@ test('shrinkwrap adds optional property when optional dependency', function (t) }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - var desired = { name: 'npm-test-shrinkwrap-optional-dependency', version: '0.0.0', @@ -82,8 +76,6 @@ function writePackage () { } function setup (cb) { - cleanup() - mkdirp.sync(pkg) writePackage() process.chdir(pkg) @@ -93,8 +85,3 @@ function setup (cb) { } npm.load(opts, cb) } - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/shrinkwrap-prod-dependency-also.js b/test/tap/shrinkwrap-prod-dependency-also.js index 96ebe2249e1c7..1e4e9d7438a2c 100644 --- a/test/tap/shrinkwrap-prod-dependency-also.js +++ b/test/tap/shrinkwrap-prod-dependency-also.js @@ -1,10 +1,7 @@ var fs = require('fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -21,13 +18,42 @@ function reportOutput (t, fh, out) { t.comment(prefix + trimmed.split(/\n/).join('\n' + prefix)) } -var server +var desired = { + name: 'npm-test-shrinkwrap-prod-dependency', + version: '0.0.0', + dependencies: { + request: { + version: '0.9.0', + resolved: common.registry + '/request/-/request-0.9.0.tgz', + integrity: 'sha1-EEn1mm9GWI5tAwkh+7hMovDCcU4=' + }, + underscore: { + dev: true, + version: '1.5.1', + resolved: common.registry + '/underscore/-/underscore-1.5.1.tgz', + integrity: 'sha1-0r3oF9F2/63olKtxRY5oKhS4bck=' + } + } +} + +var json = { + author: 'Domenic Denicola', + name: 'npm-test-shrinkwrap-prod-dependency', + version: '0.0.0', + dependencies: { + request: '0.9.0' + }, + devDependencies: { + underscore: '1.5.1' + } +} + test("shrinkwrap --also=development doesn't strip out prod dependencies", function (t) { t.plan(4) mr({port: common.port}, function (er, s) { - server = s - setup() + t.parent.teardown(() => s.close()) + fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2)) common.npm(['install', '.'].concat(opts), {cwd: pkg}, function (err, code, stdout, stderr) { if (err) return t.fail(err) t.is(code, 0, 'install') @@ -57,50 +83,3 @@ test("shrinkwrap --also=development doesn't strip out prod dependencies", functi }) }) }) - -test('cleanup', function (t) { - server.close() - cleanup() - t.end() -}) - -var desired = { - name: 'npm-test-shrinkwrap-prod-dependency', - version: '0.0.0', - dependencies: { - request: { - version: '0.9.0', - resolved: common.registry + '/request/-/request-0.9.0.tgz', - integrity: 'sha1-EEn1mm9GWI5tAwkh+7hMovDCcU4=' - }, - underscore: { - dev: true, - version: '1.5.1', - resolved: common.registry + '/underscore/-/underscore-1.5.1.tgz', - integrity: 'sha1-0r3oF9F2/63olKtxRY5oKhS4bck=' - } - } -} - -var json = { - author: 'Domenic Denicola', - name: 'npm-test-shrinkwrap-prod-dependency', - version: '0.0.0', - dependencies: { - request: '0.9.0' - }, - devDependencies: { - underscore: '1.5.1' - } -} - -function setup (opts) { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2)) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/shrinkwrap-prod-dependency.js b/test/tap/shrinkwrap-prod-dependency.js index 6c175af819bcd..bf6d98bf80152 100644 --- a/test/tap/shrinkwrap-prod-dependency.js +++ b/test/tap/shrinkwrap-prod-dependency.js @@ -3,8 +3,6 @@ var path = require('path') var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var npm = require('../../') @@ -12,34 +10,6 @@ var npm = require('../../') var common = require('../common-tap.js') var pkg = common.pkg -test("shrinkwrap --dev doesn't strip out prod dependencies", function (t) { - t.plan(1) - - mr({port: common.port}, function (er, s) { - setup({}, function (err) { - if (err) return t.fail(err) - - npm.install('.', function (err) { - if (err) return t.fail(err) - - npm.config.set('dev', true) - npm.commands.shrinkwrap([], true, function (err, results) { - if (err) return t.fail(err) - - t.deepEqual(results.dependencies, desired.dependencies) - s.close() - t.end() - }) - }) - }) - }) -}) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - var desired = { name: 'npm-test-shrinkwrap-prod-dependency', version: '0.0.0', @@ -70,8 +40,7 @@ var json = { } } -function setup (opts, cb) { - cleanup() +test('setup', function (t) { mkdirp.sync(pkg) fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2)) process.chdir(pkg) @@ -81,14 +50,27 @@ function setup (opts, cb) { registry: common.registry } - for (var key in opts) { - allOpts[key] = opts[key] - } + npm.load(allOpts, t.end) +}) - npm.load(allOpts, cb) -} +test('mock registry', t => { + mr({port: common.port}, function (er, s) { + t.parent.teardown(() => s.close()) + t.end() + }) +}) -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} +test("shrinkwrap --dev doesn't strip out prod dependencies", t => { + t.plan(1) + npm.install('.', function (err) { + if (err) return t.fail(err) + + npm.config.set('dev', true) + npm.commands.shrinkwrap([], true, function (err, results) { + if (err) return t.fail(err) + + t.deepEqual(results.dependencies, desired.dependencies) + t.end() + }) + }) +}) diff --git a/test/tap/shrinkwrap-save-dev-with-existing-deps.js b/test/tap/shrinkwrap-save-dev-with-existing-deps.js index a71408e54f5ab..1c35bf226b913 100644 --- a/test/tap/shrinkwrap-save-dev-with-existing-deps.js +++ b/test/tap/shrinkwrap-save-dev-with-existing-deps.js @@ -1,12 +1,8 @@ /* eslint-disable camelcase */ var fs = require('fs') var path = require('path') - var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test - var common = require('../common-tap.js') var base = common.pkg @@ -74,7 +70,6 @@ function writeJson (filename, obj) { } test('setup', function (t) { - cleanup() writeJson(installme_pkg, installme_pkg_json) writeJson(example_pkg, example_pkg_json) writeJson(example_shrinkwrap, example_shrinkwrap_json) @@ -95,13 +90,3 @@ test('install --save-dev leaves prod deps alone', function (t) { t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(base) -} diff --git a/test/tap/shrinkwrap-save-with-existing-dev-deps.js b/test/tap/shrinkwrap-save-with-existing-dev-deps.js index 8a3f449fa8865..acf6ac21014d1 100644 --- a/test/tap/shrinkwrap-save-with-existing-dev-deps.js +++ b/test/tap/shrinkwrap-save-with-existing-dev-deps.js @@ -3,8 +3,6 @@ var fs = require('fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -63,7 +61,6 @@ function writeJson (filename, obj) { } test('setup', function (t) { - cleanup() writeJson(installme_pkg, installme_pkg_json) writeJson(example_pkg, example_pkg_json) writeJson(example_shrinkwrap, example_shrinkwrap_json) @@ -71,24 +68,12 @@ test('setup', function (t) { t.end() }) -test('install --save leaves dev deps alone', function (t) { - common.npm(['install', '--save', 'file://' + installme], EXEC_OPTS, function (er, code, stdout, stderr) { - t.ifError(er, "spawn didn't catch fire") - t.is(code, 0, 'install completed ok') - t.is(stderr, '', 'install completed without error output') - var shrinkwrap = JSON.parse(fs.readFileSync(example_shrinkwrap)) - t.ok(shrinkwrap.dependencies.installed, "save new install didn't remove dev dep") - t.ok(shrinkwrap.dependencies.installme, 'save new install DID add new dep') - t.end() - }) -}) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(base) -} +test('install --save leaves dev deps alone', t => + common.npm(['install', '--save', 'file://' + installme], EXEC_OPTS) + .then(([code, stdout, stderr]) => { + t.is(code, 0, 'install completed ok') + t.is(stderr, '', 'install completed without error output') + var shrinkwrap = JSON.parse(fs.readFileSync(example_shrinkwrap)) + t.ok(shrinkwrap.dependencies.installed, "save new install didn't remove dev dep") + t.ok(shrinkwrap.dependencies.installme, 'save new install DID add new dep') + })) diff --git a/test/tap/shrinkwrap-scoped-auth.js b/test/tap/shrinkwrap-scoped-auth.js index 3098b8aa12e93..cc1b2270012ec 100644 --- a/test/tap/shrinkwrap-scoped-auth.js +++ b/test/tap/shrinkwrap-scoped-auth.js @@ -6,8 +6,6 @@ var writeFileSync = require('graceful-fs').writeFileSync var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var ssri = require('ssri') var test = require('tap').test @@ -22,8 +20,6 @@ var tarballURL = common.registry + tarballPath var tarball = path.resolve(__dirname, '../fixtures/scoped-underscore-1.3.1.tgz') var tarballIntegrity = ssri.fromData(fs.readFileSync(tarball)).toString() -var server - function mocks (server) { var auth = 'Bearer 0xabad1dea' server.get(tarballPath, { authorization: auth }).replyWithFile(200, tarball) @@ -33,11 +29,41 @@ function mocks (server) { }) } +var contents = '@scoped:registry=' + common.registry + '\n' + + toNerfDart(common.registry) + ':_authToken=0xabad1dea\n' + +var json = { + name: 'test-package-install', + version: '1.0.0', + dependencies: { + '@scoped/underscore': '1.0.0' + } +} + +var shrinkwrap = { + name: 'test-package-install', + version: '1.0.0', + lockfileVersion: 1, + dependencies: { + '@scoped/underscore': { + resolved: tarballURL, + integrity: tarballIntegrity, + version: '1.3.1' + } + } +} + test('setup', function (t) { + mkdirp.sync(modules) + writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') + writeFileSync(outfile, contents) + writeFileSync( + path.resolve(pkg, 'npm-shrinkwrap.json'), + JSON.stringify(shrinkwrap, null, 2) + '\n' + ) mr({ port: common.port, plugin: mocks }, function (er, s) { - server = s + t.parent.teardown(() => s.close()) t.ok(s, 'set up mock registry') - setup() t.end() }) }) @@ -68,49 +94,3 @@ test('authed npm install with shrinkwrapped scoped package', function (t) { } ) }) - -test('cleanup', function (t) { - server.close() - cleanup() - t.end() -}) - -var contents = '@scoped:registry=' + common.registry + '\n' + - toNerfDart(common.registry) + ':_authToken=0xabad1dea\n' - -var json = { - name: 'test-package-install', - version: '1.0.0', - dependencies: { - '@scoped/underscore': '1.0.0' - } -} - -var shrinkwrap = { - name: 'test-package-install', - version: '1.0.0', - lockfileVersion: 1, - dependencies: { - '@scoped/underscore': { - resolved: tarballURL, - integrity: tarballIntegrity, - version: '1.3.1' - } - } -} - -function setup () { - cleanup() - mkdirp.sync(modules) - writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') - writeFileSync(outfile, contents) - writeFileSync( - path.resolve(pkg, 'npm-shrinkwrap.json'), - JSON.stringify(shrinkwrap, null, 2) + '\n' - ) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/startstop.js b/test/tap/startstop.js index 3491441821d92..dd07352e0dc81 100644 --- a/test/tap/startstop.js +++ b/test/tap/startstop.js @@ -2,8 +2,6 @@ var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') @@ -33,7 +31,6 @@ function testOutput (t, command, er, code, stdout, stderr) { } test('setup', function (t) { - cleanup() mkdirp.sync(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), @@ -62,13 +59,3 @@ test('npm restart', function (t) { t.end() }) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/symlink-cycle.js b/test/tap/symlink-cycle.js index d59a2763bd19c..ea0c0f5359443 100644 --- a/test/tap/symlink-cycle.js +++ b/test/tap/symlink-cycle.js @@ -3,8 +3,6 @@ var fs = require('fs') var path = require('path') var test = require('tap').test var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var writeFileSync = require('fs').writeFileSync var common = require('../common-tap.js') @@ -27,7 +25,12 @@ var cycleJSON = { } test('setup', function (t) { - setup() + mkdirp.sync(path.join(cycle, 'node_modules')) + writeFileSync( + path.join(cycle, 'package.json'), + JSON.stringify(cycleJSON, null, 2) + ) + fs.symlinkSync(cycle, path.join(cycle, 'node_modules', 'cycle'), 'junction') t.end() }) @@ -39,23 +42,3 @@ test('ls', function (t) { t.end() }) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - cleanup() - t.end() -}) - -function cleanup () { - rimraf.sync(base) -} - -function setup () { - cleanup() - mkdirp.sync(path.join(cycle, 'node_modules')) - writeFileSync( - path.join(cycle, 'package.json'), - JSON.stringify(cycleJSON, null, 2) - ) - fs.symlinkSync(cycle, path.join(cycle, 'node_modules', 'cycle'), 'junction') -} diff --git a/test/tap/uninstall-package.js b/test/tap/uninstall-package.js index 87fdee2281697..3e0b404b6c457 100644 --- a/test/tap/uninstall-package.js +++ b/test/tap/uninstall-package.js @@ -1,10 +1,7 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -24,14 +21,10 @@ var json = { } test('setup', function (t) { - cleanup() - mkdirp.sync(pkg) - process.chdir(pkg) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) - t.end() }) @@ -90,13 +83,3 @@ test('does not fail if installed package lacks a name somehow', function (t) { } ) }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} diff --git a/test/tap/uninstall-save.js b/test/tap/uninstall-save.js index 0605616e07f03..bf1683edcab2c 100644 --- a/test/tap/uninstall-save.js +++ b/test/tap/uninstall-save.js @@ -3,12 +3,10 @@ var path = require('path') var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') -var server var pkg = common.pkg @@ -20,10 +18,14 @@ var json = { } test('setup', function (t) { - setup() + mkdirp.sync(path.resolve(pkg, 'node_modules')) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(json, null, 2) + ) mr({ port: common.port }, function (er, s) { t.ifError(er, 'started mock registry') - server = s + t.parent.teardown(() => s.close()) t.end() }) }) @@ -68,25 +70,3 @@ test('uninstall --save removes rm-ed package from package.json', function (t) { ) }) }) - -test('cleanup', function (t) { - server.close() - cleanup() - t.end() -}) - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -function setup () { - cleanup() - mkdirp.sync(path.resolve(pkg, 'node_modules')) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - - process.chdir(pkg) -} diff --git a/test/tap/unpack-foreign-tarball.js b/test/tap/unpack-foreign-tarball.js index 7e965d9f08acc..b3a9026f84ab2 100644 --- a/test/tap/unpack-foreign-tarball.js +++ b/test/tap/unpack-foreign-tarball.js @@ -1,9 +1,8 @@ var fs = require('graceful-fs') var path = require('path') -var test = require('tap').test +var t = require('tap') var mkdirp = require('mkdirp') -var osenv = require('osenv') var rimraf = require('rimraf') var common = require('../common-tap.js') @@ -24,64 +23,62 @@ var EXEC_OPTS = { cwd: pkg } -function verify (t, files, err, code) { +function verify (t, files, code) { if (code) { - t.fail('exited with failure: ' + code) - return t.end() + return t.fail('exited with failure: ' + code) } var actual = fs.readdirSync(target).sort() var expect = files.concat(['.npmignore', 'package.json']).sort() t.same(actual, expect) - t.end() } -test('setup', function (t) { - setup() - t.comment('test for https://github.com/npm/npm/issues/5658') - t.end() -}) +t.comment('test for https://github.com/npm/npm/issues/5658') -test('npmignore only', function (t) { +t.test('npmignore only', function (t) { + t.test('setup', setup) var file = path.resolve(fixtures, 'npmignore.tgz') - common.npm(['install', file], EXEC_OPTS, verify.bind(null, t, ['foo'])) + return t.test('test', t => common.npm(['install', file], EXEC_OPTS) + .then(([code]) => verify(t, ['foo'], code))) }) -test('gitignore only', function (t) { - setup() +t.test('gitignore only', function (t) { + t.test('setup', setup) var file = path.resolve(fixtures, 'gitignore.tgz') - common.npm(['install', file], EXEC_OPTS, verify.bind(null, t, ['foo'])) + return t.test('test', t => common.npm(['install', file], EXEC_OPTS) + .then(([code]) => verify(t, ['foo'], code))) }) -test('gitignore and npmignore', function (t) { - setup() +t.test('gitignore and npmignore', function (t) { + t.test('setup', setup) var file = path.resolve(fixtures, 'gitignore-and-npmignore.tgz') - common.npm(['install', file], EXEC_OPTS, verify.bind(null, t, ['foo', 'bar'])) + return t.test('test', t => common.npm(['install', file], EXEC_OPTS) + .then(([code]) => verify(t, ['foo', 'bar'], code))) }) -test('gitignore and npmignore, not gzipped 1/2', function (t) { - setup() +t.test('gitignore and npmignore, not gzipped 1/2', function (t) { + t.test('setup', setup) var file = path.resolve(fixtures, 'gitignore-and-npmignore.tar') - common.npm(['install', file], EXEC_OPTS, verify.bind(null, t, ['foo', 'bar'])) + return t.test('test', t => common.npm(['install', file], EXEC_OPTS) + .then(([code]) => verify(t, ['foo', 'bar'], code))) }) -test('gitignore and npmignore, not gzipped 2/2', function (t) { - setup() +t.test('gitignore and npmignore, not gzipped 2/2', function (t) { + t.test('setup', setup) var file = path.resolve(fixtures, 'gitignore-and-npmignore-2.tar') - common.npm(['install', file], EXEC_OPTS, verify.bind(null, t, ['foo', 'bar'])) + return t.test('test', t => common.npm(['install', file], EXEC_OPTS) + .then(([code]) => verify(t, ['foo', 'bar'], code))) }) -test('cleanup', function (t) { - cleanup() +function setup (t) { + t.test('destroy', t => { + t.plan(2) + t.test('node_modules', t => rimraf(nm, t.end)) + t.test('tmp', t => rimraf(tmp, t.end)) + }) + t.test('create', t => { + mkdirp.sync(nm) + mkdirp.sync(tmp) + t.end() + }) t.end() -}) - -function setup () { - cleanup() - mkdirp.sync(nm) - mkdirp.sync(tmp) -} - -function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) } diff --git a/test/tap/unpublish-config.js b/test/tap/unpublish-config.js index f358835561eee..6d5c981d08d95 100644 --- a/test/tap/unpublish-config.js +++ b/test/tap/unpublish-config.js @@ -2,9 +2,6 @@ var fs = require('graceful-fs') var http = require('http') var path = require('path') -var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') @@ -18,8 +15,6 @@ var json = { } test('setup', function (t) { - mkdirp.sync(pkg) - fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json), 'utf8' @@ -63,7 +58,7 @@ test('cursory test of unpublishing with config', function (t) { HOME: process.env.HOME, Path: process.env.PATH, PATH: process.env.PATH, - USERPROFILE: osenv.home() + USERPROFILE: process.env.USERPROFILE } }, function (err, code) { @@ -73,9 +68,3 @@ test('cursory test of unpublishing with config', function (t) { ) }) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - t.end() -}) diff --git a/test/tap/update-examples.js b/test/tap/update-examples.js index 8b6323ff1c71a..2217386de8d23 100644 --- a/test/tap/update-examples.js +++ b/test/tap/update-examples.js @@ -1,11 +1,7 @@ var common = require('../common-tap.js') var test = require('tap').test var mkdirp = require('mkdirp') -var rimraf = require('rimraf') var mr = require('npm-registry-mock') - -var osenv = require('osenv') - var requireInject = require('require-inject') var PKG_DIR = common.pkg @@ -64,7 +60,6 @@ var registryMocks = { } // ** dynamic mocks, cloned from templates and modified ** -var mockServer var mockDepJson = clone(DEP_PKG) var mockInstalled = clone(INSTALLED) var mockParentJson = clone(DEFAULT_PKG) @@ -83,17 +78,20 @@ function extend (a, b) { return a } -const chownr = require('chownr') -const fixOwner = ( - process.getuid && process.getuid() === 0 && - process.env.SUDO_UID && process.env.SUDO_GID -) ? (path) => chownr.sync(path, +process.env.SUDO_UID, +process.env.SUDO_GID) - : () => {} - +const path = require('path') +let cacheIteration = 0 +const isRoot = process.getuid && process.getuid() === 0 +const sudoUID = isRoot ? +process.env.SUDO_UID : null +const sudoGID = isRoot ? +process.env.SUDO_GID : null +const { chownSync } = require('fs') function resetPackage (options) { - rimraf.sync(CACHE_DIR) + CACHE_DIR = path.resolve(common.cache, '' + cacheIteration++) + npm.config.set('cache', CACHE_DIR) mkdirp.sync(CACHE_DIR) - fixOwner(CACHE_DIR) + + if (isRoot && sudoUID && sudoGID) { + chownSync(CACHE_DIR, sudoUID, sudoGID) + } installAskedFor = undefined @@ -145,20 +143,18 @@ var npm = requireInject.installGlobally('../../lib/npm.js', { test('setup', function (t) { t.plan(5) - process.chdir(osenv.tmpdir()) - mkdirp.sync(PKG_DIR) process.chdir(PKG_DIR) t.pass('made ' + PKG_DIR) - resetPackage({}) - mr({ port: common.port, mocks: registryMocks }, function (er, server) { t.pass('mock registry active') - npm.load({ cache: CACHE_DIR, + npm.load({ + cache: CACHE_DIR, registry: common.registry, - cwd: PKG_DIR }, function (err) { + cwd: PKG_DIR + }, function (err) { t.ifError(err, 'started server') - mockServer = server + t.parent.teardown(() => server.close()) t.pass('npm.load complete') @@ -223,12 +219,3 @@ test('update old caret dependency with newer', function (t) { t.end() }) }) - -test('cleanup', function (t) { - mockServer.close() - - process.chdir(osenv.tmpdir()) - rimraf.sync(PKG_DIR) - - t.end() -}) diff --git a/test/tap/url-dependencies.js b/test/tap/url-dependencies.js index 2017151568e09..14da5d1fc4fc7 100644 --- a/test/tap/url-dependencies.js +++ b/test/tap/url-dependencies.js @@ -1,14 +1,10 @@ var fs = require('graceful-fs') var path = require('path') -var mkdirp = require('mkdirp') var mr = require('npm-registry-mock') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') -var server var pkg = common.pkg @@ -27,87 +23,39 @@ var mockRoutes = { } } -test('setup', function (t) { - mr({ port: common.port, mocks: mockRoutes }, function (er, s) { - server = s - t.end() - }) -}) - -test('url-dependencies: download first time', function (t) { - setup() - - performInstall(t, function (output) { - if (!tarballWasFetched(output)) { - t.fail('Tarball was not fetched') - } else { - t.pass('Tarball was fetched') - } - t.end() - }) -}) - -test('url-dependencies: do not download subsequent times', function (t) { - setup() - - performInstall(t, function () { - performInstall(t, function (output) { - if (tarballWasFetched(output)) { - t.fail('Tarball was fetched second time around') - } else { - t.pass('Tarball was not fetched') - } - t.end() - }) - }) -}) - -test('cleanup', function (t) { - server.close() - cleanup() - t.end() +const tarballWasFetched = output => output.includes( + `GET 200 ${common.registry}/underscore/-/underscore-1.3.1.tgz`) + +const performInstall = () => common.npm(['install'], { + cwd: pkg, + env: { + npm_config_registry: common.registry, + npm_config_cache_lock_stale: 1000, + npm_config_cache_lock_wait: 1000, + npm_config_loglevel: 'http', + HOME: process.env.HOME, + Path: process.env.PATH, + PATH: process.env.PATH + } }) -function cleanup () { - // windows fix for locked files - process.chdir(osenv.tmpdir()) - rimraf.sync(path.resolve(pkg)) -} - -function setup () { - cleanup() - mkdirp.sync(pkg) +test('setup', function (t) { fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) -} - -function tarballWasFetched (output) { - return output.indexOf( - 'GET 200 ' + - common.registry + - '/underscore/-/underscore-1.3.1.tgz' - ) > -1 -} - -function performInstall (t, cb) { - var opts = { - cwd: pkg, - env: { - npm_config_registry: common.registry, - npm_config_cache_lock_stale: 1000, - npm_config_cache_lock_wait: 1000, - npm_config_loglevel: 'http', - HOME: process.env.HOME, - Path: process.env.PATH, - PATH: process.env.PATH - } - } - common.npm(['install'], opts, function (err, code, stdout, stderr) { - t.ifError(err, 'install success') - t.notOk(code, 'npm install exited with code 0') + mr({ port: common.port, mocks: mockRoutes }, function (er, s) { + t.parent.teardown(() => s.close()) + t.end() + }) +}) - cb(stderr) +test('url-dependencies: download first time', t => + performInstall().then(([code, _, output]) => { + t.equal(code, 0, 'exited successfully') + t.ok(tarballWasFetched(output), 'download first time') }) -} + .then(() => performInstall()).then(([code, _, output]) => { + t.equal(code, 0, 'exited successfully') + t.notOk(tarballWasFetched(output), 'do not download second time') + })) diff --git a/test/tap/version-allow-same-version.js b/test/tap/version-allow-same-version.js index 6b7978edebece..41310e4eb2e27 100644 --- a/test/tap/version-allow-same-version.js +++ b/test/tap/version-allow-same-version.js @@ -1,65 +1,40 @@ -var fs = require('graceful-fs') -var path = require('path') +const fs = require('graceful-fs') +const path = require('path') +const t = require('tap') +const common = require('../common-tap.js') +const npm = require('../../') +const pkg = common.pkg +const cache = common.cache +const npmrc = path.resolve(pkg, './.npmrc') +const configContents = 'sign-git-tag=false\n' -var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') -var test = require('tap').test - -var common = require('../common-tap.js') -var npm = require('../../') -var pkg = common.pkg -var cache = common.cache -var npmrc = path.resolve(pkg, './.npmrc') -var configContents = 'sign-git-tag=false\n' - -test('npm version with same version without --allow-same-version', function (t) { - setup() +t.test('setup', t => { + process.chdir(pkg) + fs.writeFileSync(npmrc, configContents, 'ascii') fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ author: 'Lucas Theisen', name: 'version-allow-same-version', version: '0.0.1', description: 'Test for npm version without --allow-same-version' }), 'utf8') - npm.load({cache: cache, 'allow-same-version': false, registry: common.registry}, function () { - var version = require('../../lib/version') - version(['0.0.1'], function (err) { - t.ok(err) - t.like(err.message, /Version not changed/) - t.end() - }) - }) + npm.load({cache: cache, 'allow-same-version': false, registry: common.registry}, t.end) }) -test('npm version with same version with --allow-same-version', function (t) { - setup() - fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ - author: 'Lucas Theisen', - name: 'version-allow-same-version', - version: '0.0.1', - description: 'Test for npm version without --allow-same-version' - }), 'utf8') - npm.load({cache: cache, 'allow-same-version': true, registry: common.registry}, function () { - var version = require('../../lib/version') - version(['0.0.1'], - function (err) { t.ok(!err) }, - function () { t.end() }) + +t.test('without --allow-same-version', t => { + npm.config.set('allow-same-version', false) + npm.commands.version(['0.0.1'], function (err) { + t.isa(err, Error, 'got an error') + t.like(err.message, /Version not changed/) + t.end() }) }) -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - // windows fix for locked files - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} -function setup () { - mkdirp.sync(pkg) - mkdirp.sync(path.join(pkg, 'node_modules')) - mkdirp.sync(cache) - fs.writeFileSync(npmrc, configContents, 'ascii') - process.chdir(pkg) -} +t.test('with --allow-same-version', t => { + npm.config.set('allow-same-version', true) + npm.commands.version(['0.0.1'], function (err) { + if (err) { + throw err + } + t.end() + }) +}) diff --git a/test/tap/version-commit-hooks.js b/test/tap/version-commit-hooks.js index 568c82b46b039..028767ab4e5ba 100644 --- a/test/tap/version-commit-hooks.js +++ b/test/tap/version-commit-hooks.js @@ -1,10 +1,7 @@ -var fs = require('graceful-fs') -var path = require('path') -var osenv = require('osenv') -var mkdirp = require('mkdirp') -var rimraf = require('rimraf') +const fs = require('graceful-fs') +const path = require('path') const common = require('../common-tap.js') -var pkg = common.pkg +const pkg = common.pkg var test = require('tap').test var npm = require('../../') @@ -12,7 +9,6 @@ var npm = require('../../') delete process.env['npm_config_commit_hooks'] test('npm version with commit-hooks disabled in .npmrc', function (t) { - mkdirp.sync(pkg) var npmrc = path.resolve(pkg, '.npmrc') fs.writeFileSync(npmrc, 'commit-hooks=false\n', 'ascii') process.chdir(pkg) @@ -57,9 +53,3 @@ test('npm version with commit-hooks enabled (default)', function (t) { t.end() }) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) - t.end() -}) diff --git a/test/tap/version-consistent-newlines.js b/test/tap/version-consistent-newlines.js index 4387c489e2c77..583874db7a305 100644 --- a/test/tap/version-consistent-newlines.js +++ b/test/tap/version-consistent-newlines.js @@ -3,11 +3,9 @@ const common = require('../common-tap.js') const test = require('tap').test const npm = require('../../') -const osenv = require('osenv') const path = require('path') const fs = require('fs') const mkdirp = require('mkdirp') -const rimraf = require('rimraf') const requireInject = require('require-inject') const pkg = common.pkg @@ -66,16 +64,7 @@ test('npm version does not alter the line endings in package.json (CRLF)', funct }) }) -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - - rimraf.sync(pkg) - t.end() -}) - function setup (lineEnding) { - mkdirp.sync(pkg) - mkdirp.sync(cache) mkdirp.sync(gitDir) fs.writeFileSync( path.resolve(pkg, 'package.json'), diff --git a/test/tap/version-sub-directory.js b/test/tap/version-sub-directory.js index 809f24e79ffa5..fc4a41f36e583 100644 --- a/test/tap/version-sub-directory.js +++ b/test/tap/version-sub-directory.js @@ -3,8 +3,6 @@ var fs = require('fs') var path = require('path') var mkdirp = require('mkdirp') -var osenv = require('osenv') -var rimraf = require('rimraf') var test = require('tap').test var npm = require('../../lib/npm.js') @@ -17,7 +15,9 @@ var cache = common.cache var json = { name: 'cat', version: '0.1.2' } test('npm version from a subdirectory', function (t) { - setup() + mkdirp.sync(subDirectory) + process.chdir(subDirectory) + fs.writeFileSync(packagePath, JSON.stringify(json), 'utf8') npmLoad() function npmLoad () { @@ -54,22 +54,3 @@ test('npm version from a subdirectory', function (t) { t.end() } }) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function cleanup () { - // windows fix for locked files - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) -} - -function setup () { - cleanup() - mkdirp.sync(cache) - mkdirp.sync(subDirectory) - process.chdir(subDirectory) - fs.writeFileSync(packagePath, JSON.stringify(json), 'utf8') -} diff --git a/test/tap/view.js b/test/tap/view.js index a01fa903a253d..71d21487ae99c 100644 --- a/test/tap/view.js +++ b/test/tap/view.js @@ -1,10 +1,14 @@ var common = require('../common-tap.js') -var test = require('tap').test +const t = require('tap') +var test = t.test var osenv = require('osenv') var path = require('path') var fs = require('fs') var rimraf = require('rimraf') var mkdirp = require('mkdirp') + +// this test has to use a tmpdir so that it's outside of +// the current package context of npm. var tmp = osenv.tmpdir() var t1dir = path.resolve(tmp, 'view-local-no-pkg') var t2dir = path.resolve(tmp, 'view-local-notmine') @@ -13,6 +17,15 @@ var mr = require('npm-registry-mock') var server +t.teardown(() => { + rimraf.sync(t1dir) + rimraf.sync(t2dir) + rimraf.sync(t3dir) + if (server) { + server.close() + } +}) + test('setup', function (t) { mkdirp.sync(t1dir) mkdirp.sync(t2dir) @@ -46,7 +59,6 @@ function plugin (server) { } test('npm view . in global mode', function (t) { - process.chdir(t1dir) common.npm([ 'view', '.', @@ -61,7 +73,6 @@ test('npm view . in global mode', function (t) { }) test('npm view --global', function (t) { - process.chdir(t1dir) common.npm([ 'view', '--registry=' + common.registry, @@ -75,7 +86,6 @@ test('npm view --global', function (t) { }) test('npm view . with no package.json', function (t) { - process.chdir(t1dir) common.npm([ 'view', '.', @@ -89,7 +99,6 @@ test('npm view . with no package.json', function (t) { }) test('npm view . with no published package', function (t) { - process.chdir(t3dir) common.npm([ 'view', '.', @@ -103,7 +112,6 @@ test('npm view . with no published package', function (t) { }) test('npm view .', function (t) { - process.chdir(t2dir) common.npm([ 'view', '.', @@ -117,7 +125,6 @@ test('npm view .', function (t) { }) test('npm view . select fields', function (t) { - process.chdir(t2dir) common.npm([ 'view', '.', @@ -132,7 +139,6 @@ test('npm view . select fields', function (t) { }) test('npm view .@', function (t) { - process.chdir(t2dir) common.npm([ 'view', '.@0.0.0', @@ -147,7 +153,6 @@ test('npm view .@', function (t) { }) test('npm view .@ version --json', function (t) { - process.chdir(t2dir) common.npm([ 'view', '.@0.0.0', @@ -163,7 +168,6 @@ test('npm view .@ version --json', function (t) { }) test('npm view . --json author name version', function (t) { - process.chdir(t2dir) common.npm([ 'view', '.', @@ -186,7 +190,6 @@ test('npm view . --json author name version', function (t) { }) test('npm view .@ --json author name version', function (t) { - process.chdir(t2dir) common.npm([ 'view', '.@0.0.0', @@ -376,13 +379,3 @@ test('npm view with valid but non existent package name', function (t) { t.end() }) }) - -test('cleanup', function (t) { - process.chdir(osenv.tmpdir()) - rimraf.sync(t1dir) - rimraf.sync(t2dir) - rimraf.sync(t3dir) - t.pass('cleaned up') - server.close() - t.end() -}) From 688cd97be94ca949719424ff69ff515a68c5caba Mon Sep 17 00:00:00 2001 From: Jason Etcovitch Date: Tue, 29 Oct 2019 13:35:08 -0400 Subject: [PATCH 02/19] use github actions for CI PR-URL: https://github.com/npm/cli/pull/272 Credit: @JasonEtco Close: #272 Reviewed-by: @ruyadorno --- .github/workflows/ci.yml | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000000..7c2c475e0b6a7 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,43 @@ +name: Node CI + +on: [push] + +jobs: + build: + strategy: + matrix: + node-version: [8.x, 10.x, 12.x] + os: [ubuntu-latest, windows-latest] + + runs-on: ${{ matrix.os }} + + steps: + # Checkout the npm/cli repo + - uses: actions/checkout@v1 + + # Installs the specific version of Node.js + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + # Run the installer script + - name: Install dependencies + run: node . install + + # Run the tests + - name: Run Tap tests + run: node . run tap -- "test/tap/*.js" -t600 -Rclassic -c + env: + DEPLOY_VERSION: testing + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_OPTIONAL_TOKEN }} + + # - name: Run sudo tests on Linux + # if: matrix.os == 'ubuntu-latest' + # run: sudo PATH=$PATH $(which node) . run tap -- "test/tap/*.js" --coverage --timeout 600 + + - name: Lint + run: npx standard + + - name: Validate licenses + run: node . run licenses From a37296b20ca3e19c2bbfa78fedcfe695e03fda69 Mon Sep 17 00:00:00 2001 From: Ruy Adorno Date: Thu, 31 Oct 2019 15:19:39 -0400 Subject: [PATCH 03/19] pacote@9.5.9 --- node_modules/pacote/CHANGELOG.md | 10 + node_modules/pacote/lib/fetchers/git.js | 2 +- node_modules/pacote/lib/finalize-manifest.js | 1 + .../pacote/node_modules/minipass/README.md | 490 +++++++++++++++++- .../pacote/node_modules/minipass/index.js | 218 +++++++- .../pacote/node_modules/minipass/package.json | 21 +- node_modules/pacote/package.json | 22 +- package-lock.json | 12 +- package.json | 2 +- 9 files changed, 718 insertions(+), 60 deletions(-) diff --git a/node_modules/pacote/CHANGELOG.md b/node_modules/pacote/CHANGELOG.md index 4ed92beb68213..6896c4739ce53 100644 --- a/node_modules/pacote/CHANGELOG.md +++ b/node_modules/pacote/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [9.5.9](https://github.com/npm/pacote/compare/v9.5.8...v9.5.9) (2019-10-29) + + +### Bug Fixes + +* include peerDependenciesMeta in manifest ([7a400d3](https://github.com/npm/pacote/commit/7a400d3)), closes [/github.com/npm/cli/pull/224#issuecomment-547666807](https://github.com//github.com/npm/cli/pull/224/issues/issuecomment-547666807) + + + ## [9.5.8](https://github.com/npm/pacote/compare/v9.5.7...v9.5.8) (2019-08-20) diff --git a/node_modules/pacote/lib/fetchers/git.js b/node_modules/pacote/lib/fetchers/git.js index a1579d1f94312..7913be8168791 100644 --- a/node_modules/pacote/lib/fetchers/git.js +++ b/node_modules/pacote/lib/fetchers/git.js @@ -166,7 +166,7 @@ function withTmp (opts, cb) { } } -// Only certain whitelisted hosted gits support shadow cloning +// Only certain whitelisted hosted gits support shallow cloning const SHALLOW_HOSTS = new Set(['github', 'gist', 'gitlab', 'bitbucket']) function cloneRepo (spec, repo, resolvedRef, rawRef, tmp, opts) { const ref = resolvedRef ? resolvedRef.ref : rawRef diff --git a/node_modules/pacote/lib/finalize-manifest.js b/node_modules/pacote/lib/finalize-manifest.js index f047517945192..d1d0f4e563eed 100644 --- a/node_modules/pacote/lib/finalize-manifest.js +++ b/node_modules/pacote/lib/finalize-manifest.js @@ -83,6 +83,7 @@ function Manifest (pkg, fromTarball, fullMetadata) { this.os = pkg.os || fromTarball.os this.dependencies = pkg.dependencies || {} this.optionalDependencies = pkg.optionalDependencies || {} + this.peerDependenciesMeta = pkg.peerDependenciesMeta || {} this.devDependencies = pkg.devDependencies || {} const bundled = ( pkg.bundledDependencies || diff --git a/node_modules/pacote/node_modules/minipass/README.md b/node_modules/pacote/node_modules/minipass/README.md index 7a83c59ffd709..c989beea0e6d9 100644 --- a/node_modules/pacote/node_modules/minipass/README.md +++ b/node_modules/pacote/node_modules/minipass/README.md @@ -24,25 +24,374 @@ If you set `objectMode: true` in the options, then whatever is written will be emitted. Otherwise, it'll do a minimal amount of Buffer copying to ensure proper Streams semantics when `read(n)` is called. +`objectMode` can also be set by doing `stream.objectMode = true`, or by +writing any non-string/non-buffer data. `objectMode` cannot be set to +false once it is set. + This is not a `through` or `through2` stream. It doesn't transform the data, it just passes it right through. If you want to transform the data, extend the class, and override the `write()` method. Once you're done transforming the data however you want, call `super.write()` with the transform output. -For an example of a stream that extends MiniPass to provide transform -capabilities, check out [minizlib](http://npm.im/minizlib). +For some examples of streams that extend Minipass in various ways, check +out: + +- [minizlib](http://npm.im/minizlib) +- [fs-minipass](http://npm.im/fs-minipass) +- [tar](http://npm.im/tar) +- [minipass-collect](http://npm.im/minipass-collect) +- [minipass-flush](http://npm.im/minipass-flush) +- [minipass-pipeline](http://npm.im/minipass-pipeline) +- [tap](http://npm.im/tap) +- [tap-parser](http://npm.im/tap) +- [treport](http://npm.im/tap) + +## Differences from Node.js Streams + +There are several things that make Minipass streams different from (and in +some ways superior to) Node.js core streams. + +Please read these caveats if you are familiar with noode-core streams and +intend to use Minipass streams in your programs. + +### Timing + +Minipass streams are designed to support synchronous use-cases. Thus, data +is emitted as soon as it is available, always. It is buffered until read, +but no longer. Another way to look at it is that Minipass streams are +exactly as synchronous as the logic that writes into them. + +This can be surprising if your code relies on `PassThrough.write()` always +providing data on the next tick rather than the current one, or being able +to call `resume()` and not have the entire buffer disappear immediately. + +However, without this synchronicity guarantee, there would be no way for +Minipass to achieve the speeds it does, or support the synchronous use +cases that it does. Simply put, waiting takes time. + +This non-deferring approach makes Minipass streams much easier to reason +about, especially in the context of Promises and other flow-control +mechanisms. + +### No High/Low Water Marks + +Node.js core streams will optimistically fill up a buffer, returning `true` +on all writes until the limit is hit, even if the data has nowhere to go. +Then, they will not attempt to draw more data in until the buffer size dips +below a minimum value. + +Minipass streams are much simpler. The `write()` method will return `true` +if the data has somewhere to go (which is to say, given the timing +guarantees, that the data is already there by the time `write()` returns). + +If the data has nowhere to go, then `write()` returns false, and the data +sits in a buffer, to be drained out immediately as soon as anyone consumes +it. + +### Hazards of Buffering (or: Why Minipass Is So Fast) + +Since data written to a Minipass stream is immediately written all the way +through the pipeline, and `write()` always returns true/false based on +whether the data was fully flushed, backpressure is communicated +immediately to the upstream caller. This minimizes buffering. + +Consider this case: + +```js +const {PassThrough} = require('stream') +const p1 = new PassThrough({ highWaterMark: 1024 }) +const p2 = new PassThrough({ highWaterMark: 1024 }) +const p3 = new PassThrough({ highWaterMark: 1024 }) +const p4 = new PassThrough({ highWaterMark: 1024 }) + +p1.pipe(p2).pipe(p3).pipe(p4) +p4.on('data', () => console.log('made it through')) + +// this returns false and buffers, then writes to p2 on next tick (1) +// p2 returns false and buffers, pausing p1, then writes to p3 on next tick (2) +// p3 returns false and buffers, pausing p2, then writes to p4 on next tick (3) +// p4 returns false and buffers, pausing p3, then emits 'data' and 'drain' +// on next tick (4) +// p3 sees p4's 'drain' event, and calls resume(), emitting 'resume' and +// 'drain' on next tick (5) +// p2 sees p3's 'drain', calls resume(), emits 'resume' and 'drain' on next tick (6) +// p1 sees p2's 'drain', calls resume(), emits 'resume' and 'drain' on next +// tick (7) + +p1.write(Buffer.alloc(2048)) // returns false +``` + +Along the way, the data was buffered and deferred at each stage, and +multiple event deferrals happened, for an unblocked pipeline where it was +perfectly safe to write all the way through! + +Furthermore, setting a `highWaterMark` of `1024` might lead someone reading +the code to think an advisory maximum of 1KiB is being set for the +pipeline. However, the actual advisory buffering level is the _sum_ of +`highWaterMark` values, since each one has its own bucket. + +Consider the Minipass case: + +```js +const m1 = new Minipass() +const m2 = new Minipass() +const m3 = new Minipass() +const m4 = new Minipass() + +m1.pipe(m2).pipe(m3).pipe(m4) +m4.on('data', () => console.log('made it through')) + +// m1 is flowing, so it writes the data to m2 immediately +// m2 is flowing, so it writes the data to m3 immediately +// m3 is flowing, so it writes the data to m4 immediately +// m4 is flowing, so it fires the 'data' event immediately, returns true +// m4's write returned true, so m3 is still flowing, returns true +// m3's write returned true, so m2 is still flowing, returns true +// m2's write returned true, so m1 is still flowing, returns true +// No event deferrals or buffering along the way! + +m1.write(Buffer.alloc(2048)) // returns true +``` + +It is extremely unlikely that you _don't_ want to buffer any data written, +or _ever_ buffer data that can be flushed all the way through. Neither +node-core streams nor Minipass ever fail to buffer written data, but +node-core streams do a lot of unnecessary buffering and pausing. + +As always, the faster implementation is the one that does less stuff and +waits less time to do it. + +### Immediately emit `end` for empty streams (when not paused) + +If a stream is not paused, and `end()` is called before writing any data +into it, then it will emit `end` immediately. + +If you have logic that occurs on the `end` event which you don't want to +potentially happen immediately (for example, closing file descriptors, +moving on to the next entry in an archive parse stream, etc.) then be sure +to call `stream.pause()` on creation, and then `stream.resume()` once you +are ready to respond to the `end` event. + +### Emit `end` When Asked + +One hazard of immediately emitting `'end'` is that you may not yet have had +a chance to add a listener. In order to avoid this hazard, Minipass +streams safely re-emit the `'end'` event if a new listener is added after +`'end'` has been emitted. + +Ie, if you do `stream.on('end', someFunction)`, and the stream has already +emitted `end`, then it will call the handler right away. (You can think of +this somewhat like attaching a new `.then(fn)` to a previously-resolved +Promise.) + +To prevent calling handlers multiple times who would not expect multiple +ends to occur, all listeners are removed from the `'end'` event whenever it +is emitted. + +### Impact of "immediate flow" on Tee-streams + +A "tee stream" is a stream piping to multiple destinations: + +```js +const tee = new Minipass() +t.pipe(dest1) +t.pipe(dest2) +t.write('foo') // goes to both destinations +``` + +Since Minipass streams _immediately_ process any pending data through the +pipeline when a new pipe destination is added, this can have surprising +effects, especially when a stream comes in from some other function and may +or may not have data in its buffer. + +```js +// WARNING! WILL LOSE DATA! +const src = new Minipass() +src.write('foo') +src.pipe(dest1) // 'foo' chunk flows to dest1 immediately, and is gone +src.pipe(dest2) // gets nothing! +``` + +The solution is to create a dedicated tee-stream junction that pipes to +both locations, and then pipe to _that_ instead. + +```js +// Safe example: tee to both places +const src = new Minipass() +src.write('foo') +const tee = new Minipass() +tee.pipe(dest1) +tee.pipe(dest2) +stream.pipe(tee) // tee gets 'foo', pipes to both locations +``` + +The same caveat applies to `on('data')` event listeners. The first one +added will _immediately_ receive all of the data, leaving nothing for the +second: + +```js +// WARNING! WILL LOSE DATA! +const src = new Minipass() +src.write('foo') +src.on('data', handler1) // receives 'foo' right away +src.on('data', handler2) // nothing to see here! +``` + +Using a dedicated tee-stream can be used in this case as well: + +```js +// Safe example: tee to both data handlers +const src = new Minipass() +src.write('foo') +const tee = new Minipass() +tee.on('data', handler1) +tee.on('data', handler2) +src.pipe(tee) +``` ## USAGE +It's a stream! Use it like a stream and it'll most likely do what you want. + ```js -const MiniPass = require('minipass') -const mp = new MiniPass(options) // optional: { encoding } +const Minipass = require('minipass') +const mp = new Minipass(options) // optional: { encoding, objectMode } mp.write('foo') mp.pipe(someOtherStream) mp.end('bar') ``` +### OPTIONS + +* `encoding` How would you like the data coming _out_ of the stream to be + encoded? Accepts any values that can be passed to `Buffer.toString()`. +* `objectMode` Emit data exactly as it comes in. This will be flipped on + by default if you write() something other than a string or Buffer at any + point. Setting `objectMode: true` will prevent setting any encoding + value. + +### API + +Implements the user-facing portions of Node.js's `Readable` and `Writable` +streams. + +### Methods + +* `write(chunk, [encoding], [callback])` - Put data in. (Note that, in the + base Minipass class, the same data will come out.) Returns `false` if + the stream will buffer the next write, or true if it's still in + "flowing" mode. +* `end([chunk, [encoding]], [callback])` - Signal that you have no more + data to write. This will queue an `end` event to be fired when all the + data has been consumed. +* `setEncoding(encoding)` - Set the encoding for data coming of the + stream. This can only be done once. +* `pause()` - No more data for a while, please. This also prevents `end` + from being emitted for empty streams until the stream is resumed. +* `resume()` - Resume the stream. If there's data in the buffer, it is + all discarded. Any buffered events are immediately emitted. +* `pipe(dest)` - Send all output to the stream provided. There is no way + to unpipe. When data is emitted, it is immediately written to any and + all pipe destinations. +* `on(ev, fn)`, `emit(ev, fn)` - Minipass streams are EventEmitters. + Some events are given special treatment, however. (See below under + "events".) +* `promise()` - Returns a Promise that resolves when the stream emits + `end`, or rejects if the stream emits `error`. +* `collect()` - Return a Promise that resolves on `end` with an array + containing each chunk of data that was emitted, or rejects if the + stream emits `error`. Note that this consumes the stream data. +* `concat()` - Same as `collect()`, but concatenates the data into a + single Buffer object. Will reject the returned promise if the stream is + in objectMode, or if it goes into objectMode by the end of the data. +* `read(n)` - Consume `n` bytes of data out of the buffer. If `n` is not + provided, then consume all of it. If `n` bytes are not available, then + it returns null. **Note** consuming streams in this way is less + efficient, and can lead to unnecessary Buffer copying. +* `destroy([er])` - Destroy the stream. If an error is provided, then an + `'error'` event is emitted. If the stream has a `close()` method, and + has not emitted a `'close'` event yet, then `stream.close()` will be + called. Any Promises returned by `.promise()`, `.collect()` or + `.concat()` will be rejected. After being destroyed, writing to the + stream will emit an error. No more data will be emitted if the stream is + destroyed, even if it was previously buffered. + +### Properties + +* `bufferLength` Read-only. Total number of bytes buffered, or in the case + of objectMode, the total number of objects. +* `encoding` The encoding that has been set. (Setting this is equivalent + to calling `setEncoding(enc)` and has the same prohibition against + setting multiple times.) +* `flowing` Read-only. Boolean indicating whether a chunk written to the + stream will be immediately emitted. +* `emittedEnd` Read-only. Boolean indicating whether the end-ish events + (ie, `end`, `prefinish`, `finish`) have been emitted. Note that + listening on any end-ish event will immediateyl re-emit it if it has + already been emitted. +* `writable` Whether the stream is writable. Default `true`. Set to + `false` when `end()` +* `readable` Whether the stream is readable. Default `true`. +* `buffer` A [yallist](http://npm.im/yallist) linked list of chunks written + to the stream that have not yet been emitted. (It's probably a bad idea + to mess with this.) +* `pipes` A [yallist](http://npm.im/yallist) linked list of streams that + this stream is piping into. (It's probably a bad idea to mess with + this.) +* `destroyed` A getter that indicates whether the stream was destroyed. +* `paused` True if the stream has been explicitly paused, otherwise false. +* `objectMode` Indicates whether the stream is in `objectMode`. Once set + to `true`, it cannot be set to `false`. + +### Events + +* `data` Emitted when there's data to read. Argument is the data to read. + This is never emitted while not flowing. If a listener is attached, that + will resume the stream. +* `end` Emitted when there's no more data to read. This will be emitted + immediately for empty streams when `end()` is called. If a listener is + attached, and `end` was already emitted, then it will be emitted again. + All listeners are removed when `end` is emitted. +* `prefinish` An end-ish event that follows the same logic as `end` and is + emitted in the same conditions where `end` is emitted. Emitted after + `'end'`. +* `finish` An end-ish event that follows the same logic as `end` and is + emitted in the same conditions where `end` is emitted. Emitted after + `'prefinish'`. +* `close` An indication that an underlying resource has been released. + Minipass does not emit this event, but will defer it until after `end` + has been emitted, since it throws off some stream libraries otherwise. +* `drain` Emitted when the internal buffer empties, and it is again + suitable to `write()` into the stream. +* `readable` Emitted when data is buffered and ready to be read by a + consumer. +* `resume` Emitted when stream changes state from buffering to flowing + mode. (Ie, when `resume` is called, `pipe` is called, or a `data` event + listener is added.) + +### Static Methods + +* `Minipass.isStream(stream)` Returns `true` if the argument is a stream, + and false otherwise. To be considered a stream, the object must be + either an instance of Minipass, or an EventEmitter that has either a + `pipe()` method, or both `write()` and `end()` methods. (Pretty much any + stream in node-land will return `true` for this.) + +## EXAMPLES + +Here are some examples of things you can do with Minipass streams. + +### simple "are you done yet" promise + +```js +mp.promise().then(() => { + // stream is finished +}, er => { + // stream emitted an error +}) +``` + ### collecting ```js @@ -57,6 +406,19 @@ mp.collect().then(all => { }) ``` +### collecting into a single blob + +This is a bit slower because it concatenates the data into one chunk for +you, but if you're going to do it yourself anyway, it's convenient this +way: + +```js +mp.concat().then(onebigchunk => { + // onebigchunk is a string if the stream + // had an encoding set, or a buffer otherwise. +}) +``` + ### iteration You can iterate over streams synchronously or asynchronously in @@ -122,3 +484,123 @@ async function consume () { consume().then(res => console.log(res)) // logs `foo\n` 5 times, and then `ok` ``` + +### subclass that `console.log()`s everything written into it + +```js +class Logger extends Minipass { + write (chunk, encoding, callback) { + console.log('WRITE', chunk, encoding) + return super.write(chunk, encoding, callback) + } + end (chunk, encoding, callback) { + console.log('END', chunk, encoding) + return super.end(chunk, encoding, callback) + } +} + +someSource.pipe(new Logger()).pipe(someDest) +``` + +### same thing, but using an inline anonymous class + +```js +// js classes are fun +someSource + .pipe(new (class extends Minipass { + emit (ev, ...data) { + // let's also log events, because debugging some weird thing + console.log('EMIT', ev) + return super.emit(ev, ...data) + } + write (chunk, encoding, callback) { + console.log('WRITE', chunk, encoding) + return super.write(chunk, encoding, callback) + } + end (chunk, encoding, callback) { + console.log('END', chunk, encoding) + return super.end(chunk, encoding, callback) + } + })) + .pipe(someDest) +``` + +### subclass that defers 'end' for some reason + +```js +class SlowEnd extends Minipass { + emit (ev, ...args) { + if (ev === 'end') { + console.log('going to end, hold on a sec') + setTimeout(() => { + console.log('ok, ready to end now') + super.emit('end', ...args) + }, 100) + } else { + return super.emit(ev, ...args) + } + } +} +``` + +### transform that creates newline-delimited JSON + +```js +class NDJSONEncode extends Minipass { + write (obj, cb) { + try { + // JSON.stringify can throw, emit an error on that + return super.write(JSON.stringify(obj) + '\n', 'utf8', cb) + } catch (er) { + this.emit('error', er) + } + } + end (obj, cb) { + if (typeof obj === 'function') { + cb = obj + obj = undefined + } + if (obj !== undefined) { + this.write(obj) + } + return super.end(cb) + } +} +``` + +### transform that parses newline-delimited JSON + +```js +class NDJSONDecode extends Minipass { + constructor (options) { + // always be in object mode, as far as Minipass is concerned + super({ objectMode: true }) + this._jsonBuffer = '' + } + write (chunk, encoding, cb) { + if (typeof chunk === 'string' && + typeof encoding === 'string' && + encoding !== 'utf8') { + chunk = Buffer.from(chunk, encoding).toString() + } else if (Buffer.isBuffer(chunk)) + chunk = chunk.toString() + } + if (typeof encoding === 'function') { + cb = encoding + } + const jsonData = (this._jsonBuffer + chunk).split('\n') + this._jsonBuffer = jsonData.pop() + for (let i = 0; i < jsonData.length; i++) { + let parsed + try { + super.write(parsed) + } catch (er) { + this.emit('error', er) + continue + } + } + if (cb) + cb() + } +} +``` diff --git a/node_modules/pacote/node_modules/minipass/index.js b/node_modules/pacote/node_modules/minipass/index.js index de472c36e7684..c072352d448a9 100644 --- a/node_modules/pacote/node_modules/minipass/index.js +++ b/node_modules/pacote/node_modules/minipass/index.js @@ -1,39 +1,62 @@ 'use strict' const EE = require('events') const Yallist = require('yallist') +const SD = require('string_decoder').StringDecoder + const EOF = Symbol('EOF') const MAYBE_EMIT_END = Symbol('maybeEmitEnd') const EMITTED_END = Symbol('emittedEnd') +const EMITTING_END = Symbol('emittingEnd') const CLOSED = Symbol('closed') const READ = Symbol('read') const FLUSH = Symbol('flush') -const doIter = process.env._MP_NO_ITERATOR_SYMBOLS_ !== '1' -const ASYNCITERATOR = doIter && Symbol.asyncIterator || Symbol('asyncIterator not implemented') -const ITERATOR = doIter && Symbol.iterator || Symbol('iterator not implemented') const FLUSHCHUNK = Symbol('flushChunk') -const SD = require('string_decoder').StringDecoder const ENCODING = Symbol('encoding') const DECODER = Symbol('decoder') const FLOWING = Symbol('flowing') +const PAUSED = Symbol('paused') const RESUME = Symbol('resume') const BUFFERLENGTH = Symbol('bufferLength') const BUFFERPUSH = Symbol('bufferPush') const BUFFERSHIFT = Symbol('bufferShift') const OBJECTMODE = Symbol('objectMode') +const DESTROYED = Symbol('destroyed') + +// TODO remove when Node v8 support drops +const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1' +const ASYNCITERATOR = doIter && Symbol.asyncIterator + || Symbol('asyncIterator not implemented') +const ITERATOR = doIter && Symbol.iterator + || Symbol('iterator not implemented') // Buffer in node 4.x < 4.5.0 doesn't have working Buffer.from // or Buffer.alloc, and Buffer in node 10 deprecated the ctor. // .M, this is fine .\^/M.. -let B = Buffer -/* istanbul ignore next */ -if (!B.alloc) { - B = require('safe-buffer').Buffer -} - -module.exports = class MiniPass extends EE { +const B = Buffer.alloc ? Buffer + : /* istanbul ignore next */ require('safe-buffer').Buffer + +// events that mean 'the stream is over' +// these are treated specially, and re-emitted +// if they are listened for after emitting. +const isEndish = ev => + ev === 'end' || + ev === 'finish' || + ev === 'prefinish' + +const isArrayBuffer = b => b instanceof ArrayBuffer || + typeof b === 'object' && + b.constructor && + b.constructor.name === 'ArrayBuffer' && + b.byteLength >= 0 + +const isArrayBufferView = b => !B.isBuffer(b) && ArrayBuffer.isView(b) + +module.exports = class Minipass extends EE { constructor (options) { super() this[FLOWING] = false + // whether we're explicitly paused + this[PAUSED] = false this.pipes = new Yallist() this.buffer = new Yallist() this[OBJECTMODE] = options && options.objectMode || false @@ -46,10 +69,12 @@ module.exports = class MiniPass extends EE { this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null this[EOF] = false this[EMITTED_END] = false + this[EMITTING_END] = false this[CLOSED] = false this.writable = true this.readable = true this[BUFFERLENGTH] = 0 + this[DESTROYED] = false } get bufferLength () { return this[BUFFERLENGTH] } @@ -76,16 +101,52 @@ module.exports = class MiniPass extends EE { this.encoding = enc } + get objectMode () { return this[OBJECTMODE] } + set objectMode (ॐ ) { this[OBJECTMODE] = this[OBJECTMODE] || !!ॐ } + write (chunk, encoding, cb) { if (this[EOF]) throw new Error('write after end') + if (this[DESTROYED]) { + this.emit('error', Object.assign( + new Error('Cannot call write after a stream was destroyed'), + { code: 'ERR_STREAM_DESTROYED' } + )) + return true + } + if (typeof encoding === 'function') cb = encoding, encoding = 'utf8' if (!encoding) encoding = 'utf8' + // convert array buffers and typed array views into buffers + // at some point in the future, we may want to do the opposite! + // leave strings and buffers as-is + // anything else switches us into object mode + if (!this[OBJECTMODE] && !B.isBuffer(chunk)) { + if (isArrayBufferView(chunk)) + chunk = B.from(chunk.buffer, chunk.byteOffset, chunk.byteLength) + else if (isArrayBuffer(chunk)) + chunk = B.from(chunk) + else if (typeof chunk !== 'string') + // use the setter so we throw if we have encoding set + this.objectMode = true + } + + // this ensures at this point that the chunk is a buffer or string + // don't buffer it up or send it to the decoder + if (!this.objectMode && !chunk.length) { + const ret = this.flowing + if (this[BUFFERLENGTH] !== 0) + this.emit('readable') + if (cb) + cb() + return ret + } + // fast-path writing strings of same encoding to a stream with // an empty buffer, skipping the buffer/decoder dance if (typeof chunk === 'string' && !this[OBJECTMODE] && @@ -102,13 +163,17 @@ module.exports = class MiniPass extends EE { ? (this.emit('data', chunk), this.flowing) : (this[BUFFERPUSH](chunk), false) } finally { - this.emit('readable') + if (this[BUFFERLENGTH] !== 0) + this.emit('readable') if (cb) cb() } } read (n) { + if (this[DESTROYED]) + return null + try { if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) return null @@ -161,12 +226,22 @@ module.exports = class MiniPass extends EE { this.once('end', cb) this[EOF] = true this.writable = false - if (this.flowing) + + // if we haven't written anything, then go ahead and emit, + // even if we're not reading. + // we'll re-emit if a new 'end' listener is added anyway. + // This makes MP more suitable to write-only use cases. + if (this.flowing || !this[PAUSED]) this[MAYBE_EMIT_END]() + return this } // don't let the internal resume be overwritten [RESUME] () { + if (this[DESTROYED]) + return + + this[PAUSED] = false this[FLOWING] = true this.emit('resume') if (this.buffer.length) @@ -183,12 +258,21 @@ module.exports = class MiniPass extends EE { pause () { this[FLOWING] = false + this[PAUSED] = true + } + + get destroyed () { + return this[DESTROYED] } get flowing () { return this[FLOWING] } + get paused () { + return this[PAUSED] + } + [BUFFERPUSH] (chunk) { if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1 @@ -219,13 +303,24 @@ module.exports = class MiniPass extends EE { } pipe (dest, opts) { + if (this[DESTROYED]) + return + + const ended = this[EMITTED_END] + opts = opts || {} if (dest === process.stdout || dest === process.stderr) - (opts = opts || {}).end = false + opts.end = false + else + opts.end = opts.end !== false + const p = { dest: dest, opts: opts, ondrain: _ => this[RESUME]() } this.pipes.push(p) dest.on('drain', p.ondrain) this[RESUME]() + // piping an ended stream ends immediately + if (ended && p.opts.end) + p.dest.end() return dest } @@ -239,9 +334,9 @@ module.exports = class MiniPass extends EE { } finally { if (ev === 'data' && !this.pipes.length && !this.flowing) this[RESUME]() - else if (ev === 'end' && this[EMITTED_END]) { - super.emit('end') - this.removeAllListeners('end') + else if (isEndish(ev) && this[EMITTED_END]) { + super.emit(ev) + this.removeAllListeners(ev) } } } @@ -251,23 +346,34 @@ module.exports = class MiniPass extends EE { } [MAYBE_EMIT_END] () { - if (!this[EMITTED_END] && this.buffer.length === 0 && this[EOF]) { + if (!this[EMITTING_END] && + !this[EMITTED_END] && + !this[DESTROYED] && + this.buffer.length === 0 && + this[EOF]) { + this[EMITTING_END] = true this.emit('end') this.emit('prefinish') this.emit('finish') if (this[CLOSED]) this.emit('close') + this[EMITTING_END] = false } } emit (ev, data) { - if (ev === 'data') { + // error and close are only events allowed after calling destroy() + if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED]) + return + else if (ev === 'data') { if (!data) return if (this.pipes.length) - this.pipes.forEach(p => p.dest.write(data) || this.pause()) + this.pipes.forEach(p => + p.dest.write(data) === false && this.pause()) } else if (ev === 'end') { + // only actual end gets this treatment if (this[EMITTED_END] === true) return @@ -284,16 +390,17 @@ module.exports = class MiniPass extends EE { this.pipes.forEach(p => { p.dest.removeListener('drain', p.ondrain) - if (!p.opts || p.opts.end !== false) + if (p.opts.end) p.dest.end() }) } else if (ev === 'close') { this[CLOSED] = true // don't emit close before 'end' and 'finish' - if (!this[EMITTED_END]) + if (!this[EMITTED_END] && !this[DESTROYED]) return } + // TODO: replace with a spread operator when Node v4 support drops const args = new Array(arguments.length) args[0] = ev args[1] = data @@ -306,20 +413,40 @@ module.exports = class MiniPass extends EE { try { return super.emit.apply(this, args) } finally { - if (ev !== 'end') + if (!isEndish(ev)) this[MAYBE_EMIT_END]() else - this.removeAllListeners('end') + this.removeAllListeners(ev) } } // const all = await stream.collect() collect () { + const buf = [] + buf.dataLength = 0 + this.on('data', c => { + buf.push(c) + buf.dataLength += c.length + }) + return this.promise().then(() => buf) + } + + // const data = await stream.concat() + concat () { + return this[OBJECTMODE] + ? Promise.reject(new Error('cannot concat in objectMode')) + : this.collect().then(buf => + this[OBJECTMODE] + ? Promise.reject(new Error('cannot concat in objectMode')) + : this[ENCODING] ? buf.join('') : B.concat(buf, buf.dataLength)) + } + + // stream.promise().then(() => done, er => emitted error) + promise () { return new Promise((resolve, reject) => { - const buf = [] - this.on('data', c => buf.push(c)) - this.on('end', () => resolve(buf)) - this.on('error', reject) + this.on(DESTROYED, () => reject(new Error('stream destroyed'))) + this.on('end', () => resolve()) + this.on('error', er => reject(er)) }) } @@ -351,9 +478,11 @@ module.exports = class MiniPass extends EE { this.removeListener('data', ondata) resolve({ done: true }) } + const ondestroy = () => onerr(new Error('stream destroyed')) return new Promise((res, rej) => { reject = rej resolve = res + this.once(DESTROYED, ondestroy) this.once('error', onerr) this.once('end', onend) this.once('data', ondata) @@ -372,4 +501,37 @@ module.exports = class MiniPass extends EE { } return { next } } + + destroy (er) { + if (this[DESTROYED]) { + if (er) + this.emit('error', er) + else + this.emit(DESTROYED) + return this + } + + this[DESTROYED] = true + + // throw away all buffered data, it's never coming out + this.buffer = new Yallist() + this[BUFFERLENGTH] = 0 + + if (typeof this.close === 'function' && !this[CLOSED]) + this.close() + + if (er) + this.emit('error', er) + else // if no error to emit, still reject pending promises + this.emit(DESTROYED) + + return this + } + + static isStream (s) { + return !!s && (s instanceof Minipass || s instanceof EE && ( + typeof s.pipe === 'function' || // readable + (typeof s.write === 'function' && typeof s.end === 'function') // writable + )) + } } diff --git a/node_modules/pacote/node_modules/minipass/package.json b/node_modules/pacote/node_modules/minipass/package.json index d2adc87994780..59adc63528e77 100644 --- a/node_modules/pacote/node_modules/minipass/package.json +++ b/node_modules/pacote/node_modules/minipass/package.json @@ -1,8 +1,8 @@ { "_from": "minipass@^2.3.5", - "_id": "minipass@2.3.5", + "_id": "minipass@2.9.0", "_inBundle": false, - "_integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "_integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "_location": "/pacote/minipass", "_phantomChildren": {}, "_requested": { @@ -18,10 +18,10 @@ "_requiredBy": [ "/pacote" ], - "_resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "_shasum": "cacebe492022497f656b0f0f51e2682a9ed2d848", + "_resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "_shasum": "e713762e7d3e32fed803115cf93e04bca9fcc9a6", "_spec": "minipass@^2.3.5", - "_where": "/Users/zkat/Documents/code/work/npm/node_modules/pacote", + "_where": "/Users/ruyadorno/Documents/workspace/cli/node_modules/pacote", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", @@ -39,7 +39,7 @@ "description": "minimal implementation of a PassThrough stream", "devDependencies": { "end-of-stream": "^1.4.0", - "tap": "^12.0.1", + "tap": "^14.6.5", "through2": "^2.0.3" }, "files": [ @@ -58,10 +58,13 @@ "url": "git+https://github.com/isaacs/minipass.git" }, "scripts": { - "postpublish": "git push origin --all; git push origin --tags", + "postpublish": "git push origin --follow-tags", "postversion": "npm publish", "preversion": "npm test", - "test": "tap test/*.js --100" + "test": "tap" }, - "version": "2.3.5" + "tap": { + "check-coverage": true + }, + "version": "2.9.0" } diff --git a/node_modules/pacote/package.json b/node_modules/pacote/package.json index 58826586a3520..a60ed75270353 100644 --- a/node_modules/pacote/package.json +++ b/node_modules/pacote/package.json @@ -1,8 +1,8 @@ { - "_from": "pacote@9.5.8", - "_id": "pacote@9.5.8", + "_from": "pacote@9.5.9", + "_id": "pacote@9.5.9", "_inBundle": false, - "_integrity": "sha512-0Tl8Oi/K0Lo4MZmH0/6IsT3gpGf9eEAznLXEQPKgPq7FscnbUOyopnVpwXlnQdIbCUaojWy1Wd7VMyqfVsRrIw==", + "_integrity": "sha512-S1nYW9ly+3btn3VmwRAk2LG3TEh8mkrFdY+psbnHSk8oPODbZ28uG0Z0d3yI0EpqcpLR6BukoVRf3H4IbGCkPQ==", "_location": "/pacote", "_phantomChildren": { "safe-buffer": "5.1.2", @@ -11,12 +11,12 @@ "_requested": { "type": "version", "registry": true, - "raw": "pacote@9.5.8", + "raw": "pacote@9.5.9", "name": "pacote", "escapedName": "pacote", - "rawSpec": "9.5.8", + "rawSpec": "9.5.9", "saveSpec": null, - "fetchSpec": "9.5.8" + "fetchSpec": "9.5.9" }, "_requiredBy": [ "#USER", @@ -24,10 +24,10 @@ "/libcipm", "/libnpm" ], - "_resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.8.tgz", - "_shasum": "23480efdc4fa74515855c9ecf39cf64078f99786", - "_spec": "pacote@9.5.8", - "_where": "/Users/isaacs/dev/npm/cli", + "_resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.9.tgz", + "_shasum": "fa3a08629c9390b2b99769c55b2cc137e1a24df3", + "_spec": "pacote@9.5.9", + "_where": "/Users/ruyadorno/Documents/workspace/cli", "author": { "name": "Kat Marchán", "email": "kzm@sykosomatic.org" @@ -119,5 +119,5 @@ "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" }, - "version": "9.5.8" + "version": "9.5.9" } diff --git a/package-lock.json b/package-lock.json index 92e0c660ba44b..125f37f22e6c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4414,9 +4414,9 @@ } }, "pacote": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.8.tgz", - "integrity": "sha512-0Tl8Oi/K0Lo4MZmH0/6IsT3gpGf9eEAznLXEQPKgPq7FscnbUOyopnVpwXlnQdIbCUaojWy1Wd7VMyqfVsRrIw==", + "version": "9.5.9", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.9.tgz", + "integrity": "sha512-S1nYW9ly+3btn3VmwRAk2LG3TEh8mkrFdY+psbnHSk8oPODbZ28uG0Z0d3yI0EpqcpLR6BukoVRf3H4IbGCkPQ==", "requires": { "bluebird": "^3.5.3", "cacache": "^12.0.2", @@ -4450,9 +4450,9 @@ }, "dependencies": { "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" diff --git a/package.json b/package.json index d051bfca9ba65..8f7add5b84b5f 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "once": "~1.4.0", "opener": "^1.5.1", "osenv": "^0.1.5", - "pacote": "^9.5.8", + "pacote": "^9.5.9", "path-is-inside": "~1.0.2", "promise-inflight": "~1.0.1", "qrcode-terminal": "^0.12.0", From 21fc17af6a27c1457d6608b0583fd6e7c3813dc5 Mon Sep 17 00:00:00 2001 From: Ruy Adorno Date: Thu, 31 Oct 2019 15:32:50 -0400 Subject: [PATCH 04/19] docs: CHANGELOG updates for 6.13.0 --- CHANGELOG.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea7bfdb3a9843..1b7380a5fc37c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## 6.13.0 (2019-11-05) + +* [`9a2d8af84`](https://github.com/npm/cli/commit/9a2d8af84f7328f13d8f578cf4b150b9d5f09517) + [#240](https://github.com/npm/cli/pull/240) + Clean up some test flakiness and inconsistency + ([@isaacs](https://github.com/isaacs)) +* [`688cd97be`](https://github.com/npm/cli/commit/688cd97be94ca949719424ff69ff515a68c5caba) + [#272](https://github.com/npm/cli/pull/272) + use github actions for CI + ([@JasonEtco](https://github.com/JasonEtco)) + +### DEPENDENCIES + +* [`a37296b20`](https://github.com/npm/cli/commit/a37296b20ca3e19c2bbfa78fedcfe695e03fda69) + `pacote@9.5.9` + ## 6.12.1 (2019-10-29) ### BUG FIXES From ae4c74d04f820a0255a92bdfe77ecf97af134fae Mon Sep 17 00:00:00 2001 From: claudiahdz Date: Tue, 22 Oct 2019 17:51:20 +0300 Subject: [PATCH 05/19] docs: migrate existing docs to gatsby - chore(docs): remove html from docs build - feat(docs): migrate new Gatsby site to cli/docs - chore(docs): fix docs url path - chore(docs): add new build doc step - chore(docs): add static linking - chore(docs): add npm favicon - chore(docs): update files for tests - chore(docs): make relative paths absolute - chore(docs): fix routing on docs dependant tests - chore(docs): add prepublishOnly docs building step - chore(docs): add docs/public to .gitignore - chore(docs): rename dot json markdown files with hyphen names - chore(docs): clean package.json - chore(docs): highlight scripts in list - chore(docs): add strong styles - chore(docs): fix .json links on markdown - Added copy to the features page - Added an install page (copied from existing online docs) - Added a FeatureLink component to components/links.js - feat(docs): replace docs sh script with node - chore(docs): fix docs building process - chore(docs): docs folder cleanup PR-URL: https://github.com/npm/cli/pull/274 Credit: @claudiahdz Close: #274 Reviewed-by: @ruyadorno --- .gitignore | 4 +- Makefile | 125 +- doc/cli/npm-bin.md | 19 - doc/cli/npm-bugs.md | 43 - doc/cli/npm-build.md | 25 - doc/cli/npm-config.md | 73 - doc/cli/npm-docs.md | 44 - doc/cli/npm-explore.md | 39 - doc/cli/npm-install-ci-test.md | 16 - doc/cli/npm-install-test.md | 25 - doc/cli/npm-ping.md | 24 - doc/cli/npm-prefix.md | 24 - doc/cli/npm-rebuild.md | 19 - doc/cli/npm-root.md | 19 - doc/cli/npm-shrinkwrap.md | 25 - doc/cli/npm-star.md | 22 - doc/cli/npm-stars.md | 21 - doc/cli/npm-start.md | 24 - doc/cli/npm-stop.md | 18 - doc/cli/npm-test.md | 20 - doc/cli/npm-uninstall.md | 53 - doc/cli/npm-whoami.md | 17 - doc/spec/file-specifiers.md | 151 - doc/spec/package-lock.md | 294 - docs/LICENSE | 22 + html/favicon.ico => docs/content/.DS_Store | Bin 7094 -> 6148 bytes .../content/cli-commands}/npm-access.md | 47 +- .../content/cli-commands}/npm-adduser.md | 56 +- .../content/cli-commands}/npm-audit.md | 61 +- docs/content/cli-commands/npm-bin.md | 26 + docs/content/cli-commands/npm-bugs.md | 50 + docs/content/cli-commands/npm-build.md | 34 + .../content/cli-commands}/npm-bundle.md | 17 +- .../content/cli-commands}/npm-cache.md | 54 +- .../content/cli-commands}/npm-ci.md | 34 +- .../content/cli-commands}/npm-completion.md | 30 +- docs/content/cli-commands/npm-config.md | 85 + .../content/cli-commands}/npm-dedupe.md | 54 +- .../content/cli-commands}/npm-deprecate.md | 28 +- .../content/cli-commands}/npm-dist-tag.md | 56 +- docs/content/cli-commands/npm-docs.md | 53 + .../content/cli-commands}/npm-doctor.md | 41 +- .../content/cli-commands}/npm-edit.md | 38 +- docs/content/cli-commands/npm-explore.md | 50 + .../content/cli-commands}/npm-help-search.md | 29 +- .../content/cli-commands}/npm-help.md | 43 +- .../content/cli-commands}/npm-hook.md | 43 +- .../content/cli-commands}/npm-init.md | 42 +- .../cli-commands/npm-install-ci-test.md | 26 + docs/content/cli-commands/npm-install-test.md | 35 + .../content/cli-commands}/npm-install.md | 239 +- .../content/cli-commands}/npm-link.md | 62 +- .../content/cli-commands}/npm-logout.md | 43 +- .../content/cli-commands}/npm-ls.md | 64 +- .../content/cli-commands}/npm-org.md | 45 +- .../content/cli-commands}/npm-outdated.md | 45 +- .../content/cli-commands}/npm-owner.md | 34 +- .../content/cli-commands}/npm-pack.md | 30 +- docs/content/cli-commands/npm-ping.md | 33 + docs/content/cli-commands/npm-prefix.md | 32 + .../content/cli-commands}/npm-profile.md | 34 +- .../content/cli-commands}/npm-prune.md | 26 +- .../content/cli-commands}/npm-publish.md | 51 +- docs/content/cli-commands/npm-rebuild.md | 28 + .../content/cli-commands}/npm-repo.md | 29 +- .../content/cli-commands}/npm-restart.md | 35 +- docs/content/cli-commands/npm-root.md | 26 + .../content/cli-commands}/npm-run-script.md | 47 +- .../content/cli-commands}/npm-search.md | 50 +- docs/content/cli-commands/npm-shrinkwrap.md | 34 + docs/content/cli-commands/npm-star.md | 31 + docs/content/cli-commands/npm-stars.md | 29 + docs/content/cli-commands/npm-start.md | 33 + docs/content/cli-commands/npm-stop.md | 27 + .../content/cli-commands}/npm-team.md | 37 +- docs/content/cli-commands/npm-test.md | 29 + .../content/cli-commands}/npm-token.md | 27 +- docs/content/cli-commands/npm-uninstall.md | 64 + .../content/cli-commands}/npm-unpublish.md | 35 +- .../content/cli-commands}/npm-update.md | 55 +- .../content/cli-commands}/npm-version.md | 69 +- .../content/cli-commands}/npm-view.md | 78 +- docs/content/cli-commands/npm-whoami.md | 24 + {doc/cli => docs/content/cli-commands}/npm.md | 62 +- .../content/configuring-npm/folders.md | 113 +- docs/content/configuring-npm/install.md | 66 + .../content/configuring-npm}/npmrc.md | 55 +- .../content/configuring-npm/package-json.md | 522 +- .../configuring-npm/package-lock-json.md | 57 +- .../content/configuring-npm/package-locks.md | 131 +- .../configuring-npm/shrinkwrap-json.md | 27 +- .../content/using-npm/coding-style.md | 134 +- .../content/using-npm/config.md | 353 +- .../content/using-npm/developers.md | 91 +- .../content/using-npm/disputes.md | 31 +- .../content/using-npm/orgs.md | 49 +- .../content/using-npm/registry.md | 45 +- .../content/using-npm/removal.md | 43 +- .../content/using-npm/scope.md | 64 +- .../content/using-npm/scripts.md | 147 +- .../misc => docs/content/using-npm}/semver.md | 0 docs/gatsby-browser.js | 10 + docs/gatsby-config.js | 88 + docs/gatsby-node.js | 43 + docs/package-lock.json | 17568 ++++++++++++++++ docs/package.json | 44 + docs/src/components/Accordion.js | 57 + docs/src/components/Button.js | 22 + docs/src/components/DocLinks.js | 74 + docs/src/components/FoundTypo.js | 23 + docs/src/components/MobileSidebar.js | 33 + docs/src/components/Sidebar.js | 30 + docs/src/components/home/DarkBlock.js | 35 + docs/src/components/home/FeatureCard.js | 39 + docs/src/components/home/Features.js | 83 + docs/src/components/home/Footer.js | 29 + docs/src/components/home/Terminal.js | 120 + docs/src/components/home/Windows.js | 73 + docs/src/components/home/cubes.js | 101 + docs/src/components/home/hero.js | 25 + docs/src/components/layout.js | 18 + docs/src/components/links.js | 50 + docs/src/components/navbar.js | 136 + docs/src/components/scripts.js | 23 + docs/src/components/seo.js | 88 + docs/src/images/background-boxes.svg | 2782 +++ docs/src/images/background-cubes.svg | 2767 +++ docs/src/images/background-rectangles.svg | 1 + docs/src/images/bracket.svg | 1 + docs/src/images/cli-logo.svg | 1 + docs/src/images/down-carrot.svg | 1 + docs/src/images/hamburger-close.svg | 1 + docs/src/images/hamburger.svg | 1 + docs/src/images/manager-icon.svg | 1 + docs/src/images/network-icon.svg | 1 + docs/src/images/npm-icon.png | Bin 0 -> 527 bytes docs/src/images/orange-cube.svg | 1 + docs/src/images/pink-gradient-cube.svg | 1 + docs/src/images/purple-cube.svg | 1 + docs/src/images/purple-gradient-cube.svg | 1 + docs/src/images/red-cube.svg | 1 + docs/src/images/right-shadow-box.svg | 2809 +++ docs/src/images/terminal-icon.svg | 1 + docs/src/images/test-icon.svg | 1 + docs/src/images/up-carrot.svg | 1 + docs/src/images/x.svg | 1 + docs/src/main.css | 167 + docs/src/pages/404.js | 19 + docs/src/pages/index.js | 23 + docs/src/templates/Page.js | 43 + docs/src/theme.js | 50 + html/docfoot.html | 13 - html/dochead.html | 11 - html/index.html | 93 - html/n-64.png | Bin 110 -> 0 bytes html/n-large.png | Bin 127 -> 0 bytes html/npm-16.png | Bin 88 -> 0 bytes html/npm-256-square.png | Bin 2940 -> 0 bytes html/npm-256w.png | Bin 2930 -> 0 bytes html/npm-64-square.png | Bin 2807 -> 0 bytes html/npm-fin.png | Bin 24623 -> 0 bytes html/npm-large-trans.png | Bin 59266 -> 0 bytes html/npm-large.png | Bin 210523 -> 0 bytes html/npm-logo-white-trans.png | Bin 85690 -> 0 bytes html/npm.png | Bin 636 -> 0 bytes html/static/style.css | 336 - html/static/toc.js | 29 - lib/help.js | 15 +- package.json | 2 +- scripts/doc-build.sh | 67 - scripts/docs-build.js | 31 + test/tap/config-meta.js | 10 +- test/tap/semver-doc.js | 2 +- 173 files changed, 30614 insertions(+), 3197 deletions(-) delete mode 100644 doc/cli/npm-bin.md delete mode 100644 doc/cli/npm-bugs.md delete mode 100644 doc/cli/npm-build.md delete mode 100644 doc/cli/npm-config.md delete mode 100644 doc/cli/npm-docs.md delete mode 100644 doc/cli/npm-explore.md delete mode 100644 doc/cli/npm-install-ci-test.md delete mode 100644 doc/cli/npm-install-test.md delete mode 100644 doc/cli/npm-ping.md delete mode 100644 doc/cli/npm-prefix.md delete mode 100644 doc/cli/npm-rebuild.md delete mode 100644 doc/cli/npm-root.md delete mode 100644 doc/cli/npm-shrinkwrap.md delete mode 100644 doc/cli/npm-star.md delete mode 100644 doc/cli/npm-stars.md delete mode 100644 doc/cli/npm-start.md delete mode 100644 doc/cli/npm-stop.md delete mode 100644 doc/cli/npm-test.md delete mode 100644 doc/cli/npm-uninstall.md delete mode 100644 doc/cli/npm-whoami.md delete mode 100644 doc/spec/file-specifiers.md delete mode 100644 doc/spec/package-lock.md create mode 100644 docs/LICENSE rename html/favicon.ico => docs/content/.DS_Store (63%) rename {doc/cli => docs/content/cli-commands}/npm-access.md (74%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-adduser.md (69%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-audit.md (85%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-bin.md create mode 100755 docs/content/cli-commands/npm-bugs.md create mode 100755 docs/content/cli-commands/npm-build.md rename {doc/cli => docs/content/cli-commands}/npm-bundle.md (59%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-cache.md (75%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-ci.md (78%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-completion.md (62%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-config.md rename {doc/cli => docs/content/cli-commands}/npm-dedupe.md (64%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-deprecate.md (57%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-dist-tag.md (75%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-docs.md rename {doc/cli => docs/content/cli-commands}/npm-doctor.md (90%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-edit.md (56%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-explore.md rename {doc/cli => docs/content/cli-commands}/npm-help-search.md (64%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-help.md (51%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-hook.md (82%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-init.md (73%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-install-ci-test.md create mode 100755 docs/content/cli-commands/npm-install-test.md rename {doc/cli => docs/content/cli-commands}/npm-install.md (75%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-link.md (63%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-logout.md (61%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-ls.md (71%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-org.md (67%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-outdated.md (85%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-owner.md (63%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-pack.md (61%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-ping.md create mode 100755 docs/content/cli-commands/npm-prefix.md rename {doc/cli => docs/content/cli-commands}/npm-profile.md (83%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-prune.md (73%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-publish.md (63%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-rebuild.md rename {doc/cli => docs/content/cli-commands}/npm-repo.md (55%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-restart.md (52%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-root.md rename {doc/cli => docs/content/cli-commands}/npm-run-script.md (81%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-search.md (80%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-shrinkwrap.md create mode 100755 docs/content/cli-commands/npm-star.md create mode 100755 docs/content/cli-commands/npm-stars.md create mode 100755 docs/content/cli-commands/npm-start.md create mode 100755 docs/content/cli-commands/npm-stop.md rename {doc/cli => docs/content/cli-commands}/npm-team.md (73%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-test.md rename {doc/cli => docs/content/cli-commands}/npm-token.md (88%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-uninstall.md rename {doc/cli => docs/content/cli-commands}/npm-unpublish.md (63%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-update.md (80%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-version.md (75%) mode change 100644 => 100755 rename {doc/cli => docs/content/cli-commands}/npm-view.md (68%) mode change 100644 => 100755 create mode 100755 docs/content/cli-commands/npm-whoami.md rename {doc/cli => docs/content/cli-commands}/npm.md (84%) mode change 100644 => 100755 rename doc/files/npm-folders.md => docs/content/configuring-npm/folders.md (80%) mode change 100644 => 100755 create mode 100644 docs/content/configuring-npm/install.md rename {doc/files => docs/content/configuring-npm}/npmrc.md (73%) mode change 100644 => 100755 rename doc/files/package.json.md => docs/content/configuring-npm/package-json.md (76%) mode change 100644 => 100755 rename doc/files/package-lock.json.md => docs/content/configuring-npm/package-lock-json.md (87%) mode change 100644 => 100755 rename doc/files/npm-package-locks.md => docs/content/configuring-npm/package-locks.md (75%) mode change 100644 => 100755 rename doc/files/npm-shrinkwrap.json.md => docs/content/configuring-npm/shrinkwrap-json.md (57%) mode change 100644 => 100755 rename doc/misc/npm-coding-style.md => docs/content/using-npm/coding-style.md (73%) mode change 100644 => 100755 rename doc/misc/npm-config.md => docs/content/using-npm/config.md (87%) mode change 100644 => 100755 rename doc/misc/npm-developers.md => docs/content/using-npm/developers.md (80%) mode change 100644 => 100755 rename doc/misc/npm-disputes.md => docs/content/using-npm/disputes.md (94%) mode change 100644 => 100755 rename doc/misc/npm-orgs.md => docs/content/using-npm/orgs.md (74%) mode change 100644 => 100755 rename doc/misc/npm-registry.md => docs/content/using-npm/registry.md (72%) mode change 100644 => 100755 rename doc/misc/removing-npm.md => docs/content/using-npm/removal.md (65%) mode change 100644 => 100755 rename doc/misc/npm-scope.md => docs/content/using-npm/scope.md (78%) mode change 100644 => 100755 rename doc/misc/npm-scripts.md => docs/content/using-npm/scripts.md (81%) mode change 100644 => 100755 rename {doc/misc => docs/content/using-npm}/semver.md (100%) mode change 100644 => 100755 create mode 100644 docs/gatsby-browser.js create mode 100644 docs/gatsby-config.js create mode 100644 docs/gatsby-node.js create mode 100644 docs/package-lock.json create mode 100644 docs/package.json create mode 100644 docs/src/components/Accordion.js create mode 100644 docs/src/components/Button.js create mode 100644 docs/src/components/DocLinks.js create mode 100644 docs/src/components/FoundTypo.js create mode 100644 docs/src/components/MobileSidebar.js create mode 100644 docs/src/components/Sidebar.js create mode 100644 docs/src/components/home/DarkBlock.js create mode 100644 docs/src/components/home/FeatureCard.js create mode 100644 docs/src/components/home/Features.js create mode 100644 docs/src/components/home/Footer.js create mode 100644 docs/src/components/home/Terminal.js create mode 100644 docs/src/components/home/Windows.js create mode 100644 docs/src/components/home/cubes.js create mode 100644 docs/src/components/home/hero.js create mode 100644 docs/src/components/layout.js create mode 100644 docs/src/components/links.js create mode 100644 docs/src/components/navbar.js create mode 100644 docs/src/components/scripts.js create mode 100644 docs/src/components/seo.js create mode 100644 docs/src/images/background-boxes.svg create mode 100644 docs/src/images/background-cubes.svg create mode 100644 docs/src/images/background-rectangles.svg create mode 100644 docs/src/images/bracket.svg create mode 100644 docs/src/images/cli-logo.svg create mode 100644 docs/src/images/down-carrot.svg create mode 100644 docs/src/images/hamburger-close.svg create mode 100644 docs/src/images/hamburger.svg create mode 100644 docs/src/images/manager-icon.svg create mode 100644 docs/src/images/network-icon.svg create mode 100644 docs/src/images/npm-icon.png create mode 100644 docs/src/images/orange-cube.svg create mode 100644 docs/src/images/pink-gradient-cube.svg create mode 100644 docs/src/images/purple-cube.svg create mode 100644 docs/src/images/purple-gradient-cube.svg create mode 100644 docs/src/images/red-cube.svg create mode 100644 docs/src/images/right-shadow-box.svg create mode 100644 docs/src/images/terminal-icon.svg create mode 100644 docs/src/images/test-icon.svg create mode 100644 docs/src/images/up-carrot.svg create mode 100644 docs/src/images/x.svg create mode 100644 docs/src/main.css create mode 100644 docs/src/pages/404.js create mode 100644 docs/src/pages/index.js create mode 100644 docs/src/templates/Page.js create mode 100644 docs/src/theme.js delete mode 100644 html/docfoot.html delete mode 100644 html/dochead.html delete mode 100644 html/index.html delete mode 100644 html/n-64.png delete mode 100644 html/n-large.png delete mode 100644 html/npm-16.png delete mode 100644 html/npm-256-square.png delete mode 100644 html/npm-256w.png delete mode 100644 html/npm-64-square.png delete mode 100644 html/npm-fin.png delete mode 100644 html/npm-large-trans.png delete mode 100644 html/npm-large.png delete mode 100644 html/npm-logo-white-trans.png delete mode 100644 html/npm.png delete mode 100644 html/static/style.css delete mode 100644 html/static/toc.js delete mode 100755 scripts/doc-build.sh create mode 100644 scripts/docs-build.js diff --git a/.gitignore b/.gitignore index efd010de30823..27c4f27bf47a0 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,9 @@ npm-debug.log /test/packages/test-package/random-data.txt /test/root /node_modules/.bin -/html/doc/ +/docs/public/ +/docs/.cache/ +/docs/node_modules/ /man/ /doc/*/npm-index.md /npmrc diff --git a/Makefile b/Makefile index 4e00647a19cf0..c1f3751b44687 100644 --- a/Makefile +++ b/Makefile @@ -4,51 +4,25 @@ SHELL = bash PUBLISHTAG = $(shell node scripts/publish-tag.js) BRANCH = $(shell git rev-parse --abbrev-ref HEAD) -markdowns = $(shell find doc -name '*.md' | grep -v 'index') README.md +markdowns = $(shell find docs -name '*.md' | grep -v 'index') README.md -html_docdeps = html/dochead.html \ - html/docfoot.html \ - scripts/doc-build.sh \ - package.json - -cli_mandocs = $(shell find doc/cli -name '*.md' \ +cli_mandocs = $(shell find docs/content/cli-commands -name '*.md' \ |sed 's|.md|.1|g' \ - |sed 's|doc/cli/|man/man1/|g' ) \ + |sed 's|docs/content/cli-commands/|man/man1/|g' ) \ man/man1/npm-README.1 \ man/man1/npx.1 -files_mandocs = $(shell find doc/files -name '*.md' \ +files_mandocs = $(shell find docs/content/configuring-npm -name '*.md' \ |sed 's|.md|.5|g' \ - |sed 's|doc/files/|man/man5/|g' ) \ - man/man5/npm-json.5 \ - man/man5/npm-global.5 + |sed 's|docs/content/configuring-npm/|man/man5/|g' ) \ -misc_mandocs = $(shell find doc/misc -name '*.md' \ +misc_mandocs = $(shell find docs/content/using-npm -name '*.md' \ |sed 's|.md|.7|g' \ - |sed 's|doc/misc/|man/man7/|g' ) \ - man/man7/npm-index.7 - -cli_htmldocs = $(shell find doc/cli -name '*.md' \ - |sed 's|.md|.html|g' \ - |sed 's|doc/cli/|html/doc/cli/|g' ) \ - html/doc/README.html - -files_htmldocs = $(shell find doc/files -name '*.md' \ - |sed 's|.md|.html|g' \ - |sed 's|doc/files/|html/doc/files/|g' ) \ - html/doc/files/npm-json.html \ - html/doc/files/npm-global.html - -misc_htmldocs = $(shell find doc/misc -name '*.md' \ - |sed 's|.md|.html|g' \ - |sed 's|doc/misc/|html/doc/misc/|g' ) \ - html/doc/index.html + |sed 's|docs/content/using-npm/|man/man7/|g' ) \ mandocs = $(cli_mandocs) $(files_mandocs) $(misc_mandocs) -htmldocs = $(cli_htmldocs) $(files_htmldocs) $(misc_htmldocs) - -all: doc +all: docs latest: @echo "Installing latest published npm" @@ -65,14 +39,23 @@ dev: install link: uninstall node bin/npm-cli.js link -f -clean: markedclean marked-manclean doc-clean +clean: markedclean marked-manclean docs-clean rm -rf npmrc node bin/npm-cli.js cache clean --force uninstall: node bin/npm-cli.js rm npm -g -f -doc: $(mandocs) $(htmldocs) +mandocs: $(mandocs) + +htmldocs: + cd docs && node ../bin/npm-cli.js install && \ + node ../bin/npm-cli.js run build:static echo>&2 && \ + rm -rf node_modules .cache public/*js public/*json public/404* public/page-data public/manifest* + find docs/public -name '*.html' -exec \ + node scripts/docs-build.js {} \; + +docs: mandocs htmldocs markedclean: rm -rf node_modules/marked node_modules/.bin/marked .building_marked @@ -80,26 +63,28 @@ markedclean: marked-manclean: rm -rf node_modules/marked-man node_modules/.bin/marked-man .building_marked-man -docclean: doc-clean -doc-clean: +docsclean: docs-clean +docs-clean: rm -rf \ .building_marked \ .building_marked-man \ - html/doc \ - man + man \ + docs/node_modules \ + docs/public \ + docs/.cache ## build-time tools for the documentation build-doc-tools := node_modules/.bin/marked \ node_modules/.bin/marked-man # use `npm install marked-man` for this to work. -man/man1/npm-README.1: README.md scripts/doc-build.sh package.json $(build-doc-tools) +man/man1/npm-README.1: README.md scripts/docs-build.js package.json $(build-doc-tools) @[ -d man/man1 ] || mkdir -p man/man1 - scripts/doc-build.sh $< $@ + node scripts/docs-build.js $< $@ -man/man1/%.1: doc/cli/%.md scripts/doc-build.sh package.json $(build-doc-tools) +man/man1/%.1: docs/content/cli-commands/%.md scripts/docs-build.js package.json $(build-doc-tools) @[ -d man/man1 ] || mkdir -p man/man1 - scripts/doc-build.sh $< $@ + node scripts/docs-build.js $< $@ man/man1/npx.1: node_modules/libnpx/libnpx.1 cat $< | sed s/libnpx/npx/ > $@ @@ -107,46 +92,16 @@ man/man1/npx.1: node_modules/libnpx/libnpx.1 man/man5/npm-json.5: man/man5/package.json.5 cp $< $@ -man/man5/npm-global.5: man/man5/npm-folders.5 +man/man5/npm-global.5: man/man5/foslders.5 cp $< $@ -man/man5/%.5: doc/files/%.md scripts/doc-build.sh package.json $(build-doc-tools) +man/man5/%.5: docs/content/configuring-npm/%.md scripts/docs-build.js package.json $(build-doc-tools) @[ -d man/man5 ] || mkdir -p man/man5 - scripts/doc-build.sh $< $@ - -doc/misc/npm-index.md: scripts/index-build.js package.json $(build-doc-tools) - node scripts/index-build.js > $@ + node scripts/docs-build.js $< $@ -html/doc/index.html: doc/misc/npm-index.md $(html_docdeps) $(build-doc-tools) - @[ -d html/doc ] || mkdir -p html/doc - scripts/doc-build.sh $< $@ - -man/man7/%.7: doc/misc/%.md scripts/doc-build.sh package.json $(build-doc-tools) +man/man7/%.7: docs/content/using-npm/%.md scripts/docs-build.js package.json $(build-doc-tools) @[ -d man/man7 ] || mkdir -p man/man7 - scripts/doc-build.sh $< $@ - -html/doc/README.html: README.md $(html_docdeps) $(build-doc-tools) - @[ -d html/doc ] || mkdir -p html/doc - scripts/doc-build.sh $< $@ - -html/doc/cli/%.html: doc/cli/%.md $(html_docdeps) $(build-doc-tools) - @[ -d html/doc/cli ] || mkdir -p html/doc/cli - scripts/doc-build.sh $< $@ - -html/doc/files/npm-json.html: html/doc/files/package.json.html - cp $< $@ - -html/doc/files/npm-global.html: html/doc/files/npm-folders.html - cp $< $@ - -html/doc/files/%.html: doc/files/%.md $(html_docdeps) $(build-doc-tools) - @[ -d html/doc/files ] || mkdir -p html/doc/files - scripts/doc-build.sh $< $@ - -html/doc/misc/%.html: doc/misc/%.md $(html_docdeps) $(build-doc-tools) - @[ -d html/doc/misc ] || mkdir -p html/doc/misc - scripts/doc-build.sh $< $@ - + node scripts/docs-build.js $< $@ marked: node_modules/.bin/marked @@ -158,11 +113,7 @@ marked-man: node_modules/.bin/marked-man node_modules/.bin/marked-man: node bin/npm-cli.js install marked-man --no-global --no-timing --no-save -doc: man - -man: $(cli_docs) - -test: doc +test: docs node bin/npm-cli.js test tag: @@ -174,17 +125,17 @@ ls-ok: gitclean: git clean -fd -publish: gitclean ls-ok link doc-clean doc +publish: gitclean ls-ok link docs-clean docs @git push origin :v$(shell node bin/npm-cli.js --no-timing -v) 2>&1 || true git push origin $(BRANCH) &&\ git push origin --tags &&\ node bin/npm-cli.js publish --tag=$(PUBLISHTAG) -release: gitclean ls-ok markedclean marked-manclean doc-clean doc +release: gitclean ls-ok markedclean marked-manclean docs-clean doc node bin/npm-cli.js prune --production --no-save @bash scripts/release.sh sandwich: @[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || (echo "make it yourself" && exit 13) -.PHONY: all latest install dev link doc clean uninstall test man doc-clean docclean release ls-ok realclean +.PHONY: all latest install dev link doc clean uninstall test man docs-clean docclean release ls-ok realclean diff --git a/doc/cli/npm-bin.md b/doc/cli/npm-bin.md deleted file mode 100644 index 9b76ec529e30a..0000000000000 --- a/doc/cli/npm-bin.md +++ /dev/null @@ -1,19 +0,0 @@ -npm-bin(1) -- Display npm bin folder -==================================== - -## SYNOPSIS - - npm bin [-g|--global] - -## DESCRIPTION - -Print the folder where npm will install executables. - -## SEE ALSO - -* npm-prefix(1) -* npm-root(1) -* npm-folders(5) -* npm-config(1) -* npm-config(7) -* npmrc(5) diff --git a/doc/cli/npm-bugs.md b/doc/cli/npm-bugs.md deleted file mode 100644 index 55bce12f23fa3..0000000000000 --- a/doc/cli/npm-bugs.md +++ /dev/null @@ -1,43 +0,0 @@ -npm-bugs(1) -- Bugs for a package in a web browser maybe -======================================================== - -## SYNOPSIS - - npm bugs [] - - aliases: issues - -## DESCRIPTION - -This command tries to guess at the likely location of a package's -bug tracker URL, and then tries to open it using the `--browser` -config param. If no package name is provided, it will search for -a `package.json` in the current folder and use the `name` property. - -## CONFIGURATION - -### browser - -* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` -* Type: String - -The browser that is called by the `npm bugs` command to open websites. - -### registry - -* Default: https://registry.npmjs.org/ -* Type: url - -The base URL of the npm package registry. - - -## SEE ALSO - -* npm-docs(1) -* npm-view(1) -* npm-publish(1) -* npm-registry(7) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* package.json(5) diff --git a/doc/cli/npm-build.md b/doc/cli/npm-build.md deleted file mode 100644 index 019f225850dc0..0000000000000 --- a/doc/cli/npm-build.md +++ /dev/null @@ -1,25 +0,0 @@ -npm-build(1) -- Build a package -=============================== - -## SYNOPSIS - - npm build [] - -* ``: - A folder containing a `package.json` file in its root. - -## DESCRIPTION - -This is the plumbing command called by `npm link` and `npm install`. - -It should generally be called during installation, but if you need to run it -directly, run: - - npm run-script build - -## SEE ALSO - -* npm-install(1) -* npm-link(1) -* npm-scripts(7) -* package.json(5) diff --git a/doc/cli/npm-config.md b/doc/cli/npm-config.md deleted file mode 100644 index c60afc167c742..0000000000000 --- a/doc/cli/npm-config.md +++ /dev/null @@ -1,73 +0,0 @@ -npm-config(1) -- Manage the npm configuration files -=================================================== - -## SYNOPSIS - - npm config set [-g|--global] - npm config get - npm config delete - npm config list [-l] [--json] - npm config edit - npm get - npm set [-g|--global] - - aliases: c - -## DESCRIPTION - -npm gets its config settings from the command line, environment -variables, `npmrc` files, and in some cases, the `package.json` file. - -See npmrc(5) for more information about the npmrc files. - -See `npm-config(7)` for a more thorough discussion of the mechanisms -involved. - -The `npm config` command can be used to update and edit the contents -of the user and global npmrc files. - -## Sub-commands - -Config supports the following sub-commands: - -### set - - npm config set key value - -Sets the config key to the value. - -If value is omitted, then it sets it to "true". - -### get - - npm config get key - -Echo the config value to stdout. - -### list - - npm config list - -Show all the config settings. Use `-l` to also show defaults. Use `--json` -to show the settings in json format. - -### delete - - npm config delete key - -Deletes the key from all configuration files. - -### edit - - npm config edit - -Opens the config file in an editor. Use the `--global` flag to edit the -global config. - -## SEE ALSO - -* npm-folders(5) -* npm-config(7) -* package.json(5) -* npmrc(5) -* npm(1) diff --git a/doc/cli/npm-docs.md b/doc/cli/npm-docs.md deleted file mode 100644 index f5064c55e2829..0000000000000 --- a/doc/cli/npm-docs.md +++ /dev/null @@ -1,44 +0,0 @@ -npm-docs(1) -- Docs for a package in a web browser maybe -======================================================== - -## SYNOPSIS - - npm docs [ [ ...]] - npm docs . - npm home [ [ ...]] - npm home . - -## DESCRIPTION - -This command tries to guess at the likely location of a package's -documentation URL, and then tries to open it using the `--browser` -config param. You can pass multiple package names at once. If no -package name is provided, it will search for a `package.json` in -the current folder and use the `name` property. - -## CONFIGURATION - -### browser - -* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` -* Type: String - -The browser that is called by the `npm docs` command to open websites. - -### registry - -* Default: https://registry.npmjs.org/ -* Type: url - -The base URL of the npm package registry. - - -## SEE ALSO - -* npm-view(1) -* npm-publish(1) -* npm-registry(7) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* package.json(5) diff --git a/doc/cli/npm-explore.md b/doc/cli/npm-explore.md deleted file mode 100644 index 44b77f94340d6..0000000000000 --- a/doc/cli/npm-explore.md +++ /dev/null @@ -1,39 +0,0 @@ -npm-explore(1) -- Browse an installed package -============================================= - -## SYNOPSIS - - npm explore [ -- ] - -## DESCRIPTION - -Spawn a subshell in the directory of the installed package specified. - -If a command is specified, then it is run in the subshell, which then -immediately terminates. - -This is particularly handy in the case of git submodules in the -`node_modules` folder: - - npm explore some-dependency -- git pull origin master - -Note that the package is *not* automatically rebuilt afterwards, so be -sure to use `npm rebuild ` if you make any changes. - -## CONFIGURATION - -### shell - -* Default: SHELL environment variable, or "bash" on Posix, or "cmd" on - Windows -* Type: path - -The shell to run for the `npm explore` command. - -## SEE ALSO - -* npm-folders(5) -* npm-edit(1) -* npm-rebuild(1) -* npm-build(1) -* npm-install(1) diff --git a/doc/cli/npm-install-ci-test.md b/doc/cli/npm-install-ci-test.md deleted file mode 100644 index 4cbab9144e48f..0000000000000 --- a/doc/cli/npm-install-ci-test.md +++ /dev/null @@ -1,16 +0,0 @@ -# npm install-ci-test(1) -- Install a project with a clean slate and run tests - -## SYNOPSIS - - npm install-ci-test - - alias: npm cit - -## DESCRIPTION - -This command runs an `npm ci` followed immediately by an `npm test`. - -## SEE ALSO - -- npm-ci(1) -- npm-test(1) diff --git a/doc/cli/npm-install-test.md b/doc/cli/npm-install-test.md deleted file mode 100644 index 471b36f16b565..0000000000000 --- a/doc/cli/npm-install-test.md +++ /dev/null @@ -1,25 +0,0 @@ -# npm install-test(1) -- Install package(s) and run tests - -## SYNOPSIS - - npm install-test (with no args, in package dir) - npm install-test [<@scope>/] - npm install-test [<@scope>/]@ - npm install-test [<@scope>/]@ - npm install-test [<@scope>/]@ - npm install-test - npm install-test - npm install-test - - alias: npm it - common options: [--save|--save-dev|--save-optional] [--save-exact] [--dry-run] - -## DESCRIPTION - -This command runs an `npm install` followed immediately by an `npm test`. It -takes exactly the same arguments as `npm install`. - -## SEE ALSO - -- npm-install(1) -- npm-test(1) diff --git a/doc/cli/npm-ping.md b/doc/cli/npm-ping.md deleted file mode 100644 index 3b2da9944bb24..0000000000000 --- a/doc/cli/npm-ping.md +++ /dev/null @@ -1,24 +0,0 @@ -npm-ping(1) -- Ping npm registry -================================ - -## SYNOPSIS - - npm ping [--registry ] - -## DESCRIPTION - -Ping the configured or given npm registry and verify authentication. -If it works it will output something like: -``` -Ping success: {*Details about registry*} -``` -otherwise you will get: -``` -Ping error: {*Detail about error} -``` - -## SEE ALSO - -* npm-config(1) -* npm-config(7) -* npmrc(5) diff --git a/doc/cli/npm-prefix.md b/doc/cli/npm-prefix.md deleted file mode 100644 index d36e538132fb2..0000000000000 --- a/doc/cli/npm-prefix.md +++ /dev/null @@ -1,24 +0,0 @@ -npm-prefix(1) -- Display prefix -=============================== - -## SYNOPSIS - - npm prefix [-g] - -## DESCRIPTION - -Print the local prefix to standard out. This is the closest parent directory -to contain a `package.json` file or `node_modules` directory, unless `-g` is -also specified. - -If `-g` is specified, this will be the value of the global prefix. See -`npm-config(7)` for more detail. - -## SEE ALSO - -* npm-root(1) -* npm-bin(1) -* npm-folders(5) -* npm-config(1) -* npm-config(7) -* npmrc(5) diff --git a/doc/cli/npm-rebuild.md b/doc/cli/npm-rebuild.md deleted file mode 100644 index 437737d9f4b56..0000000000000 --- a/doc/cli/npm-rebuild.md +++ /dev/null @@ -1,19 +0,0 @@ -npm-rebuild(1) -- Rebuild a package -=================================== - -## SYNOPSIS - - npm rebuild [[<@scope>/]...] - - alias: npm rb - -## DESCRIPTION - -This command runs the `npm build` command on the matched folders. This is useful -when you install a new version of node, and must recompile all your C++ addons with -the new binary. - -## SEE ALSO - -* npm-build(1) -* npm-install(1) diff --git a/doc/cli/npm-root.md b/doc/cli/npm-root.md deleted file mode 100644 index a1d5bf8629913..0000000000000 --- a/doc/cli/npm-root.md +++ /dev/null @@ -1,19 +0,0 @@ -npm-root(1) -- Display npm root -=============================== - -## SYNOPSIS - - npm root [-g] - -## DESCRIPTION - -Print the effective `node_modules` folder to standard out. - -## SEE ALSO - -* npm-prefix(1) -* npm-bin(1) -* npm-folders(5) -* npm-config(1) -* npm-config(7) -* npmrc(5) diff --git a/doc/cli/npm-shrinkwrap.md b/doc/cli/npm-shrinkwrap.md deleted file mode 100644 index 4c223a86cc1b7..0000000000000 --- a/doc/cli/npm-shrinkwrap.md +++ /dev/null @@ -1,25 +0,0 @@ -npm-shrinkwrap(1) -- Lock down dependency versions for publication -===================================================== - -## SYNOPSIS - - npm shrinkwrap - -## DESCRIPTION - -This command repurposes `package-lock.json` into a publishable -`npm-shrinkwrap.json` or simply creates a new one. The file created and updated -by this command will then take precedence over any other existing or future -`package-lock.json` files. For a detailed explanation of the design and purpose -of package locks in npm, see npm-package-locks(5). - -## SEE ALSO - -* npm-install(1) -* npm-run-script(1) -* npm-scripts(7) -* package.json(5) -* npm-package-locks(5) -* package-lock.json(5) -* npm-shrinkwrap.json(5) -* npm-ls(1) diff --git a/doc/cli/npm-star.md b/doc/cli/npm-star.md deleted file mode 100644 index 87d90b560c202..0000000000000 --- a/doc/cli/npm-star.md +++ /dev/null @@ -1,22 +0,0 @@ -npm-star(1) -- Mark your favorite packages -========================================== - -## SYNOPSIS - - npm star [...] - npm unstar [...] - -## DESCRIPTION - -"Starring" a package means that you have some interest in it. It's -a vaguely positive way to show that you care. - -"Unstarring" is the same thing, but in reverse. - -It's a boolean thing. Starring repeatedly has no additional effect. - -## SEE ALSO - -* npm-view(1) -* npm-whoami(1) -* npm-adduser(1) diff --git a/doc/cli/npm-stars.md b/doc/cli/npm-stars.md deleted file mode 100644 index 1e225be29f3ed..0000000000000 --- a/doc/cli/npm-stars.md +++ /dev/null @@ -1,21 +0,0 @@ -npm-stars(1) -- View packages marked as favorites -================================================= - -## SYNOPSIS - - npm stars [] - -## DESCRIPTION - -If you have starred a lot of neat things and want to find them again -quickly this command lets you do just that. - -You may also want to see your friend's favorite packages, in this case -you will most certainly enjoy this command. - -## SEE ALSO - -* npm-star(1) -* npm-view(1) -* npm-whoami(1) -* npm-adduser(1) diff --git a/doc/cli/npm-start.md b/doc/cli/npm-start.md deleted file mode 100644 index e43f02149935a..0000000000000 --- a/doc/cli/npm-start.md +++ /dev/null @@ -1,24 +0,0 @@ -npm-start(1) -- Start a package -=============================== - -## SYNOPSIS - - npm start [-- ] - -## DESCRIPTION - -This runs an arbitrary command specified in the package's `"start"` property of -its `"scripts"` object. If no `"start"` property is specified on the -`"scripts"` object, it will run `node server.js`. - -As of [`npm@2.0.0`](https://blog.npmjs.org/post/98131109725/npm-2-0-0), you can -use custom arguments when executing scripts. Refer to npm-run-script(1) for -more details. - -## SEE ALSO - -* npm-run-script(1) -* npm-scripts(7) -* npm-test(1) -* npm-restart(1) -* npm-stop(1) diff --git a/doc/cli/npm-stop.md b/doc/cli/npm-stop.md deleted file mode 100644 index 92b14b417962b..0000000000000 --- a/doc/cli/npm-stop.md +++ /dev/null @@ -1,18 +0,0 @@ -npm-stop(1) -- Stop a package -============================= - -## SYNOPSIS - - npm stop [-- ] - -## DESCRIPTION - -This runs a package's "stop" script, if one was provided. - -## SEE ALSO - -* npm-run-script(1) -* npm-scripts(7) -* npm-test(1) -* npm-start(1) -* npm-restart(1) diff --git a/doc/cli/npm-test.md b/doc/cli/npm-test.md deleted file mode 100644 index 8a379e2efd098..0000000000000 --- a/doc/cli/npm-test.md +++ /dev/null @@ -1,20 +0,0 @@ -npm-test(1) -- Test a package -============================= - -## SYNOPSIS - - npm test [-- ] - - aliases: t, tst - -## DESCRIPTION - -This runs a package's "test" script, if one was provided. - -## SEE ALSO - -* npm-run-script(1) -* npm-scripts(7) -* npm-start(1) -* npm-restart(1) -* npm-stop(1) diff --git a/doc/cli/npm-uninstall.md b/doc/cli/npm-uninstall.md deleted file mode 100644 index 38302b20d61fc..0000000000000 --- a/doc/cli/npm-uninstall.md +++ /dev/null @@ -1,53 +0,0 @@ -npm-uninstall(1) -- Remove a package -============================= - -## SYNOPSIS - - npm uninstall [<@scope>/][@]... [-S|--save|-D|--save-dev|-O|--save-optional|--no-save] - - aliases: remove, rm, r, un, unlink - -## DESCRIPTION - -This uninstalls a package, completely removing everything npm installed -on its behalf. - -Example: - - npm uninstall sax - -In global mode (ie, with `-g` or `--global` appended to the command), -it uninstalls the current package context as a global package. - -`npm uninstall` takes 3 exclusive, optional flags which save or update -the package version in your main package.json: - -* `-S, --save`: Package will be removed from your `dependencies`. - -* `-D, --save-dev`: Package will be removed from your `devDependencies`. - -* `-O, --save-optional`: Package will be removed from your `optionalDependencies`. - -* `--no-save`: Package will not be removed from your `package.json` file. - -Further, if you have an `npm-shrinkwrap.json` then it will be updated as -well. - -Scope is optional and follows the usual rules for `npm-scope(7)`. - -Examples: - - npm uninstall sax --save - npm uninstall @myorg/privatepackage --save - npm uninstall node-tap --save-dev - npm uninstall dtrace-provider --save-optional - npm uninstall lodash --no-save - -## SEE ALSO - -* npm-prune(1) -* npm-install(1) -* npm-folders(5) -* npm-config(1) -* npm-config(7) -* npmrc(5) diff --git a/doc/cli/npm-whoami.md b/doc/cli/npm-whoami.md deleted file mode 100644 index 70b6a48f44671..0000000000000 --- a/doc/cli/npm-whoami.md +++ /dev/null @@ -1,17 +0,0 @@ -npm-whoami(1) -- Display npm username -===================================== - -## SYNOPSIS - - npm whoami [--registry ] - -## DESCRIPTION - -Print the `username` config to standard output. - -## SEE ALSO - -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-adduser(1) diff --git a/doc/spec/file-specifiers.md b/doc/spec/file-specifiers.md deleted file mode 100644 index e737909db5257..0000000000000 --- a/doc/spec/file-specifiers.md +++ /dev/null @@ -1,151 +0,0 @@ -# `file:` specifiers - -`specifier` refers to the value part of the `package.json`'s `dependencies` -object. This is a semver expression for registry dependencies and -URLs and URL-like strings for other types. - -### Dependency Specifiers - -* A `file:` specifier is either an absolute path (eg `/path/to/thing`, `d:\path\to\thing`): - * An absolute `file:///absolute/path` with any number of leading slashes - being treated as a single slash. That is, `file:/foo/bar` and - `file:///foo/bar` reference the same package. -* … or a relative path (eg `../path/to/thing`, `path\to\subdir`). Leading - slashes on a file specifier will be removed, that is 'file://../foo/bar` - references the same package as same as `file:../foo/bar`. The latter is - considered canonical. -* Attempting to install a specifier that has a windows drive letter will - produce an error on non-Windows systems. -* A valid `file:` specifier points is: - * a valid package file. That is, a `.tar`, `.tar.gz` or `.tgz` containing - `/package.json`. - * OR, a directory that contains a `package.json` - -Relative specifiers are relative to the file they were found in, or, if -provided on the command line, the CWD that the command was run from. - -An absolute specifier found in a `package.json` or `npm-shrinkwrap.json` is -probably an error as it's unlikely to be portable between computers and -should warn. - -A specifier provided as a command line argument that is on a different drive -is an error. That is, `npm install file:d:/foo/bar` is an error if the -current drive is `c`. The point of this rule is that if we can't produce a -relative path then it's an error. - -### Specifier Disambiguation - -On the command line, plain paths are allowed. These paths can be ambiguous -as they could be a path, a plain package name or a github shortcut. This -ambiguity is resolved by checking to see if either a directory exists that -contains a `package.json`. If either is the case then the specifier is a -file specifier, otherwise it's a registry or github specifier. - -### Specifier Matching - -A specifier is considered to match a dependency on disk when the `realpath` -of the fully resolved specifier matches the `realpath` of the package on disk. - -### Saving File Specifiers - -When saving to both `package.json` and `npm-shrinkwrap.json` they will be -saved using the `file:../relative/path` form, and the relative path will be -relative to the project's root folder. This is particularly important to -note for the `npm-shrinkwrap.json` as it means the specifier there will -be different then the original `package.json` (where it was relative to that -`package.json`). - -When shrinkwrapping file specifiers, the contents of the destination -package's `node_modules` WILL NOT be included in the shrinkwrap. If you want to lock -down the destination package's `node_modules` you should create a shrinkwrap for it -separately. - -This is necessary to support the mono repo use case where many projects file -to the same package. If each project included its own `npm-shrinkwrap.json` -then they would each have their own distinct set of transitive dependencies -and they'd step on each other any time you ran an install in one or the other. - -NOTE: This should not have an effect on shrinkwrapping of other sorts of -shrinkwrapped packages. - -### Installation - -#### File type specifiers pointing at tarballs - -File-type specifiers pointing at a `.tgz` or `.tar.gz` or `.tar` file will -install it as a package file in the same way we would a remote tarball. The -checksum of the package file should be recorded so that we can check for updates. - -#### File type specifers pointing at directories - -File-type specifiers that point at directories will necessarily not do -anything for `fetch` and `extract` phases. - -The symlink should be created during the `finalize` phase. - -The `preinstall` for file-type specifiers MUST be run AFTER the -`finalize` phase as the symlink may be a relative path reaching outside the -current project root and a symlink that resolves in `.staging` won't resolve -in the package's final resting place. - -If the module is inside the package root that we're running the install for then -dependencies of the linked package will be hoisted to the top level as usual. - -If the module is outside the package root then dependencies will be installed inside -the linked module's `node_modules` folder. - -### Removal - -Removal should remove the symlink. - -Removal MUST NOT remove the transitive dependencies IF they're installed in -the linked module's `node_modules` folder. - -### Listing - -In listings they should not include a version as the version is not -something `npm` is concerned about. This also makes them easily -distinguishable from symlinks of packages that have other dependency -specifiers. - -If you had run: - -``` -npm install --save file:../a -``` - -And then run: -``` -npm ls -``` - -You would see: - -``` -example-package@1.0.0 /path/to/example-package -└── a → file:../a -``` - -``` -example-package@1.0.0 /path/to/example-package -+-- a -> file:../a -``` - -Of note here: No version is included as the relevant detail is WHERE the -package came from, not what version happened to be in that path. - -### Outdated - -Local specifiers should only show up in `npm outdated` if they're missing -and when they do, they should be reported as: - -``` -Package Current Wanted Latest Location -a MISSING LOCAL LOCAL example-package -``` - -### Updating - -If a dependency with a local specifier is already installed then `npm -update` shouldn't do anything. If one is missing then it should be -installed as if you ran `npm install`. diff --git a/doc/spec/package-lock.md b/doc/spec/package-lock.md deleted file mode 100644 index 87d5c223537cf..0000000000000 --- a/doc/spec/package-lock.md +++ /dev/null @@ -1,294 +0,0 @@ -# package-lock and npm-shrinkwrap - -`npm` can have one of two different lock files: - -* `package-lock.json`, which is ordinarily always present and is never published. -* `npm-shrinkwrap.json`, which is created with `npm shrinkwrap` and usually published. - -You can only have one of them and in the event that you have both, -`npm-shrinkwrap.json` takes precedence. The files are exactly the same -format and in fact all the `npm shrinkwrap` command does is rename your -`package-lock.json`. - -Through the rest of this document we will refer to the package-lock and -`package-lock.json` but everything also applies to `npm-shrinkwrap.json`. - -## File Format - -### name - -The name of the package this is a package-lock for. This must match what's in `package.json`. - -### version - -The version of the package this is a package-lock for. This must match what's in `package.json`. - -### lockfileVersion *(new)* - -An integer version, starting at `1` with the version number of this document -whose semantics were used when generating this `package-lock.json`. - -### preserveSymlinks *(new)* - -Indicates that the install was done with the environment variable -`NODE_PRESERVE_SYMLINKS` enabled. The installer should insist that the value of this -property match that environment variable. - -### dependencies - -These are the modules installed in the `node_modules`. Some of these are -dependencies some of these are transitive dependencies (that is, -dependencies of our dependencies). - -This is a mapping of package name to dependency object. Dependency objects have the -following properties: - -#### version *(changed)* - -This is a specifier that uniquely identifies this package and should be -usable in fetching a new copy of it. - -* bundled dependencies: Regardless of source, this is a version number that is purely for informational purposes. -* registry sources: This is a version number. (eg, `1.2.3`) -* git sources: This is a git specifier with resolved committish. (eg, `git+https://example.com/foo/bar#115311855adb0789a0466714ed48a1499ffea97e`) -* http tarball sources: This is the URL of the tarball. (eg, `https://example.com/example-1.3.0.tgz`) -* local tarball sources: This is the file URL of the tarball. (eg `file:///opt/storage/example-1.3.0.tgz`) -* local link sources: This is the file URL of the link. (eg `file:libs/our-module`) - -#### integrity *(new)* - -This is a [Standard Subresource -Integrity](https://w3c.github.io/webappsec/specs/subresourceintegrity/) for -this resource. - -* For bundled dependencies this is not included, regardless of source. -* For registry sources, this is the `integrity` that the registry provided, or if one wasn't provided the SHA1 in `shasum`. -* For git sources this is the specific commit hash we cloned from. -* For remote tarball sources this is an integrity based on a SHA512 of - the file. -* For local tarball sources: This is an integrity field based on the SHA512 of the file. - -#### resolved - -* For bundled dependencies this is not included, regardless of source. -* For registry sources this is path of the tarball relative to the registry - URL. If the tarball URL isn't on the same server as the registry URL then - this is a complete URL. - - eg, Given a `package-lock.json` file containing: - - ``` - "resolved": "https://registry.npmjs.org/example/-/example-1.0.0.tgz" - ``` - - and a registry source configuring a custom value: - - ``` - npm install --registry https://registry.example.com - ``` - - the package will be fetched from the custom-defined registry: - - ``` - https://registry.example.com/example/-/example-1.0.0.tgz - ``` - -#### link *(new)* - -If this module was symlinked in development but had semver in the -`package.json` then this is the relative path of that link. - -Discussion of the semantics of this will go in the symlinks RFC. - -Implementation note: To be implemented post npm@5. - -#### bundled *(new)* - -If true, this is the bundled dependency and will be installed by the parent -module. When installing, this module will be extracted from the parent -module during the extract phase, not installed as a separate dependency. - -#### dev - -If true then this dependency is either a development dependency ONLY of the -top level module or a transitive dependency of one. This is false for -dependencies that are both a development dependency of the top level and a -transitive dependency of a non-development dependency of the top level. - -#### optional - -If true then this dependency is either an optional dependency ONLY of the -top level module or a transitive dependency of one. This is false for -dependencies that are both an optional dependency of the top level and a -transitive dependency of a non-optional dependency of the top level. - -All optional dependencies should be included even if they're uninstallable -on the current platform. - -#### from - -This is a record of what specifier was used to originally install this -package. This should be used only for git dependencies. - -#### requires - -This is a mapping of module name to version. This is a list of everything -this module requires, regardless of where it will be installed. The version -should match via normal matching rules a dependency either in our -`dependencies` or in a level higher than us. - -#### dependencies - -Exactly like `dependencies` at the top level, this is a list of modules to -install in the `node_modules` of this module. - -## Generating - -### `npm init` - -If neither a `package-lock.json` nor an `npm-shrinkwrap.json` exist then -`npm init` will create a `package-lock.json`. This is functionally -equivalent to running `npm shrinkwrap` after the current init completes and -renaming the result to `package-lock.json`. - -### `npm install --save` - -If either an `npm-shrinkwrap.json` or a `package-lock.json` exists then it -will be updated. - -If neither exist then a `package-lock.json` should be generated. - -If a `package.json` does not exist, it should be generated. The generated -`package.json` should be empty, as in: - -``` -{ - "dependencies": { - } -} -``` - -If the user wants to get a default package name/version added they can run `npm init`. - -### `npm shrinkwrap` - -If a `package-lock.json` exists, rename it to `npm-shrinkwrap.json`. -Refresh the data from the installer's ideal tree. - -The top level `name` and `version` come from the `package.json`. It is an -error if either are missing or invalid. - -#### dependencies.dev - -This is `true` if this dependency is ONLY installed to fulfill either a top -level development dependency, or one of its transitive dependencies. - -Given: -``` -B (Dev) → C -``` - -Then both B and C would be `dev: true`. - -Given: -``` -A → B → C -B (Dev) -> C -``` - -Then all dependencies would be `dev: false`. - -#### dependencies.optional - -This is `true` if this dependency is ONLY ever either an optional dependency -or a transitive dependency of optional dependencies. - -Given: -``` -A (Opt) → B → C -``` - -Then all three of A, B and C would be flagged as optional. - -Given: -``` -A (Opt) → B → C -D → C -``` - -Then A and B would be flagged as optional, but C would not be. - -Given: -``` -A (Opt) → B → C -D → A -``` - -Then none would be flagged as optional. - -## Installing - -If the `packageIntegrity` in the `package-lock.json` differs from the one -computed from the `package.json` then places where the `package.json` is -incompatible with the `package-lock.json` a new module should be installed. -That is, while the `package-lock.json` ordinarily defines the state of your -project, if your `package.json` is edited independently it will take -precedence. - -The `package-lock.json` describes the exact tree that `npm` should create. -Any deviation between the `package.json` and the shrinkwrap/lock should -result in a warning be issued. This includes: - -* Modules in `package.json` but missing from the `package-lock.json` -* Modules in the `package-lock.json` but missing from the `package.json`. -* Modules in `package.json` whose specifiers don't match the version in `package-lock.json`. - -Warn if the `lockfileVersion` in the `package-lock.json` is for a different -major version than we implement. - -Module resolution from package-lock data works as such: - -* If install was run with `--resolve-links` and a dependency has a `link` - property then a symlink is made using that. If the version of the - destination can not be matched to the package-lock and/or the package.json - then a warning will be issued. - -* Otherwise, if a `integrity` is available then we try to install it from the cache using it. - -If `integrity` is unavailable or we are unable to locate a module from the `integrity` then: - -* If `lockfileVersion` is set: - * Install using the value of `version` and validate the result against the - `integrity`. -* Otherwise, try these in turn and validate the result against the `integrity`: - * `resolved`, then `from`, then `version. - * `from` can be either `package@specifier` or just `specifier`. - -Regardless of how the module is installed the metadata in the installed -module should be identical to what it would have been if the module were -installed w/o a package-lock. - -## Implied Changes To Other Commands - -### `npm rm --save` - -Currently if you ask to remove a package that's both a direct and a -transitive dependency, we'll remove the package from `node_modules` even if -this results in a broken tree. This was chosen at the time because we felt -that users would expect `npm rm pkgname` to be equivalent of -`rm -rf node_modules/pkgname`. - -As you are no longer going to be allowed to put your `node_modules` in a -state that's not a valid package-lock, this means this behavior is no longer -valid. Instead we should follow normal rules, removing it from the -dependencies for the top level but only removing the module on disk if -nothing requires it any more. - -## Additional fields / Adding new fields - -Installers should ignore any field they aren't aware of. It's not an error -to have additional properties in the package-lock or lock file. - -Installers that want to add new fields should either have one added via RFC -in the npm issue tracker and an accompanying documentation PR, or should prefix -it with the name of their project. diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 0000000000000..5169a5e4135e9 --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 gatsbyjs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/html/favicon.ico b/docs/content/.DS_Store similarity index 63% rename from html/favicon.ico rename to docs/content/.DS_Store index 9e0d4eef78c9c01027fb8a88af38c17628e34889..257478af794e99be8a0fc1631f8bf81e48d4e13d 100644 GIT binary patch literal 6148 zcmeHKu};H447DLcfl72_ydUV$4T&XG;R8^A0NRRz)HD@U7pD9LUx3(9nV8vF_yN9x zk&)*+(l_ z;&)D?C2LzS28@CK#(=!Lb?VWOuBZuIyuW>#3X2ZtdTE9L?Hrvu8j0Kf>#UNDzlLVTQJte6MH4upd%Fu1a|7#!TO?$j<; z%mW5@Vr@QHZ)WXK*x!!xoi`_r1DZAljDa!(+u^Yx_5bAi{=e*GPsV^Tuu%+flys6d zQqtPGl$_LBhjE4>B6fK|?*gUe*iWPsA7FUFo|6eMR?Gup1!8{$JPoFdfj?#76L1cU A_W%F@ literal 7094 zcmeHLI}XAy40Q@fj1>bj6Y33M%n3LL$KVKv%fQIaDVRA#u@eWiRY0^ARe)zH@h@)N zm$Z^iWGEwR$x$&UTC$YqUf)iLHf$?cwLEq_3{81vnt9fo%d(`^`a*~Ol}^W7(+wR6 z00AHX1b_e#00JLIAgfXP&1&IU>hbk#RWqJOQRf@RVdHf-!-ng@@UuiiKmZ5; z0U#gXT)GJTKs4hWlUmH+?% diff --git a/doc/cli/npm-access.md b/docs/content/cli-commands/npm-access.md old mode 100644 new mode 100755 similarity index 74% rename from doc/cli/npm-access.md rename to docs/content/cli-commands/npm-access.md index aeea0178ec66d..f2411af26e761 --- a/doc/cli/npm-access.md +++ b/docs/content/cli-commands/npm-access.md @@ -1,22 +1,31 @@ -npm-access(1) -- Set access level on published packages -======================================================= +--- +section: cli-commands +title: npm-access +description: Set access level on published packages +--- -## SYNOPSIS +# npm-access - npm access public [] - npm access restricted [] +## Set access level on published packages - npm access grant [] - npm access revoke [] +### Synopsis - npm access 2fa-required [] - npm access 2fa-not-required [] +```bash +npm access public [] +npm access restricted [] - npm access ls-packages [||] - npm access ls-collaborators [ []] - npm access edit [] +npm access grant [] +npm access revoke [] -## DESCRIPTION +npm access 2fa-required [] +npm access 2fa-not-required [] + +npm access ls-packages [||] +npm access ls-collaborators [ []] +npm access edit [] +``` + +### Description Used to set access controls on private packages. @@ -48,7 +57,7 @@ subcommand. * edit: Set the access privileges for a package at once using `$EDITOR`. -## DETAILS +### Details `npm access` always operates directly on the current registry, configurable from the command line using `--registry=`. @@ -75,10 +84,10 @@ with an HTTP 402 status code (logically enough), unless you use Management of teams and team memberships is done with the `npm team` command. -## SEE ALSO +### See Also * [`libnpmaccess`](https://npm.im/libnpmaccess) -* npm-team(1) -* npm-publish(1) -* npm-config(7) -* npm-registry(7) +* [npm team](/cli-commands/npm-team) +* [npm publish](/cli-commands/npm-publish) +* [npm config](/cli-commands/npm-config) +* [npm registry](/using-npm/registry) diff --git a/doc/cli/npm-adduser.md b/docs/content/cli-commands/npm-adduser.md old mode 100644 new mode 100755 similarity index 69% rename from doc/cli/npm-adduser.md rename to docs/content/cli-commands/npm-adduser.md index 72433e00f7483..0a549005f1e3a --- a/doc/cli/npm-adduser.md +++ b/docs/content/cli-commands/npm-adduser.md @@ -1,17 +1,26 @@ -npm-adduser(1) -- Add a registry user account -============================================= + --- +section: cli-commands +title: npm-adduser +description: Set access level on published packages +--- -## SYNOPSIS +# npm-adduser - npm adduser [--registry=url] [--scope=@orgname] [--always-auth] [--auth-type=legacy] +## Add a registry user account - aliases: login, add-user +### Synopsis -## DESCRIPTION +```bash +npm adduser [--registry=url] [--scope=@orgname] [--always-auth] [--auth-type=legacy] + +aliases: login, add-user +``` + +### Description Create or verify a user named `` in the specified registry, and save the credentials to the `.npmrc` file. If no registry is specified, -the default registry will be used (see `npm-config(7)`). +the default registry will be used (see [`npm-config`](npm-config)). The username, password, and email are read in from prompts. @@ -26,30 +35,32 @@ your existing record. `npm login` is an alias to `adduser` and behaves exactly the same way. -## CONFIGURATION +### Configuration -### registry +#### registry Default: https://registry.npmjs.org/ The base URL of the npm package registry. If `scope` is also specified, this registry will only be used for packages with that scope. `scope` defaults -to the scope of the project directory you're currently in, if any. See `npm-scope(7)`. +to the scope of the project directory you're currently in, if any. See [`npm-scope`](/docs/using-npm/scope). -### scope +#### scope Default: none If specified, the user and login credentials given will be associated -with the specified scope. See `npm-scope(7)`. You can use both at the same time, +with the specified scope. See [`npm-scope`](/docs/using-npm/scope). You can use both at the same time, e.g. +```bash npm adduser --registry=http://myregistry.example.com --scope=@myco +``` This will set a registry for the given scope and login or create a user for that registry at the same time. -### always-auth +#### always-auth Default: false @@ -57,16 +68,18 @@ If specified, save configuration indicating that all requests to the given registry should include authorization information. Useful for private registries. Can be used with `--registry` and / or `--scope`, e.g. +```bash npm adduser --registry=http://private-registry.example.com --always-auth +``` This will ensure that all requests to that registry (including for tarballs) include an authorization header. This setting may be necessary for use with private registries where metadata and package tarballs are stored on hosts with -different hostnames. See `always-auth` in `npm-config(7)` for more details on +different hostnames. See `always-auth` in [`npm-config`](/docs/using-npm/config) for more details on always-auth. Registry-specific configuration of `always-auth` takes precedence over any global configuration. -### auth-type +#### auth-type * Default: `'legacy'` * Type: `'legacy'`, `'sso'`, `'saml'`, `'oauth'` @@ -75,11 +88,10 @@ What authentication strategy to use with `adduser`/`login`. Some npm registries (for example, npmE) might support alternative auth strategies besides classic username/password entry in legacy npm. -## SEE ALSO +### See Also -* npm-registry(7) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-owner(1) -* npm-whoami(1) +* [npm registry](/using-npm/registry) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [npm owner](/cli-commands/npm-owner) +* [npm whoami](/cli-commands/npm-whoami) diff --git a/doc/cli/npm-audit.md b/docs/content/cli-commands/npm-audit.md old mode 100644 new mode 100755 similarity index 85% rename from doc/cli/npm-audit.md rename to docs/content/cli-commands/npm-audit.md index d9cd725050cbe..8e488614142d0 --- a/doc/cli/npm-audit.md +++ b/docs/content/cli-commands/npm-audit.md @@ -1,73 +1,82 @@ -npm-audit(1) -- Run a security audit -==================================== +--- +section: cli-commands +title: npm-audit +description: Run a security audit +--- -## SYNOPSIS +# npm-audit - npm audit [--json|--parseable|--audit-level=(low|moderate|high|critical)] - npm audit fix [--force|--package-lock-only|--dry-run] - - common options: [--production] [--only=(dev|prod)] +## Run a security audit -## EXAMPLES +### Synposis + +```bash +npm audit [--json|--parseable|--audit-level=(low|moderate|high|critical)] +npm audit fix [--force|--package-lock-only|--dry-run] + +common options: [--production] [--only=(dev|prod)] +``` + +### Examples Scan your project for vulnerabilities and automatically install any compatible updates to vulnerable dependencies: -``` +```bash $ npm audit fix ``` Run `audit fix` without modifying `node_modules`, but still updating the pkglock: -``` +```bash $ npm audit fix --package-lock-only ``` Skip updating `devDependencies`: -``` +```bash $ npm audit fix --only=prod ``` Have `audit fix` install semver-major updates to toplevel dependencies, not just semver-compatible ones: -``` +```bash $ npm audit fix --force ``` Do a dry run to get an idea of what `audit fix` will do, and _also_ output install information in JSON format: -``` +```bash $ npm audit fix --dry-run --json ``` Scan your project for vulnerabilities and just show the details, without fixing anything: -``` +```bash $ npm audit ``` Get the detailed audit report in JSON format: -``` +```bash $ npm audit --json ``` Get the detailed audit report in plain text result, separated by tab characters, allowing for future reuse in scripting or command line post processing, like for example, selecting some of the columns printed: -``` +```bash $ npm audit --parseable ``` To parse columns, you can use for example `awk`, and just print some of them: -``` +```bash $ npm audit --parseable | awk -F $'\t' '{print $1,$4}' ``` Fail an audit only if the results include a vulnerability with a level of moderate or higher: -``` +```bash $ npm audit --audit-level=moderate ``` -## DESCRIPTION +### Description The audit command submits a description of the dependencies configured in your project to your default registry and asks for a report of known @@ -88,7 +97,7 @@ to specify the minimum vulnerability level that will cause the command to fail. option does not filter the report output, it simply changes the command's failure threshold. -## CONTENT SUBMITTED +### Content Submitted * npm_version * node_version @@ -96,7 +105,7 @@ threshold. * node_env * A scrubbed version of your package-lock.json or npm-shrinkwrap.json -### SCRUBBING +#### Scrubbing In order to ensure that potentially sensitive information is not included in the audit data bundle, some dependencies may have their names (and sometimes @@ -113,15 +122,15 @@ The non-reversible identifiers are a sha256 of a session-specific UUID and the value being replaced, ensuring a consistent value within the payload that is different between runs. -## EXIT CODE +### Exit Code The `npm audit` command will exit with a 0 exit code if no vulnerabilities were found. If vulnerabilities were found the exit code will depend on the `audit-level` configuration setting. -## SEE ALSO +### See Also -* npm-install(1) -* package-locks(5) -* config(7) +* [npm install](/cli-commands/npm-install) +* [package-locks](/configuring-npm/package-locks) +* [config](/using-npm/config) diff --git a/docs/content/cli-commands/npm-bin.md b/docs/content/cli-commands/npm-bin.md new file mode 100755 index 0000000000000..b612ea3cfe8c3 --- /dev/null +++ b/docs/content/cli-commands/npm-bin.md @@ -0,0 +1,26 @@ +--- +section: cli-commands +title: npm-bin +description: Display npm bin folder +--- + +# npm-bin + +## Display npm bin folder + +### Synopsis +```bash +npm bin [-g|--global] +``` + +### Description + +Print the folder where npm will install executables. + +### See Also + +* [npm prefix](/cli-commands/npm-prefix) +* [npm root](/cli-commands/npm-root) +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/docs/content/cli-commands/npm-bugs.md b/docs/content/cli-commands/npm-bugs.md new file mode 100755 index 0000000000000..46a3505808deb --- /dev/null +++ b/docs/content/cli-commands/npm-bugs.md @@ -0,0 +1,50 @@ +--- +section: cli-commands +title: npm-bugs +description: Bugs for a package in a web browser maybe +--- + +# npm-bugs + +## Bugs for a package in a web browser maybe + +### Synopsis +```bash +npm bugs [] + +aliases: issues +``` + +### Description + +This command tries to guess at the likely location of a package's +bug tracker URL, and then tries to open it using the `--browser` +config param. If no package name is provided, it will search for +a `package.json` in the current folder and use the `name` property. + +### Configuration + +#### browser + +* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` +* Type: String + +The browser that is called by the `npm bugs` command to open websites. + +#### registry + +* Default: https://registry.npmjs.org/ +* Type: url + +The base URL of the npm package registry. + + +### See Also + +* [npm docs](/cli-commands/npm-docs) +* [npm view](/cli-commands/npm-view) +* [npm publish](/cli-commands/npm-publish) +* [npm registry](/using-npm/registry) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [package.json](/configuring-npm/package-json) diff --git a/docs/content/cli-commands/npm-build.md b/docs/content/cli-commands/npm-build.md new file mode 100755 index 0000000000000..7d599b0a4b06d --- /dev/null +++ b/docs/content/cli-commands/npm-build.md @@ -0,0 +1,34 @@ +--- +section: cli-commands +title: npm-build +description: Build a package +--- + +# npm-build + +## Build a package + +### Synopsis +```shell +npm build [] +``` + +* ``: + A folder containing a `package.json` file in its root. + +### Description + +This is the plumbing command called by `npm link` and `npm install`. + +It should generally be called during installation, but if you need to run it +directly, run: +```bash + npm run-script build +``` + +### See Also + +* [npm install](/cli-commands/npm-install) +* [npm link](/cli-commands/npm-link) +* [npm scripts](/using-npm/scripts) +* [package.json](/configuring-npm/package-json) diff --git a/doc/cli/npm-bundle.md b/docs/content/cli-commands/npm-bundle.md old mode 100644 new mode 100755 similarity index 59% rename from doc/cli/npm-bundle.md rename to docs/content/cli-commands/npm-bundle.md index 69b3d83e458d7..8de9dc15c2d61 --- a/doc/cli/npm-bundle.md +++ b/docs/content/cli-commands/npm-bundle.md @@ -1,7 +1,14 @@ -npm-bundle(1) -- REMOVED -======================== +--- +section: cli-commands +title: npm-bundle +description: REMOVED +--- -## DESCRIPTION +# npm-bundle + +## REMOVED + +### Description The `npm bundle` command has been removed in 1.0, for the simple reason that it is no longer necessary, as the default behavior is now to @@ -9,6 +16,6 @@ install packages into the local space. Just use `npm install` now to do what `npm bundle` used to do. -## SEE ALSO +### See Also -* npm-install(1) +* [npm install](/cli-commands/npm-install) diff --git a/doc/cli/npm-cache.md b/docs/content/cli-commands/npm-cache.md old mode 100644 new mode 100755 similarity index 75% rename from doc/cli/npm-cache.md rename to docs/content/cli-commands/npm-cache.md index 92a6236c0c9e9..143cd9285b881 --- a/doc/cli/npm-cache.md +++ b/docs/content/cli-commands/npm-cache.md @@ -1,19 +1,28 @@ -npm-cache(1) -- Manipulates packages cache -========================================== +--- +section: cli-commands +title: npm-cache +description: Manipulates packages cache +--- -## SYNOPSIS +# npm-cache - npm cache add - npm cache add - npm cache add - npm cache add @ +## Manipulates packages cache - npm cache clean [] - aliases: npm cache clear, npm cache rm +### Synopsis - npm cache verify +```bash +npm cache add +npm cache add +npm cache add +npm cache add @ -## DESCRIPTION +npm cache clean [] +aliases: npm cache clear, npm cache rm + +npm cache verify +``` + +### Description Used to add, list, or clean the npm cache folder. @@ -29,7 +38,7 @@ Used to add, list, or clean the npm cache folder. Verify the contents of the cache folder, garbage collecting any unneeded data, and verifying the integrity of the cache index and all cached data. -## DETAILS +### Details npm stores cache data in an opaque directory within the configured `cache`, named `_cacache`. This directory is a `cacache`-based content-addressable cache @@ -51,7 +60,7 @@ directly. npm will not remove data by itself: the cache will grow as new packages are installed. -## A NOTE ABOUT THE CACHE'S DESIGN +### A note about the cache's design The npm cache is strictly a cache: it should not be relied upon as a persistent and reliable data store for package data. npm makes no guarantee that a @@ -62,22 +71,21 @@ if it does return data, that data will be exactly the data that was inserted. To run an offline verification of existing cache contents, use `npm cache verify`. -## CONFIGURATION +### Configuration -### cache +#### cache Default: `~/.npm` on Posix, or `%AppData%/npm-cache` on Windows. The root cache folder. -## SEE ALSO +### See Also -* npm-folders(5) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-install(1) -* npm-publish(1) -* npm-pack(1) +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [npm install](/cli-commands/npm-install) +* [npm publish](/cli-commands/npm-publish) +* [npm pack](/cli-commands/npm-pack) * https://npm.im/cacache * https://npm.im/pacote diff --git a/doc/cli/npm-ci.md b/docs/content/cli-commands/npm-ci.md old mode 100644 new mode 100755 similarity index 78% rename from doc/cli/npm-ci.md rename to docs/content/cli-commands/npm-ci.md index 289bb7c195a9e..88d12a7e6aa15 --- a/doc/cli/npm-ci.md +++ b/docs/content/cli-commands/npm-ci.md @@ -1,15 +1,23 @@ -npm-ci(1) -- Install a project with a clean slate -=================================== +--- +section: cli-commands +title: npm-ci +description: Install a project with a clean slate +--- -## SYNOPSIS +# npm-ci - npm ci +## Install a project with a clean slate -## EXAMPLE +### Synopsis +```bash +npm ci +``` + +### Example Make sure you have a package-lock and an up-to-date install: -``` +```bash $ cd ./my/npm/project $ npm install added 154 packages in 10s @@ -18,14 +26,14 @@ $ ls | grep package-lock Run `npm ci` in that project -``` +```bash $ npm ci added 154 packages in 5s ``` Configure Travis to build using `npm ci` instead of `npm install`: -``` +```bash # .travis.yml install: - npm ci @@ -35,9 +43,9 @@ cache: - "$HOME/.npm" ``` -## DESCRIPTION +### Description -This command is similar to `npm-install(1)`, except it's meant to be used in +This command is similar to [`npm-install`](npm-install), except it's meant to be used in automated environments such as test platforms, continuous integration, and deployment -- or any situation where you want to make sure you're doing a clean install of your dependencies. It can be significantly faster than a regular npm @@ -53,7 +61,7 @@ In short, the main differences between using `npm install` and `npm ci` are: * If a `node_modules` is already present, it will be automatically removed before `npm ci` begins its install. * It will never write to `package.json` or any of the package-locks: installs are essentially frozen. -## SEE ALSO +### See Also -* npm-install(1) -* npm-package-locks(5) +* [npm install](/cli-commands/npm-install) +* [package-locks](/configuring-npm/package-locks) diff --git a/doc/cli/npm-completion.md b/docs/content/cli-commands/npm-completion.md old mode 100644 new mode 100755 similarity index 62% rename from doc/cli/npm-completion.md rename to docs/content/cli-commands/npm-completion.md index 57fa3bbd38ce0..87685966df016 --- a/doc/cli/npm-completion.md +++ b/docs/content/cli-commands/npm-completion.md @@ -1,11 +1,19 @@ -npm-completion(1) -- Tab Completion for npm -=========================================== +--- +section: cli-commands +title: npm-completion +description: Tab Completion for npm +--- -## SYNOPSIS +# npm-completion - source <(npm completion) +## Tab Completion for npm -## DESCRIPTION +### Synopsis +```bash +source <(npm completion) +``` + +### Description Enables tab-completion in all npm commands. @@ -14,8 +22,10 @@ loads the completions into your current shell. Adding it to your ~/.bashrc or ~/.zshrc will make the completions available everywhere: - npm completion >> ~/.bashrc - npm completion >> ~/.zshrc +```bash +npm completion >> ~/.bashrc +npm completion >> ~/.zshrc +``` You may of course also pipe the output of `npm completion` to a file such as `/usr/local/etc/bash_completion.d/npm` or @@ -26,7 +36,7 @@ When `COMP_CWORD`, `COMP_LINE`, and `COMP_POINT` are defined in the environment, `npm completion` acts in "plumbing mode", and outputs completions based on the arguments. -## SEE ALSO +### See Also -* npm-developers(7) -* npm(1) +* [npm developers](/using-npm/developers) +* [npm](/cli-commands/npm) diff --git a/docs/content/cli-commands/npm-config.md b/docs/content/cli-commands/npm-config.md new file mode 100755 index 0000000000000..7082603d11a7b --- /dev/null +++ b/docs/content/cli-commands/npm-config.md @@ -0,0 +1,85 @@ +--- +section: cli-commands +title: npm-config +description: Manage the npm configuration files +--- + +# npm-config + +## Manage the npm configuration files + +### Synopsis +```bash +npm config set [-g|--global] +npm config get +npm config delete +npm config list [-l] [--json] +npm config edit +npm get +npm set [-g|--global] + +aliases: c +``` + +### Description + +npm gets its config settings from the command line, environment +variables, `npmrc` files, and in some cases, the `package.json` file. + +See [npmrc](/docs/configuring-npm/npmrc) for more information about the npmrc files. + +See [config](/docs/using-npm/config) for a more thorough discussion of the mechanisms +involved. + +The `npm config` command can be used to update and edit the contents +of the user and global npmrc files. + +### Sub-commands + +Config supports the following sub-commands: + +#### set +```bash +npm config set key value +``` +Sets the config key to the value. + +If value is omitted, then it sets it to "true". + +#### get +```bash +npm config get key +``` + +Echo the config value to stdout. + +#### list +```bash +npm config list +``` + +Show all the config settings. Use `-l` to also show defaults. Use `--json` +to show the settings in json format. + +#### delete +```bash +npm config delete key +``` + +Deletes the key from all configuration files. + +#### edit +```bash +npm config edit +``` + +Opens the config file in an editor. Use the `--global` flag to edit the +global config. + +### See Also + +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [package.json](/configuring-npm/package-json) +* [npmrc](/configuring-npm/npmrc) +* [npm](/cli-commands/npm) diff --git a/doc/cli/npm-dedupe.md b/docs/content/cli-commands/npm-dedupe.md old mode 100644 new mode 100755 similarity index 64% rename from doc/cli/npm-dedupe.md rename to docs/content/cli-commands/npm-dedupe.md index d68832145f0a5..a4abf53dff107 --- a/doc/cli/npm-dedupe.md +++ b/docs/content/cli-commands/npm-dedupe.md @@ -1,14 +1,22 @@ -npm-dedupe(1) -- Reduce duplication -=================================== +--- +section: cli-commands +title: npm-dedupe +description: Reduce duplication +--- -## SYNOPSIS +# npm-dedupe - npm dedupe - npm ddp +## Reduce duplication - aliases: find-dupes, ddp +### Synopsis +```bash +npm dedupe +npm ddp -## DESCRIPTION +aliases: find-dupes, ddp +``` + +### Description Searches the local package tree and attempts to simplify the overall structure by moving dependencies further up the tree, where they can @@ -16,18 +24,22 @@ be more effectively shared by multiple dependent packages. For example, consider this dependency graph: - a - +-- b <-- depends on c@1.0.x - | `-- c@1.0.3 - `-- d <-- depends on c@~1.0.9 - `-- c@1.0.10 +```bash +a ++-- b <-- depends on c@1.0.x +| `-- c@1.0.3 +`-- d <-- depends on c@~1.0.9 + `-- c@1.0.10 +``` -In this case, `npm-dedupe(1)` will transform the tree to: +In this case, `npm-dedupe` will transform the tree to: - a - +-- b - +-- d - `-- c@1.0.10 +```bash +a ++-- b ++-- d +`-- c@1.0.10 +``` Because of the hierarchical nature of node's module lookup, b and d will both get their dependency met by the single c package at the root @@ -48,8 +60,8 @@ Modules Note that this operation transforms the dependency tree, but will never result in new modules being installed. -## SEE ALSO +### See Also -* npm-ls(1) -* npm-update(1) -* npm-install(1) +* [npm ls](/cli-commands/npm-ls) +* [npm update](/cli-commands/npm-update) +* [npm install](/cli-commands/npm-install) diff --git a/doc/cli/npm-deprecate.md b/docs/content/cli-commands/npm-deprecate.md old mode 100644 new mode 100755 similarity index 57% rename from doc/cli/npm-deprecate.md rename to docs/content/cli-commands/npm-deprecate.md index 3660f49ab654f..29fcd62cdacd0 --- a/doc/cli/npm-deprecate.md +++ b/docs/content/cli-commands/npm-deprecate.md @@ -1,19 +1,27 @@ -npm-deprecate(1) -- Deprecate a version of a package -==================================================== +--- +section: cli-commands +title: npm-deprecate +description: Deprecate a version of a package +--- +# npm-deprecate -## SYNOPSIS +## Deprecate a version of a package - npm deprecate [@] +### Synopsis +```bash +npm deprecate [@] +``` -## DESCRIPTION +### Description This command will update the npm registry entry for a package, providing a deprecation warning to all who attempt to install it. It works on [version ranges](https://semver.npmjs.com/) as well as specific versions, so you can do something like this: - - npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3" +```bash +npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3" +``` Note that you must be the package owner to deprecate something. See the `owner` and `adduser` help topics. @@ -22,7 +30,7 @@ To un-deprecate a package, specify an empty string (`""`) for the `message` argument. Note that you must use double quotes with no space between them to format an empty string. -## SEE ALSO +### See Also -* npm-publish(1) -* npm-registry(7) +* [npm publish](/cli-commands/npm-publish) +* [npm registry](/using-npm/registry) diff --git a/doc/cli/npm-dist-tag.md b/docs/content/cli-commands/npm-dist-tag.md old mode 100644 new mode 100755 similarity index 75% rename from doc/cli/npm-dist-tag.md rename to docs/content/cli-commands/npm-dist-tag.md index 7de3c828fb215..501975dc50e99 --- a/doc/cli/npm-dist-tag.md +++ b/docs/content/cli-commands/npm-dist-tag.md @@ -1,15 +1,24 @@ -npm-dist-tag(1) -- Modify package distribution tags -=================================================== + --- +section: cli-commands +title: npm-dist-tag +description: Modify package distribution tags +--- -## SYNOPSIS +# npm-dist-tag - npm dist-tag add @ [] - npm dist-tag rm - npm dist-tag ls [] +## Modify package distribution tags - aliases: dist-tags -## DESCRIPTION +### Synopsis +```bash +npm dist-tag add @ [] +npm dist-tag rm +npm dist-tag ls [] + +aliases: dist-tags +``` + +### Description Add, remove, and enumerate distribution tags on a package: @@ -24,18 +33,20 @@ Add, remove, and enumerate distribution tags on a package: * ls: Show all of the dist-tags for a package, defaulting to the package in - the current prefix. - - This is the default action if none is specified. + the current prefix. This is the default action if none is specified. A tag can be used when installing packages as a reference to a version instead of using a specific version number: - npm install @ +```bash +npm install @ +``` When installing dependencies, a preferred tagged version may be specified: - npm install --tag +```bash +npm install --tag +``` This also applies to `npm dedupe`. @@ -45,7 +56,7 @@ Publishing a package sets the `latest` tag to the published version unless the By default, `npm install ` (without any `@` or `@` specifier) installs the `latest` tag. -## PURPOSE +### Purpose Tags can be used to provide an alias instead of version numbers. @@ -64,7 +75,7 @@ The `next` tag is used by some projects to identify the upcoming version. By default, other than `latest`, no tag has any special significance to npm itself. -## CAVEATS +### Caveats This command used to be known as `npm tag`, which only created new tags, and so had a different syntax. @@ -79,12 +90,11 @@ example, `v1.4` cannot be used as a tag, because it is interpreted by semver as The simplest way to avoid semver problems with tags is to use tags that do not begin with a number or the letter `v`. -## SEE ALSO +### See Also -* npm-publish(1) -* npm-install(1) -* npm-dedupe(1) -* npm-registry(7) -* npm-config(1) -* npm-config(7) -* npmrc(5) +* [npm publish](/cli-commands/npm-publish) +* [npm install](/cli-commands/npm-install) +* [npm dedupe](/cli-commands/npm-dedupe) +* [npm registry](/using-npm/registry) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/docs/content/cli-commands/npm-docs.md b/docs/content/cli-commands/npm-docs.md new file mode 100755 index 0000000000000..b53cc5740e60f --- /dev/null +++ b/docs/content/cli-commands/npm-docs.md @@ -0,0 +1,53 @@ +--- +section: cli-commands +title: npm-docs +description: Docs for a package in a web browser maybe +--- + +# npm-docs + +## Docs for a package in a web browser maybe + + +### Synopsis + +```bash +npm docs [ [ ...]] +npm docs . +npm home [ [ ...]] +npm home . +``` + +### Description + +This command tries to guess at the likely location of a package's +documentation URL, and then tries to open it using the `--browser` +config param. You can pass multiple package names at once. If no +package name is provided, it will search for a `package.json` in +the current folder and use the `name` property. + +### Configuration + +#### browser + +* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` +* Type: String + +The browser that is called by the `npm docs` command to open websites. + +#### registry + +* Default: https://registry.npmjs.org/ +* Type: url + +The base URL of the npm package registry. + + +### See Also + +* [npm view](/cli-commands/npm-view) +* [npm publish](/cli-commands/npm-publish) +* [npm registry](/using-npm/registry) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [package.json](/configuring-npm/package-json) diff --git a/doc/cli/npm-doctor.md b/docs/content/cli-commands/npm-doctor.md old mode 100644 new mode 100755 similarity index 90% rename from doc/cli/npm-doctor.md rename to docs/content/cli-commands/npm-doctor.md index 1a5738505cefe..12f7e2b66e753 --- a/doc/cli/npm-doctor.md +++ b/docs/content/cli-commands/npm-doctor.md @@ -1,11 +1,20 @@ -npm-doctor(1) -- Check your environments -======================================================== +--- +section: cli-commands +title: npm-doctor +description: Check your environments +--- -## SYNOPSIS +# npm-doctor - npm doctor +## Check your environments -## DESCRIPTION +### Synopsis + +```bash +npm doctor +``` + +### Description `npm doctor` runs a set of checks to ensure that your npm installation has what it needs to manage your JavaScript packages. npm is mostly a standalone tool, but it does @@ -29,7 +38,7 @@ better than an old version. `npm doctor` verifies the following items in your environment, and if there are any recommended changes, it will display them. -### `npm ping` +#### `npm ping` By default, npm installs from the primary npm registry, `registry.npmjs.org`. `npm doctor` hits a special ping endpoint within the registry. This can also be @@ -42,7 +51,7 @@ what that is by running `npm config get registry`), and if you're using a private registry that doesn't support the `/whoami` endpoint supported by the primary registry, this check may fail. -### `npm -v` +#### `npm -v` While Node.js may come bundled with a particular version of npm, it's the policy of the CLI team that we recommend all users run `npm@latest` if they @@ -52,7 +61,7 @@ releases typically only receive critical security and regression fixes. The team believes that the latest tested version of npm is almost always likely to be the most functional and defect-free version of npm. -### `node -v` +#### `node -v` For most users, in most circumstances, the best version of Node will be the latest long-term support (LTS) release. Those of you who want access to new @@ -61,7 +70,7 @@ running a newer version, and some of you may be required to run an older version of Node because of enterprise change control policies. That's OK! But in general, the npm team recommends that most users run Node.js LTS. -### `npm config get registry` +#### `npm config get registry` Some of you may be installing from private package registries for your project or company. That's great! Others of you may be following tutorials or @@ -70,7 +79,7 @@ having. Sometimes, this may entail changing the registry you're pointing at. This part of `npm doctor` just lets you, and maybe whoever's helping you with support, know that you're not using the default registry. -### `which git` +#### `which git` While it's documented in the README, it may not be obvious that npm needs Git installed to do many of the things that it does. Also, in some cases @@ -78,14 +87,14 @@ installed to do many of the things that it does. Also, in some cases accessible via your `PATH` so that npm can find it. This check ensures that Git is available. -### Permissions checks +#### Permissions checks * Your cache must be readable and writable by the user running npm. * Global package binaries must be writable by the user running npm. * Your local `node_modules` path, if you're running `npm doctor` with a project directory, must be readable and writable by the user running npm. -### Validate the checksums of cached packages +#### Validate the checksums of cached packages When an npm package is published, the publishing process generates a checksum that npm uses at install time to verify that the package didn't get corrupted @@ -95,8 +104,8 @@ get cache`, and see what's in that cache with `npm cache ls` – probably more than you were expecting!). In the event that there are corrupt packages in your cache, you should probably run `npm cache clean` and reset the cache. -## SEE ALSO +### See Also -* npm-bugs(1) -* npm-help(1) -* npm-ping(1) +* [npm bugs](/cli-commands/npm-bugs) +* [npm help](/cli-commands/npm-help) +* [npm ping](/cli-commands/npm-ping) diff --git a/doc/cli/npm-edit.md b/docs/content/cli-commands/npm-edit.md old mode 100644 new mode 100755 similarity index 56% rename from doc/cli/npm-edit.md rename to docs/content/cli-commands/npm-edit.md index f9913a015ad3b..fe62e34cbe8fc --- a/doc/cli/npm-edit.md +++ b/docs/content/cli-commands/npm-edit.md @@ -1,16 +1,25 @@ -npm-edit(1) -- Edit an installed package -======================================== +--- +section: cli-commands +title: npm-edit +description: Edit an installed package +--- -## SYNOPSIS +# npm-edit - npm edit [/...] +## Edit an installed package -## DESCRIPTION +### Synopsis + +```bash +npm edit [/...] +``` + +### Description Selects a (sub)dependency in the current working directory and opens the package folder in the default editor (or whatever you've configured as the npm `editor` config -- see -`npm-config(7)`.) +[`npm-config`](npm-config).) After it has been edited, the package is rebuilt so as to pick up any changes in compiled packages. @@ -19,9 +28,9 @@ For instance, you can do `npm install connect` to install connect into your package, and then `npm edit connect` to make a few changes to your locally installed copy. -## CONFIGURATION +### Configuration -### editor +#### editor * Default: `EDITOR` environment variable if set, or `"vi"` on Posix, or `"notepad"` on Windows. @@ -29,11 +38,10 @@ changes to your locally installed copy. The command to run for `npm edit` or `npm config edit`. -## SEE ALSO +### See Also -* npm-folders(5) -* npm-explore(1) -* npm-install(1) -* npm-config(1) -* npm-config(7) -* npmrc(5) +* [npm folders](/configuring-npm/folders) +* [npm explore](/cli-commands/npm-explore) +* [npm install](/cli-commands/npm-install) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/docs/content/cli-commands/npm-explore.md b/docs/content/cli-commands/npm-explore.md new file mode 100755 index 0000000000000..e690e57544e8a --- /dev/null +++ b/docs/content/cli-commands/npm-explore.md @@ -0,0 +1,50 @@ + --- +section: cli-commands +title: npm-explore +description: Browse an installed package +--- + +# npm-explore + +## description: Browse an installed package + +### Synopsis + +```bash +npm explore [ -- ] +``` + +### Description + +Spawn a subshell in the directory of the installed package specified. + +If a command is specified, then it is run in the subshell, which then +immediately terminates. + +This is particularly handy in the case of git submodules in the +`node_modules` folder: + +```bash +npm explore some-dependency -- git pull origin master +``` + +Note that the package is *not* automatically rebuilt afterwards, so be +sure to use `npm rebuild ` if you make any changes. + +### Configuration + +#### shell + +* Default: SHELL environment variable, or "bash" on Posix, or "cmd" on + Windows +* Type: path + +The shell to run for the `npm explore` command. + +### See Also + +* [npm folders](/configuring-npm/folders) +* [npm edit](/cli-commands/npm-edit) +* [npm rebuild](/cli-commands/npm-rebuild) +* [npm build](/cli-commands/npm-build) +* [npm install](/cli-commands/npm-install) diff --git a/doc/cli/npm-help-search.md b/docs/content/cli-commands/npm-help-search.md old mode 100644 new mode 100755 similarity index 64% rename from doc/cli/npm-help-search.md rename to docs/content/cli-commands/npm-help-search.md index 74e1011ab0067..be5ba1410e735 --- a/doc/cli/npm-help-search.md +++ b/docs/content/cli-commands/npm-help-search.md @@ -1,11 +1,20 @@ -npm-help-search(1) -- Search npm help documentation -=================================================== +--- +section: cli-commands +title: npm-help-search +description: Search npm help documentation +--- -## SYNOPSIS +# npm-help-search - npm help-search +## Search npm help documentation -## DESCRIPTION +### Synopsis + +```bash +npm help-search +``` + +### Description This command will search the npm markdown documentation files for the terms provided, and then list the results, sorted by relevance. @@ -16,9 +25,9 @@ If the argument to `npm help` is not a known help topic, then it will call `help-search`. It is rarely if ever necessary to call this command directly. -## CONFIGURATION +### Configuration -### long +#### long * Type: Boolean * Default: false @@ -28,7 +37,7 @@ where the terms were found in the documentation. If false, then help-search will just list out the help topics found. -## SEE ALSO +### See Also -* npm(1) -* npm-help(1) +* [npm](/cli-commands/npm) +* [npm help](/cli-commands/npm-help) diff --git a/doc/cli/npm-help.md b/docs/content/cli-commands/npm-help.md old mode 100644 new mode 100755 similarity index 51% rename from doc/cli/npm-help.md rename to docs/content/cli-commands/npm-help.md index 5230082b923fa..724382aae8c4a --- a/doc/cli/npm-help.md +++ b/docs/content/cli-commands/npm-help.md @@ -1,11 +1,20 @@ -npm-help(1) -- Get help on npm -============================== +--- +section: cli-commands +title: npm-help +description: Get help on npm +--- -## SYNOPSIS +# npm-help - npm help [] +## Get help on npm -## DESCRIPTION +### Synopsis + +```bash +npm help [] +``` + +### Description If supplied a topic, then show the appropriate documentation page. @@ -14,9 +23,9 @@ the `help-search` command to find a match. Note that, if `help-search` finds a single subject, then it will run `help` on that topic, so unique matches are equivalent to specifying a topic name. -## CONFIGURATION +### Configuration -### viewer +#### viewer * Default: "man" on Posix, "browser" on Windows * Type: path @@ -25,14 +34,12 @@ The program to use to view help content. Set to `"browser"` to view html help content in the default web browser. -## SEE ALSO - -* npm(1) -* README -* npm-folders(5) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* package.json(5) -* npm-help-search(1) -* npm-index(7) +### See Also + +* [npm](/cli-commands/npm) +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [package.json](/configuring-npm/package-json) +* [npm help-search](/cli-commands/npm-help-search) +* [npm index](/cli-commands/npm-index) diff --git a/doc/cli/npm-hook.md b/docs/content/cli-commands/npm-hook.md old mode 100644 new mode 100755 similarity index 82% rename from doc/cli/npm-hook.md rename to docs/content/cli-commands/npm-hook.md index 519287242574a..db935be301684 --- a/doc/cli/npm-hook.md +++ b/docs/content/cli-commands/npm-hook.md @@ -1,51 +1,60 @@ -npm-hook(1) -- Manage registry hooks -=================================== +--- +section: cli-commands +title: npm-hook +description: Manage registry hooks +--- -## SYNOPSIS +# npm-hook - npm hook ls [pkg] - npm hook add - npm hook update [secret] - npm hook rm +## Manage registry hooks -## EXAMPLE +### Synopsis -Add a hook to watch a package for changes: +```bash +npm hook ls [pkg] +npm hook add +npm hook update [secret] +npm hook rm ``` + +### Example + +Add a hook to watch a package for changes: +```bash $ npm hook add lodash https://example.com/ my-shared-secret ``` Add a hook to watch packages belonging to the user `substack`: -``` +```bash $ npm hook add ~substack https://example.com/ my-shared-secret ``` Add a hook to watch packages in the scope `@npm` -``` +```bash $ npm hook add @npm https://example.com/ my-shared-secret ``` List all your active hooks: -``` +```bash $ npm hook ls ``` List your active hooks for the `lodash` package: -``` +```bash $ npm hook ls lodash ``` Update an existing hook's url: -``` +```bash $ npm hook update id-deadbeef https://my-new-website.here/ ``` Remove a hook: -``` +```bash $ npm hook rm id-deadbeef ``` -## DESCRIPTION +### Description Allows you to manage [npm hooks](https://blog.npmjs.org/post/145260155635/introducing-hooks-get-notifications-of-npm), @@ -67,6 +76,6 @@ that particular hook. The shared secret will be sent along to the URL endpoint so you can verify the request came from your own configured hook. -## SEE ALSO +### See Also * ["Introducing Hooks" blog post](https://blog.npmjs.org/post/145260155635/introducing-hooks-get-notifications-of-npm) diff --git a/doc/cli/npm-init.md b/docs/content/cli-commands/npm-init.md old mode 100644 new mode 100755 similarity index 73% rename from doc/cli/npm-init.md rename to docs/content/cli-commands/npm-init.md index b91bcafae8377..10938aa7011fd --- a/doc/cli/npm-init.md +++ b/docs/content/cli-commands/npm-init.md @@ -1,43 +1,51 @@ -npm-init(1) -- create a package.json file -======================================================= +--- +section: cli-commands +title: npm-init +description: create a package.json file +--- -## SYNOPSIS +# npm-init - npm init [--force|-f|--yes|-y|--scope] - npm init <@scope> (same as `npx <@scope>/create`) - npm init [<@scope>/] (same as `npx [<@scope>/]create-`) +## create a package.json file -## EXAMPLES +### Synopsis +```bash +npm init [--force|-f|--yes|-y|--scope] +npm init <@scope> (same as `npx <@scope>/create`) +npm init [<@scope>/] (same as `npx [<@scope>/]create-`) +``` + +### Examples Create a new React-based project using [`create-react-app`](https://npm.im/create-react-app): -``` +```bash $ npm init react-app ./my-react-app ``` Create a new `esm`-compatible package using [`create-esm`](https://npm.im/create-esm): -``` +```bash $ mkdir my-esm-lib && cd my-esm-lib $ npm init esm --yes ``` Generate a plain old package.json using legacy init: -``` +```bash $ mkdir my-npm-pkg && cd my-npm-pkg $ git init $ npm init ``` Generate it without having it ask any questions: -``` +```bash $ npm init -y ``` -## DESCRIPTION +### Description `npm init ` can be used to set up a new or existing npm package. `initializer` in this case is an npm package named `create-`, which -will be installed by [`npx(1)`](https://npm.im/npx), and then have its main bin +will be installed by [`npx`](https://npm.im/npx), and then have its main bin executed -- presumably creating or updating `package.json` and running any other initialization-related operations. @@ -58,9 +66,9 @@ it will keep any fields and values that were already set. You can also use `-y`/`--yes` to skip the questionnaire altogether. If you pass `--scope`, it will create a scoped package. -## SEE ALSO +### See Also * -* package.json(5) -* npm-version(1) -* npm-scope(7) +* [package.json](/configuring-npm/package-json) +* [npm version](/cli-commands/npm-version) +* [npm scope](/using-npm/scope) diff --git a/docs/content/cli-commands/npm-install-ci-test.md b/docs/content/cli-commands/npm-install-ci-test.md new file mode 100755 index 0000000000000..46cab812cbe98 --- /dev/null +++ b/docs/content/cli-commands/npm-install-ci-test.md @@ -0,0 +1,26 @@ +--- +section: cli-commands +title: npm-install-ci-test +description: Install a project with a clean slate and run tests +--- + +# npm install-ci-test + +## Install a project with a clean slate and run tests + +### Synopsis + +```bash +npm install-ci-test + +alias: npm cit +``` + +### Description + +This command runs an `npm ci` followed immediately by an `npm test`. + +### See Also + +* [npm ci](/cli-commands/npm-ci) +* [npm test](/cli-commands/npm-test) diff --git a/docs/content/cli-commands/npm-install-test.md b/docs/content/cli-commands/npm-install-test.md new file mode 100755 index 0000000000000..69912084c1be3 --- /dev/null +++ b/docs/content/cli-commands/npm-install-test.md @@ -0,0 +1,35 @@ +--- +section: cli-commands +title: npm-install-test +description: Install package(s) and run tests +--- + +# npm install-test + +## Install package(s) and run tests + +### Synopsis + +```bash +npm install-test (with no args, in package dir) +npm install-test [<@scope>/] +npm install-test [<@scope>/]@ +npm install-test [<@scope>/]@ +npm install-test [<@scope>/]@ +npm install-test +npm install-test +npm install-test + +alias: npm it +common options: [--save|--save-dev|--save-optional] [--save-exact] [--dry-run] +``` + +### Description + +This command runs an `npm install` followed immediately by an `npm test`. It +takes exactly the same arguments as `npm install`. + +### See Also + +* [npm install](/cli-commands/npm-install) +* [npm test](/cli-commands/npm-test) diff --git a/doc/cli/npm-install.md b/docs/content/cli-commands/npm-install.md old mode 100644 new mode 100755 similarity index 75% rename from doc/cli/npm-install.md rename to docs/content/cli-commands/npm-install.md index 4ff4a47cbcf4e..684ab9ffa1b7f --- a/doc/cli/npm-install.md +++ b/docs/content/cli-commands/npm-install.md @@ -1,36 +1,45 @@ -npm-install(1) -- Install a package -=================================== +--- +section: cli-commands +title: npm-install +description: Install a package +--- -## SYNOPSIS +# npm-install - npm install (with no args, in package dir) - npm install [<@scope>/] - npm install [<@scope>/]@ - npm install [<@scope>/]@ - npm install [<@scope>/]@ - npm install :/ - npm install - npm install - npm install - npm install +## Install a package - aliases: npm i, npm add - common options: [-P|--save-prod|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--no-save] [--dry-run] +### Synopsis -## DESCRIPTION +```bash +npm install (with no args, in package dir) +npm install [<@scope>/] +npm install [<@scope>/]@ +npm install [<@scope>/]@ +npm install [<@scope>/]@ +npm install :/ +npm install +npm install +npm install +npm install + +aliases: npm i, npm add +common options: [-P|--save-prod|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--no-save] [--dry-run] +``` + +### Description This command installs a package, and any packages that it depends on. If the package has a package-lock or shrinkwrap file, the installation of dependencies will be driven by that, with an `npm-shrinkwrap.json` taking precedence if both -files exist. See package-lock.json(5) and npm-shrinkwrap(1). +files exist. See [package-lock.json](/docs/configuring-npm/package-lock.json) and [`npm-shrinkwrap`](npm-shrinkwrap). A `package` is: -* a) a folder containing a program described by a `package.json(5)` file +* a) a folder containing a program described by a [`package.json`](/docs/configuring-npm/package-json) file * b) a gzipped tarball containing (a) * c) a url that resolves to (b) -* d) a `@` that is published on the registry (see `npm-registry(7)`) with (c) -* e) a `@` (see `npm-dist-tag(1)`) that points to (d) +* d) a `@` that is published on the registry (see [`npm-registry`](npm-registry)) with (c) +* e) a `@` (see [`npm-dist-tag`](npm-dist-tag)) that points to (d) * f) a `` that has a "latest" tag satisfying (e) * g) a `` that resolves to (a) @@ -49,7 +58,7 @@ after packing it up into a tarball (b). directory) as a global package. By default, `npm install` will install all modules listed as dependencies - in `package.json(5)`. + in [`package.json`](/docs/configuring-npm/package-json). With the `--production` flag (or when the `NODE_ENV` environment variable is set to `production`), npm will not install modules listed in @@ -93,7 +102,7 @@ after packing it up into a tarball (b). * `npm install [<@scope>/]`: Do a `@` install, where `` is the "tag" config. (See - `npm-config(7)`. The config's default value is `latest`.) + [`npm-config`](/docs/using-npm/config). The config's default value is `latest`.) In most cases, this will install the version of the modules tagged as `latest` on the npm registry. @@ -129,7 +138,7 @@ after packing it up into a tarball (b). `` is optional. The package will be downloaded from the registry associated with the specified scope. If no registry is associated with - the given scope the default registry is assumed. See `npm-scope(7)`. + the given scope the default registry is assumed. See [`npm-scope`](/docs/using-npm/scope). Note: if you do not include the @-symbol on your scope name, npm will interpret this as a GitHub repository instead, see below. Scopes names @@ -137,14 +146,15 @@ after packing it up into a tarball (b). Examples: - npm install sax - npm install githubname/reponame - npm install @myorg/privatepackage - npm install node-tap --save-dev - npm install dtrace-provider --save-optional - npm install readable-stream --save-exact - npm install ansi-regex --save-bundle - + ```bash + npm install sax + npm install githubname/reponame + npm install @myorg/privatepackage + npm install node-tap --save-dev + npm install dtrace-provider --save-optional + npm install readable-stream --save-exact + npm install ansi-regex --save-bundle + ``` **Note**: If there is a file or folder named `` in the current working directory, then it will try to install that, and only try to @@ -158,8 +168,10 @@ after packing it up into a tarball (b). Example: - npm install sax@latest - npm install @myorg/mypackage@latest + ```bash + npm install sax@latest + npm install @myorg/mypackage@latest + ``` * `npm install [<@scope>/]@`: @@ -168,28 +180,33 @@ after packing it up into a tarball (b). Example: - npm install sax@0.1.1 - npm install @myorg/privatepackage@1.5.0 + ```bash + npm install sax@0.1.1 + npm install @myorg/privatepackage@1.5.0 + ``` * `npm install [<@scope>/]@`: Install a version of the package matching the specified version range. This - will follow the same rules for resolving dependencies described in `package.json(5)`. + will follow the same rules for resolving dependencies described in [`package.json`](/docs/configuring-npm/package-json). Note that most version ranges must be put in quotes so that your shell will treat it as a single argument. Example: - - npm install sax@">=0.1.0 <0.2.0" - npm install @myorg/privatepackage@">=0.1.0 <0.2.0" + ```bash + npm install sax@">=0.1.0 <0.2.0" + npm install @myorg/privatepackage@">=0.1.0 <0.2.0" + ``` * `npm install `: Installs the package from the hosted git provider, cloning it with `git`. For a full git remote url, only that URL will be attempted. - ://[[:]@][:][:][/][# | #semver:] + ```bash + ://[[:]@][:][:][/][# | #semver:] + ``` `` is one of `git`, `git+ssh`, `git+http`, `git+https`, or `git+file`. @@ -223,11 +240,13 @@ after packing it up into a tarball (b). Examples: - npm install git+ssh://git@github.com:npm/cli.git#v1.0.27 - npm install git+ssh://git@github.com:npm/cli#semver:^5.0 - npm install git+https://isaacs@github.com/npm/cli.git - npm install git://github.com/npm/cli.git#v1.0.27 - GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/cli.git + ```bash + npm install git+ssh://git@github.com:npm/cli.git#v1.0.27 + npm install git+ssh://git@github.com:npm/cli#semver:^5.0 + npm install git+https://isaacs@github.com/npm/cli.git + npm install git://github.com/npm/cli.git#v1.0.27 + GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/cli.git + ``` * `npm install /[#]`: * `npm install github:/[#]`: @@ -247,9 +266,11 @@ after packing it up into a tarball (b). done installing. Examples: - - npm install mygithubuser/myproject - npm install github:mygithubuser/myproject + + ```bash + npm install mygithubuser/myproject + npm install github:mygithubuser/myproject + ``` * `npm install gist:[/][#|#semver:]`: @@ -262,8 +283,10 @@ after packing it up into a tarball (b). done installing. Example: - - npm install gist:101a11beef + + ```bash + npm install gist:101a11beef + ``` * `npm install bitbucket:/[#]`: @@ -282,8 +305,10 @@ after packing it up into a tarball (b). done installing. Example: - - npm install bitbucket:mybitbucketuser/myproject + + ```bash + npm install bitbucket:mybitbucketuser/myproject + ``` * `npm install gitlab:/[#]`: @@ -302,14 +327,18 @@ after packing it up into a tarball (b). done installing. Example: - - npm install gitlab:mygitlabuser/myproject - npm install gitlab:myusr/myproj#semver:^5.0 + + ```bash + npm install gitlab:mygitlabuser/myproject + npm install gitlab:myusr/myproj#semver:^5.0 + ``` You may combine multiple arguments, and even multiple types of arguments. For example: - npm install sax@">=0.1.0 <0.2.0" bench supervisor +```bash +npm install sax@">=0.1.0 <0.2.0" bench supervisor +``` The `--tag` argument will apply to all of the specified install targets. If a tag with the given name exists, the tagged version is preferred over newer @@ -324,10 +353,12 @@ instead of checking `node_modules` and downloading dependencies. The `-f` or `--force` argument will force npm to fetch remote resources even if a local copy exists on disk. - npm install sax --force +```bash +npm install sax --force +``` The `-g` or `--global` argument will cause npm to install the package globally -rather than locally. See `npm-folders(5)`. +rather than locally. See [npm-folders](/docs/configuring-npm/folders). The `--global-style` argument will cause npm to install the package into your local `node_modules` folder with the same layout it uses with the @@ -336,7 +367,7 @@ global `node_modules` folder. Only your direct dependencies will show in `node_modules` folders. This obviously will eliminate some deduping. The `--ignore-scripts` argument will cause npm to not execute any -scripts defined in the package.json. See `npm-scripts(7)`. +scripts defined in the package.json. See [`npm-scripts`](/docs/using-npm/scripts). The `--legacy-bundling` argument will cause npm to install the package such that versions of npm prior to 1.4, such as the one included with node 0.8, @@ -365,33 +396,36 @@ The `--only={prod[uction]|dev[elopment]}` argument will cause either only `devDependencies` or only non-`devDependencies` to be installed regardless of the `NODE_ENV`. The `--no-audit` argument can be used to disable sending of audit reports to -the configured registries. See `npm-audit(1)` for details on what is sent. +the configured registries. See [`npm-audit`](npm-audit) for details on what is sent. -See `npm-config(7)`. Many of the configuration params have some +See [`npm-config`](/docs/using-npm/config). Many of the configuration params have some effect on installation, since that's most of what npm does. -## ALGORITHM +#### Algorithm To install a package, npm uses the following algorithm: - - load the existing node_modules tree from disk - clone the tree - fetch the package.json and assorted metadata and add it to the clone - walk the clone and add any missing dependencies - dependencies will be added as close to the top as is possible - without breaking any other modules - compare the original tree with the cloned tree and make a list of - actions to take to convert one to the other - execute all of the actions, deepest first - kinds of actions are install, update, remove and move +```bash +load the existing node_modules tree from disk +clone the tree +fetch the package.json and assorted metadata and add it to the clone +walk the clone and add any missing dependencies + dependencies will be added as close to the top as is possible + without breaking any other modules +compare the original tree with the cloned tree and make a list of +actions to take to convert one to the other +execute all of the actions, deepest first + kinds of actions are install, update, remove and move +``` For this `package{dep}` structure: `A{B,C}, B{C}, C{D}`, this algorithm produces: - A - +-- B - +-- C - +-- D +```bash +A ++-- B ++-- C ++-- D +``` That is, the dependency from B to C is satisfied by the fact that A already caused C to be installed at a higher level. D is still installed @@ -399,18 +433,20 @@ at the top level because nothing conflicts with it. For `A{B,C}, B{C,D@1}, C{D@2}`, this algorithm produces: - A - +-- B - +-- C - `-- D@2 - +-- D@1 +```bash +A ++-- B ++-- C + `-- D@2 ++-- D@1 +``` Because B's D@1 will be installed in the top level, C now has to install D@2 privately for itself. This algorithm is deterministic, but different trees may be produced if two dependencies are requested for installation in a different order. -See npm-folders(5) for a more detailed description of the specific +See [npm-folders](/docs/configuring-npm/folders) for a more detailed description of the specific folder structures that npm creates. ### Limitations of npm's Install Algorithm @@ -423,7 +459,9 @@ There are some very rare and pathological edge-cases where a cycle can cause npm to try to install a never-ending tree of packages. Here is the simplest case: - A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ... +```bash +A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ... +``` where `A` is some version of a package, and `A'` is a different version of the same package. Because `B` depends on a different version of `A` @@ -438,20 +476,19 @@ folder ancestors. A more correct, but more complex, solution would be to symlink the existing version into the new location. If this ever affects a real use-case, it will be investigated. -## SEE ALSO - -* npm-folders(5) -* npm-update(1) -* npm-audit(1) -* npm-link(1) -* npm-rebuild(1) -* npm-scripts(7) -* npm-build(1) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-registry(7) -* npm-dist-tag(1) -* npm-uninstall(1) -* npm-shrinkwrap(1) -* package.json(5) +### See Also + +* [npm folders](/configuring-npm/folders) +* [npm update](/cli-commands/npm-update) +* [npm audit](/cli-commands/npm-audit) +* [npm link](/cli-commands/npm-link) +* [npm rebuild](/cli-commands/npm-rebuild) +* [npm scripts](/using-npm/scripts) +* [npm build](/cli-commands/npm-build) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [npm registry](/using-npm/registry) +* [npm dist-tag](/cli-commands/npm-dist-tag) +* [npm uninstall](/cli-commands/npm-uninstall) +* [npm shrinkwrap](/cli-commands/npm-shrinkwrap) +* [package.json](/configuring-npm/package-json) diff --git a/doc/cli/npm-link.md b/docs/content/cli-commands/npm-link.md old mode 100644 new mode 100755 similarity index 63% rename from doc/cli/npm-link.md rename to docs/content/cli-commands/npm-link.md index 3f6dc6e5bde7e..c93b9177cccde --- a/doc/cli/npm-link.md +++ b/docs/content/cli-commands/npm-link.md @@ -1,20 +1,29 @@ -npm-link(1) -- Symlink a package folder -======================================= +--- +section: cli-commands +title: npm-link +description: Symlink a package folder +--- -## SYNOPSIS +# npm-link - npm link (in package dir) - npm link [<@scope>/][@] +## Symlink a package folder - alias: npm ln +### Synopsis -## DESCRIPTION +```bash +npm link (in package dir) +npm link [<@scope>/][@] + +alias: npm ln +``` + +### Description Package linking is a two-step process. First, `npm link` in a package folder will create a symlink in the global folder `{prefix}/lib/node_modules/` that links to the package where the `npm -link` command was executed. (see `npm-config(7)` for the value of `prefix`). It +link` command was executed. (see [`npm-config`](npm-config) for the value of `prefix`). It will also link any bins in the package to `{prefix}/bin/{name}`. Next, in some other location, `npm link package-name` will create a @@ -24,7 +33,7 @@ of the current folder. Note that `package-name` is taken from `package.json`, not from directory name. -The package name can be optionally prefixed with a scope. See `npm-scope(7)`. +The package name can be optionally prefixed with a scope. See [`npm-scope`](npm-scope). The scope must be preceded by an @-symbol and followed by a slash. When creating tarballs for `npm publish`, the linked packages are @@ -35,10 +44,12 @@ test it iteratively without having to continually rebuild. For example: +```bash cd ~/projects/node-redis # go into the package directory npm link # creates global link cd ~/projects/node-bloggy # go into some other package directory. npm link redis # link-install the package +``` Now, any changes to ~/projects/node-redis will be reflected in ~/projects/node-bloggy/node_modules/node-redis/. Note that the link should @@ -47,13 +58,17 @@ be to the package name, not the directory name for that package. You may also shortcut the two steps in one. For example, to do the above use-case in a shorter way: - cd ~/projects/node-bloggy # go into the dir of your main project - npm link ../node-redis # link the dir of your dependency +```bash +cd ~/projects/node-bloggy # go into the dir of your main project +npm link ../node-redis # link the dir of your dependency +``` The second line is the equivalent of doing: - (cd ../node-redis; npm link) - npm link redis +```bash +(cd ../node-redis; npm link) +npm link redis +``` That is, it first creates a global link, and then links the global installation target into your project's `node_modules` folder. @@ -61,17 +76,18 @@ installation target into your project's `node_modules` folder. Note that in this case, you are referring to the directory name, `node-redis`, rather than the package name `redis`. -If your linked package is scoped (see `npm-scope(7)`) your link command must +If your linked package is scoped (see [`npm-scope`](npm-scope)) your link command must include that scope, e.g. - npm link @myorg/privatepackage +```bash +npm link @myorg/privatepackage +``` -## SEE ALSO +### See Also -* npm-developers(7) -* package.json(5) -* npm-install(1) -* npm-folders(5) -* npm-config(1) -* npm-config(7) -* npmrc(5) +* [npm developers](/using-npm/developers) +* [package.json](/configuring-npm/package-json) +* [npm- nstall](/cli-commands/npm-install) +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/doc/cli/npm-logout.md b/docs/content/cli-commands/npm-logout.md old mode 100644 new mode 100755 similarity index 61% rename from doc/cli/npm-logout.md rename to docs/content/cli-commands/npm-logout.md index fe6e7b990a289..7a5cf047034bf --- a/doc/cli/npm-logout.md +++ b/docs/content/cli-commands/npm-logout.md @@ -1,11 +1,20 @@ -npm-logout(1) -- Log out of the registry -======================================== +--- +section: cli-commands +title: npm-logout +description: Log out of the registry +--- -## SYNOPSIS +# npm-logout - npm logout [--registry=] [--scope=<@scope>] +## Log out of the registry -## DESCRIPTION +### Synopsis + +```bash +npm logout [--registry=] [--scope=<@scope>] +``` + +### Description When logged into a registry that supports token-based authentication, tell the server to end this token's session. This will invalidate the token everywhere @@ -18,28 +27,28 @@ the current environment. If `--scope` is provided, this will find the credentials for the registry connected to that scope, if set. -## CONFIGURATION +### Configuration -### registry +#### registry Default: https://registry.npmjs.org/ The base URL of the npm package registry. If `scope` is also specified, it takes precedence. -### scope +#### scope Default: The scope of your current project, if any, otherwise none. -If specified, you will be logged out of the specified scope. See `npm-scope(7)`. +If specified, you will be logged out of the specified scope. See [`npm-scope`](npm-scope). - npm logout --scope=@myco +```bash +npm logout --scope=@myco +``` -## SEE ALSO +### See Also -* npm-adduser(1) -* npm-registry(7) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-whoami(1) +* [npm adduser](/cli-commands/npm-adduser) +* [npm registry](/using-npm/registry) +* [npm config](/cli-commands/npm-config) +* [npm whoami](/cli-commands/npm-whoami) diff --git a/doc/cli/npm-ls.md b/docs/content/cli-commands/npm-ls.md old mode 100644 new mode 100755 similarity index 71% rename from doc/cli/npm-ls.md rename to docs/content/cli-commands/npm-ls.md index 7b10a19d69b2c..1eaa1bb92c4b3 --- a/doc/cli/npm-ls.md +++ b/docs/content/cli-commands/npm-ls.md @@ -1,13 +1,22 @@ -npm-ls(1) -- List installed packages -====================================== +--- +section: cli-commands +title: npm-ls +description: List installed packages +--- -## SYNOPSIS +# npm-ls - npm ls [[<@scope>/] ...] +## List installed packages - aliases: list, la, ll +### Synopsis -## DESCRIPTION +```bash +npm ls [[<@scope>/] ...] + +aliases: list, la, ll +``` + +### Description This command will print to stdout all the versions of packages that are installed, as well as their dependencies, in a tree-structure. @@ -17,9 +26,11 @@ limit the results to only the paths to the packages named. Note that nested packages will *also* show the paths to the specified packages. For example, running `npm ls promzard` in npm's source tree will show: +```bash npm@@VERSION@ /path/to/npm └─┬ init-package-json@0.0.4 └── promzard@0.1.5 +``` It will print out extraneous, missing, and invalid packages. @@ -32,30 +43,30 @@ dependencies, not the physical layout of your node_modules folder. When run as `ll` or `la`, it shows extended information by default. -## CONFIGURATION +### Configuration -### json +#### json * Default: false * Type: Boolean Show information in JSON format. -### long +#### long * Default: false * Type: Boolean Show extended information. -### parseable +#### parseable * Default: false * Type: Boolean Show parseable output instead of tree view. -### global +#### global * Default: false * Type: Boolean @@ -63,27 +74,27 @@ Show parseable output instead of tree view. List packages in the global install prefix instead of in the current project. -### depth +#### depth * Type: Int Max display depth of the dependency tree. -### prod / production +#### prod / production * Type: Boolean * Default: false Display only the dependency tree for packages in `dependencies`. -### dev / development +#### dev / development * Type: Boolean * Default: false Display only the dependency tree for packages in `devDependencies`. -### only +#### only * Type: String @@ -91,21 +102,20 @@ When "dev" or "development", is an alias to `dev`. When "prod" or "production", is an alias to `production`. -### link +#### link * Type: Boolean * Default: false Display only dependencies which are linked -## SEE ALSO - -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-folders(5) -* npm-install(1) -* npm-link(1) -* npm-prune(1) -* npm-outdated(1) -* npm-update(1) +### See Also + +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [npm folders](/configuring-npm/folders) +* [npm install](/cli-commands/npm-install) +* [npm link](/cli-commands/npm-link) +* [npm prune](/cli-commands/npm-prune) +* [npm outdated](/cli-commands/npm-outdated) +* [npm update](/cli-commands/npm-update) diff --git a/doc/cli/npm-org.md b/docs/content/cli-commands/npm-org.md old mode 100644 new mode 100755 similarity index 67% rename from doc/cli/npm-org.md rename to docs/content/cli-commands/npm-org.md index 802df4df57da7..3dca586670e5d --- a/doc/cli/npm-org.md +++ b/docs/content/cli-commands/npm-org.md @@ -1,50 +1,65 @@ -npm-org(1) -- Manage orgs -=================================== +--- +section: cli-commands +title: npm-org +description: Manage orgs +--- -## SYNOPSIS +# npm-org - npm org set [developer | admin | owner] - npm org rm - npm org ls [] +## Manage orgs -## EXAMPLE +### Synopsis -Add a new developer to an org: +```bash +npm org set [developer | admin | owner] +npm org rm +npm org ls [] ``` + +### Example + +Add a new developer to an org: + +```bash $ npm org set my-org @mx-smith ``` Add a new admin to an org (or change a developer to an admin): -``` + +```bash $ npm org set my-org @mx-santos admin ``` Remove a user from an org: -``` + +```bash $ npm org rm my-org mx-santos ``` List all users in an org: -``` + +```bash $ npm org ls my-org ``` List all users in JSON format: -``` + +```bash $ npm org ls my-org --json ``` See what role a user has in an org: -``` + +```bash $ npm org ls my-org @mx-santos ``` -## DESCRIPTION +### Description You can use the `npm org` commands to manage and view users of an organization. It supports adding and removing users, changing their roles, listing them, and finding specific ones and their roles. -## SEE ALSO +### See Also * [Documentation on npm Orgs](https://docs.npmjs.com/orgs/) diff --git a/doc/cli/npm-outdated.md b/docs/content/cli-commands/npm-outdated.md old mode 100644 new mode 100755 similarity index 85% rename from doc/cli/npm-outdated.md rename to docs/content/cli-commands/npm-outdated.md index 045586a40a728..44ec0b3cf2485 --- a/doc/cli/npm-outdated.md +++ b/docs/content/cli-commands/npm-outdated.md @@ -1,11 +1,20 @@ -npm-outdated(1) -- Check for outdated packages -============================================== +--- +section: cli-commands +title: npm-outdated +description: Check for outdated packages +--- -## SYNOPSIS +# npm-outdated - npm outdated [[<@scope>/] ...] +## Check for outdated packages -## DESCRIPTION +### Synopsis + +```bash +npm outdated [[<@scope>/] ...] +``` + +### Description This command will check the registry to see if any (or, specific) installed packages are currently outdated. @@ -20,7 +29,7 @@ In the output: Running `npm publish` with no special configuration will publish the package with a dist-tag of `latest`. This may or may not be the maximum version of the package, or the most-recently published version of the package, depending - on how the package's developer manages the latest dist-tag(1). + on how the package's developer manages the latest [dist-tag](npm-dist-tag). * `location` is where in the dependency tree the package is located. Note that `npm outdated` defaults to a depth of 0, so unless you override that, you'll always be seeing only top-level dependencies that are outdated. @@ -33,7 +42,7 @@ In the output: ### An example -``` +```bash $ npm outdated Package Current Wanted Latest Location glob 5.0.15 5.0.15 6.0.1 test-outdated-output @@ -69,30 +78,30 @@ A few things to note: * `once` is just plain out of date. Reinstalling `node_modules` from scratch or running `npm update` will bring it up to spec. -## CONFIGURATION +### Configuration -### json +#### json * Default: false * Type: Boolean Show information in JSON format. -### long +#### long * Default: false * Type: Boolean Show extended information. -### parseable +#### parseable * Default: false * Type: Boolean Show parseable output instead of tree view. -### global +#### global * Default: false * Type: Boolean @@ -100,16 +109,16 @@ Show parseable output instead of tree view. Check packages in the global install prefix instead of in the current project. -### depth +#### depth * Default: 0 * Type: Int Max depth for checking dependency tree. -## SEE ALSO +### See Also -* npm-update(1) -* npm-dist-tag(1) -* npm-registry(7) -* npm-folders(5) +* [npm update](/cli-commands/npm-update) +* [npm dist-tag](/cli-commands/npm-dist-tag) +* [npm registry](/using-npm/registry) +* [npm folders](/configuring-npm/folders) diff --git a/doc/cli/npm-owner.md b/docs/content/cli-commands/npm-owner.md old mode 100644 new mode 100755 similarity index 63% rename from doc/cli/npm-owner.md rename to docs/content/cli-commands/npm-owner.md index 94010298c18ef..7c803b915dd47 --- a/doc/cli/npm-owner.md +++ b/docs/content/cli-commands/npm-owner.md @@ -1,15 +1,23 @@ -npm-owner(1) -- Manage package owners -===================================== +--- +section: cli-commands +title: npm-owner +description: Manage package owners +--- -## SYNOPSIS +# npm-owner +## Manage package owners - npm owner add [<@scope>/] - npm owner rm [<@scope>/] - npm owner ls [<@scope>/] +### Synopsis - aliases: author +```bash +npm owner add [<@scope>/] +npm owner rm [<@scope>/] +npm owner ls [<@scope>/] -## DESCRIPTION +aliases: author +``` + +### Description Manage ownership of published packages. @@ -31,9 +39,9 @@ If you have two-factor authentication enabled with `auth-and-writes` then you'll need to include an otp on the command line when changing ownership with `--otp`. -## SEE ALSO +### See Also -* npm-publish(1) -* npm-registry(7) -* npm-adduser(1) -* npm-disputes(7) +* [npm publish](/cli-commands/npm-publish) +* [npm registry](/using-npm/registry) +* [npm adduser](/cli-commands/npm-adduser) +* [npm disputes](/using-npm/disputes) diff --git a/doc/cli/npm-pack.md b/docs/content/cli-commands/npm-pack.md old mode 100644 new mode 100755 similarity index 61% rename from doc/cli/npm-pack.md rename to docs/content/cli-commands/npm-pack.md index 807663ac210fe..70caa02d2b439 --- a/doc/cli/npm-pack.md +++ b/docs/content/cli-commands/npm-pack.md @@ -1,11 +1,20 @@ -npm-pack(1) -- Create a tarball from a package -============================================== +--- +section: cli-commands +title: npm-pack +description: Create a tarball from a package +--- -## SYNOPSIS +# npm-pack - npm pack [[<@scope>/]...] [--dry-run] +## Create a tarball from a package -## DESCRIPTION +### Synopsis + +```bash +npm pack [[<@scope>/]...] [--dry-run] +``` + +### Description For anything that's installable (that is, a package folder, tarball, tarball url, name@tag, name@version, name, or scoped name), this @@ -21,10 +30,9 @@ If no arguments are supplied, then npm packs the current package folder. The `--dry-run` argument will do everything that pack usually does without actually packing anything. Reports on what would have gone into the tarball. -## SEE ALSO +### See Also -* npm-cache(1) -* npm-publish(1) -* npm-config(1) -* npm-config(7) -* npmrc(5) +* [npm cache](/cli-commands/npm-cache) +* [npm publish](/cli-commands/npm-publish) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/docs/content/cli-commands/npm-ping.md b/docs/content/cli-commands/npm-ping.md new file mode 100755 index 0000000000000..468734bd1f0d2 --- /dev/null +++ b/docs/content/cli-commands/npm-ping.md @@ -0,0 +1,33 @@ +--- +section: cli-commands +title: npm-ping +description: Ping npm registry +--- + +# npm-ping + +## Ping npm registry + +### Synopsis + +```bash +npm ping [--registry ] +``` + +### Description + +Ping the configured or given npm registry and verify authentication. +If it works it will output something like: + +```bash +Ping success: {*Details about registry*} +``` +otherwise you will get: +```bash +Ping error: {*Detail about error} +``` + +### See Also + +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/docs/content/cli-commands/npm-prefix.md b/docs/content/cli-commands/npm-prefix.md new file mode 100755 index 0000000000000..f2fd3e4f19d4f --- /dev/null +++ b/docs/content/cli-commands/npm-prefix.md @@ -0,0 +1,32 @@ +--- +section: cli-commands +title: npm-prefix +description: Display prefix +--- + +# npm-prefix + +## Display prefix + +### Synopsis + +```bash +npm prefix [-g] +``` + +### Description + +Print the local prefix to standard out. This is the closest parent directory +to contain a `package.json` file or `node_modules` directory, unless `-g` is +also specified. + +If `-g` is specified, this will be the value of the global prefix. See +[`npm-config`](npm-config) for more detail. + +### See Also + +* [npm root](/cli-commands/npm-root) +* [npm bin](/cli-commands/npm-bin) +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/doc/cli/npm-profile.md b/docs/content/cli-commands/npm-profile.md old mode 100644 new mode 100755 similarity index 83% rename from doc/cli/npm-profile.md rename to docs/content/cli-commands/npm-profile.md index 16b5e11b60c65..1f3b146b8ad4c --- a/doc/cli/npm-profile.md +++ b/docs/content/cli-commands/npm-profile.md @@ -1,15 +1,23 @@ -npm-profile(1) -- Change settings on your registry profile -========================================================== +--- +section: cli-commands +title: npm-profile +description: Change settings on your registry profile +--- -## SYNOPSIS +# npm-profile +## Change settings on your registry profile - npm profile get [--json|--parseable] [] - npm profile set [--json|--parseable] - npm profile set password - npm profile enable-2fa [auth-and-writes|auth-only] - npm profile disable-2fa +### Synopsis -## DESCRIPTION +```bash +npm profile get [--json|--parseable] [] +npm profile set [--json|--parseable] +npm profile set password +npm profile enable-2fa [auth-and-writes|auth-only] +npm profile disable-2fa +``` + +### Description Change your profile information on the registry. This not be available if you're using a non-npmjs registry. @@ -18,7 +26,7 @@ you're using a non-npmjs registry. Display all of the properties of your profile, or one or more specific properties. It looks like: -``` +```bash +-----------------+---------------------------+ | name | example | +-----------------+---------------------------+ @@ -63,12 +71,12 @@ you're using a non-npmjs registry. * `npm profile disable-2fa`: Disables two-factor authentication. -## DETAILS +### Details All of the `npm profile` subcommands accept `--json` and `--parseable` and will tailor their output based on those. Some of these commands may not be available on non npmjs.com registries. -## SEE ALSO +### See Also -* npm-config(7) +* [npm config](/cli-commands/npm-config) diff --git a/doc/cli/npm-prune.md b/docs/content/cli-commands/npm-prune.md old mode 100644 new mode 100755 similarity index 73% rename from doc/cli/npm-prune.md rename to docs/content/cli-commands/npm-prune.md index 0dde244251122..93c7efe8d4394 --- a/doc/cli/npm-prune.md +++ b/docs/content/cli-commands/npm-prune.md @@ -1,11 +1,19 @@ -npm-prune(1) -- Remove extraneous packages -========================================== +--- +section: cli-commands +title: npm-prune +description: Remove extraneous packages +--- -## SYNOPSIS +# npm-prune +## Remove extraneous packages - npm prune [[<@scope>/]...] [--production] [--dry-run] [--json] +### Synopsis -## DESCRIPTION +```bash +npm prune [[<@scope>/]...] [--production] [--dry-run] [--json] +``` + +### Description This command removes "extraneous" packages. If a package name is provided, then only packages matching one of the supplied names are @@ -31,8 +39,8 @@ this command with the `--production` flag. If you've disabled package-locks then extraneous modules will not be removed and it's up to you to run `npm prune` from time-to-time to remove them. -## SEE ALSO +### See Also -* npm-uninstall(1) -* npm-folders(5) -* npm-ls(1) +* [npm uninstall](/cli-commands/npm-uninstall) +* [npm folders](/configuring-npm/folders) +* [npm ls](/cli-commands/npm-ls) diff --git a/doc/cli/npm-publish.md b/docs/content/cli-commands/npm-publish.md old mode 100644 new mode 100755 similarity index 63% rename from doc/cli/npm-publish.md rename to docs/content/cli-commands/npm-publish.md index c582ad8470c2a..698aad87a2449 --- a/doc/cli/npm-publish.md +++ b/docs/content/cli-commands/npm-publish.md @@ -1,26 +1,33 @@ -npm-publish(1) -- Publish a package -=================================== +--- +section: cli-commands +title: npm-publish +description: Publish a package +--- +# npm-publish -## SYNOPSIS +## Publish a package - npm publish [|] [--tag ] [--access ] [--otp otpcode] [--dry-run] +### Synopsis +```bash +npm publish [|] [--tag ] [--access ] [--otp otpcode] [--dry-run] - Publishes '.' if no argument supplied - Sets tag 'latest' if no --tag specified +Publishes '.' if no argument supplied +Sets tag 'latest' if no --tag specified +``` -## DESCRIPTION +### Description Publishes a package to the registry so that it can be installed by name. All files in the package directory are included if no local `.gitignore` or `.npmignore` file exists. If both files exist and a file is ignored by `.gitignore` but not by `.npmignore` then it will be included. See -`npm-developers(7)` for full details on what's included in the published +[`npm-developers`](/docs/using-npm/developers) for full details on what's included in the published package, as well as details on how the package is built. By default npm will publish to the public registry. This can be overridden by -specifying a different default registry or using a `npm-scope(7)` in the name -(see `package.json(5)`). +specifying a different default registry or using a [`npm-scope`](npm-scope) in the name +(see [`package.json`](/docs/configuring-npm/package-json)). * ``: A folder containing a package.json file @@ -32,7 +39,7 @@ specifying a different default registry or using a `npm-scope(7)` in the name * `[--tag ]` Registers the published package with the given tag, such that `npm install @` will install this version. By default, `npm publish` updates - and `npm install` installs the `latest` tag. See `npm-dist-tag(1)` for + and `npm install` installs the `latest` tag. See [`npm-dist-tag`](npm-dist-tag) for details about tags. * `[--access ]` @@ -55,22 +62,22 @@ the specified registry. Once a package is published with a given name and version, that specific name and version combination can never be used again, even if -it is removed with npm-unpublish(1). +it is removed with [`npm-unpublish`](npm-unpublish). As of `npm@5`, both a sha1sum and an integrity field with a sha512sum of the tarball will be submitted to the registry during publication. Subsequent installs will use the strongest supported algorithm to verify downloads. -Similar to `--dry-run` see `npm-pack(1)`, which figures out the files to be +Similar to `--dry-run` see [`npm-pack`](npm-pack), which figures out the files to be included and packs them into a tarball to be uploaded to the registry. -## SEE ALSO +### See Also -* npm-registry(7) -* npm-scope(7) -* npm-adduser(1) -* npm-owner(1) -* npm-deprecate(1) -* npm-dist-tag(1) -* npm-pack(1) -* npm-profile(1) +* [npm registry](/using-npm/registry) +* [npm scope](/using-npm/scope) +* [npm adduser](/cli-commands/npm-adduser) +* [npm owner](/cli-commands/npm-owner) +* [npm deprecate](/cli-commands/npm-deprecate) +* [npm dist-tag](/cli-commands/npm-dist-tag) +* [npm pack](/cli-commands/npm-pack) +* [npm profile](/cli-commands/npm-profile) diff --git a/docs/content/cli-commands/npm-rebuild.md b/docs/content/cli-commands/npm-rebuild.md new file mode 100755 index 0000000000000..8ec9c0302de65 --- /dev/null +++ b/docs/content/cli-commands/npm-rebuild.md @@ -0,0 +1,28 @@ +--- +section: cli-commands +title: npm-rebuild +description: Rebuild a package +--- + +# npm-rebuildd + +## Rebuild a package + +### Synopsis + +```bash +npm rebuild [[<@scope>/]...] + +alias: npm rb +``` + +### Description + +This command runs the `npm build` command on the matched folders. This is useful +when you install a new version of node, and must recompile all your C++ addons with +the new binary. + +### See Also + +* [npm build](/cli-commands/npm-build) +* [npm install](/cli-commands/npm-install) diff --git a/doc/cli/npm-repo.md b/docs/content/cli-commands/npm-repo.md old mode 100644 new mode 100755 similarity index 55% rename from doc/cli/npm-repo.md rename to docs/content/cli-commands/npm-repo.md index 523e135e8cc31..bcebecb69064c --- a/doc/cli/npm-repo.md +++ b/docs/content/cli-commands/npm-repo.md @@ -1,27 +1,36 @@ -npm-repo(1) -- Open package repository page in the browser -======================================================== +--- +section: cli-commands +title: npm-repo +description: Open package repository page in the browser +--- -## SYNOPSIS +# npm-repo - npm repo [] +## Open package repository page in the browser -## DESCRIPTION +### Synopsis + +```bash +npm repo [] +``` + +### Description This command tries to guess at the likely location of a package's repository URL, and then tries to open it using the `--browser` config param. If no package name is provided, it will search for a `package.json` in the current folder and use the `name` property. -## CONFIGURATION +### Configuration -### browser +#### browser * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` * Type: String The browser that is called by the `npm repo` command to open websites. -## SEE ALSO +### See Also -* npm-docs(1) -* npm-config(1) +* [npm docs](/cli-commands/npm-docs) +* [npm config](/cli-commands/npm-config) diff --git a/doc/cli/npm-restart.md b/docs/content/cli-commands/npm-restart.md old mode 100644 new mode 100755 similarity index 52% rename from doc/cli/npm-restart.md rename to docs/content/cli-commands/npm-restart.md index 1aa0c57a6829e..ba4e589b7ac51 --- a/doc/cli/npm-restart.md +++ b/docs/content/cli-commands/npm-restart.md @@ -1,11 +1,20 @@ -npm-restart(1) -- Restart a package -=================================== +--- +section: cli-commands +title: npm-restart +description: Restart a package +--- -## SYNOPSIS +# npm-restart - npm restart [-- ] +## Restart a package -## DESCRIPTION +### Synopsis + +```bash +npm restart [-- ] +``` + +### Description This restarts a package. @@ -22,7 +31,7 @@ pre- and post- scripts, in the order given below: 8. poststart 9. postrestart -## NOTE +### Note Note that the "restart" script is run **in addition to** the "stop" and "start" scripts, not instead of them. @@ -30,11 +39,11 @@ and "start" scripts, not instead of them. This is the behavior as of `npm` major version 2. A change in this behavior will be accompanied by an increase in major version number -## SEE ALSO +### See Also -* npm-run-script(1) -* npm-scripts(7) -* npm-test(1) -* npm-start(1) -* npm-stop(1) -* npm-restart(3) \ No newline at end of file +* [npm run-script](/cli-commands/npm-run-script) +* [npm scripts](/cli-commands//docs/using-npm/scripts) +* [npm test](/cli-commands/npm-test) +* [npm start](/cli-commands/npm-start) +* [npm stop](/cli-commands/npm-stop) +* [npm restart](/cli-commands/npm-restart) \ No newline at end of file diff --git a/docs/content/cli-commands/npm-root.md b/docs/content/cli-commands/npm-root.md new file mode 100755 index 0000000000000..d654f1c58b42b --- /dev/null +++ b/docs/content/cli-commands/npm-root.md @@ -0,0 +1,26 @@ +--- +section: cli-commands +title: npm-root +description: Display npm root +--- + +# npm-root + +## Display npm root + +### Synopsis +```bash +npm root [-g] +``` + +### Description + +Print the effective `node_modules` folder to standard out. + +### See Also + +* [npm prefix](/cli-commands/npm-prefix) +* [npm bin](/cli-commands/npm-bin) +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/doc/cli/npm-run-script.md b/docs/content/cli-commands/npm-run-script.md old mode 100644 new mode 100755 similarity index 81% rename from doc/cli/npm-run-script.md rename to docs/content/cli-commands/npm-run-script.md index ef73820d5b07e..9d71616ab8ee1 --- a/doc/cli/npm-run-script.md +++ b/docs/content/cli-commands/npm-run-script.md @@ -1,13 +1,22 @@ -npm-run-script(1) -- Run arbitrary package scripts -================================================== +--- +section: cli-commands +title: npm-run-script +description: Run arbitrary package scripts +--- -## SYNOPSIS +# npm-run-script - npm run-script [--silent] [-- ...] +## Run arbitrary package scripts - alias: npm run +### Synopsis -## DESCRIPTION +```bash +npm run-script [--silent] [-- ...] + +alias: npm run +``` + +### Description This runs an arbitrary command from a package's `"scripts"` object. If no `"command"` is provided, it will list the available scripts. `run[-script]` is @@ -20,7 +29,9 @@ use custom arguments when executing scripts. The special option `--` is used by [getopt](https://goo.gl/KxMmtG) to delimit the end of the options. npm will pass all the arguments after the `--` directly to your script: - npm run test -- --grep="pattern" +```bash +npm run test -- --grep="pattern" +``` The arguments will only be passed to the script specified after ```npm run``` and not to any pre or post script. @@ -36,11 +47,15 @@ locally-installed dependencies can be used without the `node_modules/.bin` prefix. For example, if there is a `devDependency` on `tap` in your package, you should write: - "scripts": {"test": "tap test/\*.js"} +```bash +"scripts": {"test": "tap test/\*.js"} +``` instead of - "scripts": {"test": "node_modules/.bin/tap test/\*.js"} +```bash +"scripts": {"test": "node_modules/.bin/tap test/\*.js"} +``` to run your tests. @@ -72,11 +87,11 @@ You can use the `--if-present` flag to avoid exiting with a non-zero exit code when the script is undefined. This lets you run potentially undefined scripts without breaking the execution chain. -## SEE ALSO +### See Also -* npm-scripts(7) -* npm-test(1) -* npm-start(1) -* npm-restart(1) -* npm-stop(1) -* npm-config(7) +* [npm scripts](/using-npm/scripts) +* [npm test](/cli-commands/npm-test) +* [npm start](/cli-commands/npm-start) +* [npm restart](/cli-commands/npm-restart) +* [npm stop](/cli-commands/npm-stop) +* [npm config](/cli-commands/npm-config) diff --git a/doc/cli/npm-search.md b/docs/content/cli-commands/npm-search.md old mode 100644 new mode 100755 similarity index 80% rename from doc/cli/npm-search.md rename to docs/content/cli-commands/npm-search.md index c1107d79b735b..76735e941bd72 --- a/doc/cli/npm-search.md +++ b/docs/content/cli-commands/npm-search.md @@ -1,13 +1,22 @@ -npm-search(1) -- Search for packages -==================================== +--- +section: cli-commands +title: npm-search +description: Search for packages +--- -## SYNOPSIS +# npm-search - npm search [-l|--long] [--json] [--parseable] [--no-description] [search terms ...] +## Search for packages - aliases: s, se, find +### Synopsis -## DESCRIPTION +```bash +npm search [-l|--long] [--json] [--parseable] [--no-description] [search terms ...] + +aliases: s, se, find +``` + +### Description Search the registry for packages matching the search terms. `npm search` performs a linear, incremental, lexically-ordered search through package @@ -31,9 +40,9 @@ quoted in most shells.) ### A Note on caching -## CONFIGURATION +### Configuration -### description +#### description * Default: true * Type: Boolean @@ -41,21 +50,21 @@ quoted in most shells.) Used as `--no-description`, disables search matching in package descriptions and suppresses display of that field in results. -### json +#### json * Default: false * Type: Boolean Output search results as a JSON array. -### parseable +#### parseable * Default: false * Type: Boolean Output search results as lines with tab-separated columns. -### long +#### long * Default: false * Type: Boolean @@ -65,28 +74,28 @@ lines. When disabled (default) search results are truncated to fit neatly on a single line. Modules with extremely long names will fall on multiple lines. -### searchopts +#### searchopts * Default: "" * Type: String Space-separated options that are always passed to search. -### searchexclude +#### searchexclude * Default: "" * Type: String Space-separated options that limit the results from search. -### searchstaleness +#### searchstaleness * Default: 900 (15 minutes) * Type: Number The age of the cache, in seconds, before another registry request is made. -### registry +#### registry * Default: https://registry.npmjs.org/ * Type: url @@ -97,10 +106,9 @@ repository, `npm search` will default to that registry when searching. Pass a different registry url such as the default above in order to override this setting. -## SEE ALSO +### See Also -* npm-registry(7) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-view(1) +* [npm registry](/using-npm/registry) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [npm view](/cli-commands/npm-view) diff --git a/docs/content/cli-commands/npm-shrinkwrap.md b/docs/content/cli-commands/npm-shrinkwrap.md new file mode 100755 index 0000000000000..147ffe393749e --- /dev/null +++ b/docs/content/cli-commands/npm-shrinkwrap.md @@ -0,0 +1,34 @@ +--- +section: cli-commands +title: npm-shrinkwrap +description: Lock down dependency versions for publication +--- + +# npm-shrinkwrap + +## Lock down dependency versions for publication + +### Synopsis + +```bash +npm shrinkwrap +``` + +### Description + +This command repurposes `package-lock.json` into a publishable +`npm-shrinkwrap.json` or simply creates a new one. The file created and updated +by this command will then take precedence over any other existing or future +`package-lock.json` files. For a detailed explanation of the design and purpose +of package locks in npm, see [npm-package-locks](npm-package-locks). + +### See Also + +* [npm install](/cli-commands/npm-install) +* [npm run-script](/cli-commands/npm-run-script) +* [npm scripts](/using-npm/scripts) +* [package.js](/configuring-npm/package-json) +* [package-locks](/configuring-npm/package-locks) +* [package-lock.json](/configuring-npm/package-lock-json) +* [shrinkwrap.json](/configuring-npm/shrinkwrap-json) +* [npm ls](/cli-commands/npm-ls) diff --git a/docs/content/cli-commands/npm-star.md b/docs/content/cli-commands/npm-star.md new file mode 100755 index 0000000000000..77841e03038f1 --- /dev/null +++ b/docs/content/cli-commands/npm-star.md @@ -0,0 +1,31 @@ +--- +section: cli-commands +title: npm-star +description: Mark your favorite packages +--- + +# npm-star + +## Mark your favorite packages + +### Synopsis + +```bash +npm star [...] +npm unstar [...] +``` + +### Description + +"Starring" a package means that you have some interest in it. It's +a vaguely positive way to show that you care. + +"Unstarring" is the same thing, but in reverse. + +It's a boolean thing. Starring repeatedly has no additional effect. + +### See Also + +* [npm view](/cli-commands/npm-view) +* [npm whoami](/cli-commands/npm-whoami) +* [npm adduser](/cli-commands/npm-adduser) diff --git a/docs/content/cli-commands/npm-stars.md b/docs/content/cli-commands/npm-stars.md new file mode 100755 index 0000000000000..7dbb9ece8acd5 --- /dev/null +++ b/docs/content/cli-commands/npm-stars.md @@ -0,0 +1,29 @@ +--- +section: cli-commands +title: npm-stars +description: View packages marked as favorites +--- + +# npm-stars + +## View packages marked as favorites + +### Synopsis +```bash +npm stars [] +``` + +### Description + +If you have starred a lot of neat things and want to find them again +quickly this command lets you do just that. + +You may also want to see your friend's favorite packages, in this case +you will most certainly enjoy this command. + +### See Also + +* [npm star](/cli-commands/npm-star) +* [npm view](/cli-commands/npm-view) +* [npm whoami](/cli-commands/npm-whoami) +* [npm adduser](/cli-commands/npm-adduser) diff --git a/docs/content/cli-commands/npm-start.md b/docs/content/cli-commands/npm-start.md new file mode 100755 index 0000000000000..fdbae4b103e09 --- /dev/null +++ b/docs/content/cli-commands/npm-start.md @@ -0,0 +1,33 @@ +--- +section: cli-commands +title: npm-start +description: Start a package +--- + +# npm-start + +## Start a package + +### Synopsis + +```bash +npm start [-- ] +``` + +### Description + +This runs an arbitrary command specified in the package's `"start"` property of +its `"scripts"` object. If no `"start"` property is specified on the +`"scripts"` object, it will run `node server.js`. + +As of [`npm@2.0.0`](https://blog.npmjs.org/post/98131109725/npm-2-0-0), you can +use custom arguments when executing scripts. Refer to [`npm-run-script`](npm-run-script) for +more details. + +### See Also + +* [npm run-script](/cli-commands/npm-run-script) +* [npm scripts](/using-npm/scripts) +* [npm test](/cli-commands/npm-test) +* [npm restart](/cli-commands/npm-restart) +* [npm stop](/cli-commands/npm-stop) diff --git a/docs/content/cli-commands/npm-stop.md b/docs/content/cli-commands/npm-stop.md new file mode 100755 index 0000000000000..62d6478f2e68c --- /dev/null +++ b/docs/content/cli-commands/npm-stop.md @@ -0,0 +1,27 @@ +--- +section: cli-commands +title: npm-stop +description: Stop a package +--- + +# npm-stop + +## Stop a package + +### Synopsis + +```bash +npm stop [-- ] +``` + +### Description + +This runs a package's "stop" script, if one was provided. + +### See Also + +* [npm run-script](/cli-commands/npm-run-script) +* [npm scripts](/using-npm/scripts) +* [npm test](/cli-commands/npm-test) +* [npm start](/cli-commands/npm-start) +* [npm restart](/cli-commands/npm-restart) diff --git a/doc/cli/npm-team.md b/docs/content/cli-commands/npm-team.md old mode 100644 new mode 100755 similarity index 73% rename from doc/cli/npm-team.md rename to docs/content/cli-commands/npm-team.md index 9e01a451c7945..3401dae26b369 --- a/doc/cli/npm-team.md +++ b/docs/content/cli-commands/npm-team.md @@ -1,19 +1,28 @@ -npm-team(1) -- Manage organization teams and team memberships -============================================================= +--- +section: cli-commands +title: npm-team +description: Manage organization teams and team memberships +--- -## SYNOPSIS +# npm-team - npm team create - npm team destroy +## Manage organization teams and team memberships - npm team add - npm team rm +### Synopsis - npm team ls | +```bash +npm team create +npm team destroy - npm team edit +npm team add +npm team rm -## DESCRIPTION +npm team ls | + +npm team edit +``` + +### Description Used to manage teams in organizations, and change team memberships. Does not handle permissions for packages. @@ -37,7 +46,7 @@ when operating on them, separated by a colon (`:`). That is, if you have a * edit: Edit a current team. -## DETAILS +### Details `npm team` always operates directly on the current registry, configurable from the command line using `--registry=`. @@ -52,7 +61,7 @@ is done through the website, not the npm CLI. To use teams to manage permissions on packages belonging to your organization, use the `npm access` command to grant or revoke the appropriate permissions. -## SEE ALSO +### See Also -* npm-access(1) -* npm-registry(7) +* [npm access](/cli-commands/npm-access) +* [npm registry](/using-npm/registry) diff --git a/docs/content/cli-commands/npm-test.md b/docs/content/cli-commands/npm-test.md new file mode 100755 index 0000000000000..af393ae99e333 --- /dev/null +++ b/docs/content/cli-commands/npm-test.md @@ -0,0 +1,29 @@ +--- +section: cli-commands +title: npm-test +description: Test a package +--- + +# npm-test + +## Test a package + +### Synopsis + +```bash +npm test [-- ] + +aliases: t, tst +``` + +### Description + +This runs a package's "test" script, if one was provided. + +### See Also + +* [npm run-script](/cli-commands/npm-run-script) +* [npm scripts](/using-npm/scripts) +* [npm start](/cli-commands/npm-start) +* [npm restart](/cli-commands/npm-restart) +* [npm stop](/cli-commands/npm-stop) diff --git a/doc/cli/npm-token.md b/docs/content/cli-commands/npm-token.md old mode 100644 new mode 100755 similarity index 88% rename from doc/cli/npm-token.md rename to docs/content/cli-commands/npm-token.md index ae7aacae60155..c94fb1819f8b8 --- a/doc/cli/npm-token.md +++ b/docs/content/cli-commands/npm-token.md @@ -1,20 +1,29 @@ -npm-token(1) -- Manage your authentication tokens -================================================= +--- +section: cli-commands +title: npm-token +description: Manage your authentication tokens +--- -## SYNOPSIS +# npm-token - npm token list [--json|--parseable] - npm token create [--read-only] [--cidr=1.1.1.1/24,2.2.2.2/16] - npm token revoke +## Manage your authentication tokens -## DESCRIPTION +### Synopsis +```bash + npm token list [--json|--parseable] + npm token create [--read-only] [--cidr=1.1.1.1/24,2.2.2.2/16] + npm token revoke + ``` + +### Description This lets you list, create and revoke authentication tokens. * `npm token list`: Shows a table of all active authentication tokens. You can request this as JSON with `--json` or tab-separated values with `--parseable`. -``` + +```bash +--------+---------+------------+----------+----------------+ | id | token | created | read-only | CIDR whitelist | +--------+---------+------------+----------+----------------+ @@ -40,7 +49,7 @@ This lets you list, create and revoke authentication tokens. limit use of this token to. This will prompt you for your password, and, if you have two-factor authentication enabled, an otp. -``` +```bash +----------------+--------------------------------------+ | token | a73c9572-f1b9-8983-983d-ba3ac3cc913d | +----------------+--------------------------------------+ diff --git a/docs/content/cli-commands/npm-uninstall.md b/docs/content/cli-commands/npm-uninstall.md new file mode 100755 index 0000000000000..932e1015c92d7 --- /dev/null +++ b/docs/content/cli-commands/npm-uninstall.md @@ -0,0 +1,64 @@ +--- +section: cli-commands +title: npm-uninstall +description: Remove a package +--- + +# npm-uninstall + +## Remove a package + +### Synopsis + +```bash +npm uninstall [<@scope>/][@]... [-S|--save|-D|--save-dev|-O|--save-optional|--no-save] + +aliases: remove, rm, r, un, unlink +``` + +### Description + +This uninstalls a package, completely removing everything npm installed +on its behalf. + +Example: + +```bash +npm uninstall sax +``` + +In global mode (ie, with `-g` or `--global` appended to the command), +it uninstalls the current package context as a global package. + +`npm uninstall` takes 3 exclusive, optional flags which save or update +the package version in your main package.json: + +* `-S, --save`: Package will be removed from your `dependencies`. + +* `-D, --save-dev`: Package will be removed from your `devDependencies`. + +* `-O, --save-optional`: Package will be removed from your `optionalDependencies`. + +* `--no-save`: Package will not be removed from your `package.json` file. + +Further, if you have an `npm-shrinkwrap.json` then it will be updated as +well. + +Scope is optional and follows the usual rules for [`npm-scope`](snpm-scope). + +Examples: +```bash +npm uninstall sax --save +npm uninstall @myorg/privatepackage --save +npm uninstall node-tap --save-dev +npm uninstall dtrace-provider --save-optional +npm uninstall lodash --no-save +``` + +### See Also + +* [npm prune](/cli-commands/npm-prune) +* [npm install](/cli-commands/npm-install) +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/doc/cli/npm-unpublish.md b/docs/content/cli-commands/npm-unpublish.md old mode 100644 new mode 100755 similarity index 63% rename from doc/cli/npm-unpublish.md rename to docs/content/cli-commands/npm-unpublish.md index b5b02154e9309..de37f382912ea --- a/doc/cli/npm-unpublish.md +++ b/docs/content/cli-commands/npm-unpublish.md @@ -1,11 +1,20 @@ -npm-unpublish(1) -- Remove a package from the registry -====================================================== +--- +section: cli-commands +title: npm-unpublish +description: Remove a package from the registry +--- -## SYNOPSIS +# npm-unpublish - npm unpublish [<@scope>/][@] +## Remove a package from the registry -## WARNING +### Synopsis + +```bash +npm unpublish [<@scope>/][@] +``` + +### Warning **It is generally considered bad behavior to remove versions of a library that others are depending on!** @@ -15,7 +24,7 @@ instead, if your intent is to encourage users to upgrade. There is plenty of room on the registry. -## DESCRIPTION +### Description This removes a package version from the registry, deleting its entry and removing the tarball. @@ -34,12 +43,12 @@ only allowed with versions published in the last 72 hours. If you are trying to unpublish a version published longer ago than that, contact support@npmjs.com. -The scope is optional and follows the usual rules for `npm-scope(7)`. +The scope is optional and follows the usual rules for [`npm-scope`](/docs/using-npm/scope). -## SEE ALSO +### See Also -* npm-deprecate(1) -* npm-publish(1) -* npm-registry(7) -* npm-adduser(1) -* npm-owner(1) +* [npm deprecate](/cli-commands/npm-deprecate) +* [npm publish](/cli-commands/npm-publish) +* [npm registry](/using-npm/registry) +* [npm adduser](/cli-commands/npm-adduser) +* [npm owner](/cli-commands/npm-owner) diff --git a/doc/cli/npm-update.md b/docs/content/cli-commands/npm-update.md old mode 100644 new mode 100755 similarity index 80% rename from doc/cli/npm-update.md rename to docs/content/cli-commands/npm-update.md index ec02cbcc37632..2eb0235faee81 --- a/doc/cli/npm-update.md +++ b/docs/content/cli-commands/npm-update.md @@ -1,13 +1,22 @@ -npm-update(1) -- Update a package -================================= +--- +section: cli-commands +title: npm-update +description: Update a package +--- -## SYNOPSIS +# npm-update - npm update [-g] [...] +## Update a package - aliases: up, upgrade +### Synopsis -## DESCRIPTION +```bash +npm update [-g] [...] + +aliases: up, upgrade +``` + +### Description This command will update all the packages listed to the latest version (specified by the `tag` config), respecting semver. @@ -30,7 +39,7 @@ As of `npm@5.0.0`, the `npm update` will change `package.json` to save the new version as the minimum required dependency. To get the old behavior, use `npm update --no-save`. -## EXAMPLES +### Example IMPORTANT VERSION NOTE: these examples assume `npm@2.6.1` or later. For older versions of `npm`, you must specify `--depth 0` to get the behavior @@ -39,7 +48,7 @@ described below. For the examples below, assume that the current package is `app` and it depends on dependencies, `dep1` (`dep2`, .. etc.). The published versions of `dep1` are: -``` +```json { "dist-tags": { "latest": "1.2.2" }, "versions": [ @@ -56,11 +65,11 @@ on dependencies, `dep1` (`dep2`, .. etc.). The published versions of `dep1` are } ``` -### Caret Dependencies +#### Caret Dependencies If `app`'s `package.json` contains: -``` +```json "dependencies": { "dep1": "^1.1.1" } @@ -69,11 +78,11 @@ If `app`'s `package.json` contains: Then `npm update` will install `dep1@1.2.2`, because `1.2.2` is `latest` and `1.2.2` satisfies `^1.1.1`. -### Tilde Dependencies +#### Tilde Dependencies However, if `app`'s `package.json` contains: -``` +```json "dependencies": { "dep1": "~1.1.1" } @@ -84,11 +93,11 @@ tag points to `1.2.2`, this version does not satisfy `~1.1.1`, which is equivale to `>=1.1.1 <1.2.0`. So the highest-sorting version that satisfies `~1.1.1` is used, which is `1.1.2`. -### Caret Dependencies below 1.0.0 +#### Caret Dependencies below 1.0.0 Suppose `app` has a caret dependency on a version below `1.0.0`, for example: -``` +```json "dependencies": { "dep1": "^0.2.0" } @@ -99,7 +108,7 @@ versions which satisfy `^0.2.0`. If the dependence were on `^0.4.0`: -``` +```json "dependencies": { "dep1": "^0.4.0" } @@ -109,7 +118,7 @@ Then `npm update` will install `dep1@0.4.1`, because that is the highest-sorting version that satisfies `^0.4.0` (`>= 0.4.0 <0.5.0`) -### Updating Globally-Installed Packages +#### Updating Globally-Installed Packages `npm update -g` will apply the `update` action to each globally installed package that is `outdated` -- that is, has a version that is different from @@ -119,11 +128,11 @@ NOTE: If a package has been upgraded to a version newer than `latest`, it will be _downgraded_. -## SEE ALSO +### See Also -* npm-install(1) -* npm-outdated(1) -* npm-shrinkwrap(1) -* npm-registry(7) -* npm-folders(5) -* npm-ls(1) +* [npm install](/cli-commands/npm-install) +* [npm outdated](/cli-commands/npm-outdated) +* [npm shrinkwrap](/cli-commands/npm-shrinkwrap) +* [npm registry](/using-npm/registry) +* [npm folders](/configuring-npm/folders) +* [npm ls](/cli-commands/npm-ls) diff --git a/doc/cli/npm-version.md b/docs/content/cli-commands/npm-version.md old mode 100644 new mode 100755 similarity index 75% rename from doc/cli/npm-version.md rename to docs/content/cli-commands/npm-version.md index a20f4a982a603..f9e34feb995b3 --- a/doc/cli/npm-version.md +++ b/docs/content/cli-commands/npm-version.md @@ -1,15 +1,24 @@ -npm-version(1) -- Bump a package version -======================================== +--- +section: cli-commands +title: npm-version +description: Bump a package version +--- -## SYNOPSIS +# npm-version - npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=] | from-git] +## Bump a package version - 'npm [-v | --version]' to print npm version - 'npm view version' to view a package's published version - 'npm ls' to inspect current package/dependency versions +### Synopsis -## DESCRIPTION +```bash +npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=] | from-git] + +'npm [-v | --version]' to print npm version +'npm view version' to view a package's published version +'npm ls' to inspect current package/dependency versions +``` + +### Description Run this in a package directory to bump the version and write the new data back to `package.json`, `package-lock.json`, and, if present, `npm-shrinkwrap.json`. @@ -31,20 +40,24 @@ use it as a commit message when creating a version commit. If the `message` config contains `%s` then that will be replaced with the resulting version number. For example: - npm version patch -m "Upgrade to %s for reasons" +```bash +npm version patch -m "Upgrade to %s for reasons" +``` If the `sign-git-tag` config is set, then the tag will be signed using the `-s` flag to git. Note that you must have a default GPG key set up in your git config for this to work properly. For example: - $ npm config set sign-git-tag true - $ npm version patch +```bash +$ npm config set sign-git-tag true +$ npm version patch - You need a passphrase to unlock the secret key for - user: "isaacs (http://blog.izs.me/) " - 2048-bit RSA key, ID 6C481CF6, created 2010-08-31 +You need a passphrase to unlock the secret key for +user: "isaacs (http://blog.izs.me/) " +2048-bit RSA key, ID 6C481CF6, created 2010-08-31 - Enter passphrase: +Enter passphrase: +``` If `preversion`, `version`, or `postversion` are in the `scripts` property of the package.json, they will be executed as part of running `npm version`. @@ -66,19 +79,21 @@ The exact order of execution is as follows: Take the following example: +```json "scripts": { "preversion": "npm test", "version": "npm run build && git add -A dist", "postversion": "git push && git push --tags && rm -rf build/temp" } +``` This runs all your tests, and proceeds only if they pass. Then runs your `build` script, and adds everything in the `dist` directory to the commit. After the commit, it pushes the new commit and tag up to the server, and deletes the `build/temp` directory. -## CONFIGURATION +### Configuration -### allow-same-version +#### allow-same-version * Default: false * Type: Boolean @@ -86,21 +101,21 @@ and tag up to the server, and deletes the `build/temp` directory. Prevents throwing an error when `npm version` is used to set the new version to the same value as the current version. -### git-tag-version +#### git-tag-version * Default: true * Type: Boolean Commit and tag the version change. -### commit-hooks +#### commit-hooks * Default: true * Type: Boolean Run git commit hooks when committing the version change. -### sign-git-tag +#### sign-git-tag * Default: false * Type: Boolean @@ -109,11 +124,11 @@ Pass the `-s` flag to git to sign the tag. Note that you must have a default GPG key set up in your git config for this to work properly. -## SEE ALSO +### See Also -* npm-init(1) -* npm-run-script(1) -* npm-scripts(7) -* package.json(5) -* semver(7) -* config(7) +* [npm init](/cli-commands/npm-init) +* [npm run-script](/cli-commands/npm-run-script) +* [npm scripts](/using-npm/scripts) +* [package.json](/docs/configuring-npm/package-json) +* [semver](/using-npm/semver) +* [config](/using-npm/config) diff --git a/doc/cli/npm-view.md b/docs/content/cli-commands/npm-view.md old mode 100644 new mode 100755 similarity index 68% rename from doc/cli/npm-view.md rename to docs/content/cli-commands/npm-view.md index 35e42adf9af8f..bbea3f860c0ab --- a/doc/cli/npm-view.md +++ b/docs/content/cli-commands/npm-view.md @@ -1,13 +1,22 @@ -npm-view(1) -- View registry info -================================= +--- +section: cli-commands +title: npm-view +description: View registry info +--- -## SYNOPSIS +# npm-view - npm view [<@scope>/][@] [[.]...] +## View registry info - aliases: info, show, v +### Synopsis -## DESCRIPTION +```bash +npm view [<@scope>/][@] [[.]...] + +aliases: info, show, v +``` + +### Description This command shows data about a package and prints it to the stream referenced by the `outfd` config, which defaults to stdout. @@ -15,7 +24,9 @@ referenced by the `outfd` config, which defaults to stdout. To show the package registry entry for the `connect` package, you can do this: - npm view connect +```bash +npm view connect +``` The default version is "latest" if unspecified. @@ -23,56 +34,74 @@ Field names can be specified after the package descriptor. For example, to show the dependencies of the `ronn` package at version 0.3.5, you could do the following: - npm view ronn@0.3.5 dependencies +```bash +npm view ronn@0.3.5 dependencies +``` You can view child fields by separating them with a period. To view the git repository URL for the latest version of npm, you could do this: - npm view npm repository.url +```bash +npm view npm repository.url +``` This makes it easy to view information about a dependency with a bit of shell scripting. For example, to view all the data about the version of opts that ronn depends on, you can do this: - npm view opts@$(npm view ronn dependencies.opts) +```bash +npm view opts@$(npm view ronn dependencies.opts) +``` For fields that are arrays, requesting a non-numeric field will return all of the values from the objects in the list. For example, to get all the contributor names for the "express" project, you can do this: - npm view express contributors.email +```bash +npm view express contributors.email +``` You may also use numeric indices in square braces to specifically select an item in an array field. To just get the email address of the first contributor in the list, you can do this: - npm view express contributors[0].email +```bash +npm view express contributors[0].email +``` Multiple fields may be specified, and will be printed one after another. For example, to get all the contributor names and email addresses, you can do this: - npm view express contributors.name contributors.email +```bash +npm view express contributors.name contributors.email +``` "Person" fields are shown as a string if they would be shown as an object. So, for example, this will show the list of npm contributors in -the shortened string format. (See `package.json(5)` for more on this.) +the shortened string format. (See [`package.json`](/docs/configuring-npm/package.json) for more on this.) - npm view npm contributors +```bash +npm view npm contributors +``` If a version range is provided, then data will be printed for every matching version of the package. This will show which version of jsdom was required by each matching version of yui3: - npm view yui3@'>0.5.4' dependencies.jsdom +```bash +npm view yui3@'>0.5.4' dependencies.jsdom +``` To show the `connect` package version history, you can do this: - npm view connect versions +```bash +npm view connect versions +``` -## OUTPUT +### Output If only a single string field for a single version is output, then it will not be colorized or quoted, so as to enable piping the output to @@ -86,11 +115,10 @@ will be prefixed with the version it applies to. If multiple fields are requested, than each of them are prefixed with the field name. -## SEE ALSO +### See Also -* npm-search(1) -* npm-registry(7) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-docs(1) +* [npm search](/cli-commands/npm-search) +* [npm registry](/using-npm/registry) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [npm docs](/cli-commands/npm-docs) diff --git a/docs/content/cli-commands/npm-whoami.md b/docs/content/cli-commands/npm-whoami.md new file mode 100755 index 0000000000000..2fa9441626cd5 --- /dev/null +++ b/docs/content/cli-commands/npm-whoami.md @@ -0,0 +1,24 @@ +--- +section: cli-commands +title: npm-whoami +description: Display npm username +--- + +# npm-whoami +## Display npm username + +### Synopsis + +```bash +npm whoami [--registry ] +``` + +### Description + +Print the `username` config to standard output. + +### See Also + +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [npm adduser](/cli-commands/npm-adduser) diff --git a/doc/cli/npm.md b/docs/content/cli-commands/npm.md old mode 100644 new mode 100755 similarity index 84% rename from doc/cli/npm.md rename to docs/content/cli-commands/npm.md index 32384547bcb0b..55797dbdf6295 --- a/doc/cli/npm.md +++ b/docs/content/cli-commands/npm.md @@ -1,15 +1,23 @@ -npm(1) -- javascript package manager -==================================== +--- +section: cli-commands +title: npm +description: javascript package manager +--- -## SYNOPSIS +# npm +## javascript package manager - npm [args] +### Synopsis -## VERSION +```bash +npm [args] +``` + +### Version @VERSION@ -## DESCRIPTION +### Description npm is the package manager for the Node JavaScript platform. It puts modules in place so that node can find them, and manages dependency @@ -21,7 +29,7 @@ programs. Run `npm help` to get a list of available commands. -## IMPORTANT +### Important npm is configured to use npm, Inc.'s public registry at https://registry.npmjs.org by default. Use of the npm public registry is @@ -31,17 +39,17 @@ You can configure npm to use any compatible registry you like, and even run your own registry. Use of someone else's registry may be governed by their terms of use. -## INTRODUCTION +### Introduction You probably got npm because you want to install stuff. Use `npm install blerg` to install the latest version of "blerg". Check out -`npm-install(1)` for more info. It can do a lot of stuff. +[`npm-install`](npm-install) for more info. It can do a lot of stuff. Use the `npm search` command to show everything that's available. Use `npm ls` to show everything you've installed. -## DEPENDENCIES +### Dependencies If a package references to another package with a git URL, npm depends on a preinstalled git. @@ -57,9 +65,9 @@ For more information visit [the node-gyp repository](https://github.com/TooTallNate/node-gyp) and the [node-gyp Wiki](https://github.com/TooTallNate/node-gyp/wiki). -## DIRECTORIES +### Directories -See `npm-folders(5)` to learn about where npm puts stuff. +See [`npm-folders`](/docs/configuring-npm/folders) to learn about where npm puts stuff. In particular, npm has two modes of operation: @@ -74,13 +82,13 @@ In particular, npm has two modes of operation: Local mode is the default. Use `-g` or `--global` on any command to operate in global mode instead. -## DEVELOPER USAGE +### Developer Usage If you're using npm to develop and publish your code, check out the following help topics: * json: - Make a package.json file. See `package.json(5)`. + Make a package.json file. See [`package.json`](/docs/configuring-npm/package.json). * link: For linking your current working code into Node's path, so that you don't have to reinstall every time you make a change. Use @@ -95,7 +103,7 @@ following help topics: * publish: Use the `npm publish` command to upload your code to the registry. -## CONFIGURATION +#### Configuration npm is extremely configurable. It reads its configuration options from 5 places. @@ -121,9 +129,9 @@ npm is extremely configurable. It reads its configuration options from npm's default configuration options are defined in lib/utils/config-defs.js. These must not be changed. -See `npm-config(7)` for much much more information. +See [`npm-config`](/docs/using-npm/config) for much much more information. -## CONTRIBUTIONS +### Contributions Patches welcome! @@ -134,7 +142,7 @@ the contributing guidelines and check the issues list. * [Bug tracker](https://npm.community/c/bugs) * [Support tracker](https://npm.community/c/support) -## BUGS +### Bugs When you find issues, please report them: @@ -146,20 +154,16 @@ for help in the [support forum](https://npm.community/c/support) if you're unsure if it's actually a bug or are having trouble coming up with a detailed reproduction to report. -## AUTHOR +### Author [Isaac Z. Schlueter](http://blog.izs.me/) :: [isaacs](https://github.com/isaacs/) :: [@izs](https://twitter.com/izs) :: -## SEE ALSO - -* npm-help(1) -* README -* package.json(5) -* npm-install(1) -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-index(7) +### See Also +* [npm help](/cli-commands/npm-help) +* [package.json](/configuring-npm/package-json) +* [npm install](/cli-commands/npm-install) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) diff --git a/doc/files/npm-folders.md b/docs/content/configuring-npm/folders.md old mode 100644 new mode 100755 similarity index 80% rename from doc/files/npm-folders.md rename to docs/content/configuring-npm/folders.md index 456cb58bc89e1..913f90cbf81ff --- a/doc/files/npm-folders.md +++ b/docs/content/configuring-npm/folders.md @@ -1,13 +1,20 @@ -npm-folders(5) -- Folder Structures Used by npm -=============================================== +--- +section: configuring-npm +title: folders +description: Folder Structures Used by npm +--- -## DESCRIPTION +# folders + +## Folder Structures Used by npm + +### Description npm puts various things on your computer. That's its job. This document will tell you what it puts where. -### tl;dr +#### tl;dr * Local install (default): puts stuff in `./node_modules` of the current package root. @@ -17,7 +24,7 @@ This document will tell you what it puts where. * Install it **globally** if you're going to run it on the command line. * If you need both, then install it in both places, or use `npm link`. -### prefix Configuration +#### prefix Configuration The `prefix` config defaults to the location where node is installed. On most systems, this is `/usr/local`. On Windows, it's `%AppData%\npm`. @@ -28,7 +35,7 @@ When the `global` flag is set, npm installs things into this prefix. When it is not set, it uses the root of the current package, or the current working directory if not in a package already. -### Node Modules +#### Node Modules Packages are dropped into the `node_modules` folder under the `prefix`. When installing locally, this means that you can @@ -42,12 +49,12 @@ Global installs on Windows go to `{prefix}/node_modules` (that is, no Scoped packages are installed the same way, except they are grouped together in a sub-folder of the relevant `node_modules` folder with the name of that scope prefix by the @ symbol, e.g. `npm install @myorg/package` would place -the package in `{prefix}/node_modules/@myorg/package`. See `scope(7)` for +the package in `{prefix}/node_modules/@myorg/package`. See [`scope`](/docs/using-npm/scope) for more details. If you wish to `require()` a package, then install it locally. -### Executables +#### Executables When in global mode, executables are linked into `{prefix}/bin` on Unix, or directly into `{prefix}` on Windows. @@ -57,7 +64,7 @@ When in local mode, executables are linked into through npm. (For example, so that a test runner will be in the path when you run `npm test`.) -### Man Pages +#### Man Pages When in global mode, man pages are linked into `{prefix}/share/man`. @@ -65,14 +72,14 @@ When in local mode, man pages are not installed. Man pages are not installed on Windows systems. -### Cache +#### Cache -See `npm-cache(1)`. Cache files are stored in `~/.npm` on Posix, or +See [`npm-cache`](/docs/cli-commands/npm-cache). Cache files are stored in `~/.npm` on Posix, or `%AppData%/npm-cache` on Windows. This is controlled by the `cache` configuration param. -### Temp Files +#### Temp Files Temporary files are stored by default in the folder specified by the `tmp` config, which defaults to the TMPDIR, TMP, or TEMP environment @@ -81,7 +88,7 @@ variables, or `/tmp` on Unix and `c:\windows\temp` on Windows. Temp files are given a unique folder under this root for each run of the program, and are deleted upon successful exit. -## More Information +### More Information When installing locally, npm first tries to find an appropriate `prefix` folder. This is so that `npm install foo@1.2.3` will install @@ -105,7 +112,7 @@ foo's dependencies are similarly unpacked into Any bin files are symlinked to `./node_modules/.bin/`, so that they may be found by npm scripts when necessary. -### Global Installation +#### Global Installation If the `global` configuration is set to true, then npm will install packages "globally". @@ -113,7 +120,7 @@ install packages "globally". For global installation, packages are installed roughly the same way, but using the folders described above. -### Cycles, Conflicts, and Folder Parsimony +#### Cycles, Conflicts, and Folder Parsimony Cycles are handled using the property of node's module system that it walks up the directories looking for `node_modules` folders. So, at every @@ -142,32 +149,36 @@ highest level possible, below the localized "target" folder. Consider this dependency graph: - foo - +-- blerg@1.2.5 - +-- bar@1.2.3 - | +-- blerg@1.x (latest=1.3.7) - | +-- baz@2.x - | | `-- quux@3.x - | | `-- bar@1.2.3 (cycle) - | `-- asdf@* - `-- baz@1.2.3 - `-- quux@3.x - `-- bar +```bash +foo ++-- blerg@1.2.5 ++-- bar@1.2.3 +| +-- blerg@1.x (latest=1.3.7) +| +-- baz@2.x +| | `-- quux@3.x +| | `-- bar@1.2.3 (cycle) +| `-- asdf@* +`-- baz@1.2.3 + `-- quux@3.x + `-- bar +``` In this case, we might expect a folder structure like this: - foo - +-- node_modules - +-- blerg (1.2.5) <---[A] - +-- bar (1.2.3) <---[B] - | `-- node_modules - | +-- baz (2.0.2) <---[C] - | | `-- node_modules - | | `-- quux (3.2.0) - | `-- asdf (2.3.4) - `-- baz (1.2.3) <---[D] - `-- node_modules - `-- quux (3.2.0) <---[E] +```bash +foo ++-- node_modules + +-- blerg (1.2.5) <---[A] + +-- bar (1.2.3) <---[B] + | `-- node_modules + | +-- baz (2.0.2) <---[C] + | | `-- node_modules + | | `-- quux (3.2.0) + | `-- asdf (2.3.4) + `-- baz (1.2.3) <---[D] + `-- node_modules + `-- quux (3.2.0) <---[E] +``` Since foo depends directly on `bar@1.2.3` and `baz@1.2.3`, those are installed in foo's `node_modules` folder. @@ -191,7 +202,7 @@ dependency on bar is satisfied by the parent folder copy installed at [B]. For a graphical breakdown of what is installed where, use `npm ls`. -### Publishing +#### Publishing Upon publishing, npm will look in the `node_modules` folder. If any of the items there are not in the `bundledDependencies` array, then they will @@ -199,15 +210,15 @@ not be included in the package tarball. This allows a package maintainer to install all of their dependencies (and dev dependencies) locally, but only re-publish those items that -cannot be found elsewhere. See `package.json(5)` for more information. - -## SEE ALSO - -* package.json(5) -* npm-install(1) -* npm-pack(1) -* npm-cache(1) -* npm-config(1) -* npmrc(5) -* npm-config(7) -* npm-publish(1) +cannot be found elsewhere. See [`package.json`](/docs/configuring-npm/package.json) for more information. + +### See also + +* [package.json](/configuring-npm/package-json) +* [npm install](/cli-commands/npm-install) +* [npm pack](/cli-commands/npm-pack) +* [npm cache](/cli-commands/npm-cache) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [config](/using-npm/config) +* [npm publish](/cli-commands/npm-publish) diff --git a/docs/content/configuring-npm/install.md b/docs/content/configuring-npm/install.md new file mode 100644 index 0000000000000..4de8492dee948 --- /dev/null +++ b/docs/content/configuring-npm/install.md @@ -0,0 +1,66 @@ +--- +section: configuring-npm +title: install +description: Download and install node and npm +--- + +# Download and Install npm + +To publish and install packages to and from the public npm registry, you must install Node.js and the npm command line interface using either a Node version manager or a Node installer. **We strongly recommend using a Node version manager to install Node.js and npm.** We do not recommend using a Node installer, since the Node installation process installs npm in a directory with local permissions and can cause permissions errors when you run npm packages globally. + +### Overview + +- [Checking your version of npm and Node.js](#checking-your-version-of-npm-and-node-js) +- [Using a Node version manager to install Node.js and npm](#using-a-node-version-manager-to-install-node-js-and-npm) +- [Using a Node installer to install Node.js and npm](#using-a-node-installer-to-install-node-js-and-npm) + +### Checking your version of npm and Node.js + +To see if you already have Node.js and npm installed and check the installed version, run the following commands: + +``` +node -v +npm -v +``` + +### Using a Node version manager to install Node.js and npm + +Node version managers allow you to install and switch between multiple versions of Node.js and npm on your system so you can test your applications on multiple versions of npm to ensure they work for users on different versions. + +#### OSX or Linux Node version managers + +* [nvm](https://github.com/creationix/nvm) +* [n](https://github.com/tj/n) + +#### Windows Node version managers + +* [nodist](https://github.com/marcelklehr/nodist) +* [nvm-windows](https://github.com/coreybutler/nvm-windows) + +### Using a Node installer to install Node.js and npm + +If you are unable to use a Node version manager, you can use a Node installer to install both Node.js and npm on your system. + +* [Node.js installer](https://nodejs.org/en/download/) +* [NodeSource installer](https://github.com/nodesource/distributions). If you use Linux, we recommend that you use a NodeSource installer. + +#### OS X or Windows Node installers + +If you're using OS X or Windows, use one of the installers from the [Node.js download page](https://nodejs.org/en/download/). Be sure to install the version labeled **LTS**. Other versions have not yet been tested with npm. + +#### Linux or other operating systems Node installers + +If you're using Linux or another operating system, use one of the following installers: + +- [NodeSource installer](https://github.com/nodesource/distributions) (recommended) +- One of the installers on the [Node.js download page](https://nodejs.org/en/download/) + +Or see [this page](https://nodejs.org/en/download/package-manager/) to install npm for Linux in the way many Linux developers prefer. + + +#### Less-common operating systems + +For more information on installing Node.js on a variety of operating systems, see [this page][pkg-mgr]. + + +[pkg-mgr]: https://nodejs.org/en/download/package-manager/ \ No newline at end of file diff --git a/doc/files/npmrc.md b/docs/content/configuring-npm/npmrc.md old mode 100644 new mode 100755 similarity index 73% rename from doc/files/npmrc.md rename to docs/content/configuring-npm/npmrc.md index 0980c1090ad4c..b1a66ce10bf97 --- a/doc/files/npmrc.md +++ b/docs/content/configuring-npm/npmrc.md @@ -1,7 +1,14 @@ -npmrc(5) -- The npm config files -================================ +--- +section: configuring-npm +title: npmrc +description: The npm config files +--- -## DESCRIPTION +# npmrc + +## The npm config files + +### Description npm gets its config settings from the command line, environment variables, and `npmrc` files. @@ -9,9 +16,9 @@ variables, and `npmrc` files. The `npm config` command can be used to update and edit the contents of the user and global npmrc files. -For a list of available configuration options, see npm-config(7). +For a list of available configuration options, see [npm-config](/docs/using-npm/config). -## FILES +### Files The four relevant files are: @@ -24,7 +31,9 @@ All npm config files are an ini-formatted list of `key = value` parameters. Environment variables can be replaced using `${VARIABLE_NAME}`. For example: - prefix = ${HOME}/.npm-packages +```bash +prefix = ${HOME}/.npm-packages +``` Each of these files is loaded, and config options are resolved in priority order. For example, a setting in the userconfig file would @@ -33,8 +42,10 @@ override the setting in the globalconfig file. Array values are specified by adding "[]" after the key name. For example: - key[] = "first value" - key[] = "second value" +```bash +key[] = "first value" +key[] = "second value" +``` #### Comments @@ -42,11 +53,13 @@ Lines in `.npmrc` files are interpreted as comments when they begin with a `;` o For example: - # last modified: 01 Jan 2016 - ; Set a new registry for a scoped package - @myscope:registry=https://mycustomregistry.example.org +```bash +# last modified: 01 Jan 2016 +; Set a new registry for a scoped package +@myscope:registry=https://mycustomregistry.example.org +``` -### Per-project config file +#### Per-project config file When working locally in a project, a `.npmrc` file in the root of the project (ie, a sibling of `node_modules` and `package.json`) will set @@ -60,18 +73,18 @@ globally, or in a different location. Additionally, this file is not read in global mode, such as when running `npm install -g`. -### Per-user config file +#### Per-user config file `$HOME/.npmrc` (or the `userconfig` param, if set in the environment or on the command line) -### Global config file +#### Global config file `$PREFIX/etc/npmrc` (or the `globalconfig` param, if set above): This file is an ini-file formatted list of `key = value` parameters. Environment variables can be replaced as above. -### Built-in config file +#### Built-in config file `path/to/npm/itself/npmrc` @@ -81,10 +94,10 @@ script that comes with npm. This is primarily for distribution maintainers to override default configs in a standard and consistent manner. -## SEE ALSO +### See also -* npm-folders(5) -* npm-config(1) -* npm-config(7) -* package.json(5) -* npm(1) +* [npm folders](/configuring-npm/folders) +* [npm config](/cli-commands/npm-config) +* [config](/using-npm/config) +* [package.json](/configuring-npm/package-json) +* [npm](/cli-commands/npm) diff --git a/doc/files/package.json.md b/docs/content/configuring-npm/package-json.md old mode 100644 new mode 100755 similarity index 76% rename from doc/files/package.json.md rename to docs/content/configuring-npm/package-json.md index 6324caf64a517..92700887136e5 --- a/doc/files/package.json.md +++ b/docs/content/configuring-npm/package-json.md @@ -1,15 +1,22 @@ -package.json(5) -- Specifics of npm's package.json handling -=========================================================== +--- +section: configuring-npm +title: package.json +description: Specifics of npm's package.json handling +--- -## DESCRIPTION +# package.json + +## Specifics of npm's package.json handling + +### Description This document is all you need to know about what's required in your package.json file. It must be actual JSON, not just a JavaScript object literal. A lot of the behavior described in this document is affected by the config -settings described in `npm-config(7)`. +settings described in [`npm-config`](/docs/using-npm/config). -## name +### name If you plan to publish your package, the *most* important things in your package.json are the name and version fields as they will be required. The name @@ -40,9 +47,9 @@ Some tips: already, before you get too attached to it. A name can be optionally prefixed by a scope, e.g. `@myorg/mypackage`. See -`npm-scope(7)` for more detail. +[`npm-scope`](/docs/using-npm/scope) for more detail. -## version +### version If you plan to publish your package, the *most* important things in your package.json are the name and version fields as they will be required. The name @@ -54,27 +61,29 @@ Version must be parseable by [node-semver](https://github.com/isaacs/node-semver), which is bundled with npm as a dependency. (`npm install semver` to use it yourself.) -More on version numbers and ranges at semver(7). +More on version numbers and ranges at [semver](/docs/using-npm/semver). -## description +### description Put a description in it. It's a string. This helps people discover your package, as it's listed in `npm search`. -## keywords +### keywords Put keywords in it. It's an array of strings. This helps people discover your package as it's listed in `npm search`. -## homepage +### homepage The url to the project homepage. Example: - "homepage": "https://github.com/owner/project#readme" +```json +"homepage": "https://github.com/owner/project#readme" +``` -## bugs +### bugs The url to your project's issue tracker and / or the email address to which issues should be reported. These are helpful for people who encounter issues @@ -82,16 +91,18 @@ with your package. It should look like this: - { "url" : "https://github.com/owner/project/issues" - , "email" : "project@hostname.com" - } +```json +{ "url" : "https://github.com/owner/project/issues" +, "email" : "project@hostname.com" +} +``` You can specify either one or both values. If you want to provide only a url, you can specify the value for "bugs" as a simple string instead of an object. If a url is provided, it will be used by the `npm bugs` command. -## license +### license You should specify a license for your package so that people know how they are permitted to use it, and any restrictions you're placing on it. @@ -99,7 +110,9 @@ permitted to use it, and any restrictions you're placing on it. If you're using a common license such as BSD-2-Clause or MIT, add a current SPDX license identifier for the license you're using, like this: - { "license" : "BSD-3-Clause" } +```json +{ "license" : "BSD-3-Clause" } +``` You can check [the full list of SPDX license IDs](https://spdx.org/licenses/). Ideally you should pick one that is @@ -108,69 +121,80 @@ Ideally you should pick one that is If your package is licensed under multiple common licenses, use an [SPDX license expression syntax version 2.0 string](https://www.npmjs.com/package/spdx), like this: - { "license" : "(ISC OR GPL-3.0)" } - +```json +{ "license" : "(ISC OR GPL-3.0)" } +``` If you are using a license that hasn't been assigned an SPDX identifier, or if you are using a custom license, use a string value like this one: - { "license" : "SEE LICENSE IN " } - +```json +{ "license" : "SEE LICENSE IN " } +``` Then include a file named `` at the top level of the package. Some old packages used license objects or a "licenses" property containing an array of license objects: - // Not valid metadata - { "license" : - { "type" : "ISC" - , "url" : "https://opensource.org/licenses/ISC" - } - } +```json +// Not valid metadata +{ "license" : + { "type" : "ISC" + , "url" : "https://opensource.org/licenses/ISC" + } +} - // Not valid metadata - { "licenses" : - [ - { "type": "MIT" - , "url": "https://www.opensource.org/licenses/mit-license.php" - } - , { "type": "Apache-2.0" - , "url": "https://opensource.org/licenses/apache2.0.php" - } - ] +// Not valid metadata +{ "licenses" : + [ + { "type": "MIT" + , "url": "https://www.opensource.org/licenses/mit-license.php" + } + , { "type": "Apache-2.0" + , "url": "https://opensource.org/licenses/apache2.0.php" } + ] +} +``` Those styles are now deprecated. Instead, use SPDX expressions, like this: - { "license": "ISC" } +```json +{ "license": "ISC" } - { "license": "(MIT OR Apache-2.0)" } +{ "license": "(MIT OR Apache-2.0)" } +``` Finally, if you do not wish to grant others the right to use a private or unpublished package under any terms: - { "license": "UNLICENSED" } - +```json +{ "license": "UNLICENSED" } +``` Consider also setting `"private": true` to prevent accidental publication. -## people fields: author, contributors +### people fields: author, contributors The "author" is one person. "contributors" is an array of people. A "person" is an object with a "name" field and optionally "url" and "email", like this: - { "name" : "Barney Rubble" - , "email" : "b@rubble.com" - , "url" : "http://barnyrubble.tumblr.com/" - } +```json +{ "name" : "Barney Rubble" +, "email" : "b@rubble.com" +, "url" : "http://barnyrubble.tumblr.com/" +} +``` Or you can shorten that all into a single string, and npm will parse it for you: - "Barney Rubble (http://barnyrubble.tumblr.com/)" +```json +"Barney Rubble (http://barnyrubble.tumblr.com/)" +``` Both email and url are optional either way. npm also sets a top-level "maintainers" field with your npm user info. -## files +### files The optional `files` field is an array of file patterns that describes the entries to be included when your package is installed as a @@ -221,7 +245,7 @@ Conversely, some files are always ignored: * `*.orig` * `package-lock.json` (use shrinkwrap instead) -## main +### main The main field is a module ID that is the primary entry point to your program. That is, if your package is named `foo`, and a user installs it, and then does @@ -232,13 +256,13 @@ This should be a module ID relative to the root of your package folder. For most modules, it makes the most sense to have a main script and often not much else. -## browser +### browser If your module is meant to be used client-side the browser field should be used instead of the main field. This is helpful to hint users that it might rely on primitives that aren't available in Node.js modules. (e.g. `window`) -## bin +### bin A lot of packages have one or more executable files that they'd like to install into the PATH. npm makes this pretty easy (in fact, it uses this @@ -252,7 +276,9 @@ installs. For example, myapp could have this: - { "bin" : { "myapp" : "./cli.js" } } +```json +{ "bin" : { "myapp" : "./cli.js" } } +``` So, when you install myapp, it'll create a symlink from the `cli.js` script to `/usr/local/bin/myapp`. @@ -260,21 +286,25 @@ So, when you install myapp, it'll create a symlink from the `cli.js` script to If you have a single executable, and its name should be the name of the package, then you can just supply it as a string. For example: - { "name": "my-program" - , "version": "1.2.5" - , "bin": "./path/to/program" } +```json +{ "name": "my-program" +, "version": "1.2.5" +, "bin": "./path/to/program" } +``` would be the same as this: - { "name": "my-program" - , "version": "1.2.5" - , "bin" : { "my-program" : "./path/to/program" } } +```json +{ "name": "my-program" +, "version": "1.2.5" +, "bin" : { "my-program" : "./path/to/program" } } +``` Please make sure that your file(s) referenced in `bin` starts with `#!/usr/bin/env node`, otherwise the scripts are started without the node executable! -## man +### man Specify either a single file or an array of filenames to put in place for the `man` program to find. @@ -282,40 +312,45 @@ Specify either a single file or an array of filenames to put in place for the If only a single file is provided, then it's installed such that it is the result from `man `, regardless of its actual filename. For example: - { "name" : "foo" - , "version" : "1.2.3" - , "description" : "A packaged foo fooer for fooing foos" - , "main" : "foo.js" - , "man" : "./man/doc.1" - } +```json +{ "name" : "foo" +, "version" : "1.2.3" +, "description" : "A packaged foo fooer for fooing foos" +, "main" : "foo.js" +, "man" : "./man/doc.1" +} +``` would link the `./man/doc.1` file in such that it is the target for `man foo` If the filename doesn't start with the package name, then it's prefixed. So, this: - { "name" : "foo" - , "version" : "1.2.3" - , "description" : "A packaged foo fooer for fooing foos" - , "main" : "foo.js" - , "man" : [ "./man/foo.1", "./man/bar.1" ] - } +```json +{ "name" : "foo" +, "version" : "1.2.3" +, "description" : "A packaged foo fooer for fooing foos" +, "main" : "foo.js" +, "man" : [ "./man/foo.1", "./man/bar.1" ] +} +``` will create files to do `man foo` and `man foo-bar`. Man files must end with a number, and optionally a `.gz` suffix if they are compressed. The number dictates which man section the file is installed into. - { "name" : "foo" - , "version" : "1.2.3" - , "description" : "A packaged foo fooer for fooing foos" - , "main" : "foo.js" - , "man" : [ "./man/foo.1", "./man/foo.2" ] - } - +```json +{ "name" : "foo" +, "version" : "1.2.3" +, "description" : "A packaged foo fooer for fooing foos" +, "main" : "foo.js" +, "man" : [ "./man/foo.1", "./man/foo.2" ] +} +``` will create entries for `man foo` and `man 2 foo` -## directories +### directories The CommonJS [Packages](http://wiki.commonjs.org/wiki/Packages/1.0) spec details a few ways that you can indicate the structure of your package using a `directories` @@ -324,12 +359,12 @@ you'll see that it has directories for doc, lib, and man. In the future, this information may be used in other creative ways. -### directories.lib +#### directories.lib Tell people where the bulk of your library is. Nothing special is done with the lib folder in any way, but it's useful meta info. -### directories.bin +#### directories.bin If you specify a `bin` directory in `directories.bin`, all the files in that folder will be added. @@ -339,26 +374,26 @@ Because of the way the `bin` directive works, specifying both a specify individual files, use `bin`, and for all the files in an existing `bin` directory, use `directories.bin`. -### directories.man +#### directories.man A folder that is full of man pages. Sugar to generate a "man" array by walking the folder. -### directories.doc +#### directories.doc Put markdown files in here. Eventually, these will be displayed nicely, maybe, someday. -### directories.example +#### directories.example Put example scripts in here. Someday, it might be exposed in some clever way. -### directories.test +#### directories.test Put your tests in here. It is currently not exposed, but it might be in the future. -## repository +### repository Specify the place where your code lives. This is helpful for people who want to contribute. If the git repo is on GitHub, then the `npm docs` @@ -366,15 +401,17 @@ command will be able to find you. Do it like this: - "repository": { - "type" : "git", - "url" : "https://github.com/npm/cli.git" - } +```json +"repository": { + "type" : "git", + "url" : "https://github.com/npm/cli.git" +} - "repository": { - "type" : "svn", - "url" : "https://v8.googlecode.com/svn/trunk/" - } +"repository": { + "type" : "svn", + "url" : "https://v8.googlecode.com/svn/trunk/" +} +``` The URL should be a publicly available (perhaps read-only) url that can be handed directly to a VCS program without any modification. It should not be a url to an @@ -383,50 +420,56 @@ html project page that you put in your browser. It's for computers. For GitHub, GitHub gist, Bitbucket, or GitLab repositories you can use the same shortcut syntax you use for `npm install`: - "repository": "npm/npm" +```json +"repository": "npm/npm" - "repository": "github:user/repo" +"repository": "github:user/repo" - "repository": "gist:11081aaa281" +"repository": "gist:11081aaa281" - "repository": "bitbucket:user/repo" +"repository": "bitbucket:user/repo" - "repository": "gitlab:user/repo" +"repository": "gitlab:user/repo" +``` If the `package.json` for your package is not in the root directory (for example if it is part of a monorepo), you can specify the directory in which it lives: - "repository": { - "type" : "git", - "url" : "https://github.com/facebook/react.git", - "directory": "packages/react-dom" - } +```json +"repository": { + "type" : "git", + "url" : "https://github.com/facebook/react.git", + "directory": "packages/react-dom" +} +``` -## scripts +### scripts The "scripts" property is a dictionary containing script commands that are run at various times in the lifecycle of your package. The key is the lifecycle event, and the value is the command to run at that point. -See `npm-scripts(7)` to find out more about writing package scripts. +See [`npm-scripts`](/docs/using-npm/scripts) to find out more about writing package scripts. -## config +### config A "config" object can be used to set configuration parameters used in package scripts that persist across upgrades. For instance, if a package had the following: - { "name" : "foo" - , "config" : { "port" : "8080" } } +```json +{ "name" : "foo" +, "config" : { "port" : "8080" } } +``` and then had a "start" command that then referenced the `npm_package_config_port` environment variable, then the user could override that by doing `npm config set foo:port 8001`. -See `npm-config(7)` and `npm-scripts(7)` for more on package +See [`npm-config`](/docs/using-npm/config) and [`npm-scripts`](/docs/using-npm/scripts) for more on package configs. -## dependencies +### dependencies Dependencies are specified in a simple object that maps a package name to a version range. The version range is a string which has one or more @@ -436,15 +479,15 @@ tarball or git URL. **Please do not put test harnesses or transpilers in your `dependencies` object.** See `devDependencies`, below. -See semver(7) for more details about specifying version ranges. +See [semver](/docs/using-npm/semver) for more details about specifying version ranges. * `version` Must match `version` exactly * `>version` Must be greater than `version` * `>=version` etc * `=1.0.2 <2.1.2" - , "baz" : ">1.0.2 <=2.3.4" - , "boo" : "2.0.1" - , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0" - , "asd" : "http://asdf.com/asdf.tar.gz" - , "til" : "~1.2" - , "elf" : "~1.2.3" - , "two" : "2.x" - , "thr" : "3.3.x" - , "lat" : "latest" - , "dyl" : "file:../dyl" - } - } +```json +{ "dependencies" : + { "foo" : "1.0.0 - 2.9999.9999" + , "bar" : ">=1.0.2 <2.1.2" + , "baz" : ">1.0.2 <=2.3.4" + , "boo" : "2.0.1" + , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0" + , "asd" : "http://asdf.com/asdf.tar.gz" + , "til" : "~1.2" + , "elf" : "~1.2.3" + , "two" : "2.x" + , "thr" : "3.3.x" + , "lat" : "latest" + , "dyl" : "file:../dyl" + } +} +``` -### URLs as Dependencies +#### URLs as Dependencies You may specify a tarball URL in place of a version range. This tarball will be downloaded and installed locally to your package at install time. -### Git URLs as Dependencies +#### Git URLs as Dependencies Git urls are of the form: - ://[[:]@][:][:][/][# | #semver:] +```bash +://[[:]@][:][:][/][# | #semver:] +``` `` is one of `git`, `git+ssh`, `git+http`, `git+https`, or `git+file`. @@ -499,54 +546,62 @@ specified, then `master` is used. Examples: - git+ssh://git@github.com:npm/cli.git#v1.0.27 - git+ssh://git@github.com:npm/cli#semver:^5.0 - git+https://isaacs@github.com/npm/cli.git - git://github.com/npm/cli.git#v1.0.27 +```bash +git+ssh://git@github.com:npm/cli.git#v1.0.27 +git+ssh://git@github.com:npm/cli#semver:^5.0 +git+https://isaacs@github.com/npm/cli.git +git://github.com/npm/cli.git#v1.0.27 +``` -### GitHub URLs +#### GitHub URLs As of version 1.1.65, you can refer to GitHub urls as just "foo": "user/foo-project". Just as with git URLs, a `commit-ish` suffix can be included. For example: - { - "name": "foo", - "version": "0.0.0", - "dependencies": { - "express": "expressjs/express", - "mocha": "mochajs/mocha#4727d357ea", - "module": "user/repo#feature\/branch" - } - } +```json +{ + "name": "foo", + "version": "0.0.0", + "dependencies": { + "express": "expressjs/express", + "mocha": "mochajs/mocha#4727d357ea", + "module": "user/repo#feature\/branch" + } +} +``` -### Local Paths +#### Local Paths As of version 2.0.0 you can provide a path to a local directory that contains a package. Local paths can be saved using `npm install -S` or `npm install --save`, using any of these forms: - ../foo/bar - ~/foo/bar - ./foo/bar - /foo/bar +```bash +../foo/bar +~/foo/bar +./foo/bar +/foo/bar +``` in which case they will be normalized to a relative path and added to your `package.json`. For example: - { - "name": "baz", - "dependencies": { - "bar": "file:../foo/bar" - } - } +```json +{ + "name": "baz", + "dependencies": { + "bar": "file:../foo/bar" + } +} +``` This feature is helpful for local offline development and creating tests that require npm installing where you don't want to hit an external server, but should not be used when publishing packages to the public registry. -## devDependencies +### devDependencies If someone is planning on downloading and using your module in their program, then they probably don't want or need to download and build @@ -557,7 +612,7 @@ object. These things will be installed when doing `npm link` or `npm install` from the root of a package, and can be managed like any other npm -configuration param. See `npm-config(7)` for more on the topic. +configuration param. See [`npm-config`](/docs/using-npm/config) for more on the topic. For build steps that are not platform-specific, such as compiling CoffeeScript or other languages to JavaScript, use the `prepare` @@ -565,24 +620,26 @@ script to do this, and make the required package a devDependency. For example: - { "name": "ethopia-waza", - "description": "a delightfully fruity coffee varietal", - "version": "1.2.3", - "devDependencies": { - "coffee-script": "~1.6.3" - }, - "scripts": { - "prepare": "coffee -o lib/ -c src/waza.coffee" - }, - "main": "lib/waza.js" - } +```json +{ "name": "ethopia-waza", + "description": "a delightfully fruity coffee varietal", + "version": "1.2.3", + "devDependencies": { + "coffee-script": "~1.6.3" + }, + "scripts": { + "prepare": "coffee -o lib/ -c src/waza.coffee" + }, + "main": "lib/waza.js" +} +``` The `prepare` script will be run before publishing, so that users can consume the functionality without requiring them to compile it themselves. In dev mode (ie, locally running `npm install`), it'll run this script as well, so that you can test it easily. -## peerDependencies +### peerDependencies In some cases, you want to express the compatibility of your package with a host tool or library, while not necessarily doing a `require` of this host. @@ -591,20 +648,24 @@ a specific interface, expected and specified by the host documentation. For example: - { - "name": "tea-latte", - "version": "1.3.5", - "peerDependencies": { - "tea": "2.x" - } - } +```json +{ + "name": "tea-latte", + "version": "1.3.5", + "peerDependencies": { + "tea": "2.x" + } +} +``` This ensures your package `tea-latte` can be installed *along* with the second major version of the host package `tea` only. `npm install tea-latte` could possibly yield the following dependency graph: - ├── tea-latte@1.3.5 - └── tea@2.2.0 +```bash +├── tea-latte@1.3.5 +└── tea@2.2.0 +``` **NOTE: npm versions 1 and 2 will automatically install `peerDependencies` if they are not explicitly depended upon higher in the dependency tree. In the @@ -622,7 +683,7 @@ the host package's major version will break your plugin. Thus, if you've worked with every 1.x version of the host package, use `"^1.0"` or `"1.x"` to express this. If you depend on features introduced in 1.5.2, use `">= 1.5.2 < 2"`. -## bundledDependencies +### bundledDependencies This defines an array of package names that will be bundled when publishing the package. @@ -636,7 +697,7 @@ For example: If we define a package.json like this: -``` +```json { "name": "awesome-web-framework", "version": "1.0.0", @@ -653,7 +714,7 @@ any versions, as that information is specified in `dependencies`. If this is spelled `"bundleDependencies"`, then that is also honored. -## optionalDependencies +### optionalDependencies If a dependency can be used, but you would like npm to proceed if it cannot be found or fails to install, then you may put it in the `optionalDependencies` @@ -664,30 +725,34 @@ installation to fail. It is still your program's responsibility to handle the lack of the dependency. For example, something like this: - try { - var foo = require('foo') - var fooVersion = require('foo/package.json').version - } catch (er) { - foo = null - } - if ( notGoodFooVersion(fooVersion) ) { - foo = null - } +```js +try { + var foo = require('foo') + var fooVersion = require('foo/package.json').version +} catch (er) { + foo = null +} +if ( notGoodFooVersion(fooVersion) ) { + foo = null +} - // .. then later in your program .. +// .. then later in your program .. - if (foo) { - foo.doFooThings() - } +if (foo) { + foo.doFooThings() +} +``` Entries in `optionalDependencies` will override entries of the same name in `dependencies`, so it's usually best to only put in one place. -## engines +### engines You can specify the version of node that your stuff works on: - { "engines" : { "node" : ">=0.10.3 <0.12" } } +```json +{ "engines" : { "node" : ">=0.10.3 <0.12" } } +``` And, like with dependencies, if you don't specify the version (or if you specify "\*" as the version), then any version of node will do. @@ -699,49 +764,59 @@ that it works on node. You can also use the "engines" field to specify which versions of npm are capable of properly installing your program. For example: - { "engines" : { "npm" : "~1.0.20" } } +```json +{ "engines" : { "npm" : "~1.0.20" } } +``` Unless the user has set the `engine-strict` config flag, this field is advisory only and will only produce warnings when your package is installed as a dependency. -## engineStrict +### engineStrict **This feature was removed in npm 3.0.0** Prior to npm 3.0.0, this feature was used to treat this package as if the user had set `engine-strict`. It is no longer used. -## os +### os You can specify which operating systems your module will run on: - "os" : [ "darwin", "linux" ] +```json +"os" : [ "darwin", "linux" ] +``` You can also blacklist instead of whitelist operating systems, just prepend the blacklisted os with a '!': - "os" : [ "!win32" ] +```json +"os" : [ "!win32" ] +``` The host operating system is determined by `process.platform` It is allowed to both blacklist, and whitelist, although there isn't any good reason to do this. -## cpu +### cpu If your code only runs on certain cpu architectures, you can specify which ones. - "cpu" : [ "x64", "ia32" ] +```json +"cpu" : [ "x64", "ia32" ] +``` Like the `os` option, you can also blacklist architectures: - "cpu" : [ "!arm", "!mips" ] +```json +"cpu" : [ "!arm", "!mips" ] +``` The host architecture is determined by `process.arch` -## preferGlobal +### preferGlobal **DEPRECATED** @@ -749,7 +824,7 @@ This option used to trigger an npm warning, but it will no longer warn. It is purely there for informational purposes. It is now recommended that you install any binaries as local devDependencies wherever possible. -## private +### private If you set `"private": true` in your package.json, then npm will refuse to publish it. @@ -760,7 +835,7 @@ specific registry (for example, an internal registry), then use the `publishConfig` dictionary described below to override the `registry` config param at publish-time. -## publishConfig +### publishConfig This is a set of config values that will be used at publish-time. It's especially handy if you want to set the tag, registry or access, so that @@ -770,10 +845,10 @@ to the global public registry or that a scoped module is private by default. Any config values can be overridden, but only "tag", "registry" and "access" probably matter for the purposes of publishing. -See `npm-config(7)` to see the list of config options that can be +See [`npm-config`](/docs/using-npm/config) to see the list of config options that can be overridden. -## DEFAULT VALUES +### DEFAULT VALUES npm will default some values based on package contents. @@ -794,14 +869,13 @@ npm will default some values based on package contents. are optional. Lines which start with a `#` or are blank, will be ignored. -## SEE ALSO - -* semver(7) -* npm-init(1) -* npm-version(1) -* npm-config(1) -* npm-config(7) -* npm-help(1) -* npm-install(1) -* npm-publish(1) -* npm-uninstall(1) +### SEE ALSO + +* [semver](/using-npm/semver) +* [npm init](/cli-commands/npm-init) +* [npm version](/cli-commands/npm-version) +* [npm config](/cli-commands/npm-config) +* [npm help](/cli-commands/npm-help) +* [npm install](/cli-commands/npm-install) +* [npm publish](/cli-commands/npm-publish) +* [npm uninstall](/cli-commands/npm-uninstall) diff --git a/doc/files/package-lock.json.md b/docs/content/configuring-npm/package-lock-json.md old mode 100644 new mode 100755 similarity index 87% rename from doc/files/package-lock.json.md rename to docs/content/configuring-npm/package-lock-json.md index 1b4ba93497117..33a74f55fed88 --- a/doc/files/package-lock.json.md +++ b/docs/content/configuring-npm/package-lock-json.md @@ -1,7 +1,14 @@ -package-lock.json(5) -- A manifestation of the manifest -===================================================== +--- +section: configuring-npm +title: package-lock.json +description: A manifestation of the manifest +--- -## DESCRIPTION +# package-lock.json + +## A manifestation of the manifest + +### Description `package-lock.json` is automatically generated for any operations where npm modifies either the `node_modules` tree, or `package.json`. It describes the @@ -21,7 +28,7 @@ various purposes: One key detail about `package-lock.json` is that it cannot be published, and it will be ignored if found in any place other than the toplevel package. It shares -a format with npm-shrinkwrap.json(5), which is essentially the same file, but +a format with [npm-shrinkwrap.json](docs/configuring-npm/shrinkwrap-json), which is essentially the same file, but allows publication. This is not recommended unless deploying a CLI tool or otherwise using the publication process for producing production packages. @@ -29,24 +36,24 @@ If both `package-lock.json` and `npm-shrinkwrap.json` are present in the root of a package, `package-lock.json` will be completely ignored. -## FILE FORMAT +### File Format -### name +#### name The name of the package this is a package-lock for. This must match what's in `package.json`. -### version +#### version The version of the package this is a package-lock for. This must match what's in `package.json`. -### lockfileVersion +#### lockfileVersion An integer version, starting at `1` with the version number of this document whose semantics were used when generating this `package-lock.json`. -### packageIntegrity +#### packageIntegrity This is a [subresource integrity](https://w3c.github.io/webappsec/specs/subresourceintegrity/) value @@ -54,18 +61,18 @@ created from the `package.json`. No preprocessing of the `package.json` should be done. Subresource integrity strings can be produced by modules like [`ssri`](https://www.npmjs.com/package/ssri). -### preserveSymlinks +#### preserveSymlinks Indicates that the install was done with the environment variable `NODE_PRESERVE_SYMLINKS` enabled. The installer should insist that the value of this property match that environment variable. -### dependencies +#### dependencies A mapping of package name to dependency object. Dependency objects have the following properties: -#### version +##### version This is a specifier that uniquely identifies this package and should be usable in fetching a new copy of it. @@ -77,7 +84,7 @@ usable in fetching a new copy of it. * local tarball sources: This is the file URL of the tarball. (eg `file:///opt/storage/example-1.3.0.tgz`) * local link sources: This is the file URL of the link. (eg `file:libs/our-module`) -#### integrity +##### integrity This is a [Standard Subresource Integrity](https://w3c.github.io/webappsec/specs/subresourceintegrity/) for this @@ -90,27 +97,27 @@ resource. the file. * For local tarball sources: This is an integrity field based on the SHA512 of the file. -#### resolved +##### resolved * For bundled dependencies this is not included, regardless of source. * For registry sources this is path of the tarball relative to the registry URL. If the tarball URL isn't on the same server as the registry URL then this is a complete URL. -#### bundled +##### bundled If true, this is the bundled dependency and will be installed by the parent module. When installing, this module will be extracted from the parent module during the extract phase, not installed as a separate dependency. -#### dev +##### dev If true then this dependency is either a development dependency ONLY of the top level module or a transitive dependency of one. This is false for dependencies that are both a development dependency of the top level and a transitive dependency of a non-development dependency of the top level. -#### optional +##### optional If true then this dependency is either an optional dependency ONLY of the top level module or a transitive dependency of one. This is false for @@ -121,7 +128,7 @@ All optional dependencies should be included even if they're uninstallable on the current platform. -#### requires +##### requires This is a mapping of module name to version. This is a list of everything this module requires, regardless of where it will be installed. The version @@ -129,14 +136,14 @@ should match via normal matching rules a dependency either in our `dependencies` or in a level higher than us. -#### dependencies +##### dependencies The dependencies of this dependency, exactly as at the top level. -## SEE ALSO +### See also -* npm-shrinkwrap(1) -* npm-shrinkwrap.json(5) -* npm-package-locks(5) -* package.json(5) -* npm-install(1) +* [npm shrinkwrap](/cli-commands/npm-shrinkwrap) +* [shrinkwrap.json](/configuring-npm/shrinkwrap-json) +* [package-locks](/configuring-npm/package-locks) +* [package.json](/configuring-npm/package-json) +* [npm install](/cli-commands/npm-install) diff --git a/doc/files/npm-package-locks.md b/docs/content/configuring-npm/package-locks.md old mode 100644 new mode 100755 similarity index 75% rename from doc/files/npm-package-locks.md rename to docs/content/configuring-npm/package-locks.md index cbb62bdc3841c..acdf29136f0b4 --- a/doc/files/npm-package-locks.md +++ b/docs/content/configuring-npm/package-locks.md @@ -1,9 +1,16 @@ -npm-package-locks(5) -- An explanation of npm lockfiles -===================================================== +--- +section: configuring-npm +title: package-locks +description: An explanation of npm lockfiles +--- -## DESCRIPTION +# package-locks -Conceptually, the "input" to npm-install(1) is a package.json(5), while its +## An explanation of npm lockfiles + +### Description + +Conceptually, the "input" to [`npm-install`](/docs/cli-commands/npm-install) is a [package.json](/docs/configuring-npm/package-json), while its "output" is a fully-formed `node_modules` tree: a representation of the dependencies you declared. In an ideal world, npm would work like a pure function: the same `package.json` should produce the exact same `node_modules` @@ -20,44 +27,53 @@ unable to do this. There are multiple reasons for this: As an example, consider package A: - { - "name": "A", - "version": "0.1.0", - "dependencies": { - "B": "<0.1.0" - } - } +```json +{ + "name": "A", + "version": "0.1.0", + "dependencies": { + "B": "<0.1.0" + } +} +``` package B: - { - "name": "B", - "version": "0.0.1", - "dependencies": { - "C": "<0.1.0" - } - } +```json +{ + "name": "B", + "version": "0.0.1", + "dependencies": { + "C": "<0.1.0" + } +} +``` and package C: - - { - "name": "C", - "version": "0.0.1" - } +```json +{ + "name": "C", + "version": "0.0.1" +} +``` If these are the only versions of A, B, and C available in the registry, then a normal `npm install A` will install: - A@0.1.0 - `-- B@0.0.1 - `-- C@0.0.1 +```json +A@0.1.0 +`-- B@0.0.1 + `-- C@0.0.1 +``` However, if B@0.0.2 is published, then a fresh `npm install A` will install: - A@0.1.0 - `-- B@0.0.2 - `-- C@0.0.1 +```bash +A@0.1.0 +`-- B@0.0.2 + `-- C@0.0.1 +``` assuming the new version did not modify B's dependencies. Of course, the new version of B could include a new version of C and any number @@ -67,34 +83,36 @@ author are not the same person, there's no way for A's author to say that he or she does not want to pull in newly published versions of C when B hasn't changed at all. -To prevent this potential issue, npm uses package-lock.json(5) or, if present, -npm-shrinkwrap.json(5). These files are called package locks, or lockfiles. +To prevent this potential issue, npm uses [package-lock.json](/docs/configuring-npm/package-lock-json) or, if present, +[npm-shrinkwrap.json](shrinkwrap.json). These files are called package locks, or lockfiles. Whenever you run `npm install`, npm generates or updates your package lock, which will look something like this: - { - "name": "A", - "version": "0.1.0", - ...metadata fields... +```json +{ + "name": "A", + "version": "0.1.0", + ...metadata fields... + "dependencies": { + "B": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/B/-/B-0.0.1.tgz", + "integrity": "sha512-DeAdb33F+" "dependencies": { - "B": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/B/-/B-0.0.1.tgz", - "integrity": "sha512-DeAdb33F+" - "dependencies": { - "C": { - "version": "git://github.com/org/C.git#5c380ae319fc4efe9e7f2d9c78b0faa588fd99b4" - } - } + "C": { + "version": "git://github.com/org/C.git#5c380ae319fc4efe9e7f2d9c78b0faa588fd99b4" } } } + } +} +``` This file describes an *exact*, and more importantly *reproducible* `node_modules` tree. Once it's present, any future installation will base its work off this file, instead of recalculating dependency versions off -package.json(5). +[package.json](/docs/configuring-npm/package-json). The presence of a package lock changes the installation behavior such that: @@ -113,12 +131,13 @@ executed afterwards. These scripts run for both `package-lock.json` and `npm-shrinkwrap.json`. For example to run some postprocessing on the generated file: - "scripts": { - "postshrinkwrap": "json -I -e \"this.myMetadata = $MY_APP_METADATA\"" - } - +```json + "scripts": { + "postshrinkwrap": "json -I -e \"this.myMetadata = $MY_APP_METADATA\"" + } +``` -### Using locked packages +#### Using locked packages Using a locked package is no different than using any package without a package lock: any commands that update `node_modules` and/or `package.json`'s @@ -136,7 +155,7 @@ on. Additionally, the diffs from these changes are human-readable and will inform you of any changes npm has made to your `node_modules`, so you can notice if any transitive dependencies were updated, hoisted, etc. -### Resolving lockfile conflicts +#### Resolving lockfile conflicts Occasionally, two separate npm install will create package locks that cause merge conflicts in source control systems. As of `npm@5.7.0`, these conflicts @@ -155,10 +174,10 @@ pre-`npm@5.7.0` versions of npm 5, albeit a bit more noisily. Note that if `package.json` itself conflicts, you will have to resolve that by hand and run `npm install` manually, even with the merge driver. -## SEE ALSO +### See Also * https://medium.com/@sdboyer/so-you-want-to-write-a-package-manager-4ae9c17d9527 -* package.json(5) -* package-lock.json(5) -* npm-shrinkwrap.json(5) -* npm-shrinkwrap(1) +* [package.json](/configuring-npm/package-json) +* [package-lock.json](/configuring-npm/package-lock-json) +* [shrinkwrap.json](/configuring-npm/shrinkwrap-json) +* [npm shrinkwrap](/cli-commands/npm-shrinkwrap) diff --git a/doc/files/npm-shrinkwrap.json.md b/docs/content/configuring-npm/shrinkwrap-json.md old mode 100644 new mode 100755 similarity index 57% rename from doc/files/npm-shrinkwrap.json.md rename to docs/content/configuring-npm/shrinkwrap-json.md index 541a1f5a6d765..f32c1bc970a61 --- a/doc/files/npm-shrinkwrap.json.md +++ b/docs/content/configuring-npm/shrinkwrap-json.md @@ -1,9 +1,16 @@ -npm-shrinkwrap.json(5) -- A publishable lockfile -===================================================== +--- +section: configuring-npm +title: shrinkwrap.json +description: A publishable lockfile +--- -## DESCRIPTION +# npm-shrinkwrap.json -`npm-shrinkwrap.json` is a file created by npm-shrinkwrap(1). It is identical to +## A publishable lockfile + +### Description + +`npm-shrinkwrap.json` is a file created by [`npm-shrinkwrap`](/docs/cli-commands/npm-shrinkwrap). It is identical to `package-lock.json`, with one major caveat: Unlike `package-lock.json`, `npm-shrinkwrap.json` may be included when publishing a package. @@ -17,11 +24,11 @@ Additionally, if both `package-lock.json` and `npm-shrinkwrap.json` are present in a package root, `package-lock.json` will be ignored in favor of this file. For full details and description of the `npm-shrinkwrap.json` file format, refer -to the manual page for package-lock.json(5). +to the manual page for [package-lock.json](/docs/configuring-npm/package-lock-json). -## SEE ALSO +### See also -* npm-shrinkwrap(1) -* package-lock.json(5) -* package.json(5) -* npm-install(1) +* [npm shrinkwrap](/cli-commands/npm-shrinkwrap) +* [package-lock.json](/configuring-npm/package-lock-json) +* [package.json](/configuring-npm/package-json) +* [npm install](/cli-commands/npm-install) diff --git a/doc/misc/npm-coding-style.md b/docs/content/using-npm/coding-style.md old mode 100644 new mode 100755 similarity index 73% rename from doc/misc/npm-coding-style.md rename to docs/content/using-npm/coding-style.md index 1199f63fcc3f0..e329bda7d93d8 --- a/doc/misc/npm-coding-style.md +++ b/docs/content/using-npm/coding-style.md @@ -1,7 +1,13 @@ -npm-coding-style(7) -- npm's "funny" coding style -================================================= +--- +section: using-npm +title: coding-style +description: npm's "funny" coding style +--- -## DESCRIPTION +# coding-style +## npm's "funny" coding style + +### Description npm's coding style is a bit unconventional. It is not different for difference's sake, but rather a carefully crafted style that is @@ -12,49 +18,55 @@ make your code conform to npm's style. Note: this concerns npm's code not the specific packages that you can download from the npm registry. -## Line Length +### Line Length Keep lines shorter than 80 characters. It's better for lines to be too short than to be too long. Break up long lists, objects, and other statements onto multiple lines. -## Indentation +### Indentation Two-spaces. Tabs are better, but they look like hell in web browsers (and on GitHub), and node uses 2 spaces, so that's that. Configure your editor appropriately. -## Curly braces +### Curly braces Curly braces belong on the same line as the thing that necessitates them. Bad: - function () - { +```javascript +function () +{ +``` Good: - - function () { +```javascript +function () { +``` If a block needs to wrap to the next line, use a curly brace. Don't use it if it doesn't. Bad: - if (foo) { bar() } - while (foo) - bar() - +```javascript +if (foo) { bar() } +while (foo) + bar() +``` Good: - if (foo) bar() - while (foo) { - bar() - } +```javascript +if (foo) bar() +while (foo) { + bar() +} +``` -## Semicolons +### Semicolons Don't use them except in four situations: @@ -68,52 +80,60 @@ Don't use them except in four situations: Some examples of good semicolon usage: - ;(x || y).doSomething() - ;[a, b, c].forEach(doSomething) - for (var i = 0; i < 10; i ++) { - switch (state) { - case 'begin': start(); continue - case 'end': finish(); break - default: throw new Error('unknown state') - } - end() - } +```javascript +;(x || y).doSomething() +;[a, b, c].forEach(doSomething) +for (var i = 0; i < 10; i ++) { + switch (state) { + case 'begin': start(); continue + case 'end': finish(); break + default: throw new Error('unknown state') + } + end() +} +``` Note that starting lines with `-` and `+` also should be prefixed with a semicolon, but this is much less common. -## Comma First +### Comma First If there is a list of things separated by commas, and it wraps across multiple lines, put the comma at the start of the next line, directly below the token that starts the list. Put the final token in the list on a line by itself. For example: - var magicWords = [ 'abracadabra' - , 'gesundheit' - , 'ventrilo' - ] - , spells = { 'fireball' : function () { setOnFire() } - , 'water' : function () { putOut() } - } - , a = 1 - , b = 'abc' - , etc - , somethingElse - -## Quotes +```javascript +var magicWords = [ 'abracadabra' + , 'gesundheit' + , 'ventrilo' + ] + , spells = { 'fireball' : function () { setOnFire() } + , 'water' : function () { putOut() } + } + , a = 1 + , b = 'abc' + , etc + , somethingElse + ``` + +### Quotes Use single quotes for strings except to avoid escaping. Bad: - var notOk = "Just double quotes" +```javascript +var notOk = "Just double quotes" +``` Good: - var ok = 'String contains "double" quotes' - var alsoOk = "String contains 'single' quotes or apostrophe" +```javascript +var ok = 'String contains "double" quotes' +var alsoOk = "String contains 'single' quotes or apostrophe" +``` -## Whitespace +### Whitespace Put a single space in front of `(` for anything other than a function call. Also use a single space wherever it makes things more readable. @@ -121,11 +141,11 @@ Also use a single space wherever it makes things more readable. Don't leave trailing whitespace at the end of lines. Don't indent empty lines. Don't use more spaces than are helpful. -## Functions +### Functions Use named functions. They make stack traces a lot easier to read. -## Callbacks, Sync/async Style +### Callbacks, Sync/async Style Use the asynchronous/non-blocking versions of things as much as possible. It might make more sense for npm to use the synchronous fs APIs, but this @@ -138,12 +158,12 @@ argument is the Error or null. Be very careful never to ever ever throw anything. It's worse than useless. Just send the error message back as the first argument to the callback. -## Errors +### Errors Always create a new Error object with your message. Don't just return a string message to the callback. Stack traces are handy. -## Logging +### Logging Logging is done using the [npmlog](https://github.com/npm/npmlog) utility. @@ -153,10 +173,10 @@ logging the same object over and over again is not helpful. Logs should report what's happening so that it's easier to track down where a fault occurs. -Use appropriate log levels. See `npm-config(7)` and search for +Use appropriate log levels. See [`npm-config`](/docs/using-npm/config) and search for "loglevel". -## Case, naming, etc. +### Case, naming, etc. Use `lowerCamelCase` for multiword identifiers when they refer to objects, functions, methods, properties, or anything not specified in this section. @@ -174,7 +194,7 @@ Use a single uppercase letter for function names where the function would normally be anonymous, but needs to call itself recursively. It makes it clear that it's a "throwaway" function. -## null, undefined, false, 0 +### null, undefined, false, 0 Boolean variables and functions should always be either `true` or `false`. Don't set it to 0 unless it's supposed to be a number. @@ -186,7 +206,7 @@ set to anything." Boolean objects are forbidden. -## SEE ALSO +### See Also -* npm-developers(7) -* npm(1) +* [npm developers](/using-npm/developers) +* [npm](/cli-commands/npm) diff --git a/doc/misc/npm-config.md b/docs/content/using-npm/config.md old mode 100644 new mode 100755 similarity index 87% rename from doc/misc/npm-config.md rename to docs/content/using-npm/config.md index f1055a56edbc7..4a0fd5f07199a --- a/doc/misc/npm-config.md +++ b/docs/content/using-npm/config.md @@ -1,11 +1,18 @@ -npm-config(7) -- More than you probably want to know about npm configuration -============================================================================ +--- +section: using-npm +title: config +description: More than you probably want to know about npm configuration +--- -## DESCRIPTION +# config + +## More than you probably want to know about npm configuration + +### Description npm gets its configuration values from the following sources, sorted by priority: -### Command Line Flags +#### Command Line Flags Putting `--foo bar` on the command line sets the `foo` configuration parameter to `"bar"`. A `--` argument tells the cli parser to stop @@ -18,7 +25,7 @@ and `flag2` to `bar`. Finally, `--flag1 --flag2 -- bar` will set both configuration parameters to `true`, and the `bar` is taken as a command argument. -### Environment Variables +#### Environment Variables Any environment variables that start with `npm_config_` will be interpreted as a configuration parameter. For example, putting @@ -26,7 +33,7 @@ interpreted as a configuration parameter. For example, putting configuration parameter to `bar`. Any environment configurations that are not given a value will be given the value of `true`. Config values are case-insensitive, so `NPM_CONFIG_FOO=bar` will work the -same. However, please note that inside [npm-scripts](/misc/scripts) +same. However, please note that inside [`npm-scripts`](/docs/using-npm/scripts) npm will set its own environment variables and Node will prefer those lowercase versions over any uppercase ones that you might set. For details see [this issue](https://github.com/npm/npm/issues/14528). @@ -34,7 +41,7 @@ For details see [this issue](https://github.com/npm/npm/issues/14528). Notice that you need to use underscores instead of dashes, so `--allow-same-version` would become `npm_config_allow_same_version=true`. -### npmrc Files +#### npmrc Files The four relevant files are: @@ -45,14 +52,14 @@ The four relevant files are: CLI option `--globalconfig` or environment variable `$NPM_CONFIG_GLOBALCONFIG`) * npm's built-in configuration file (`/path/to/npm/npmrc`) -See npmrc(5) for more details. +See [npmrc](/docs/configuring-npm/npmrc) for more details. -### Default Configs +#### Default Configs Run `npm config ls -l` to see a set of configuration parameters that are internal to npm, and are defaults if nothing else is specified. -## Shorthands and Other CLI Niceties +### Shorthands and Other CLI Niceties The following shorthands are parsed on the command-line: @@ -85,43 +92,53 @@ If the specified configuration param resolves unambiguously to a known configuration parameter, then it is expanded to that configuration parameter. For example: - npm ls --par - # same as: - npm ls --parseable +```bash +npm ls --par +# same as: +npm ls --parseable +``` If multiple single-character shorthands are strung together, and the resulting combination is unambiguously not some other configuration param, then it is expanded to its various component pieces. For example: - npm ls -gpld - # same as: - npm ls --global --parseable --long --loglevel info +```bash +npm ls -gpld +# same as: +npm ls --global --parseable --long --loglevel info +``` -## Per-Package Config Settings +### Per-Package Config Settings -When running scripts (see `npm-scripts(7)`) the package.json "config" +When running scripts (see [`npm-scripts`](scripts)) the package.json "config" keys are overwritten in the environment if there is a config param of `[@]:`. For example, if the package.json has this: - { "name" : "foo" - , "config" : { "port" : "8080" } - , "scripts" : { "start" : "node server.js" } } +```json +{ "name" : "foo" +, "config" : { "port" : "8080" } +, "scripts" : { "start" : "node server.js" } } +``` and the server.js is this: - http.createServer(...).listen(process.env.npm_package_config_port) +```javascript +http.createServer(...).listen(process.env.npm_package_config_port) +``` then the user could change the behavior by doing: - npm config set foo:port 80 +```bash +npm config set foo:port 80 +``` -See package.json(5) for more information. +See [package.json](/docs/configuring-npm/package-json) for more information. -## Config Settings +### Config Settings -### access +#### access * Default: `restricted` * Type: Access @@ -131,7 +148,7 @@ you want your scoped package to be publicly viewable (and installable) set `--access=public`. The only valid values for `access` are `public` and `restricted`. Unscoped packages _always_ have an access level of `public`. -### allow-same-version +#### allow-same-version * Default: false * Type: Boolean @@ -139,7 +156,7 @@ you want your scoped package to be publicly viewable (and installable) set Prevents throwing an error when `npm version` is used to set the new version to the same value as the current version. -### always-auth +#### always-auth * Default: false * Type: Boolean @@ -147,7 +164,7 @@ to the same value as the current version. Force npm to always require authentication when accessing the registry, even for `GET` requests. -### also +#### also * Default: null * Type: String @@ -155,16 +172,16 @@ even for `GET` requests. When "dev" or "development" and running local `npm shrinkwrap`, `npm outdated`, or `npm update`, is an alias for `--dev`. -### audit +#### audit * Default: true * Type: Boolean When "true" submit audit reports alongside `npm install` runs to the default registry and all registries configured for scopes. See the documentation -for npm-audit(1) for details on what is submitted. +for [`npm-audit`](/docs/cli-commands/npm-audit) for details on what is submitted. -### audit-level +#### audit-level * Default: `"low"` * Type: `'low'`, `'moderate'`, `'high'`, `'critical'` @@ -172,14 +189,14 @@ for npm-audit(1) for details on what is submitted. The minimum level of vulnerability for `npm audit` to exit with a non-zero exit code. -### auth-type +#### auth-type * Default: `'legacy'` * Type: `'legacy'`, `'sso'`, `'saml'`, `'oauth'` What authentication strategy to use with `adduser`/`login`. -### before +#### before * Alias: enjoy-by * Default: null @@ -195,7 +212,7 @@ If the requested version is a `dist-tag` and the given tag does not pass the be used. For example, `foo@latest` might install `foo@1.2` even though `latest` is `2.0`. -### bin-links +#### bin-links * Default: `true` * Type: Boolean @@ -207,14 +224,14 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. -### browser +#### browser * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` * Type: String The browser that is called by the `npm docs` command to open websites. -### ca +#### ca * Default: The npm CA certificate * Type: String, Array or null @@ -223,19 +240,23 @@ The Certificate Authority signing certificate that is trusted for SSL connections to the registry. Values should be in PEM format (Windows calls it "Base-64 encoded X.509 (.CER)") with newlines replaced by the string "\n". For example: - ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----" +```bash +ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----" +``` Set to `null` to only allow "known" registrars, or to a specific CA cert to trust only that specific signing authority. Multiple CAs can be trusted by specifying an array of certificates: - ca[]="..." - ca[]="..." +```bash +ca[]="..." +ca[]="..." +``` See also the `strict-ssl` config. -### cafile +#### cafile * Default: `null` * Type: path @@ -244,35 +265,35 @@ A path to a file containing one or multiple Certificate Authority signing certificates. Similar to the `ca` setting, but allows for multiple CA's, as well as for the CA information to be stored in a file on disk. -### cache +#### cache * Default: Windows: `%AppData%\npm-cache`, Posix: `~/.npm` * Type: path -The location of npm's cache directory. See `npm-cache(1)` +The location of npm's cache directory. See [`npm-cache`](/docs/cli-commands/npm-cache) -### cache-lock-stale +#### cache-lock-stale * Default: 60000 (1 minute) * Type: Number The number of ms before cache folder lockfiles are considered stale. -### cache-lock-retries +#### cache-lock-retries * Default: 10 * Type: Number Number of times to retry to acquire a lock on cache folder lockfiles. -### cache-lock-wait +#### cache-lock-wait * Default: 10000 (10 seconds) * Type: Number Number of ms to wait for cache lock files to expire. -### cache-max +#### cache-max * Default: Infinity * Type: Number @@ -281,7 +302,7 @@ Number of ms to wait for cache lock files to expire. `--cache-max=0` is an alias for `--prefer-online`. -### cache-min +#### cache-min * Default: 10 * Type: Number @@ -290,7 +311,7 @@ Number of ms to wait for cache lock files to expire. `--cache-min=9999 (or bigger)` is an alias for `--prefer-offline`. -### cert +#### cert * Default: `null` * Type: String @@ -298,18 +319,20 @@ Number of ms to wait for cache lock files to expire. A client certificate to pass when accessing the registry. Values should be in PEM format (Windows calls it "Base-64 encoded X.509 (.CER)") with newlines replaced by the string "\n". For example: - cert="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----" +```bash +cert="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----" +``` It is _not_ the path to a certificate file (and there is no "certfile" option). -### cidr +#### cidr * Default: `null` * Type: String, Array, null This is a list of CIDR address to be used when configuring limited access tokens with the `npm token create` command. -### color +#### color * Default: true * Type: Boolean or `"always"` @@ -320,7 +343,7 @@ If true, then only prints color codes for tty file descriptors. This option can also be changed using the environment: colors are disabled when the environment variable `NO_COLOR` is set to any value. -### depth +#### depth * Default: Infinity * Type: Number @@ -333,21 +356,21 @@ since that gives more useful information. To show the outdated status of all packages and dependents, use a large integer value, e.g., `npm outdated --depth 9999` -### description +#### description * Default: true * Type: Boolean Show the description in `npm search` -### dev +#### dev * Default: false * Type: Boolean Install `dev-dependencies` along with packages. -### dry-run +#### dry-run * Default: false * Type: Boolean @@ -358,7 +381,7 @@ commands that modify your local installation, eg, `install`, `update`, `dedupe`, `uninstall`. This is NOT currently honored by some network related commands, eg `dist-tags`, `owner`, etc. -### editor +#### editor * Default: `EDITOR` environment variable if set, or `"vi"` on Posix, or `"notepad"` on Windows. @@ -366,7 +389,7 @@ commands, eg `dist-tags`, `owner`, etc. The command to run for `npm edit` or `npm config edit`. -### engine-strict +#### engine-strict * Default: false * Type: Boolean @@ -375,7 +398,7 @@ If set to true, then npm will stubbornly refuse to install (or even consider installing) any package that claims to not be compatible with the current Node.js version. -### force +#### force * Default: false * Type: Boolean @@ -387,14 +410,14 @@ Makes various commands more forceful. * skips cache when requesting from the registry. * prevents checks against clobbering non-npm files. -### format-package-lock +#### format-package-lock * Default: true * Type: Boolean Format `package-lock.json` or `npm-shrinkwrap.json` as a human readable file. -### fetch-retries +#### fetch-retries * Default: 2 * Type: Number @@ -402,7 +425,7 @@ Format `package-lock.json` or `npm-shrinkwrap.json` as a human readable file. The "retries" config for the `retry` module to use when fetching packages from the registry. -### fetch-retry-factor +#### fetch-retry-factor * Default: 10 * Type: Number @@ -410,7 +433,7 @@ packages from the registry. The "factor" config for the `retry` module to use when fetching packages. -### fetch-retry-mintimeout +#### fetch-retry-mintimeout * Default: 10000 (10 seconds) * Type: Number @@ -418,7 +441,7 @@ packages. The "minTimeout" config for the `retry` module to use when fetching packages. -### fetch-retry-maxtimeout +#### fetch-retry-maxtimeout * Default: 60000 (1 minute) * Type: Number @@ -426,7 +449,7 @@ packages. The "maxTimeout" config for the `retry` module to use when fetching packages. -### git +#### git * Default: `"git"` * Type: String @@ -435,42 +458,42 @@ The command to use for git commands. If git is installed on the computer, but is not in the `PATH`, then set this to the full path to the git binary. -### git-tag-version +#### git-tag-version * Default: `true` * Type: Boolean Tag the commit when using the `npm version` command. -### commit-hooks +#### commit-hooks * Default: `true` * Type: Boolean Run git commit hooks when using the `npm version` command. -### global +#### global * Default: false * Type: Boolean Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See -`npm-folders(5)` for more on the differences in behavior. +[npm-folders](/docs/configuring-npm/folders) for more on the differences in behavior. * packages are installed into the `{prefix}/lib/node_modules` folder, instead of the current working directory. * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` -### globalconfig +#### globalconfig * Default: {prefix}/etc/npmrc * Type: path The config file to read for global config options. -### global-style +#### global-style * Default: false * Type: Boolean @@ -482,7 +505,7 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. -### group +#### group * Default: GID of the current process * Type: String or Number @@ -490,14 +513,14 @@ preferred. The group to use when running package scripts in global mode as the root user. -### heading +#### heading * Default: `"npm"` * Type: String The string that starts all the debugging log output. -### https-proxy +#### https-proxy * Default: null * Type: url @@ -506,7 +529,7 @@ A proxy to use for outgoing https requests. If the `HTTPS_PROXY` or `https_proxy` or `HTTP_PROXY` or `http_proxy` environment variables are set, proxy settings will be honored by the underlying `request` library. -### if-present +#### if-present * Default: false * Type: Boolean @@ -517,21 +540,21 @@ option can be used when it's desirable to optionally run a script when it's present and fail if the script fails. This is useful, for example, when running scripts that may only apply for some builds in an otherwise generic CI setup. -### ignore-prepublish +#### ignore-prepublish * Default: false * Type: Boolean If true, npm will not run `prepublish` scripts. -### ignore-scripts +#### ignore-scripts * Default: false * Type: Boolean If true, npm does not run scripts specified in package.json files. -### init-module +#### init-module * Default: ~/.npm-init.js * Type: path @@ -539,37 +562,37 @@ If true, npm does not run scripts specified in package.json files. A module that will be loaded by the `npm init` command. See the documentation for the [init-package-json](https://github.com/isaacs/init-package-json) module -for more information, or npm-init(1). +for more information, or [npm-init](/docs/cli-commands/npm-init). -### init-author-name +#### init-author-name * Default: "" * Type: String The value `npm init` should use by default for the package author's name. -### init-author-email +#### init-author-email * Default: "" * Type: String The value `npm init` should use by default for the package author's email. -### init-author-url +#### init-author-url * Default: "" * Type: String The value `npm init` should use by default for the package author's homepage. -### init-license +#### init-license * Default: "ISC" * Type: String The value `npm init` should use by default for the package license. -### init-version +#### init-version * Default: "1.0.0" * Type: semver @@ -577,7 +600,7 @@ The value `npm init` should use by default for the package license. The value that `npm init` should use by default for the package version number, if not already set in package.json. -### json +#### json * Default: false * Type: Boolean @@ -588,7 +611,7 @@ This feature is currently experimental, and the output data structures for many commands is either not implemented in JSON yet, or subject to change. Only the output from `npm ls --json` and `npm search --json` are currently valid. -### key +#### key * Default: `null` * Type: String @@ -596,11 +619,13 @@ output from `npm ls --json` and `npm search --json` are currently valid. A client key to pass when accessing the registry. Values should be in PEM format with newlines replaced by the string "\n". For example: - key="-----BEGIN PRIVATE KEY-----\nXXXX\nXXXX\n-----END PRIVATE KEY-----" +```json +key="-----BEGIN PRIVATE KEY-----\nXXXX\nXXXX\n-----END PRIVATE KEY-----" +``` It is _not_ the path to a key file (and there is no "keyfile" option). -### legacy-bundling +#### legacy-bundling * Default: false * Type: Boolean @@ -610,7 +635,7 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. -### link +#### link * Default: false * Type: Boolean @@ -626,7 +651,7 @@ if one of the two conditions are met: * the globally installed version is identical to the version that is being installed locally. -### local-address +#### local-address * Default: undefined * Type: IP Address @@ -634,7 +659,7 @@ if one of the two conditions are met: The IP address of the local interface to use when making connections to the npm registry. Must be IPv4 in versions of Node prior to 0.12. -### loglevel +#### loglevel * Default: "notice" * Type: String @@ -646,7 +671,7 @@ What level of logs to report. On failure, *all* logs are written to Any logs of a higher level than the setting are shown. The default is "notice". -### logstream +#### logstream * Default: process.stderr * Type: Stream @@ -661,21 +686,21 @@ stderr. If the `color` config is set to true, then this stream will receive colored output if it is a TTY. -### logs-max +#### logs-max * Default: 10 * Type: Number The maximum number of log files to store. -### long +#### long * Default: false * Type: Boolean Show extended information in `npm ls` and `npm search`. -### maxsockets +#### maxsockets * Default: 50 * Type: Number @@ -683,7 +708,7 @@ Show extended information in `npm ls` and `npm search`. The maximum number of connections to use per origin (protocol/host/port combination). Passed to the `http` `Agent` used to make the request. -### message +#### message * Default: "%s" * Type: String @@ -692,14 +717,14 @@ Commit message which is used by `npm version` when creating version commit. Any "%s" in the message will be replaced with the version number. -### metrics-registry +#### metrics-registry * Default: The value of `registry` (which defaults to "https://registry.npmjs.org/") * Type: String The registry you want to send cli metrics to if `send-metrics` is true. -### node-options +#### node-options * Default: null * Type: String @@ -708,21 +733,21 @@ Options to pass through to Node.js via the `NODE_OPTIONS` environment variable. This does not impact how npm itself is executed but it does impact how lifecycle scripts are called. -### node-version +#### node-version * Default: process.version * Type: semver or false The node version to use when checking a package's `engines` map. -### noproxy +#### noproxy * Default: null * Type: String or Array A comma-separated string or an array of domain extensions that a proxy should not be used for. -### offline +#### offline * Default: false * Type: Boolean @@ -730,7 +755,7 @@ A comma-separated string or an array of domain extensions that a proxy should no Force offline mode: no network requests will be done during install. To allow the CLI to fill in missing cache data, see `--prefer-offline`. -### onload-script +#### onload-script * Default: false * Type: path @@ -738,7 +763,7 @@ the CLI to fill in missing cache data, see `--prefer-offline`. A node module to `require()` when npm loads. Useful for programmatic usage. -### only +#### only * Default: null * Type: String @@ -756,7 +781,7 @@ installed. When "prod" or "production" and running local `npm ls`, `npm outdated`, or `npm update`, is an alias for `--production`. -### optional +#### optional * Default: true * Type: Boolean @@ -765,7 +790,7 @@ Attempt to install packages in the `optionalDependencies` object. Note that if these packages fail to install, the overall installation process is not aborted. -### otp +#### otp * Default: null * Type: Number @@ -773,7 +798,7 @@ process is not aborted. This is a one-time password from a two-factor authenticator. It's needed when publishing or changing package permissions with `npm access`. -### package-lock +#### package-lock * Default: true * Type: Boolean @@ -787,7 +812,7 @@ package-locks disabled use `npm prune`. This option is an alias for `--shrinkwrap`. -### package-lock-only +#### package-lock-only * Default: false * Type: Boolean @@ -795,7 +820,7 @@ This option is an alias for `--shrinkwrap`. If set to true, it will update only the `package-lock.json`, instead of checking `node_modules` and downloading dependencies. -### parseable +#### parseable * Default: false * Type: Boolean @@ -803,7 +828,7 @@ instead of checking `node_modules` and downloading dependencies. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. -### prefer-offline +#### prefer-offline * Default: false * Type: Boolean @@ -813,7 +838,7 @@ will be requested from the server. To force full offline mode, use `--offline`. This option is effectively equivalent to `--cache-min=9999999`. -### prefer-online +#### prefer-online * Default: false * Type: Boolean @@ -821,15 +846,15 @@ This option is effectively equivalent to `--cache-min=9999999`. If true, staleness checks for cached data will be forced, making the CLI look for updates immediately even for fresh package data. -### prefix +#### prefix -* Default: see npm-folders(5) +* Default: see [npm-folders](/docs/configuring-npm/folders) * Type: path The location to install global items. If set on the command line, then it forces non-global commands to run in the specified folder. -### preid +#### preid * Default: "" * Type: String @@ -837,7 +862,7 @@ it forces non-global commands to run in the specified folder. The "prerelease identifier" to use as a prefix for the "prerelease" part of a semver. Like the `rc` in `1.2.0-rc.8`. -### production +#### production * Default: false * Type: Boolean @@ -848,7 +873,7 @@ Set to true to run in "production" mode. local `npm install` without any arguments. 2. Set the NODE_ENV="production" for lifecycle scripts. -### progress +#### progress * Default: true, unless TRAVIS or CI env vars set. * Type: Boolean @@ -858,7 +883,7 @@ operations, if `process.stderr` is a TTY. Set to `false` to suppress the progress bar. -### proxy +#### proxy * Default: null * Type: url @@ -867,35 +892,35 @@ A proxy to use for outgoing http requests. If the `HTTP_PROXY` or `http_proxy` environment variables are set, proxy settings will be honored by the underlying `request` library. -### read-only +#### read-only * Default: false * Type: Boolean This is used to mark a token as unable to publish when configuring limited access tokens with the `npm token create` command. -### rebuild-bundle +#### rebuild-bundle * Default: true * Type: Boolean Rebuild bundled dependencies after installation. -### registry +#### registry * Default: https://registry.npmjs.org/ * Type: url The base URL of the npm package registry. -### rollback +#### rollback * Default: true * Type: Boolean Remove failed installs. -### save +#### save * Default: true * Type: Boolean @@ -907,7 +932,7 @@ object. Only works if there is already a package.json file present. -### save-bundle +#### save-bundle * Default: false * Type: Boolean @@ -919,7 +944,7 @@ If a package would be saved at install time by the use of `--save`, When used with the `npm rm` command, it removes it from the bundledDependencies list. -### save-prod +#### save-prod * Default: false * Type: Boolean @@ -930,7 +955,7 @@ is useful if a package already exists in `devDependencies` or also the default behavior if `--save` is true, and neither `--save-dev` or `--save-optional` are true. -### save-dev +#### save-dev * Default: false * Type: Boolean @@ -942,7 +967,7 @@ When used with the `npm rm` command, it removes it from the Only works if there is already a package.json file present. -### save-exact +#### save-exact * Default: false * Type: Boolean @@ -951,7 +976,7 @@ Dependencies saved to package.json using `--save`, `--save-dev` or `--save-optional` will be configured with an exact version rather than using npm's default semver range operator. -### save-optional +#### save-optional * Default: false * Type: Boolean @@ -964,7 +989,7 @@ When used with the `npm rm` command, it removes it from the Only works if there is already a package.json file present. -### save-prefix +#### save-prefix * Default: '^' * Type: String @@ -977,7 +1002,7 @@ set to `^1.2.3` which allows minor upgrades for that package, but after `npm config set save-prefix='~'` it would be set to `~1.2.3` which only allows patch upgrades. -### scope +#### scope * Default: the scope of the current project, if any, or "" * Type: String @@ -988,14 +1013,14 @@ in to a private registry for the first time: will cause `@organization` to be mapped to the registry for future installation of packages specified according to the pattern `@organization/package`. -### script-shell +#### script-shell * Default: `null` * Type: path The shell to use for scripts run with the `npm run` command. -### scripts-prepend-node-path +#### scripts-prepend-node-path * Default: "warn-only" * Type: Boolean, `"auto"` or `"warn-only"` @@ -1015,21 +1040,21 @@ If set to `auto`, only add that directory to the `PATH` environment variable if the `node` executable with which `npm` was invoked and the one that is found first on the `PATH` are different. -### searchexclude +#### searchexclude * Default: "" * Type: String Space-separated options that limit the results from search. -### searchopts +#### searchopts * Default: "" * Type: String Space-separated options that are always passed to search. -### searchlimit +#### searchlimit * Default: 20 * Type: Number @@ -1037,7 +1062,7 @@ Space-separated options that are always passed to search. Number of items to limit search results to. Will not apply at all to legacy searches. -### searchstaleness +#### searchstaleness * Default: 900 (15 minutes) * Type: Number @@ -1045,7 +1070,7 @@ searches. The age of the cache, in seconds, before another registry request is made if using legacy search endpoint. -### send-metrics +#### send-metrics * Default: false * Type: Boolean @@ -1055,7 +1080,7 @@ If true, success/failure metrics will be reported to the registry stored in failing runs of the npm CLI and the time period overwhich those counts were gathered. No identifying information is included in these requests. -### shell +#### shell * Default: SHELL environment variable, or "bash" on Posix, or "cmd" on Windows @@ -1063,7 +1088,7 @@ gathered. No identifying information is included in these requests. The shell to run for the `npm explore` command. -### shrinkwrap +#### shrinkwrap * Default: true * Type: Boolean @@ -1073,7 +1098,7 @@ will also prevent _writing_ `npm-shrinkwrap.json` if `save` is true. This option is an alias for `--package-lock`. -### sign-git-commit +#### sign-git-commit * Default: false * Type: Boolean @@ -1084,7 +1109,7 @@ version using `-S` to add a signature. Note that git requires you to have set up GPG keys in your git configs for this to work properly. -### sign-git-tag +#### sign-git-tag * Default: false * Type: Boolean @@ -1095,7 +1120,7 @@ using `-s` to add a signature. Note that git requires you to have set up GPG keys in your git configs for this to work properly. -### sso-poll-frequency +#### sso-poll-frequency * Default: 500 * Type: Number @@ -1103,14 +1128,14 @@ for this to work properly. When used with SSO-enabled `auth-type`s, configures how regularly the registry should be polled while the user is completing authentication. -### sso-type +#### sso-type * Default: 'oauth' * Type: 'oauth', 'saml', or null If `--auth-type=sso`, the type of SSO type to use. -### strict-ssl +#### strict-ssl * Default: true * Type: Boolean @@ -1120,7 +1145,7 @@ registry via https. See also the `ca` config. -### tag +#### tag * Default: latest * Type: String @@ -1131,7 +1156,7 @@ it will install the specified tag. Also the tag that is added to the package@version specified by the `npm tag` command, if no explicit tag is given. -### tag-version-prefix +#### tag-version-prefix * Default: `"v"` * Type: String @@ -1144,7 +1169,7 @@ Because other tools may rely on the convention that npm version tags look like `v1.0.0`, _only use this property if it is absolutely necessary_. In particular, use care when overriding this setting for public packages. -### timing +#### timing * Default: `false` * Type: Boolean @@ -1155,7 +1180,7 @@ list of JSON objects. You can quickly view it with this [json](https://www.npmjs.com/package/json) command line: `json -g < ~/.npm/_timing.json`. -### tmp +#### tmp * Default: TMPDIR environment variable, or "/tmp" * Type: path @@ -1163,7 +1188,7 @@ list of JSON objects. You can quickly view it with this Where to store temporary files and folders. All temp files are deleted on success, but left behind on failure for forensic purposes. -### unicode +#### unicode * Default: false on windows, true on mac/unix systems with a unicode locale * Type: Boolean @@ -1171,7 +1196,7 @@ on success, but left behind on failure for forensic purposes. When set to true, npm uses unicode characters in the tree output. When false, it uses ascii characters to draw trees. -### unsafe-perm +#### unsafe-perm * Default: false if running as root, true otherwise * Type: Boolean @@ -1180,7 +1205,7 @@ Set to true to suppress the UID/GID switching when running package scripts. If set explicitly to false, then installing as a non-root user will fail. -### update-notifier +#### update-notifier * Default: true * Type: Boolean @@ -1188,29 +1213,29 @@ will fail. Set to false to suppress the update notification when using an older version of npm than the latest. -### usage +#### usage * Default: false * Type: Boolean Set to show short usage output (like the -H output) -instead of complete help when doing `npm-help(1)`. +instead of complete help when doing [`npm-help`](/docs/cli-commands/npm-help). -### user +#### user * Default: "nobody" * Type: String or Number The UID to set to when running package scripts as root. -### userconfig +#### userconfig * Default: ~/.npmrc * Type: path The location of user-level configuration settings. -### umask +#### umask * Default: 022 * Type: Octal numeric string in range 0000..0777 (0..511) @@ -1222,14 +1247,14 @@ Folders and executables are given a mode which is `0777` masked against this value. Other files are given a mode which is `0666` masked against this value. Thus, the defaults are `0755` and `0644` respectively. -### user-agent +#### user-agent * Default: node/{process.version} {process.platform} {process.arch} * Type: String Sets a User-Agent to the request header -### version +#### version * Default: false * Type: boolean @@ -1238,7 +1263,7 @@ If true, output the npm version and exit successfully. Only relevant when specified explicitly on the command line. -### versions +#### versions * Default: false * Type: boolean @@ -1248,7 +1273,7 @@ exit successfully. Only relevant when specified explicitly on the command line. -### viewer +#### viewer * Default: "man" on Posix, "browser" on Windows * Type: path @@ -1257,10 +1282,10 @@ The program to use to view help content. Set to `"browser"` to view html help content in the default web browser. -## SEE ALSO +### See also -* npm-config(1) -* npmrc(5) -* npm-scripts(7) -* npm-folders(5) -* npm(1) +* [npm config](/cli-commands/npm-config) +* [npmrc](/configuring-npm/npmrc) +* [npm scripts](/using-npm/scripts) +* [npm folders](/configuring-npm/folders) +* [npm](/cli-commands/npm) diff --git a/doc/misc/npm-developers.md b/docs/content/using-npm/developers.md old mode 100644 new mode 100755 similarity index 80% rename from doc/misc/npm-developers.md rename to docs/content/using-npm/developers.md index 55c8d9b08d131..ed4572d478571 --- a/doc/misc/npm-developers.md +++ b/docs/content/using-npm/developers.md @@ -1,7 +1,14 @@ -npm-developers(7) -- Developer Guide -==================================== +--- +section: using-npm +title: developers +description: Developer Guide +--- -## DESCRIPTION +# developers + +## Developer Guide + +### Description So, you've decided to use npm to develop (and maybe publish/deploy) your project. @@ -11,13 +18,13 @@ Fantastic! There are a few things that you need to do above the simple steps that your users will do to install your program. -## About These Documents +### About These Documents These are man pages. If you install npm, you should be able to then do `man npm-thing` to get the documentation on a particular topic, or `npm help thing` to see the same information. -## What is a `package` +### What is a package A package is: @@ -36,20 +43,22 @@ after packing it up into a tarball (b). Git urls can be of the form: - git://github.com/user/project.git#commit-ish - git+ssh://user@hostname:project.git#commit-ish - git+http://user@hostname/project/blah.git#commit-ish - git+https://user@hostname/project/blah.git#commit-ish +```bash +git://github.com/user/project.git#commit-ish +git+ssh://user@hostname:project.git#commit-ish +git+http://user@hostname/project/blah.git#commit-ish +git+https://user@hostname/project/blah.git#commit-ish +``` The `commit-ish` can be any tag, sha, or branch which can be supplied as an argument to `git checkout`. The default is `master`. -## The package.json File +### The package.json File You need to have a `package.json` file in the root of your project to do much of anything with npm. That is basically the whole interface. -See `package.json(5)` for details about what goes in that file. At the very +See [`package.json`](/docs/configuring-npm/package-json) for details about what goes in that file. At the very least, you need: * name: @@ -78,7 +87,7 @@ least, you need: If you have a special compilation or installation script, then you should put it in the `scripts` object. You should definitely have at least a basic smoke-test command as the "scripts.test" field. - See npm-scripts(7). + See [npm-scripts](/docs/using-npm/scripts). * main: If you have a single module that serves as the entry point to your @@ -91,10 +100,10 @@ least, you need: they'll get installed just like these ones. You can use `npm init` in the root of your package in order to get you -started with a pretty basic package.json file. See `npm-init(1)` for +started with a pretty basic package.json file. See [`npm-init`](/docs/cli-commands/npm-init) for more info. -## Keeping files *out* of your package +### Keeping files *out* of your package Use a `.npmignore` file to keep stuff out of your package. If there's no `.npmignore` file, but there *is* a `.gitignore` file, then npm will @@ -146,23 +155,23 @@ property of `package.json`, which is an array of file or directory names that should be included in your package. Sometimes a whitelist is easier to manage than a blacklist. -### Testing whether your `.npmignore` or `files` config works +#### Testing whether your `.npmignore` or `files` config works If you want to double check that your package will include only the files you intend it to when published, you can run the `npm pack` command locally which will generate a tarball in the working directory, the same way it does for publishing. -## Link Packages +### Link Packages `npm link` is designed to install a development package and see the changes in real time without having to keep re-installing it. (You do need to either re-link or `npm rebuild -g` to update compiled packages, of course.) -More info at `npm-link(1)`. +More info at [`npm-link`](/docs/cli-commands/npm-link). -## Before Publishing: Make Sure Your Package Installs and Works +### Before Publishing: Make Sure Your Package Installs and Works **This is important.** @@ -173,40 +182,50 @@ So don't do that. In the root of your package, do this: - npm install . -g +```bash +npm install . -g +``` That'll show you that it's working. If you'd rather just create a symlink package that points to your working directory, then do this: - npm link +```bash +npm link +``` Use `npm ls -g` to see if it's there. To test a local install, go into some other folder, and then do: - cd ../some-other-folder - npm install ../my-package +```bash +cd ../some-other-folder +npm install ../my-package +``` to install it locally into the node_modules folder in that other place. Then go into the node-repl, and try using require("my-thing") to bring in your module's main module. -## Create a User Account +### Create a User Account Create a user with the adduser command. It works like this: - npm adduser +```bash +npm adduser +``` and then follow the prompts. -This is documented better in npm-adduser(1). +This is documented better in [npm-adduser](/docs/cli-commands/npm-adduser). -## Publish your package +### Publish your package This part's easy. In the root of your folder, do this: - npm publish +```bash +npm publish +``` You can give publish a url to a tarball, or a filename of a tarball, or a path to a folder. @@ -216,18 +235,18 @@ by default. So, if you have secret stuff in there, use a `.npmignore` file to list out the globs to ignore, or publish from a fresh checkout. -## Brag about it +### Brag about it Send emails, write blogs, blab in IRC. Tell the world how easy it is to install your program! -## SEE ALSO +### See also -* npm(1) -* npm-init(1) -* package.json(5) -* npm-scripts(7) -* npm-publish(1) -* npm-adduser(1) -* npm-registry(7) +* [npm](/cli-commands/npm) +* [npm init](/cli-commands/npm-init) +* [package.json](/configuring-npm/package-json) +* [npm scripts](/using-npm/scripts) +* [npm publish](/cli-commands/npm-publish) +* [npm adduser](/cli-commands/npm-adduser) +* [npm registry](/using-npm/registry) diff --git a/doc/misc/npm-disputes.md b/docs/content/using-npm/disputes.md old mode 100644 new mode 100755 similarity index 94% rename from doc/misc/npm-disputes.md rename to docs/content/using-npm/disputes.md index 8c9f0489f9238..69397164d2e46 --- a/doc/misc/npm-disputes.md +++ b/docs/content/using-npm/disputes.md @@ -1,5 +1,12 @@ -npm-disputes(7) -- Handling Module Name Disputes -================================================ +--- +section: using-npm +title: disputes +description: Handling Module Name Disputes +--- + +# disputes + +## Handling Module Name Disputes This document describes the steps that you should take to resolve module name disputes with other npm publishers. It also describes special steps you should @@ -10,7 +17,7 @@ This document is a clarification of the acceptable behavior outlined in the this document should be interpreted to contradict any aspect of the npm Code of Conduct. -## TL;DR +### TL;DR 1. Get the author email with `npm owner ls ` 2. Email the author, CC @@ -18,7 +25,7 @@ Conduct. Don't squat on package names. Publish code or move out of the way. -## DESCRIPTION +### Description There sometimes arise cases where a user publishes a module, and then later, some other user wants to use that name. Here are some common ways that happens @@ -57,7 +64,7 @@ some other user wants to use that name. Here are some common ways that happens and we'll sort it out. ("Reasonable" is usually at least 4 weeks.) -## REASONING +### Reasoning In almost every case so far, the parties involved have been able to reach an amicable resolution without any major intervention. Most people really do want @@ -69,7 +76,7 @@ is going to make most people quite upset, regardless of the justification. When humans solve their problems by talking to other humans with respect, everyone has the chance to end up feeling good about the interaction. -## EXCEPTIONS +### Exceptions Some things are not allowed, and will be removed without discussion if they are brought to the attention of the npm registry admins, including but not limited @@ -98,7 +105,7 @@ If you see bad behavior like this, please report it to right away. **You are never expected to resolve abusive behavior on your own. We are here to help.** -## TRADEMARKS +### Trademarkss If you think another npm publisher is infringing your trademark, such as by using a confusingly similar package name, email with a link to @@ -111,20 +118,20 @@ name to you. Otherwise, we will contact the package publisher and ask them to clear up any confusion with changes to their package's `README` file or metadata. -## CHANGES +### Changes This is a living document and may be updated from time to time. Please refer to the [git history for this document](https://github.com/npm/cli/commits/latest/doc/misc/npm-disputes.md) to view the changes. -## LICENSE +### License Copyright (C) npm, Inc., All rights reserved This document may be reused under a Creative Commons Attribution-ShareAlike License. -## SEE ALSO +### See also -* npm-registry(7) -* npm-owner(1) +* [npm registry](/using-npm/registry) +* [npm owner](/cli-commands/npm-owner) diff --git a/doc/misc/npm-orgs.md b/docs/content/using-npm/orgs.md old mode 100644 new mode 100755 similarity index 74% rename from doc/misc/npm-orgs.md rename to docs/content/using-npm/orgs.md index 3db22f8c7eab4..8f1935dee89cc --- a/doc/misc/npm-orgs.md +++ b/docs/content/using-npm/orgs.md @@ -1,7 +1,14 @@ -npm-orgs(7) -- Working with Teams & Orgs -======================================== +--- +section: using-npm +title: orgs +description: Working with Teams & Orgs +--- -## DESCRIPTION +# orgs + +## Working with Teams & Orgs + +### Description There are three levels of org users: @@ -17,14 +24,14 @@ The developer will be able to access packages based on the teams they are on. Ac There are two main commands: -1. `npm team` see npm-team(1) for more details -2. `npm access` see npm-access(1) for more details +1. `npm team` see [npm-team](/docs/cli-commands/npm-team) for more details +2. `npm access` see [npm-access](/docs/cli-commands/npm-access) for more details -## Team Admins create teams +### Team Admins create teams * Check who you’ve added to your org: -``` +```bash npm team ls :developers ``` @@ -32,59 +39,59 @@ npm team ls :developers * Create a new team: -``` +```bash npm team create ``` * Add members to that team: -``` +```bash npm team add ``` -## Publish a package and adjust package access +### Publish a package and adjust package access * In package directory, run -``` +```bash npm init --scope= ``` to scope it for your org & publish as usual * Grant access: -``` +```bash npm access grant [] ``` * Revoke access: -``` +```bash npm access revoke [] ``` -## Monitor your package access +### Monitor your package access * See what org packages a team member can access: -``` +```bash npm access ls-packages ``` * See packages available to a specific team: -``` +```bash npm access ls-packages ``` * Check which teams are collaborating on a package: -``` +```bash npm access ls-collaborators ``` -## SEE ALSO +### See also -* npm-team(1) -* npm-access(1) -* npm-scope(7) +* [npm team](/cli-commands/npm-team) +* [npm access](/cli-commands/npm-access) +* [npm scope](/using-npm/scope) diff --git a/doc/misc/npm-registry.md b/docs/content/using-npm/registry.md old mode 100644 new mode 100755 similarity index 72% rename from doc/misc/npm-registry.md rename to docs/content/using-npm/registry.md index 03966007cad63..8dbcba082bff4 --- a/doc/misc/npm-registry.md +++ b/docs/content/using-npm/registry.md @@ -1,7 +1,14 @@ -npm-registry(7) -- The JavaScript Package Registry -================================================== +--- +section: using-npm +title: registry +description: The JavaScript Package Registry +--- -## DESCRIPTION +# registry + +## The JavaScript Package Registry + +### Description To resolve packages by name and version, npm talks to a registry website that implements the CommonJS Package Registry specification for reading @@ -25,11 +32,11 @@ of which there is a public mirror at available at . The registry URL used is determined by the scope of the package (see -`npm-scope(7)`). If no scope is specified, the default registry is used, which is -supplied by the `registry` config parameter. See `npm-config(1)`, -`npmrc(5)`, and `npm-config(7)` for more on managing npm's configuration. +[`npm-scope`](scope). If no scope is specified, the default registry is used, which is +supplied by the `registry` config parameter. See [`npm-config`](/docs/cli-commands/npm-config), +[`npmrc`](/docs/configuring-npm/npmrc), and [`npm-config`](/docs/using-npm/config) for more on managing npm's configuration. -## Does npm send any information about me back to the registry? +### Does npm send any information about me back to the registry? Yes. @@ -52,7 +59,7 @@ about your environment: The npm registry does not try to correlate the information in these headers with any authenticated accounts that may be used in the same requests. -## Can I run my own private registry? +### Can I run my own private registry? Yes! @@ -67,34 +74,34 @@ default will only publish internally. If you then want to publish a package for the whole world to see, you can simply override the `--registry` option for that `publish` command. -## I don't want my package published in the official registry. It's private. +### I don't want my package published in the official registry. It's private. Set `"private": true` in your package.json to prevent it from being published at all, or `"publishConfig":{"registry":"http://my-internal-registry.local"}` to force it to be published only to your internal registry. -See `package.json(5)` for more info on what goes in the package.json file. +See [`package.json`](/docs/configuring-npm/package-json) for more info on what goes in the package.json file. -## Will you replicate from my registry into the public one? +### Will you replicate from my registry into the public one? No. If you want things to be public, then publish them into the public registry using npm. What little security there is would be for nought otherwise. -## Do I have to use couchdb to build a registry that npm can talk to? +### Do I have to use couchdb to build a registry that npm can talk to? No, but it's way easier. Basically, yes, you do, or you have to effectively implement the entire CouchDB API anyway. -## Is there a website or something to see package docs and such? +### Is there a website or something to see package docs and such? Yes, head over to -## SEE ALSO +### See also -* npm-config(1) -* npm-config(7) -* npmrc(5) -* npm-developers(7) -* npm-disputes(7) +* [npm config](/cli-commands/npm-config) +* [config](/using-npm/config) +* [npmrc](/configuring-npm/npmrc) +* [npm developers](/using-npm/developers) +* [npm disputes](/using-npm/disputes) diff --git a/doc/misc/removing-npm.md b/docs/content/using-npm/removal.md old mode 100644 new mode 100755 similarity index 65% rename from doc/misc/removing-npm.md rename to docs/content/using-npm/removal.md index 84274522c22fe..522ac2af53f19 --- a/doc/misc/removing-npm.md +++ b/docs/content/using-npm/removal.md @@ -1,17 +1,28 @@ -npm-removal(1) -- Cleaning the Slate -==================================== +--- +section: using-npm +title: removal +description: Cleaning the Slate +--- -## SYNOPSIS +# removal + +## Cleaning the Slate + +### Synopsis So sad to see you go. - sudo npm uninstall npm -g +```bash +sudo npm uninstall npm -g +``` Or, if that fails, get the npm source code, and do: - sudo make uninstall +```bash +sudo make uninstall +``` -## More Severe Uninstalling +### More Severe Uninstalling Usually, the above instructions are sufficient. That will remove npm, but leave behind anything you've installed. @@ -21,7 +32,7 @@ continue reading. Note that this is only necessary for globally-installed packages. Local installs are completely contained within a project's `node_modules` -folder. Delete that folder, and everything is gone (unless a package's +folder. Delete that folder, and everything is gone less a package's install script is particularly ill-behaved). This assumes that you installed node and npm in the default place. If @@ -31,24 +42,30 @@ different prefix setting, then adjust the paths accordingly, replacing To remove everything npm-related manually: - rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/npm* +```bash +rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/npm* +``` If you installed things *with* npm, then your best bet is to uninstall them with npm first, and then install them again once you have a proper install. This can help find any symlinks that are lying around: - ls -laF /usr/local/{lib/node{,/.npm},bin,share/man} | grep npm +```bash +ls -laF /usr/local/{lib/node{,/.npm},bin,share/man} | grep npm +``` Prior to version 0.3, npm used shim files for executables and node modules. To track those down, you can do the following: - find /usr/local/{lib/node,bin} -exec grep -l npm \{\} \; ; +```bash +find /usr/local/{lib/node,bin} -exec grep -l npm \{\} \; ; +``` (This is also in the README file.) -## SEE ALSO +### See also * README -* npm-uninstall(1) -* npm-prune(1) +* [npm uninstall](/cli-commands/npm-uninstall) +* [npm prune](/cli-commands/npm-prune) diff --git a/doc/misc/npm-scope.md b/docs/content/using-npm/scope.md old mode 100644 new mode 100755 similarity index 78% rename from doc/misc/npm-scope.md rename to docs/content/using-npm/scope.md index a65af92bcdcb6..fe5d897631130 --- a/doc/misc/npm-scope.md +++ b/docs/content/using-npm/scope.md @@ -1,14 +1,22 @@ -npm-scope(7) -- Scoped packages -=============================== +--- +section: using-npm +title: scope +description: Scoped packages +--- +# scope -## DESCRIPTION +## Scoped packages + +### Description All npm packages have a name. Some package names also have a scope. A scope follows the usual rules for package names (URL-safe characters, no leading dots or underscores). When used in package names, scopes are preceded by an `@` symbol and followed by a slash, e.g. - @somescope/somepackagename +```bash +@somescope/somepackagename +``` Scopes are a way of grouping related packages together, and also affect a few things about the way npm treats the package. @@ -23,7 +31,7 @@ by the primary npm registry. Unscoped packages can depend on scoped packages and vice versa. The npm client is backwards-compatible with unscoped registries, so it can be used to work with scoped and unscoped registries at the same time. -## Installing scoped packages +### Installing scoped packages Scoped packages are installed to a sub-folder of the regular installation folder, e.g. if your other packages are installed in `node_modules/packagename`, @@ -34,28 +42,34 @@ contain any number of scoped packages. A scoped package is installed by referencing it by name, preceded by an `@` symbol, in `npm install`: - npm install @myorg/mypackage +```bash +npm install @myorg/mypackage +``` Or in `package.json`: - "dependencies": { - "@myorg/mypackage": "^1.3.0" - } +```json +"dependencies": { + "@myorg/mypackage": "^1.3.0" +} +``` Note that if the `@` symbol is omitted, in either case, npm will instead attempt to -install from GitHub; see `npm-install(1)`. +install from GitHub; see [`npm-install`](/docs/cli-commands/npm-install). -## Requiring scoped packages +### Requiring scoped packages Because scoped packages are installed into a scope folder, you have to include the name of the scope when requiring them in your code, e.g. - require('@myorg/mypackage') +```javascript +require('@myorg/mypackage') +``` There is nothing special about the way Node treats scope folders. This simply requires the `mypackage` module in the folder named `@myorg`. -## Publishing scoped packages +### Publishing scoped packages Scoped packages can be published from the CLI as of `npm@2` and can be published to any registry that supports them, including the primary npm @@ -66,13 +80,13 @@ registry. If you wish, you may associate a scope with a registry; see below. -### Publishing public scoped packages to the primary npm registry +#### Publishing public scoped packages to the primary npm registry To publish a public scoped package, you must specify `--access public` with the initial publication. This will publish the package and set access to `public` as if you had run `npm access public` after publishing. -### Publishing private scoped packages to the npm registry +#### Publishing private scoped packages to the npm registry To publish a private scoped package to the npm registry, you must have an [npm Private Modules](https://docs.npmjs.com/private-modules/intro) @@ -83,7 +97,7 @@ You can then publish the module with `npm publish` or `npm publish restricted access. You can then change the access permissions, if desired, with `npm access` or on the npmjs.com website. -## Associating a scope with a registry +### Associating a scope with a registry Scopes can be associated with a separate registry. This allows you to seamlessly use a mix of packages from the primary npm registry and one or more @@ -91,23 +105,27 @@ private registries, such as npm Enterprise. You can associate a scope with a registry at login, e.g. - npm login --registry=http://reg.example.com --scope=@myco +```bash +npm login --registry=http://reg.example.com --scope=@myco +``` Scopes have a many-to-one relationship with registries: one registry can host multiple scopes, but a scope only ever points to one registry. You can also associate a scope with a registry using `npm config`: - npm config set @myco:registry http://reg.example.com +```bash +npm config set @myco:registry http://reg.example.com +``` Once a scope is associated with a registry, any `npm install` for a package with that scope will request packages from that registry instead. Any `npm publish` for a package name that contains the scope will be published to that registry instead. -## SEE ALSO +### See also -* npm-install(1) -* npm-publish(1) -* npm-access(1) -* npm-registry(7) +* [npm install](/cli-commands/npm-install) +* [npm publish](/cli-commands/npm-publish) +* [npm access](/cli-commands/npm-access) +* [npm registry](/using-npm/registry) diff --git a/doc/misc/npm-scripts.md b/docs/content/using-npm/scripts.md old mode 100644 new mode 100755 similarity index 81% rename from doc/misc/npm-scripts.md rename to docs/content/using-npm/scripts.md index 22ded49001632..4894d71b5bc59 --- a/doc/misc/npm-scripts.md +++ b/docs/content/using-npm/scripts.md @@ -1,52 +1,59 @@ -npm-scripts(7) -- How npm handles the "scripts" field -===================================================== +--- +section: using-npm +title: scripts +description: How npm handles the "scripts" field +--- -## DESCRIPTION +# scripts + +## How npm handles the "scripts" field + +### Description npm supports the "scripts" property of the package.json file, for the following scripts: -* prepublish: +* **prepublish**: Run BEFORE the package is packed and published, as well as on local `npm install` without any arguments. (See below) -* prepare: +* **prepare**: Run both BEFORE the package is packed and published, on local `npm install` without any arguments, and when installing git dependencies (See below). This is run AFTER `prepublish`, but BEFORE `prepublishOnly`. -* prepublishOnly: +* **prepublishOnly**: Run BEFORE the package is prepared and packed, ONLY on `npm publish`. (See below.) -* prepack: +* **prepack**: run BEFORE a tarball is packed (on `npm pack`, `npm publish`, and when installing git dependencies) -* postpack: +* **postpack**: Run AFTER the tarball has been generated and moved to its final destination. -* publish, postpublish: +* **publish**, **postpublish**: Run AFTER the package is published. -* preinstall: +* **preinstall**: Run BEFORE the package is installed -* install, postinstall: +* **install**, **postinstall**: Run AFTER the package is installed. -* preuninstall, uninstall: +* **preuninstall**, **uninstall**: Run BEFORE the package is uninstalled. -* postuninstall: +* **postuninstall**: Run AFTER the package is uninstalled. -* preversion: +* **preversion**: Run BEFORE bumping the package version. -* version: +* **version**: Run AFTER bumping the package version, but BEFORE commit. -* postversion: +* **postversion**: Run AFTER bumping the package version, and AFTER commit. -* pretest, test, posttest: +* **pretest**, **test**, **posttest**: Run by the `npm test` command. -* prestop, stop, poststop: +* **prestop**, **stop**, **poststop**: Run by the `npm stop` command. -* prestart, start, poststart: +* **prestart**, **start**, **poststart**: Run by the `npm start` command. -* prerestart, restart, postrestart: +* **prerestart**, **restart**, **postrestart**: Run by the `npm restart` command. Note: `npm restart` will run the stop and start scripts if no `restart` script is provided. -* preshrinkwrap, shrinkwrap, postshrinkwrap: +* **preshrinkwrap**, **shrinkwrap**, **postshrinkwrap**: Run by the `npm shrinkwrap` command. Additionally, arbitrary scripts can be executed by running `npm @@ -55,9 +62,9 @@ names will be run for those as well (e.g. `premyscript`, `myscript`, `postmyscript`). Scripts from dependencies can be run with `npm explore -- npm run `. -## PREPUBLISH AND PREPARE +#### Prepublish and Prepare -### DEPRECATION NOTE +#### Deprecation Note Since `npm@1.1.71`, the npm CLI has run the `prepublish` script for both `npm publish` and `npm install`, because it's a convenient way to prepare a package @@ -73,7 +80,7 @@ they're in good shape). See for a much lengthier justification, with further reading, for this change. -### USE CASES +#### Use Cases If you need to perform operations on your package before it is used, in a way that is not dependent on the operating system or architecture of the @@ -95,7 +102,7 @@ Additionally, this means that: * You don't need to rely on your users having `curl` or `wget` or other system tools on the target machines. -## DEFAULT VALUES +### Default Values npm will default some script values based on package contents. @@ -110,34 +117,36 @@ npm will default some script values based on package contents. haven't defined your own `install` or `preinstall` scripts, npm will default the `install` command to compile using node-gyp. -## USER +### User If npm was invoked with root privileges, then it will change the uid to the user account or uid specified by the `user` config, which defaults to `nobody`. Set the `unsafe-perm` flag to run scripts with root privileges. -## ENVIRONMENT +### Environment Package scripts run in an environment where many pieces of information are made available regarding the setup of npm and the current state of the process. -### path +#### path If you depend on modules that define executable scripts, like test suites, then those executables will be added to the `PATH` for executing the scripts. So, if your package.json has this: - { "name" : "foo" - , "dependencies" : { "bar" : "0.1.x" } - , "scripts": { "start" : "bar ./test" } } +```json +{ "name" : "foo" +, "dependencies" : { "bar" : "0.1.x" } +, "scripts": { "start" : "bar ./test" } } +``` then you could run `npm start` to execute the `bar` script, which is exported into the `node_modules/.bin` directory on `npm install`. -### package.json vars +#### package.json vars The package.json fields are tacked onto the `npm_package_` prefix. So, for instance, if you had `{"name":"foo", "version":"1.2.5"}` in your @@ -147,31 +156,37 @@ package.json file, then your package scripts would have the in your code with `process.env.npm_package_name` and `process.env.npm_package_version`, and so on for other fields. -### configuration +#### configuration Configuration parameters are put in the environment with the `npm_config_` prefix. For instance, you can view the effective `root` config by checking the `npm_config_root` environment variable. -### Special: package.json "config" object +#### Special: package.json "config" object The package.json "config" keys are overwritten in the environment if there is a config param of `[@]:`. For example, if the package.json has this: - { "name" : "foo" - , "config" : { "port" : "8080" } - , "scripts" : { "start" : "node server.js" } } +```json +{ "name" : "foo" +, "config" : { "port" : "8080" } +, "scripts" : { "start" : "node server.js" } } +``` and the server.js is this: - http.createServer(...).listen(process.env.npm_package_config_port) +```javascript +http.createServer(...).listen(process.env.npm_package_config_port) +``` then the user could change the behavior by doing: - npm config set foo:port 80 +```bash + npm config set foo:port 80 + ``` -### current lifecycle event +#### current lifecycle event Lastly, the `npm_lifecycle_event` environment variable is set to whichever stage of the cycle is being executed. So, you could have a @@ -182,18 +197,22 @@ Objects are flattened following this format, so if you had `{"scripts":{"install":"foo.js"}}` in your package.json, then you'd see this in the script: - process.env.npm_package_scripts_install === "foo.js" +```bash +process.env.npm_package_scripts_install === "foo.js" +``` -## EXAMPLES +### Examples For example, if your package.json contains this: - { "scripts" : - { "install" : "scripts/install.js" - , "postinstall" : "scripts/install.js" - , "uninstall" : "scripts/uninstall.js" - } - } +```json +{ "scripts" : + { "install" : "scripts/install.js" + , "postinstall" : "scripts/install.js" + , "uninstall" : "scripts/uninstall.js" + } +} +``` then `scripts/install.js` will be called for the install and post-install stages of the lifecycle, and `scripts/uninstall.js` @@ -205,14 +224,16 @@ variable. If you want to run a make command, you can do so. This works just fine: - { "scripts" : - { "preinstall" : "./configure" - , "install" : "make && make install" - , "test" : "make test" - } - } +```json +{ "scripts" : + { "preinstall" : "./configure" + , "install" : "make && make install" + , "test" : "make test" + } +} +``` -## EXITING +### Exiting Scripts are run by passing the line as a script argument to `sh`. @@ -223,7 +244,7 @@ Note that these script files don't have to be nodejs or even javascript programs. They just have to be some kind of executable file. -## HOOK SCRIPTS +### Hook Scripts If you want to run a specific script at a specific lifecycle event for ALL packages, then you can use a hook script. @@ -236,7 +257,7 @@ Hook scripts are run exactly the same way as package.json scripts. That is, they are in a separate child process, with the env described above. -## BEST PRACTICES +### Best Practices * Don't exit with a non-zero error code unless you *really* mean it. Except for uninstall scripts, this will cause the npm action to @@ -244,7 +265,7 @@ above. only will prevent some optional features, then it's better to just print a warning and exit successfully. * Try not to use scripts to do what npm can do for you. Read through - `package.json(5)` to see all the things that you can specify and enable + [`package.json`](/docs/configuring-npm/package-json) to see all the things that you can specify and enable by simply describing your package appropriately. In general, this will lead to a more robust and consistent state. * Inspect the env to determine where to put things. For instance, if @@ -260,9 +281,9 @@ above. there is another option. The only valid use of `install` or `preinstall` scripts is for compilation which must be done on the target architecture. -## SEE ALSO +### See Also -* npm-run-script(1) -* package.json(5) -* npm-developers(7) -* npm-install(1) +* [npm run-script](/cli-commands/npm-run-script) +* [package.json](/configuring-npm/package-json) +* [npm developers](/using-npm/developers) +* [npm install](/cli-commands/npm-install) diff --git a/doc/misc/semver.md b/docs/content/using-npm/semver.md old mode 100644 new mode 100755 similarity index 100% rename from doc/misc/semver.md rename to docs/content/using-npm/semver.md diff --git a/docs/gatsby-browser.js b/docs/gatsby-browser.js new file mode 100644 index 0000000000000..035a4dc0398b8 --- /dev/null +++ b/docs/gatsby-browser.js @@ -0,0 +1,10 @@ +require('prismjs/themes/prism-tomorrow.css') +require('./src/main.css') + +/** + * Implement Gatsby's Browser APIs in this file. + * + * See: https://www.gatsbyjs.org/docs/browser-apis/ + */ + +// You can delete this file if you're not using it diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js new file mode 100644 index 0000000000000..b899bb0c5ae0e --- /dev/null +++ b/docs/gatsby-config.js @@ -0,0 +1,88 @@ +module.exports = { + pathPrefix: `${__dirname}/public`, + siteMetadata: { + title: 'npm cli documentation', + description: 'Documentation for the npm cli.', + author: '@gatsbyjs' + }, + plugins: [ + 'gatsby-plugin-root-import', + 'gatsby-plugin-react-helmet', + 'gatsby-plugin-catch-links', + 'gatsby-plugin-styled-components', + { + resolve: 'gatsby-source-filesystem', + options: { + name: 'src', + path: `${__dirname}/content/` + } + }, + { + resolve: 'gatsby-plugin-no-sourcemaps' + }, + 'gatsby-plugin-sharp', + { + resolve: 'gatsby-plugin-manifest', + options: { + name: 'gatsby-starter-default', + short_name: 'starter', + start_url: '/', + background_color: '#663399', + theme_color: '#663399', + display: 'minimal-ui', + icon: 'src/images/npm-icon.png' // This path is relative to the root of the site. + } + }, + { + resolve: 'gatsby-plugin-prefetch-google-fonts', + options: { + fonts: [ + { + family: 'Poppins', + subsets: ['latin'], + variants: ['300', '400', '500'] + }, + { + family: 'Inconsolata', + subsets: ['latin'], + variants: ['400', '700'] + } + ] + } + }, + { + resolve: 'gatsby-transformer-remark', + options: { + // CommonMark mode (default: true) + commonmark: true, + // Footnotes mode (default: true) + footnotes: true, + // Pedantic mode (default: true) + pedantic: true, + // GitHub Flavored Markdown mode (default: true) + gfm: true, + // Plugins configs + plugins: [{ + resolve: 'gatsby-remark-autolink-headers', + options: { + offsetY: '100', + icon: '', + className: 'header-link-class', + maintainCase: false, + removeAccents: true + } + }, + { + resolve: 'gatsby-remark-prismjs', + options: { + classPrefix: 'language-', + inlineCodeMarker: null, + aliases: {}, + showLineNumbers: false, + noInlineHighlight: false + } + }] + } + } + ] +} diff --git a/docs/gatsby-node.js b/docs/gatsby-node.js new file mode 100644 index 0000000000000..01affc6307f45 --- /dev/null +++ b/docs/gatsby-node.js @@ -0,0 +1,43 @@ +const {createFilePath} = require('gatsby-source-filesystem') +const path = require('path') + +exports.onCreateNode = ({node, getNode, actions}) => { + const {createNodeField} = actions + if (node.internal.type === 'MarkdownRemark') { + const slug = createFilePath({node, getNode, basePath: 'content', trailingSlash: false}) + createNodeField({ + node, + name: 'slug', + value: slug + }) + } +} + +exports.createPages = ({graphql, actions}) => { + const {createPage} = actions + return graphql(` + { + allMarkdownRemark { + edges { + node { + id + fields { + slug + } + html + } + } + } + } + `).then(result => { + result.data.allMarkdownRemark.edges.forEach(({node}) => { + createPage({ + path: node.fields.slug, + component: path.resolve('./src/templates/Page.js'), + context: { + slug: node.fields.slug + } + }) + }) + }) +} diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 0000000000000..7027cdd66d5a9 --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,17568 @@ +{ + "name": "npm-cli-docs", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "requires": { + "@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.5", + "@babel/types": "^7.5.5", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@babel/generator": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", + "requires": { + "@babel/types": "^7.5.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "requires": { + "@babel/types": "^7.3.0", + "esutils": "^2.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz", + "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==", + "requires": { + "@babel/helper-function-name": "^7.1.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.5.5", + "@babel/helper-split-export-declaration": "^7.4.4" + } + }, + "@babel/helper-define-map": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "requires": { + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "requires": { + "@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.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } + }, + "@babel/helpers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", + "requires": { + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", + "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.5.5", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", + "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz", + "integrity": "sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", + "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "requires": { + "@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-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", + "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", + "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", + "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz", + "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + }, + "dependencies": { + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + } + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", + "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", + "requires": { + "@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" + }, + "dependencies": { + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + } + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + }, + "dependencies": { + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + } + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", + "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "requires": { + "regexp-tree": "^0.1.6" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", + "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", + "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", + "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", + "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/polyfill": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", + "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/preset-env": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.5.5", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + } + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" + } + }, + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", + "requires": { + "@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.5", + "@babel/types": "^7.5.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@emotion/cache": { + "version": "10.0.17", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.17.tgz", + "integrity": "sha512-442/miwbuwIDfSzfMqZNxuzxSEbskcz/bZ86QBYzEjFrr/oq9w+y5kJY1BHbGhDtr91GO232PZ5NN9XYMwr/Qg==", + "requires": { + "@emotion/sheet": "0.9.3", + "@emotion/stylis": "0.8.4", + "@emotion/utils": "0.11.2", + "@emotion/weak-memoize": "0.2.3" + } + }, + "@emotion/core": { + "version": "10.0.17", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.17.tgz", + "integrity": "sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg==", + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.17", + "@emotion/css": "^10.0.14", + "@emotion/serialize": "^0.11.10", + "@emotion/sheet": "0.9.3", + "@emotion/utils": "0.11.2" + } + }, + "@emotion/css": { + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.14.tgz", + "integrity": "sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg==", + "requires": { + "@emotion/serialize": "^0.11.8", + "@emotion/utils": "0.11.2", + "babel-plugin-emotion": "^10.0.14" + } + }, + "@emotion/hash": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.2.tgz", + "integrity": "sha512-RMtr1i6E8MXaBWwhXL3yeOU8JXRnz8GNxHvaUfVvwxokvayUY0zoBeWbKw1S9XkufmGEEdQd228pSZXFkAln8Q==" + }, + "@emotion/is-prop-valid": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.2.tgz", + "integrity": "sha512-ZQIMAA2kLUWiUeMZNJDTeCwYRx1l8SQL0kHktze4COT22occKpDML1GDUXP5/sxhOMrZO8vZw773ni4H5Snrsg==", + "requires": { + "@emotion/memoize": "0.7.2" + } + }, + "@emotion/memoize": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.2.tgz", + "integrity": "sha512-hnHhwQzvPCW1QjBWFyBtsETdllOM92BfrKWbUTmh9aeOlcVOiXvlPsK4104xH8NsaKfg86PTFsWkueQeUfMA/w==" + }, + "@emotion/serialize": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.10.tgz", + "integrity": "sha512-04AB+wU00vv9jLgkWn13c/GJg2yXp3w7ZR3Q1O6mBSE6mbUmYeNX3OpBhfp//6r47lFyY0hBJJue+bA30iokHQ==", + "requires": { + "@emotion/hash": "0.7.2", + "@emotion/memoize": "0.7.2", + "@emotion/unitless": "0.7.4", + "@emotion/utils": "0.11.2", + "csstype": "^2.5.7" + } + }, + "@emotion/sheet": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.3.tgz", + "integrity": "sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A==" + }, + "@emotion/styled": { + "version": "10.0.17", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.17.tgz", + "integrity": "sha512-zHMgWjHDMNjD+ux64POtDnjLAObniu3znxFBLSdV/RiEhSLjHIowfvSbbd/C33/3uwtI6Uzs2KXnRZtka/PpAQ==", + "requires": { + "@emotion/styled-base": "^10.0.17", + "babel-plugin-emotion": "^10.0.17" + } + }, + "@emotion/styled-base": { + "version": "10.0.17", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.17.tgz", + "integrity": "sha512-vqQvxluZZKPByAB4zYZys0Qo/kVDP/03hAeg1K+TYpnZRwTi7WteOodc+/5669RPVNcfb93fphQpM5BYJnI1/g==", + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.2", + "@emotion/serialize": "^0.11.10", + "@emotion/utils": "0.11.2" + } + }, + "@emotion/stylis": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.4.tgz", + "integrity": "sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ==" + }, + "@emotion/unitless": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.4.tgz", + "integrity": "sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ==" + }, + "@emotion/utils": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.2.tgz", + "integrity": "sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA==" + }, + "@emotion/weak-memoize": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.3.tgz", + "integrity": "sha512-zVgvPwGK7c1aVdUVc9Qv7SqepOGRDrqCw7KZPSZziWGxSlbII3gmvGLPzLX4d0n0BMbamBacUrN22zOMyFFEkQ==" + }, + "@gatsbyjs/relay-compiler": { + "version": "2.0.0-printer-fix.2", + "resolved": "https://registry.npmjs.org/@gatsbyjs/relay-compiler/-/relay-compiler-2.0.0-printer-fix.2.tgz", + "integrity": "sha512-7GeCCEQ7O15lMTT/SXy9HuRde4cv5vs465ZnLK2QCajSDLior+20yrMqHn1PGsJYK6nNZH7p3lw9qTCpqmuc7Q==", + "requires": { + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/polyfill": "^7.0.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.1.2", + "chalk": "^2.4.1", + "fast-glob": "^2.2.2", + "fb-watchman": "^2.0.0", + "fbjs": "^1.0.0", + "immutable": "~3.7.6", + "nullthrows": "^1.1.0", + "relay-runtime": "2.0.0", + "signedsource": "^1.0.0", + "yargs": "^9.0.0" + } + }, + "@hapi/address": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", + "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==" + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "@hapi/hoek": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.2.1.tgz", + "integrity": "sha512-JPiBy+oSmsq3St7XlipfN5pNA6bDJ1kpa73PrK/zR29CVClDVqy04AanM/M/qx5bSF+I61DdCfAvRrujau+zRg==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.3.tgz", + "integrity": "sha512-JmS9/vQK6dcUYn7wc2YZTqzIKubAQcJKu2KCKAru6es482U5RT5fP1EXCPtlXpiK7PR0On/kpQKI4fRKkzpZBQ==", + "requires": { + "@hapi/hoek": "8.x.x" + } + }, + "@jimp/bmp": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.4.tgz", + "integrity": "sha512-dhKM7Cjw4XoOefx3/we2+vWyTP6hQPpM7mEsziGjtsrK2f/e3/+hhHbEsQNgO9BOA1FPJRXAOiYHts9IlMH1mg==", + "requires": { + "@jimp/utils": "^0.6.4", + "bmp-js": "^0.1.0", + "core-js": "^2.5.7" + } + }, + "@jimp/core": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.6.4.tgz", + "integrity": "sha512-nyiAXI8/uU54fGO53KrRB8pdn1s+IODZ+rj0jG2owsNJlTlagFrsZAy8IVTUCOiiXjh9TbwFo7D5XMrmi4KUww==", + "requires": { + "@jimp/utils": "^0.6.4", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "core-js": "^2.5.7", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + }, + "dependencies": { + "buffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.0.tgz", + "integrity": "sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + } + } + }, + "@jimp/custom": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.4.tgz", + "integrity": "sha512-sdBHrBoVr1+PFx4dlUAgXvvu4dG0esQobhg7qhpSLRje1ScavIgE2iXdJKpycgzrqwAOL8vW4/E5w2/rONlaoQ==", + "requires": { + "@jimp/core": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/gif": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.4.tgz", + "integrity": "sha512-14mLoyG0UrYJsGNRoXBFvSJdFtBD0BSBwQ1zCNeW+HpQqdl+Kh5E1Pz4nqT2KNylJe1jypyR51Q2yndgcfGVyg==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.4.tgz", + "integrity": "sha512-NrFla9fZC/Bhw1Aa9vJ6cBOqpB5ylEPb9jD+yZ0fzcAw5HwILguS//oXv9EWLApIY1XsOMFFe0XWpY653rv8hw==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7", + "jpeg-js": "^0.3.4" + } + }, + "@jimp/plugin-blit": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.4.tgz", + "integrity": "sha512-suVznd4XozkQIuECX0u8kMl+cAQpZN3WcbWXUcJaVxRi+VBvHIetG1Qs5qGLzuEg9627+kE7ppv0UgZ5mkE6lg==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-blur": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.4.tgz", + "integrity": "sha512-M2fDMYUUtEKVNnCJZk5J0KSMzzISobmWfnG88RdHXJCkOn98kdawQFwTsYOfJJfCM8jWfhIxwZLFhC/2lkTN2w==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-color": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.4.tgz", + "integrity": "sha512-6Nfr2l9KSb6zH2fij8G6fQOw85TTkyRaBlqMvDmsQp/I1IlaDbXzA2C2Eh9jkQYZQDPu61B1MkmlEhJp/TUx6Q==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.4.tgz", + "integrity": "sha512-qI1MxU1noS6NbEPu/bDDeP405aMviuIsfpOz8J3En8IwIwrJV22qt6QIHmF+eyng8CYgivwIPjEPzFzLR566Nw==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-cover": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.4.tgz", + "integrity": "sha512-z6eafPonj3LJY8cTEfRkXmOfCDi1+f0tbYaNvmiu+OrWJ3Ojw2hMt+BVVvJ8pKe1dWIFkCjxOjyjZWj1gEkaLw==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-crop": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.4.tgz", + "integrity": "sha512-w9TR+pn+GeWbznscGe2HRkPxInge0whAF3TLPWhPwBVjZChTT8dSDXsUpUlxQqvI4SfzuKp8z3/0SBqYDCzxxA==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-displace": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.4.tgz", + "integrity": "sha512-MEvtBXOAio/3iGJkKBrTtFs3Q38ez2Wy/wTD0Ruas+L8fjJR7l4mDgV+zjRr57CqB5mpY+L48VEoa2/gNXh9cg==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-dither": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.4.tgz", + "integrity": "sha512-w+AGLcIMUeJZ4CI0FvFomahgKLcW+ICsLidUNOqyLzceluPAfug4X7vDhQ41pNkzKg0M1+Q1j0aWV8bdyF+LhA==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-flip": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.4.tgz", + "integrity": "sha512-ukINMegMUM9KYjyDCiyYKYdSsbhNRLHDwOJN0xVRalmOKqNaZmjNbiMbaVxKlYt6sHW76RhSMOekw9f6GQB9tQ==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.4.tgz", + "integrity": "sha512-C1P6ohzIddpNb7CX5X+ygbp+ow8Fpt64ZLoIgdjYPs/42HxKluvY62fVfMhY6m5zUGKIMbg0uYeAtz/9LRJPyw==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-invert": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.4.tgz", + "integrity": "sha512-sleGz1jXaNEsP/5Ayqw8oez/6KesWcyCqovIuK4Z4kDmMc2ncuhsXIJQXDWtIF4tTQVzNEgrxUDNA4bi9xpCUA==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-mask": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.4.tgz", + "integrity": "sha512-3D4FbRxnpO9nzwa6cF8AImgO1aVReYbfRRO4I4bku4/iZ+kuU3fBLV+SRhB4c7di3ejG5u+rGsIfaNc94iYYvw==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-normalize": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.4.tgz", + "integrity": "sha512-nOFMwOaVkOKArHkD/T6/1HKAPj3jlW6l0JduVDn1A5eIPCtlnyhlE9zdjgi5Q9IBR/gRjwW6tTzBKuJenS51kg==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-print": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.4.tgz", + "integrity": "sha512-3z5DLVCKg0NfZhHATEaYH/4XanIboPP1pOUoxIUeF++qOnGiGgH2giFJlRprHmx2l3E3DukR1v8pt54PGvfrFw==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.4.tgz", + "integrity": "sha512-fk2+KheUNClrOWj6aDNWj1r4byVQb6Qxy4aT1UHX5GXPHDA+nhlej7ghaYdzeWZYodeM3lpasYtByu1XE2qScQ==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-rotate": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.4.tgz", + "integrity": "sha512-44VgV5D4xQIYInJAVevdW9J3SOhGKyz0OEr2ciA8Q3ktonKx0O5Q1g2kbruiqxFSkK/u2CKPLeKXZzYCFrmJGQ==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-scale": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.4.tgz", + "integrity": "sha512-RAQRaDiCHmEz+A8QS5d/Z38EnlNsQizz3Mu3NsjA8uFtJsv1yMKWXZSQuzniofZw8tlMV6oI3VdM0eQVE07/5w==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "@jimp/plugins": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.4.tgz", + "integrity": "sha512-NpO/87CKnF4Q9r8gMl6w+jPKOM/C089qExkViD9cPvcFZEnyVOu7ucGzcMmTcabWOU62iQTOkRViPYr6XaK0LQ==", + "requires": { + "@jimp/plugin-blit": "^0.6.4", + "@jimp/plugin-blur": "^0.6.4", + "@jimp/plugin-color": "^0.6.4", + "@jimp/plugin-contain": "^0.6.4", + "@jimp/plugin-cover": "^0.6.4", + "@jimp/plugin-crop": "^0.6.4", + "@jimp/plugin-displace": "^0.6.4", + "@jimp/plugin-dither": "^0.6.4", + "@jimp/plugin-flip": "^0.6.4", + "@jimp/plugin-gaussian": "^0.6.4", + "@jimp/plugin-invert": "^0.6.4", + "@jimp/plugin-mask": "^0.6.4", + "@jimp/plugin-normalize": "^0.6.4", + "@jimp/plugin-print": "^0.6.4", + "@jimp/plugin-resize": "^0.6.4", + "@jimp/plugin-rotate": "^0.6.4", + "@jimp/plugin-scale": "^0.6.4", + "core-js": "^2.5.7", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.6.4.tgz", + "integrity": "sha512-qv3oo6ll3XWVIToBwVC1wQX0MFKwpxbe2o+1ld9B4ZDavqvAHzalzcmTd/iyooI85CVDAcC3RRDo66oiizGZCQ==", + "requires": { + "@jimp/utils": "^0.6.4", + "core-js": "^2.5.7", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.4.tgz", + "integrity": "sha512-8/vD4qleexmhPdppiu6fSstj/n/kGNTn8iIlf1emiqOuMN2PL9q5GOPDWU0xWdGNyJMMIDXJPgUFUkKfqXdg7w==", + "requires": { + "core-js": "^2.5.7", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.6.4.tgz", + "integrity": "sha512-/EMbipQDg5U6DnBAgcSiydlMBRYoKhnaK7MJRImeTzhDJ6xfgNOF7lYq66o0kmaezKdG/cIwZ1CLecn2y3D8SQ==", + "requires": { + "@jimp/bmp": "^0.6.4", + "@jimp/gif": "^0.6.4", + "@jimp/jpeg": "^0.6.4", + "@jimp/png": "^0.6.4", + "@jimp/tiff": "^0.6.4", + "core-js": "^2.5.7", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.4.tgz", + "integrity": "sha512-EFQurCyEnZLSM2Q1BYDTUmsOJPSOYEQd18Fvq8bGo8hnBHoGLWLWWyNi2l4cYhtpKmIXyhvQqa6/WaEpKPzvqA==", + "requires": { + "core-js": "^2.5.7" + } + }, + "@mikaelkristiansson/domready": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mikaelkristiansson/domready/-/domready-1.0.9.tgz", + "integrity": "sha512-FOAjeRHULSWXd6JMuCDwf3zPbe11kP971+Bufrj9M8rQ33ZMtThgKd6IJgzj6tr/+1Rq3czzLI1LAa9x0IC92w==" + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "@pieh/friendly-errors-webpack-plugin": { + "version": "1.7.0-chalk-2", + "resolved": "https://registry.npmjs.org/@pieh/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0-chalk-2.tgz", + "integrity": "sha512-65+vYGuDkHBCWWjqzzR/Ck318+d6yTI00EqII9qe3aPD1J3Olhvw0X38uM5moQb1PK/ksDXwSoPGt/5QhCiotw==", + "requires": { + "chalk": "^2.4.2", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0", + "strip-ansi": "^3" + } + }, + "@reach/router": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.2.1.tgz", + "integrity": "sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ==", + "requires": { + "create-react-context": "^0.2.1", + "invariant": "^2.2.3", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "warning": "^3.0.0" + } + }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" + }, + "@styled-system/background": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.1.tgz", + "integrity": "sha512-AtcDYXVO3Rfui2jZGNBuFinqx25FQ54d6d8JKRPd4g/5wlyw24hgps6VvB3fqNgsA6JKwulIuZf9mfUX4RnPFg==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/border": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.1.tgz", + "integrity": "sha512-N4jSiyq18zfY2xg1G2+adGCQ3s+geRYZPJ4R/PT/rZM7kbzCRr8xqHNg+OWkDiDTqgZ0eU7OSsRQD/byQpziZg==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/color": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.1.tgz", + "integrity": "sha512-LHG5HQPZQdMNouXq9/cs/ovadNnnvPFkb6SkTqT9uxTUzTT416erGBaXZPGFqdwPpcDw4Y1MsmrAd1taeJEzvQ==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.1.tgz", + "integrity": "sha512-8doP1Uptn1nlNrG44O/DfiRtLvoh9OkPqxEv9Gp1YAKAD2RgRTTQou/wYw/4y4pqmV3Hjb3NA/5Nbp/Uo5eGUQ==", + "requires": { + "object-assign": "^4.1.1" + } + }, + "@styled-system/css": { + "version": "5.0.23", + "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.0.23.tgz", + "integrity": "sha512-yC3S0Iox8OTPAyrP1t5yY9nURUICcUdhVYOkwffftuxa5+txxI4qkT2e9JNCc2aaem+DG8mlXTdnYefjqge5wg==" + }, + "@styled-system/flexbox": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.1.tgz", + "integrity": "sha512-r9kBiCpXJee4zUQJnBom/c8d2CfUXEqrnZ5sdH62RsisoAByJ6vF5a3jI3zQXc8diEHjvNaunZL+K3gQjwJQGg==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/grid": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.1.tgz", + "integrity": "sha512-vzBNBg62syA62jEpxS21QEIwgndtxFgpCWWpitytApAybEll0mZctB06eOFhFgSNgarzOyox+1NdETB5h9KGnw==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/layout": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.1.tgz", + "integrity": "sha512-a0YnXNlORdpfcxejQEwMGd1k+pamRj+VjnAIafRdFBxBXsw55T8eG0iqWEs8U/d3i0+isKcfIyw/9OrElsksBg==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/position": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.1.tgz", + "integrity": "sha512-75+EvQA5Juh+Zbq1Hkcm0QHx5GwEGoG7BABpG/n/K0Uz2aBGKVKJ4Y3NmPRvSS7fl1Ktl7azIGAPW9XOZ9TdHA==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/shadow": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.1.tgz", + "integrity": "sha512-axdgRJ0gU8Rbw/DS24G4AAQIxYjo/fMmqxiegWja2XZDpeljqjyiYfGc7Dad3fgc+DUMn3Jjc1fHcTziTGWA4g==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/should-forward-prop": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/should-forward-prop/-/should-forward-prop-5.1.1.tgz", + "integrity": "sha512-vWgA9qtmo+Cjg63UiLNbuIHUA+nUMvl2tAFtiYE8KKIAz+CB8D11spVXE4JL89HG77sjuuQFwI5D778CKz7q6Q==", + "requires": { + "@emotion/is-prop-valid": "^0.8.1", + "@emotion/memoize": "^0.7.1", + "styled-system": "^5.1.1" + } + }, + "@styled-system/space": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.1.tgz", + "integrity": "sha512-hwF938Zx83YRZmk30HtBE2EPWT8Z8H3+Rvpkdg13Q6P93DpSNH8wIlIObFKSgcmbOcqXzvFlAYcQ3l6F6Hu3IA==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/typography": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.1.tgz", + "integrity": "sha512-zqrA9+nboPl5h/VhSKdlsUDUciHKb+Ly9YSCsvYb0Di1vI0lnYAtHzbBmI1xsfQW5us1BNflUpirCAQJshJMSQ==", + "requires": { + "@styled-system/core": "^5.1.1" + } + }, + "@styled-system/variant": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.1.tgz", + "integrity": "sha512-Gh3iBqksx+cTx5drqazu56KL5cJrGEdxMFQ/6Yo4ravrZd0dRmzBhsUh0+UWtSvfWfN0M0ziE3m/Zu4ZKMHMaQ==", + "requires": { + "@styled-system/core": "^5.1.1", + "@styled-system/css": "^5.0.23" + } + }, + "@types/configstore": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-2.1.1.tgz", + "integrity": "sha1-zR6FU2M60xhcPy8jns/10mQ+krY=" + }, + "@types/debug": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.29.tgz", + "integrity": "sha1-oeUUrfvZLwOiJLpU1pMRHb8fN1Q=" + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" + }, + "@types/get-port": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/get-port/-/get-port-0.0.4.tgz", + "integrity": "sha1-62u3Qj2fiItjJmDcfS/T5po1ZD4=" + }, + "@types/glob": { + "version": "5.0.36", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.36.tgz", + "integrity": "sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg==", + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.2.tgz", + "integrity": "sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==" + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/mkdirp": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.3.29.tgz", + "integrity": "sha1-fyrX7FX5FEgvybHsS7GuYCjUYGY=" + }, + "@types/node": { + "version": "7.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz", + "integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==" + }, + "@types/prop-types": { + "version": "15.7.1", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", + "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" + }, + "@types/reach__router": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.2.4.tgz", + "integrity": "sha512-a+MFhebeSGi0LwHZ0UhH/ke77rWtNQnt8YmaHnquSaY3HmyEi+BPQi3GhPcUPnC9X5BLw/qORw3BPxGb1mCtEw==", + "requires": { + "@types/history": "*", + "@types/react": "*" + } + }, + "@types/react": { + "version": "16.9.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.2.tgz", + "integrity": "sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg==", + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, + "@types/tmp": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.0.32.tgz", + "integrity": "sha1-DTyzECL4Qn6ljACK8yuA2hJspOM=" + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "@types/vfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", + "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "requires": { + "@types/node": "*", + "@types/unist": "*", + "@types/vfile-message": "*" + } + }, + "@types/vfile-message": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", + "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", + "requires": { + "@types/node": "*", + "@types/unist": "*" + } + }, + "@webassemblyjs/ast": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "requires": { + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "requires": { + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==" + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "requires": { + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/utf8": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==" + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "requires": { + "acorn": "^5.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + } + } + }, + "acorn-jsx": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==" + }, + "address": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz", + "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==" + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + }, + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "requires": { + "type-fest": "^0.5.2" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==" + }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" + } + } + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-iterate": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.3.tgz", + "integrity": "sha512-7MIv7HE9MuzfK6B2UnWv07oSHBLOaY1UUXAxZ07bIeRM+4IkPTlveMDs9MY//qvxPZPSvCn2XV4bmtQgSkVodg==" + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "auto-bind": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-2.1.0.tgz", + "integrity": "sha512-qZuFvkes1eh9lB2mg8/HG18C+5GIO51r+RrCSst/lh+i5B1CtVlkhTE488M805Nr3dKl0sM/pIFKSKUIlg3zUg==", + "optional": true, + "requires": { + "@types/react": "^16.8.12" + } + }, + "autoprefixer": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "requires": { + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + } + } + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" + }, + "babel-eslint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", + "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + } + }, + "babel-extract-comments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", + "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", + "requires": { + "babylon": "^6.18.0" + } + }, + "babel-loader": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "babel-plugin-add-module-exports": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.3.3.tgz", + "integrity": "sha512-hC37mm7aAdEb1n8SgggG8a1QuhZapsY/XLCi4ETSH6AVjXBCWEa50CXlOsAMPPWLnSx5Ns6mzz39uvuseh0Xjg==", + "requires": { + "chokidar": "^2.0.4" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz", + "integrity": "sha512-yeDwKaLgGdTpXL7RgGt5r6T4LmnTza/hUn5Ul8uZSGGMtEjYo13Nxai7SQaGCTEzUtg9Zq9qJn0EjEr7SeSlTQ==", + "requires": { + "babel-plugin-syntax-dynamic-import": "^6.18.0" + } + }, + "babel-plugin-emotion": { + "version": "10.0.17", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.17.tgz", + "integrity": "sha512-KNuBadotqYWpQexHhHOu7M9EV1j2c+Oh/JJqBfEQDusD6mnORsCZKHkl+xYwK82CPQ/23wRrsBIEYnKjtbMQJw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.7.2", + "@emotion/memoize": "0.7.2", + "@emotion/serialize": "^0.11.10", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + } + }, + "babel-plugin-macros": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", + "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", + "requires": { + "@babel/runtime": "^7.4.2", + "cosmiconfig": "^5.2.0", + "resolve": "^1.10.0" + } + }, + "babel-plugin-remove-graphql-queries": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.7.3.tgz", + "integrity": "sha512-xuOzXil34XPhkIGE/1EmCyfPlMgX2sXBaNf3n+ico5pM3HNrKc8vHcng9CoK2jnSXEwoX5wASFfKZg1eNNdz1w==" + }, + "babel-plugin-styled-components": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz", + "integrity": "sha512-gyQj/Zf1kQti66100PhrCRjI5ldjaze9O0M3emXRPAN80Zsf8+e1thpTpaXJXVHXtaM4/+dJEgZHyS9Its+8SA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-module-imports": "^7.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11" + } + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=" + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "babel-preset-fbjs": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.2.0.tgz", + "integrity": "sha512-5Jo+JeWiVz2wHUUyAlvb/sSYnXNig9r+HqGAOSfh5Fzxp7SnAaR/tEGRJ1ZX7C77kfk82658w6R5Z+uPATTD9g==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "babel-preset-gatsby": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.2.10.tgz", + "integrity": "sha512-MQmh2nERGZvxhMSr5M00AK7mCWSIZBazX8vn75oUdbPQ9LI68xj3i1S0q01RJid+yFFI0k+oEAAKkYAa8TRyqA==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-spread": "^7.2.2", + "@babel/preset-env": "^7.4.1", + "@babel/preset-react": "^7.0.0", + "@babel/runtime": "^7.4.5", + "babel-plugin-dynamic-import-node": "^1.2.0", + "babel-plugin-macros": "^2.6.1", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "bail": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", + "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "better-opn": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-0.1.4.tgz", + "integrity": "sha512-7V92EnOdjWOB9lKsVsthCcu1FdFT5qNJVTiOgGy5wPuTsSptMMxm2G1FGHgWu22MyX3tyDRzTWk4lxY2Ppdu7A==", + "requires": { + "opn": "^5.4.0" + } + }, + "better-queue": { + "version": "3.8.10", + "resolved": "https://registry.npmjs.org/better-queue/-/better-queue-3.8.10.tgz", + "integrity": "sha512-e3gwNZgDCnNWl0An0Tz6sUjKDV9m6aB+K9Xg//vYeo8+KiH8pWhLFxkawcXhm6FpM//GfD9IQv/kmvWCAVVpKA==", + "requires": { + "better-queue-memory": "^1.0.1", + "node-eta": "^0.9.0", + "uuid": "^3.0.0" + } + }, + "better-queue-memory": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/better-queue-memory/-/better-queue-memory-1.0.4.tgz", + "integrity": "sha512-SWg5wFIShYffEmJpI6LgbL8/3Dqhku7xI1oEiy6FroP9DbcZlG0ZDjxvPdP9t7hTGW40IpIcC6zVoGT1oxjOuA==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "bin-build": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "requires": { + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" + } + }, + "bin-check": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "requires": { + "execa": "^0.7.0", + "executable": "^4.1.0" + } + }, + "bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "requires": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "bin-version-check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "requires": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + } + }, + "bin-wrapper": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", + "requires": { + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" + }, + "dependencies": { + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==" + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==" + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" + }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" + }, + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz", + "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^2.4.2", + "cli-boxes": "^2.2.0", + "string-width": "^3.0.0", + "term-size": "^1.2.0", + "type-fest": "^0.3.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacache": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", + "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-manager": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.10.0.tgz", + "integrity": "sha512-IuPx05r5L0uZyBDYicB2Llld1o+/1WYjoHUnrC0TNQejMAnkoYxYS9Y8Uwr+lIBytDiyu7dwwmBCup2M9KugwQ==", + "requires": { + "async": "1.5.2", + "lru-cache": "4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", + "integrity": "sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=", + "requires": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + } + } + }, + "cache-manager-fs-hash": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/cache-manager-fs-hash/-/cache-manager-fs-hash-0.0.7.tgz", + "integrity": "sha512-7X+FPItAJf1tKKqJx6ljDJQc0fgSR5B+KPxFQLj+vYSL4q9XdrCbZldgsNb6wueRuIooj01wt0FubB08zaefRg==", + "requires": { + "es6-promisify": "^6.0.0", + "lockfile": "^1.0.4" + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + } + } + }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + } + } + }, + "caniuse-lite": { + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==" + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, + "ccount": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", + "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "character-entities": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", + "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==" + }, + "character-entities-html4": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", + "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==" + }, + "character-entities-legacy": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", + "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==" + }, + "character-reference-invalid": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", + "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==" + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + } + } + }, + "chokidar": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + } + } + }, + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cli-boxes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", + "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "optional": true + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cli-truncate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", + "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", + "optional": true, + "requires": { + "slice-ansi": "^1.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "optional": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "optional": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "clipboard": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz", + "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "clipboardy": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", + "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", + "requires": { + "arch": "^2.1.0", + "execa": "^0.8.0" + }, + "dependencies": { + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collapse-white-space": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", + "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "optional": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comma-separated-tokens": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz", + "integrity": "sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ==" + }, + "command-exists": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", + "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==" + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "confusing-browser-globals": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz", + "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==" + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "^0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=" + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-hrtime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-2.0.0.tgz", + "integrity": "sha1-Gb+yyRYvnhHC8Ewsed4rfoCVxic=" + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copyfiles": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-1.2.0.tgz", + "integrity": "sha1-qNo6xBqiIgrim9PFi2mEKU8sWTw=", + "requires": { + "glob": "^7.0.5", + "ltcdr": "^2.2.1", + "minimatch": "^3.0.3", + "mkdirp": "^0.5.1", + "noms": "0.0.0", + "through2": "^2.0.1" + } + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "core-js-compat": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", + "requires": { + "browserslist": "^4.6.6", + "semver": "^6.3.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-react-context": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", + "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==", + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, + "cross-fetch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", + "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", + "requires": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + }, + "dependencies": { + "node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", + "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-selector-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.3.0.tgz", + "integrity": "sha1-XxrUPi2O77/cME/NOaUhZklD4+s=" + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "css-to-react-native": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", + "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "css-tree": { + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.5.3" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=" + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + } + } + }, + "csstype": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz", + "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cwebp-bin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-5.1.0.tgz", + "integrity": "sha512-BsPKStaNr98zfxwejWWLIGELbPERULJoD2v5ijvpeutSAGsegX7gmABgnkRK7MUucCPROXXfaPqkLAwI509JzA==", + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.1", + "logalot": "^2.1.0" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + } + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + } + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.0.0.tgz", + "integrity": "sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww==" + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detab": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.2.tgz", + "integrity": "sha512-Q57yPrxScy816TTE1P/uLRXLDKjXhvYTbfxS/e6lPD+YrqghbsMlGB9nQzj/zVtSPaF0DFPSdO916EWO4sQUyQ==", + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "devcert-san": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/devcert-san/-/devcert-san-0.3.3.tgz", + "integrity": "sha1-qnckR0Gy2DF3HAEfIu4l45atS6k=", + "requires": { + "@types/configstore": "^2.1.1", + "@types/debug": "^0.0.29", + "@types/get-port": "^0.0.4", + "@types/glob": "^5.0.30", + "@types/mkdirp": "^0.3.29", + "@types/node": "^7.0.11", + "@types/tmp": "^0.0.32", + "command-exists": "^1.2.2", + "configstore": "^3.0.0", + "debug": "^2.6.3", + "eol": "^0.8.1", + "get-port": "^3.0.0", + "glob": "^7.1.1", + "mkdirp": "^0.5.1", + "tmp": "^0.0.31", + "tslib": "^1.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, + "dom-serializer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + } + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" + }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.237", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.237.tgz", + "integrity": "sha512-SPAFjDr/7iiVK2kgTluwxela6eaWjjFkS9rO/iYpB/KGXgccUom5YC7OIf19c8m8GGptWxLU0Em8xM64A/N7Fg==" + }, + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", + "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~6.1.0" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" + }, + "envinfo": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-5.12.1.tgz", + "integrity": "sha512-pwdo0/G3CIkQ0y6PCXq4RdkvId2elvtPCJMG0konqlrfkWQbf1DWeH9K2b/cvu2YgGvPPTOnonZxXM1gikFu1w==" + }, + "eol": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.8.1.tgz", + "integrity": "sha1-3vwyJJkMfspzuzRGGlbPncJHYdA=" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.3.tgz", + "integrity": "sha512-vRC4rKv87twMZy92X4+TmUdv3iYMsmePbpG/YguHsfzmZ8bYJZYYep7yrXH09yFUaCEPKgNK5X79+Yq7hwLVOA==", + "requires": { + "stackframe": "^1.0.4" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promisify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz", + "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.3.0.tgz", + "integrity": "sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==", + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "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.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": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" + } + } + }, + "eslint-config-react-app": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", + "integrity": "sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA==", + "requires": { + "confusing-browser-globals": "^1.0.6" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-module-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-flowtype": { + "version": "2.50.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", + "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", + "requires": { + "lodash": "^4.17.10" + } + }, + "eslint-plugin-graphql": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-graphql/-/eslint-plugin-graphql-3.0.3.tgz", + "integrity": "sha512-hHwLyxSkC5rkakJ/SNTWwOswPdVhvfyMCnEOloevrLQIOHUNVIQBg1ljCaRe9C40HdzgcGUFUdG5BHLCKm8tuw==", + "requires": { + "graphql-config": "^2.0.1", + "lodash": "^4.11.1" + } + }, + "eslint-plugin-import": { + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "requires": { + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", + "requires": { + "@babel/runtime": "^7.4.5", + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.2", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^7.0.2", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.1" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + } + } + }, + "eslint-plugin-react": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz", + "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==", + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.1.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "resolve": "^1.10.1" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" + }, + "espree": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", + "requires": { + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-source-polyfill": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/event-source-polyfill/-/event-source-polyfill-1.0.8.tgz", + "integrity": "sha512-wC9j5vjH9Xu9s8XhumgBoypdFJswraU1HXykqCCD/b7q+EH4P/avf5fM1e8IiHyHNZOeOiWwrki2775XFTYyeg==" + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "requires": { + "original": ">=0.0.5" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "requires": { + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "requires": { + "pify": "^2.2.0" + } + }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" + }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "express-graphql": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.7.1.tgz", + "integrity": "sha512-YpheAqTbSKpb5h57rV2yu2dPNUBi4FvZDspZ5iEV3ov34PBRgnM4lEBkv60+vZRJ6SweYL14N8AGYdov7g6ooQ==", + "requires": { + "accepts": "^1.3.5", + "content-type": "^1.0.4", + "http-errors": "^1.7.1", + "raw-body": "^2.3.3" + } + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "^2.0.0" + } + }, + "fbjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", + "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "requires": { + "core-js": "^2.4.1", + "fbjs-css-vars": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + }, + "figures": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-loader": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" + } + }, + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "filesize": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", + "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.1.0.tgz", + "integrity": "sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q==", + "requires": { + "array-uniq": "^2.1.0", + "semver-regex": "^2.0.0" + }, + "dependencies": { + "array-uniq": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", + "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==" + } + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "requires": { + "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-copy-file-sync": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fs-copy-file-sync/-/fs-copy-file-sync-1.1.1.tgz", + "integrity": "sha512-2QY5eeqVv4m2PfyMiEuy9adxNP+ajf+8AR05cEi+OAzPcOj90hvFImeZhTmKLBgSd9EvG33jsD7ZRxsx9dThkQ==" + }, + "fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=" + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gatsby": { + "version": "2.13.73", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.13.73.tgz", + "integrity": "sha512-5zehGv6BGwOGpa/cX+QST/IH1jN3ebygcXMvb26S0ZoJGxIZyTY9jwGVYQtraoGP7XdQaAh24DF7htuqpjcGhA==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/polyfill": "^7.0.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@gatsbyjs/relay-compiler": "2.0.0-printer-fix.2", + "@hapi/joi": "^15.1.1", + "@mikaelkristiansson/domready": "^1.0.9", + "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", + "@reach/router": "^1.2.1", + "address": "1.1.0", + "autoprefixer": "^9.6.1", + "axios": "^0.19.0", + "babel-core": "7.0.0-bridge.0", + "babel-eslint": "^9.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-add-module-exports": "^0.3.3", + "babel-plugin-dynamic-import-node": "^1.2.0", + "babel-plugin-remove-graphql-queries": "^2.7.3", + "babel-preset-gatsby": "^0.2.10", + "better-opn": "0.1.4", + "better-queue": "^3.8.10", + "bluebird": "^3.5.0", + "browserslist": "3.2.8", + "cache-manager": "^2.9.0", + "cache-manager-fs-hash": "^0.0.7", + "chalk": "^2.3.2", + "chokidar": "2.1.6", + "common-tags": "^1.4.0", + "compression": "^1.7.4", + "convert-hrtime": "^2.0.0", + "copyfiles": "^1.2.0", + "core-js": "^2.5.0", + "cors": "^2.8.5", + "css-loader": "^1.0.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "detect-port": "^1.2.1", + "devcert-san": "^0.3.3", + "dotenv": "^4.0.0", + "eslint": "^5.6.0", + "eslint-config-react-app": "^3.0.0", + "eslint-loader": "^2.1.0", + "eslint-plugin-flowtype": "^2.46.1", + "eslint-plugin-graphql": "^3.0.3", + "eslint-plugin-import": "^2.9.0", + "eslint-plugin-jsx-a11y": "^6.0.3", + "eslint-plugin-react": "^7.8.2", + "event-source-polyfill": "^1.0.5", + "express": "^4.16.3", + "express-graphql": "^0.7.1", + "fast-levenshtein": "^2.0.6", + "file-loader": "^1.1.11", + "flat": "^4.0.0", + "fs-exists-cached": "1.0.0", + "fs-extra": "^5.0.0", + "gatsby-cli": "^2.7.34", + "gatsby-core-utils": "^1.0.5", + "gatsby-graphiql-explorer": "^0.2.4", + "gatsby-link": "^2.2.6", + "gatsby-plugin-page-creator": "^2.1.7", + "gatsby-react-router-scroll": "^2.1.4", + "gatsby-telemetry": "^1.1.15", + "glob": "^7.1.1", + "got": "8.0.0", + "graphql": "^14.4.2", + "graphql-compose": "^6.3.2", + "graphql-playground-middleware-express": "^1.7.10", + "invariant": "^2.2.4", + "is-relative": "^1.0.0", + "is-relative-url": "^2.0.0", + "is-wsl": "^1.1.0", + "jest-worker": "^23.2.0", + "json-loader": "^0.5.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.14", + "lokijs": "^1.5.7", + "md5": "^2.2.1", + "md5-file": "^3.1.1", + "micromatch": "^3.1.10", + "mime": "^2.2.0", + "mini-css-extract-plugin": "^0.4.0", + "mitt": "^1.1.2", + "mkdirp": "^0.5.1", + "moment": "^2.21.0", + "name-all-modules-plugin": "^1.0.1", + "normalize-path": "^2.1.1", + "null-loader": "^0.1.1", + "opentracing": "^0.14.3", + "optimize-css-assets-webpack-plugin": "^5.0.1", + "parseurl": "^1.3.2", + "physical-cpu-count": "^2.0.0", + "pnp-webpack-plugin": "^1.4.1", + "postcss-flexbugs-fixes": "^3.0.0", + "postcss-loader": "^2.1.3", + "prop-types": "^15.6.1", + "raw-loader": "^0.5.1", + "react-dev-utils": "^4.2.3", + "react-error-overlay": "^3.0.0", + "react-hot-loader": "^4.12.11", + "redux": "^4.0.0", + "redux-thunk": "^2.3.0", + "semver": "^5.6.0", + "shallow-compare": "^1.2.2", + "sift": "^5.1.0", + "signal-exit": "^3.0.2", + "slash": "^1.0.0", + "socket.io": "^2.0.3", + "stack-trace": "^0.0.10", + "string-similarity": "^1.2.0", + "style-loader": "^0.21.0", + "terser-webpack-plugin": "1.2.4", + "true-case-path": "^2.2.1", + "type-of": "^2.0.1", + "url-loader": "^1.0.1", + "util.promisify": "^1.0.0", + "uuid": "^3.1.0", + "v8-compile-cache": "^1.1.0", + "webpack": "~4.28.4", + "webpack-dev-middleware": "^3.0.1", + "webpack-dev-server": "^3.1.14", + "webpack-hot-middleware": "^2.21.0", + "webpack-merge": "^4.1.0", + "webpack-stats-plugin": "^0.1.5", + "xstate": "^4.3.2", + "yaml-loader": "^0.5.0" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "configstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", + "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "requires": { + "@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" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "gatsby-cli": { + "version": "2.7.34", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.7.34.tgz", + "integrity": "sha512-kc7+ne7cGC74KOv7dBmLC19m2nwYBsLoPZdX3qj9YLDjWsXR/GGGGU48eyADYY1gVpJacaMqk0Lu3dNbsfZBwQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/runtime": "^7.0.0", + "@hapi/joi": "^15.1.1", + "better-opn": "^0.1.4", + "bluebird": "^3.5.0", + "chalk": "^2.4.2", + "ci-info": "^2.0.0", + "clipboardy": "^1.2.3", + "common-tags": "^1.4.0", + "configstore": "^4.0.0", + "convert-hrtime": "^2.0.0", + "core-js": "^2.5.0", + "envinfo": "^5.8.1", + "execa": "^0.8.0", + "fs-exists-cached": "^1.0.0", + "fs-extra": "^4.0.1", + "gatsby-telemetry": "^1.1.15", + "hosted-git-info": "^2.6.0", + "ink": "^2.3.0", + "ink-spinner": "^3.0.1", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.14", + "meant": "^1.0.1", + "node-fetch": "^2.6.0", + "object.entries": "^1.1.0", + "opentracing": "^0.14.3", + "pretty-error": "^2.1.1", + "progress": "^2.0.3", + "prompts": "^2.1.0", + "react": "^16.8.4", + "resolve-cwd": "^2.0.0", + "semver": "^6.3.0", + "source-map": "0.5.7", + "stack-trace": "^0.0.10", + "strip-ansi": "^5.2.0", + "update-notifier": "^2.3.0", + "uuid": "3.3.2", + "yargs": "^12.0.5", + "yurnalist": "^1.0.5" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } + } + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "gatsby-core-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.5.tgz", + "integrity": "sha512-XRyZMduCP3yvV8AEKI4sAVWT+M1roW20SWhQwOKtZrYIkMCzlOe9nMOjNOZcJb2vCJsaUBxh2fxLT+OZg8+25A==" + }, + "gatsby-graphiql-explorer": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.2.4.tgz", + "integrity": "sha512-2e1HnBuC06L9LInA5mNKyiuaiUEnnRfpedGuuvNFR3nu8+7Q9OwVXuE3EcbWihtjiINyZH7HHD7Za0WRZV6SkQ==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "gatsby-image": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.2.10.tgz", + "integrity": "sha512-wvbxqYWxg7te7ui6RjCgohcVTvcI1b0PBZNor548Flg/0h+oSGnUXVDkz9HO8uS/vWlIbMpXonRxvnZCGu1Y8A==", + "requires": { + "@babel/runtime": "^7.0.0", + "object-fit-images": "^3.2.4", + "prop-types": "^15.6.1" + } + }, + "gatsby-link": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.2.6.tgz", + "integrity": "sha512-FnQ4Z+a5KDmAIoipfGqtELZ/WPB0W67I/jo4ekOPwEu14t6N/VWdTS0mOdJoNCeElNvnJ7cNqlNnEopdU4vbKw==", + "requires": { + "@babel/runtime": "^7.0.0", + "@types/reach__router": "^1.2.4", + "prop-types": "^15.6.1" + } + }, + "gatsby-page-utils": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.0.7.tgz", + "integrity": "sha512-WhZj+VvxWCWU/JRiVFg0SJCXSAnsMz3ABpMJxQv2ByUB0gUUFG90my4oYNEZKuY+mRMKyRiVoexQVuQcnAnoGA==", + "requires": { + "@babel/runtime": "^7.0.0", + "bluebird": "^3.5.0", + "chokidar": "2.1.6", + "fs-exists-cached": "^1.0.0", + "glob": "^7.1.1", + "lodash": "^4.17.14", + "micromatch": "^3.1.10", + "slash": "^1.0.0" + } + }, + "gatsby-plugin-catch-links": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/gatsby-plugin-catch-links/-/gatsby-plugin-catch-links-2.1.9.tgz", + "integrity": "sha512-UWOty2yuV2tINSv5ToKJfFXUYtaSKtP4zRVeZ3dx+m2v7WO61ap/o3JEMWUAG1n+VaN+TIq2T5Qc9Ln0emDloQ==", + "requires": { + "@babel/runtime": "^7.6.0", + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", + "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + } + } + }, + "gatsby-plugin-manifest": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.2.6.tgz", + "integrity": "sha512-QjOKUOrtwbmiXBAcFi0uvzQEGJa5PELXriJjXNuDmn++72sCybgoluOrY4Ajed+WUf82865RIXq58isK3Dmmgw==", + "requires": { + "@babel/runtime": "^7.0.0", + "gatsby-core-utils": "^1.0.5", + "semver": "^5.6.0", + "sharp": "^0.22.1" + } + }, + "gatsby-plugin-no-sourcemaps": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-no-sourcemaps/-/gatsby-plugin-no-sourcemaps-2.1.1.tgz", + "integrity": "sha512-IaRscMdXD8AFr922HlgftxN09gqmjsA1/RHuLgtJcv+bYhoGGs83XvSOrOq8Szs+5rLEixj3qdNJb59G0LnO8w==" + }, + "gatsby-plugin-offline": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/gatsby-plugin-offline/-/gatsby-plugin-offline-2.2.7.tgz", + "integrity": "sha512-AbX4kAEy8j+8P/kBITdzv/8JR1R+Lt5pAE49ICIzwb7tZDQB7fJisOSc1PGihhQTLuy+ppj9XJDgNhh205lETQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "cheerio": "^1.0.0-rc.2", + "idb-keyval": "^3.1.0", + "lodash": "^4.17.14", + "slash": "^3.0.0", + "workbox-build": "^3.6.3" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "gatsby-plugin-page-creator": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.1.7.tgz", + "integrity": "sha512-2iRy0kLuAPcVev1VIv9eI05UKe3riiaVd5GMosAaGNI4oUJ9+LiPfXks3kWBSIqwRWv9CyCA6/GhOaVFjrzLLQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "bluebird": "^3.5.0", + "fs-exists-cached": "^1.0.0", + "gatsby-page-utils": "^0.0.7", + "glob": "^7.1.1", + "lodash": "^4.17.14", + "micromatch": "^3.1.10" + } + }, + "gatsby-plugin-prefetch-google-fonts": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-prefetch-google-fonts/-/gatsby-plugin-prefetch-google-fonts-1.4.3.tgz", + "integrity": "sha512-rrNGpdLkSEQWksM1A1cJnL/wuu9GLfAl8oPQgpn3cmpKd4jnXk+nbLyQOwKQlRYSrzpju59dY8oyf4UfSFbqPg==", + "requires": { + "@babel/runtime": "^7.2.0", + "clean-css": "^4.2.1", + "download": "^7.1.0", + "fs-extra": "^7.0.0", + "get-urls": "^8.0.0", + "globby": "^8.0.1", + "google-fonts-plugin": "2.0.2", + "object-hash": "^1.3.0" + }, + "dependencies": { + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + } + }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==" + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "requires": { + "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" + } + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" + }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "gatsby-plugin-react-helmet": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.1.4.tgz", + "integrity": "sha512-L+nP4cv6zdxjKXN9eJJdni7JpPCCSN1V+KWBgID0FELKawFGegkI6zdvKhtBZHz5F+WHh+ak/qfOAYIuLO0eHA==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "gatsby-plugin-root-import": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/gatsby-plugin-root-import/-/gatsby-plugin-root-import-2.0.5.tgz", + "integrity": "sha512-/yA6rFjfjiFb8D6nCjfFrrGqYQMkOt4J3u2o6s7VYEF/zpA5dw2C9ENJ5fDKkJSCbbwLiEIGVMMee3vMEip2zA==" + }, + "gatsby-plugin-sharp": { + "version": "2.2.13", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.2.13.tgz", + "integrity": "sha512-Wzvwty3ho0T3FSFLDHGAf5D87hvqTsRvphnSP38HGFw0tHAbNtbJSrqr/HA1P5x7Cah4j5duQg4TNH6qtlkAZg==", + "requires": { + "@babel/runtime": "^7.0.0", + "async": "^2.6.3", + "bluebird": "^3.5.0", + "fs-extra": "^7.0.0", + "gatsby-core-utils": "^1.0.5", + "got": "^8.3.2", + "imagemin": "^6.0.0", + "imagemin-mozjpeg": "^8.0.0", + "imagemin-pngquant": "^6.0.0", + "imagemin-webp": "^5.0.0", + "lodash": "^4.17.14", + "mini-svg-data-uri": "^1.0.0", + "potrace": "^2.1.1", + "probe-image-size": "^4.0.0", + "progress": "^2.0.3", + "semver": "^5.6.0", + "sharp": "^0.22.1", + "svgo": "^1.2.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "gatsby-plugin-styled-components": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/gatsby-plugin-styled-components/-/gatsby-plugin-styled-components-3.1.11.tgz", + "integrity": "sha512-10RgU3FcXNctDfFHpiAKQOmYBZlbeZSOfG1mqjWjz/BmYqkLoIaQfTwEMmBpH40DGf72pG2PUOGoDVDrikPKOA==", + "requires": { + "@babel/runtime": "^7.6.3" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + } + } + }, + "gatsby-react-router-scroll": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.1.4.tgz", + "integrity": "sha512-p9HQ2GrIVmKL3UAk7jqKzOXaigj6tu1xQPAGguO+5+i5ZfD245TQq1UAj1bZr0dJ1DJqRLbTooxPiL7+K05pVg==", + "requires": { + "@babel/runtime": "^7.0.0", + "scroll-behavior": "^0.9.9", + "warning": "^3.0.0" + } + }, + "gatsby-remark-autolink-headers": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/gatsby-remark-autolink-headers/-/gatsby-remark-autolink-headers-2.1.10.tgz", + "integrity": "sha512-MXQuxgTurOXMYi3Rpywz2kMe4Px/H3B2OBy5ZphL9WwOFfaiRK10GkRNMNlHSDNA0K5151PnuSd5mKxLOCxbYw==", + "requires": { + "@babel/runtime": "^7.6.0", + "github-slugger": "^1.2.1", + "lodash": "^4.17.15", + "mdast-util-to-string": "^1.0.6", + "unist-util-visit": "^1.4.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", + "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + } + } + }, + "gatsby-remark-prismjs": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/gatsby-remark-prismjs/-/gatsby-remark-prismjs-3.3.13.tgz", + "integrity": "sha512-m5EIH2D1PE6kpqaPbas8cd85rIdXoux5Q3FUo5gkKkiBefdTt3Kk1kA2eW/qzEs8hovHWmRigFzA/HsvK8A1/A==", + "requires": { + "@babel/runtime": "^7.6.0", + "parse-numeric-range": "^0.0.2", + "unist-util-visit": "^1.4.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", + "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + } + } + }, + "gatsby-source-filesystem": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.1.21.tgz", + "integrity": "sha512-CYkj95vp6kNcO/UFYCYmJ78djJZAX1zO2hQyptFNRhto4J5SWB7Zy8Jc0r7sCitMeakfvNOT72y3r7LjcA0dNw==", + "requires": { + "@babel/runtime": "^7.5.5", + "better-queue": "^3.8.10", + "bluebird": "^3.5.5", + "chokidar": "3.0.2", + "file-type": "^12.3.0", + "fs-extra": "^8.1.0", + "gatsby-core-utils": "^1.0.7", + "got": "^7.1.0", + "md5-file": "^3.2.3", + "mime": "^2.4.4", + "pretty-bytes": "^4.0.2", + "progress": "^2.0.3", + "read-chunk": "^3.2.0", + "valid-url": "^1.0.9", + "xstate": "^4.6.7" + }, + "dependencies": { + "anymatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.0.tgz", + "integrity": "sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", + "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", + "requires": { + "anymatch": "^3.0.1", + "braces": "^3.0.2", + "fsevents": "^2.0.6", + "glob-parent": "^5.0.0", + "is-binary-path": "^2.1.0", + "is-glob": "^4.0.1", + "normalize-path": "^3.0.0", + "readdirp": "^3.1.1" + } + }, + "file-type": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.3.0.tgz", + "integrity": "sha512-4E4Esq9KLwjYCY32E7qSmd0h7LefcniZHX+XcdJ4Wfx1uGJX7QCigiqw/U0yT7WOslm28yhxl87DJ0wHYv0RAA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fsevents": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", + "optional": true + }, + "gatsby-core-utils": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.7.tgz", + "integrity": "sha512-G4C/n8tzZVUgs+nLs8Gho7OfgcOWsoKij6az25vCATC9daqrCh1R0ouInqCtIBk7pBim/jt7UAtlClXpp6HyqQ==" + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "readdirp": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.2.tgz", + "integrity": "sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw==", + "requires": { + "picomatch": "^2.0.4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "gatsby-telemetry": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.1.15.tgz", + "integrity": "sha512-EnKKEiIvqME9hlQRJZXp1V7xOQtgqGLRWHxcIYtRAYS5NJse6rPNnYXIRD3eZn8jXnuBB4kuUeatJLiTHxGbwQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/runtime": "^7.0.0", + "bluebird": "^3.5.0", + "boxen": "^3.2.0", + "ci-info": "2.0.0", + "configstore": "^4.0.0", + "envinfo": "^5.8.1", + "fs-extra": "^7.0.1", + "git-up": "4.0.1", + "is-docker": "1.1.0", + "lodash": "^4.17.14", + "node-fetch": "2.3.0", + "resolve-cwd": "^2.0.0", + "source-map": "^0.5.7", + "stack-trace": "^0.0.10", + "stack-utils": "1.0.2", + "uuid": "3.3.2" + }, + "dependencies": { + "configstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", + "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "node-fetch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } + } + }, + "gatsby-transformer-remark": { + "version": "2.6.22", + "resolved": "https://registry.npmjs.org/gatsby-transformer-remark/-/gatsby-transformer-remark-2.6.22.tgz", + "integrity": "sha512-WONmnxXJ86Ko9y7YgQRN+mVoHgv9nTd+IjgLyiuNDuMFKCAUrKSBpTVyqfv8AEYoovGFuaCx1gCp6aT6MKmyzQ==", + "requires": { + "@babel/runtime": "^7.6.0", + "bluebird": "^3.5.5", + "gatsby-core-utils": "^1.0.8", + "gray-matter": "^4.0.2", + "hast-util-raw": "^4.0.0", + "hast-util-to-html": "^4.0.1", + "lodash": "^4.17.15", + "mdast-util-to-hast": "^3.0.4", + "mdast-util-to-string": "^1.0.6", + "mdast-util-toc": "^2.1.0", + "remark": "^10.0.1", + "remark-parse": "^6.0.3", + "remark-retext": "^3.1.3", + "remark-stringify": "^5.0.0", + "retext-english": "^3.0.3", + "sanitize-html": "^1.20.1", + "underscore.string": "^3.3.5", + "unified": "^6.2.0", + "unist-util-remove-position": "^1.1.3", + "unist-util-select": "^1.5.0", + "unist-util-visit": "^1.4.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", + "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "gatsby-core-utils": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.8.tgz", + "integrity": "sha512-080Jl8NamTbCGliKxXpMjEO1XUYU5FAow+VPR/j6hJk+Kl/gFmpE1mqa5QnHRGLZQhBP/h2T0mUwnSJn9m/Jsw==" + } + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", + "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "requires": { + "npm-conf": "^1.1.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "get-urls": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-urls/-/get-urls-8.0.0.tgz", + "integrity": "sha512-9c6aVD6HqnpFjqWSoRzSGNo69hNnSa8EevNFVeIRSLYqYlIJNvtHgrqiQ1sUjHwbZPBY5gO1FMlVjmElfdneqw==", + "requires": { + "normalize-url": "^3.3.0", + "url-regex": "^4.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-up": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz", + "integrity": "sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==", + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^5.0.0" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, + "github-slugger": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.1.tgz", + "integrity": "sha512-SsZUjg/P03KPzQBt7OxJPasGw6NRO5uOgiZ5RGXVud5iSIZ0eNZeNp5rTwCxtavrRUa/A77j8mePVc5lEvk0KQ==", + "requires": { + "emoji-regex": ">=6.0.0 <=6.1.1" + }, + "dependencies": { + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + } + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "google-fonts-plugin": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/google-fonts-plugin/-/google-fonts-plugin-2.0.2.tgz", + "integrity": "sha512-pWYFe6zoLA6uIUpSr/pkakf3DwA2fYgpStfe54AmkiKTHMCUILvtqihHaS2f4SqbTpdpEUYVTMMgvs2ur1ge8g==", + "requires": { + "axios": "^0.18.0", + "cssnano": "^4.0.5", + "mkdirp": "^0.5.1", + "neon-js": "^1.1.2", + "path": "^0.12.7" + }, + "dependencies": { + "axios": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + } + }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + } + } + }, + "got": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-8.0.0.tgz", + "integrity": "sha512-lqVA9ORcSGfJPHfMXh1RW451aYMP1NyXivpGqGggnfDqNz3QVfMl7MkuEz+dr70gK2X8dhLiS5YzHhCV3/3yOQ==", + "requires": { + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.1.0", + "is-stream": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.2.0", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "graphql": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.4.2.tgz", + "integrity": "sha512-6uQadiRgnpnSS56hdZUSvFrVcQ6OF9y6wkxJfKquFtHlnl7+KSuWwSJsdwiK1vybm1HgcdbpGkCpvhvsVQ0UZQ==", + "requires": { + "iterall": "^1.2.2" + } + }, + "graphql-compose": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/graphql-compose/-/graphql-compose-6.3.5.tgz", + "integrity": "sha512-XUpp7JqbaQ+vK/Nw4Jw0CQKs3UU8YFz3wpbBz+6WvPhrMkexco0bIbK4iGW9okQT7+/toAphEdVO4HFqM7lk2w==", + "requires": { + "graphql-type-json": "^0.2.4", + "object-path": "^0.11.4" + } + }, + "graphql-config": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", + "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "requires": { + "graphql-import": "^0.7.1", + "graphql-request": "^1.5.0", + "js-yaml": "^3.10.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.4" + } + }, + "graphql-import": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.7.1.tgz", + "integrity": "sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==", + "requires": { + "lodash": "^4.17.4", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } + } + }, + "graphql-playground-html": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz", + "integrity": "sha512-yOYFwwSMBL0MwufeL8bkrNDgRE7eF/kTHiwrqn9FiR9KLcNIl1xw9l9a+6yIRZM56JReQOHpbQFXTZn1IuSKRg==" + }, + "graphql-playground-middleware-express": { + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.12.tgz", + "integrity": "sha512-17szgonnVSxWVrgblLRHHLjWnMUONfkULIwSunaMvYx8k5oG3yL86cyGCbHuDFUFkyr2swLhdfYl4mDfDXuvOA==", + "requires": { + "graphql-playground-html": "1.6.12" + } + }, + "graphql-request": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", + "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==", + "requires": { + "cross-fetch": "2.2.2" + } + }, + "graphql-type-json": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.2.4.tgz", + "integrity": "sha512-/tq02ayMQjrG4oDFDRLLrPk0KvJXue0nVXoItBe7uAdbNXjQUu+HYCBdAmPLQoseVzUKKMzrhq2P/sfI76ON6w==" + }, + "gray-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", + "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", + "requires": { + "js-yaml": "^3.11.0", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "requires": { + "duplexer": "^0.1.1" + } + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hast-to-hyperscript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-5.0.0.tgz", + "integrity": "sha512-DLl3eYTz8uwwzEubDUdCChsR5t5b2ne+yvHrA2h58Suq/JnN3+Gsb9Tc4iZoCCsykmFUc6UUpwxTmQXs0akSeg==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "property-information": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.2.1", + "unist-util-is": "^2.0.0", + "web-namespaces": "^1.1.2" + } + }, + "hast-util-from-parse5": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-4.0.2.tgz", + "integrity": "sha512-I6dtjsGtDqz4fmGSiFClFyiXdKhj5bPceS6intta7k/VDuiKz9P61C6hO6WMiNNmEm1b/EtBH8f+juvz4o0uwQ==", + "requires": { + "ccount": "^1.0.3", + "hastscript": "^4.0.0", + "property-information": "^4.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + } + }, + "hast-util-is-element": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.0.3.tgz", + "integrity": "sha512-C62CVn7jbjp89yOhhy7vrkSaB7Vk906Gtcw/Ihd+Iufnq+2pwOZjdPmpzpKLWJXPJBMDX3wXg4FqmdOayPcewA==" + }, + "hast-util-parse-selector": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz", + "integrity": "sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw==" + }, + "hast-util-raw": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-4.0.0.tgz", + "integrity": "sha512-5xYHyEJMCf8lX/NT4iA5z6N43yoFsrJqXJ5GWwAbLn815URbIz+UNNFEgid33F9paZuDlqVKvB+K3Aqu5+DdSw==", + "requires": { + "hast-util-from-parse5": "^4.0.2", + "hast-util-to-parse5": "^4.0.1", + "html-void-elements": "^1.0.1", + "parse5": "^5.0.0", + "unist-util-position": "^3.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.1", + "zwitch": "^1.0.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + } + } + }, + "hast-util-to-html": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz", + "integrity": "sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg==", + "requires": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.1", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^1.0.1", + "unist-util-is": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "hast-util-to-parse5": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-4.0.1.tgz", + "integrity": "sha512-U/61W+fsNfBpCyJBB5Pt3l5ypIfgXqEyW9pyrtxF7XrqDJHzcFrYpnC94d0JDYjvobLpYCzcU9srhMRPEO1YXw==", + "requires": { + "hast-to-hyperscript": "^5.0.0", + "property-information": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.1", + "zwitch": "^1.0.0" + } + }, + "hast-util-whitespace": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.3.tgz", + "integrity": "sha512-AlkYiLTTwPOyxZ8axq2/bCwRUPjIPBfrHkXuCR92B38b3lSdU22R5F/Z4DL6a2kxWpekWq1w6Nj48tWat6GeRA==" + }, + "hastscript": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-4.1.0.tgz", + "integrity": "sha512-bOTn9hEfzewvHyXdbYGKqOr/LOz+2zYhKbC17U2YAjd16mnjqB1BQ0nooM/RdMy/htVyli0NAznXiBtwDi1cmQ==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.2.0", + "property-information": "^4.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "html-void-elements": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.4.tgz", + "integrity": "sha512-yMk3naGPLrfvUV9TdDbuYXngh/TpHbA6TrOw3HL9kS8yhwx7i309BReNg7CbAJXGE+UMJ6je5OqJ7lC63o6YuQ==" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "idb-keyval": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-3.2.0.tgz", + "integrity": "sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", + "requires": { + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "requires": { + "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" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "imagemin-mozjpeg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", + "integrity": "sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==", + "requires": { + "execa": "^1.0.0", + "is-jpg": "^2.0.0", + "mozjpeg": "^6.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "imagemin-pngquant": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-6.0.1.tgz", + "integrity": "sha512-Stk+fZCLxZznV8MFNA/T3AY/VRKevsiP9uZOLV0RCXoi0vUUFriySYuz/83IGp9D254EW8miGyyQ69zKouFr7w==", + "requires": { + "execa": "^0.10.0", + "is-png": "^1.0.0", + "is-stream": "^1.1.0", + "pngquant-bin": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "imagemin-webp": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/imagemin-webp/-/imagemin-webp-5.1.0.tgz", + "integrity": "sha512-BsPTpobgbDPFBBsI3UflnU/cpIVa15qInEDBcYBw16qI/6XiB4vDF/dGp9l4aM3pfFDDYqR0mANMcKpBD7wbCw==", + "requires": { + "cwebp-bin": "^5.0.0", + "exec-buffer": "^3.0.0", + "is-cwebp-readable": "^2.0.1" + } + }, + "immutable": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "ink": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ink/-/ink-2.3.0.tgz", + "integrity": "sha512-931rgXHAS3hM++8ygWPOBeHOFwTzHh3pDAVZtiBVOUH6tVvJijym43ODUy22ySo2NwYUFeR/Zj3xuWzBEKMiHw==", + "optional": true, + "requires": { + "@types/react": "^16.8.6", + "arrify": "^1.0.1", + "auto-bind": "^2.0.0", + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "cli-truncate": "^1.1.0", + "is-ci": "^2.0.0", + "lodash.throttle": "^4.1.1", + "log-update": "^3.0.0", + "prop-types": "^15.6.2", + "react-reconciler": "^0.20.0", + "scheduler": "^0.13.2", + "signal-exit": "^3.0.2", + "slice-ansi": "^1.0.0", + "string-length": "^2.0.0", + "widest-line": "^2.0.0", + "wrap-ansi": "^5.0.0", + "yoga-layout-prebuilt": "^1.9.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "optional": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "optional": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "optional": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "optional": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "optional": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "optional": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "optional": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "optional": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "optional": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "optional": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, + "ink-spinner": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ink-spinner/-/ink-spinner-3.0.1.tgz", + "integrity": "sha512-AVR4Z/NXDQ7dT5ltWcCzFS9Dd4T8eaO//E2UO8VYNiJcZpPCSJ11o5A0UVPcMlZxGbGD6ikUFDR3ZgPUQk5haQ==", + "optional": true, + "requires": { + "cli-spinners": "^1.0.0", + "prop-types": "^15.5.10" + } + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "inquirer": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "dependencies": { + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", + "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==" + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=" + }, + "is-alphanumerical": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz", + "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.0.0.tgz", + "integrity": "sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw==", + "requires": { + "builtin-modules": "^3.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-cwebp-readable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-cwebp-readable/-/is-cwebp-readable-2.0.1.tgz", + "integrity": "sha1-r7k7DAq9CiUQEBauM66ort+SbSY=", + "requires": { + "file-type": "^4.3.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-decimal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", + "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-docker": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", + "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", + "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==" + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=", + "requires": { + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "is-jpg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", + "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=" + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-png": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-relative-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-2.0.0.tgz", + "integrity": "sha1-cpAtf+BLPUeS59sV+duEtyBMnO8=", + "requires": { + "is-absolute-url": "^2.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-root": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", + "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=" + }, + "is-ssh": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz", + "integrity": "sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==", + "requires": { + "protocols": "^1.1.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=", + "requires": { + "is-invalid-path": "^0.1.0" + } + }, + "is-what": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.3.1.tgz", + "integrity": "sha512-seFn10yAXy+yJlTRO+8VfiafC+0QJanGLMPTBWLrJm/QPauuchy0UXh8B6H5o9VA8BAzk0iYievt6mNp6gfaqA==" + }, + "is-whitespace-character": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", + "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-word-character": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", + "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "requires": { + "punycode": "2.x.x" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "iterall": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", + "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" + }, + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "requires": { + "merge-stream": "^1.0.1" + } + }, + "jimp": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.6.4.tgz", + "integrity": "sha512-WQVMoNhkcq/fgthZOWeMdIguCVPg+t4PDFfSxvbNcrECwl8eq3/Ou2whcFWWjyW45m43yAJEY2UT7acDKl6uSQ==", + "requires": { + "@babel/polyfill": "^7.0.0", + "@jimp/custom": "^0.6.4", + "@jimp/plugins": "^0.6.4", + "@jimp/types": "^0.6.4", + "core-js": "^2.5.7" + } + }, + "joi": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", + "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==", + "requires": { + "hoek": "4.x.x", + "isemail": "3.x.x", + "topo": "2.x.x" + } + }, + "jpeg-js": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.6.tgz", + "integrity": "sha512-MUj2XlMB8kpe+8DJUGH/3UJm4XpI8XEgZQ+CiHDeyrGoKPdW/8FJv6ku+3UiYm5Fz3CWaL+iXmD8Q4Ap6aC1Jw==" + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz", + "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==", + "requires": { + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" + } + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "requires": { + "package-json": "^4.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-bmfont": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", + "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + } + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "loader-fs-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", + "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "lodash.every": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.every/-/lodash.every-4.6.0.tgz", + "integrity": "sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=" + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "lodash.maxby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.maxby/-/lodash.maxby-4.6.0.tgz", + "integrity": "sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", + "optional": true + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "log-update": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.2.0.tgz", + "integrity": "sha512-KJ6zAPIHWo7Xg1jYror6IUDFJBq1bQ4Bi4wAEp2y/0ScjBBVi/g0thr0sUVhuvuXauWzczt7T2QHghPDNnKBuw==", + "optional": true, + "requires": { + "ansi-escapes": "^3.2.0", + "cli-cursor": "^2.1.0", + "wrap-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "optional": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "optional": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "optional": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "optional": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "optional": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "optional": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "optional": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "optional": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "optional": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "optional": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "requires": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + } + } + }, + "loglevel": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", + "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==" + }, + "lokijs": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.7.tgz", + "integrity": "sha512-2SqUV6JH4f15Z5/7LVsyadSUwHhZppxhujgy/VhVqiRYMGt5oaocb7fV/3JGjHJ6rTuEIajnpTLGRz9cJW/c3g==" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "longest-streak": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", + "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "requires": { + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "ltcdr": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltcdr/-/ltcdr-2.2.1.tgz", + "integrity": "sha1-Wrh60dTB2rjowIu/A37gwZAih88=" + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", + "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==" + }, + "markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "requires": { + "buffer-alloc": "^1.1.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-util-compact": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz", + "integrity": "sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==", + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "mdast-util-definitions": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.4.tgz", + "integrity": "sha512-HfUArPog1j4Z78Xlzy9Q4aHLnrF/7fb57cooTHypyGoe2XFNbcx/kWZDoOz+ra8CkUzvg3+VHV434yqEd1DRmA==", + "requires": { + "unist-util-visit": "^1.0.0" + } + }, + "mdast-util-to-hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz", + "integrity": "sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA==", + "requires": { + "collapse-white-space": "^1.0.0", + "detab": "^2.0.0", + "mdast-util-definitions": "^1.2.0", + "mdurl": "^1.0.1", + "trim": "0.0.1", + "trim-lines": "^1.0.0", + "unist-builder": "^1.0.1", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.0", + "xtend": "^4.0.1" + } + }, + "mdast-util-to-nlcst": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.3.tgz", + "integrity": "sha512-hPIsgEg7zCvdU6/qvjcR6lCmJeRuIEpZGY5xBV+pqzuMOvQajyyF8b6f24f8k3Rw8u40GwkI3aAxUXr3bB2xag==", + "requires": { + "nlcst-to-string": "^2.0.0", + "repeat-string": "^1.5.2", + "unist-util-position": "^3.0.0", + "vfile-location": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.6.tgz", + "integrity": "sha512-868pp48gUPmZIhfKrLbaDneuzGiw3OTDjHc5M1kAepR2CWBJ+HpEsm252K4aXdiP5coVZaJPOqGtVU6Po8xnXg==" + }, + "mdast-util-toc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-2.1.0.tgz", + "integrity": "sha512-ove/QQWSrYOrf9G3xn2MTAjy7PKCtCmm261wpQwecoPAsUtkihkMVczxFqil7VihxgSz4ID9c8bBTsyXR30gQg==", + "requires": { + "github-slugger": "^1.1.1", + "mdast-util-to-string": "^1.0.2", + "unist-util-visit": "^1.1.0" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "meant": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", + "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memoize-one": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", + "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "merge-anything": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-2.4.1.tgz", + "integrity": "sha512-dYOIAl9GFCJNctSIHWOj9OJtarCjsD16P8ObCl6oxrujAG+kOvlwJuOD9/O9iYZ9aTi1RGpGTG9q9etIvuUikQ==", + "requires": { + "is-what": "^3.3.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "merge2": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "mini-css-extract-plugin": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz", + "integrity": "sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w==", + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "mini-svg-data-uri": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.1.3.tgz", + "integrity": "sha512-EeKOmdzekjdPe53/GdxmUpNgDQFkNeSte6XkJmOBt4BfWL6FQ9G9RtLNh+JMjFS3LhdpSICMIkZdznjiecASHQ==" + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mitt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", + "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "mozjpeg": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-6.0.1.tgz", + "integrity": "sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==", + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.1.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "name-all-modules-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/name-all-modules-plugin/-/name-all-modules-plugin-1.0.1.tgz", + "integrity": "sha1-Cr+2rYNXGLn7Te8GdOBmV6lUN1w=" + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "napi-build-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", + "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, + "neon-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/neon-js/-/neon-js-1.1.2.tgz", + "integrity": "sha1-r4XY4ruAmc/H9v4laolqVGSwBiM=" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "nlcst-to-string": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-2.0.3.tgz", + "integrity": "sha512-OY2QhGdf6jpYfHqS4vJwqF7aIBZkaMjMUkcHcskMPitvXLuYNGdQvgVWI/5yKwkmIdmhft3ounSJv+Re2yydng==" + }, + "node-abi": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.11.0.tgz", + "integrity": "sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g==", + "requires": { + "semver": "^5.4.1" + } + }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-eta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-eta/-/node-eta-0.9.0.tgz", + "integrity": "sha1-n7CwmbzSoCGUDmA8ZCVNwAPZp6g=" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "node-releases": { + "version": "1.1.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.27.tgz", + "integrity": "sha512-9iXUqHKSGo6ph/tdXVbHFbhRVQln4ZDTIBJCzsa90HimnBYc5jw8RWYt4wBYFHehGyC3koIz5O4mb2fHrbPOuA==", + "requires": { + "semver": "^5.3.0" + } + }, + "noms": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", + "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "~1.0.31" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "null-loader": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", + "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-fit-images": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/object-fit-images/-/object-fit-images-3.2.4.tgz", + "integrity": "sha512-G+7LzpYfTfqUyrZlfrou/PLLLAPNC52FTy5y1CBywX+1/FkxIloOyQXBmZ3Zxa2AWO+lMF0JTuvqbr7G5e5CWg==" + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", + "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.11.0", + "function-bind": "^1.1.1", + "has": "^1.0.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "requires": { + "mimic-fn": "^2.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + } + } + }, + "opentracing": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.4.tgz", + "integrity": "sha512-nNnZDkUNExBwEpb7LZaeMeQgvrlO8l4bgY/LvGNZCR0xG/dGWqHqjKrAmR5GUoYo0FIz38kxasvA1aevxWs2CA==" + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-filter-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", + "requires": { + "arch": "^2.1.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "requires": { + "p-timeout": "^1.1.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, + "p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=" + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "requires": { + "retry": "^0.12.0" + } + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "dependencies": { + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + } + } + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + } + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-english": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/parse-english/-/parse-english-4.1.2.tgz", + "integrity": "sha512-+PBf+1ifxqJlOpisODiKX4A8wBEgWm4goMvDB5O9zx/cQI58vzHTZeWFbAgCF9fUXRl8/YdINv1cfmfIRR1acg==", + "requires": { + "nlcst-to-string": "^2.0.0", + "parse-latin": "^4.0.0", + "unist-util-modify-children": "^1.0.0", + "unist-util-visit-children": "^1.0.0" + } + }, + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-headers": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", + "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", + "requires": { + "for-each": "^0.3.3", + "string.prototype.trim": "^1.1.2" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-latin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-4.2.0.tgz", + "integrity": "sha512-b8PvsA1Ohh7hIQwDDy6kSjx3EbcuR3oKYm5lC1/l/zIB6mVVV5ESEoS1+Qr5+QgEGmp+aEZzc+D145FIPJUszw==", + "requires": { + "nlcst-to-string": "^2.0.0", + "unist-util-modify-children": "^1.0.0", + "unist-util-visit-children": "^1.0.0" + } + }, + "parse-numeric-range": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", + "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parse-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz", + "integrity": "sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==", + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "parse-url": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz", + "integrity": "sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==", + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^3.3.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "requires": { + "@types/node": "*" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "physical-cpu-count": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", + "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" + }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "requires": { + "pngjs": "^3.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + } + } + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + }, + "pngquant-bin": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-5.0.2.tgz", + "integrity": "sha512-OLdT+4JZx5BqE1CFJkrvomYV0aSsv6x2Bba+aWaVc0PMfWlE+ZByNKYAdKeIqsM4uvW1HOSEHnf8KcOnykPNxA==", + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.1", + "execa": "^0.10.0", + "logalot": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "pnp-webpack-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg==", + "requires": { + "ts-pnp": "^1.1.2" + } + }, + "portfinder": { + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz", + "integrity": "sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ==", + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", + "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-flexbugs-fixes": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.3.1.tgz", + "integrity": "sha512-9y9kDDf2F9EjKX6x9ueNa5GARvsUbXw4ezH8vXItXHwKzljbu8awP7t5dCaabKYm18Vs1lo5bKQcnc0HkISt+w==", + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", + "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^0.4.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + } + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" + }, + "potrace": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.2.tgz", + "integrity": "sha512-dNcUBapRgPkiv3j+70+rSlf0whtJJqEszC04g9a/Ll3p6kA7QVRV1Vsi3jg22voJr2jA9x9fjPbz5MdD+ngbUg==", + "requires": { + "jimp": "^0.6.4" + } + }, + "prebuild-install": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz", + "integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.2.7", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "prismjs": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz", + "integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==", + "requires": { + "clipboard": "^2.0.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "probe-image-size": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-4.1.1.tgz", + "integrity": "sha512-42LqKZqTLxH/UvAZ2/cKhAsR4G/Y6B7i7fI2qtQu9hRBK4YjS6gqO+QRtwTjvojUx4+/+JuOMzLoFyRecT9qRw==", + "requires": { + "any-promise": "^1.3.0", + "deepmerge": "^4.0.0", + "inherits": "^2.0.3", + "next-tick": "^1.0.0", + "request": "^2.83.0", + "stream-parser": "~0.3.1" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prompts": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "property-information": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-4.2.0.tgz", + "integrity": "sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ==", + "requires": { + "xtend": "^4.0.1" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "protocols": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz", + "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==" + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + } + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "react": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", + "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-dev-utils": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-4.2.3.tgz", + "integrity": "sha512-uvmkwl5uMexCmC0GUv1XGQP0YjfYePJufGg4YYiukhqk2vN1tQxwWJIBERqhOmSi80cppZg8mZnPP/kOMf1sUQ==", + "requires": { + "address": "1.0.3", + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "cross-spawn": "5.1.0", + "detect-port-alt": "1.1.3", + "escape-string-regexp": "1.0.5", + "filesize": "3.5.11", + "global-modules": "1.0.0", + "gzip-size": "3.0.0", + "inquirer": "3.3.0", + "is-root": "1.0.0", + "opn": "5.1.0", + "react-error-overlay": "^3.0.0", + "recursive-readdir": "2.2.1", + "shell-quote": "1.6.1", + "sockjs-client": "1.1.4", + "strip-ansi": "3.0.1", + "text-table": "0.2.0" + }, + "dependencies": { + "address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "detect-port-alt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.3.tgz", + "integrity": "sha1-pNLwYddXoDTs83xRQmCph1DysTE=", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "react-dom": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", + "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.15.0" + }, + "dependencies": { + "scheduler": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "react-error-overlay": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-3.0.0.tgz", + "integrity": "sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==" + }, + "react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, + "react-helmet": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-5.2.1.tgz", + "integrity": "sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA==", + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.5.4", + "react-fast-compare": "^2.0.2", + "react-side-effect": "^1.1.0" + } + }, + "react-hot-loader": { + "version": "4.12.11", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.11.tgz", + "integrity": "sha512-ySsg1hPwr/5dkZCJVp1nZRbwbpbEQ+3e2+bn/D681Wvr9+o+5bLKkTGq0TXskj8HgCS3ScysXddOng9Cg+JKzw==", + "requires": { + "fast-levenshtein": "^2.0.6", + "global": "^4.3.0", + "hoist-non-react-statics": "^3.3.0", + "loader-utils": "^1.1.0", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "react-is": { + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.3.tgz", + "integrity": "sha512-Y4rC1ZJmsxxkkPuMLwvKvlL1Zfpbcu+Bf4ZigkHup3v9EfdYhAlWAaVyA19olXq2o2mGn0w+dFKvk3pVVlYcIA==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-reconciler": { + "version": "0.20.4", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.20.4.tgz", + "integrity": "sha512-kxERc4H32zV2lXMg/iMiwQHOtyqf15qojvkcZ5Ja2CPkjVohHw9k70pdDBwrnQhLVetUJBSYyqU3yqrlVTOajA==", + "optional": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.6" + } + }, + "react-side-effect": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.1.5.tgz", + "integrity": "sha512-Z2ZJE4p/jIfvUpiUMRydEVpQRf2f8GMHczT6qLcARmX7QRb28JDBTpnM2g/i5y/p7ZDEXYGHWg0RbhikE+hJRw==", + "requires": { + "exenv": "^1.2.1", + "shallowequal": "^1.0.1" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-chunk": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", + "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", + "requires": { + "pify": "^4.0.1", + "with-open-file": "^0.1.6" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rebass": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/rebass/-/rebass-4.0.5.tgz", + "integrity": "sha512-8MZngk/AmbC8u8pGmI1WelbsKYjmN9Z91C11G4ESB9QZnoppWsI+OAqio1/4/l6dxHmwZ/hR8Q4UApF+IVEprA==", + "requires": { + "reflexbox": "^4.0.5" + } + }, + "recursive-readdir": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.1.tgz", + "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=", + "requires": { + "minimatch": "3.0.3" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "requires": { + "brace-expansion": "^1.0.0" + } + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "redux": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz", + "integrity": "sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, + "reflexbox": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/reflexbox/-/reflexbox-4.0.5.tgz", + "integrity": "sha512-SFWlrlKusgQVqjEimlLGNls3khjMlaTLrrF1H7YY7FfXv/mKK5mREDOW4l95D6Qa1kGoyM3hF+H5RLb3N6bCCA==", + "requires": { + "@emotion/core": "^10.0.0", + "@emotion/styled": "^10.0.0", + "@styled-system/css": "^5.0.0", + "@styled-system/should-forward-prop": "^5.0.0", + "react": "^16.8.6", + "styled-system": "^5.0.0" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp-tree": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", + "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==" + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, + "regexpu-core": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "^1.0.1" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "relay-runtime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-2.0.0.tgz", + "integrity": "sha512-o/LPFHTI6+3FLJXM3Ec4N6hzkKYILVHYRJThNX0UQlMnqjTVPR6NO4qFE2QzzEiUS+lys+qfnvBzSmNbSh1zWQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "fbjs": "^1.0.0" + } + }, + "remark": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", + "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "requires": { + "remark-parse": "^6.0.0", + "remark-stringify": "^6.0.0", + "unified": "^7.0.0" + }, + "dependencies": { + "remark-stringify": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", + "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "unified": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", + "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "requires": { + "@types/unist": "^2.0.0", + "@types/vfile": "^3.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^3.0.0", + "x-is-string": "^0.1.0" + } + } + } + }, + "remark-parse": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", + "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-retext": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-3.1.3.tgz", + "integrity": "sha512-UujXAm28u4lnUvtOZQFYfRIhxX+auKI9PuA2QpQVTT7gYk1OgX6o0OUrSo1KOa6GNrFX+OODOtS5PWIHPxM7qw==", + "requires": { + "mdast-util-to-nlcst": "^3.2.0" + } + }, + "remark-stringify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-5.0.0.tgz", + "integrity": "sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w==", + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retext-english": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/retext-english/-/retext-english-3.0.3.tgz", + "integrity": "sha512-qltUsSjHMvCvpAm90qRvzK1DEBOnhSK3tUQk5aHFCBtiMHccp6FhlCH0mQ9vFcBf5BsG7GEBdPysTlY3g9Lchg==", + "requires": { + "parse-english": "^4.0.0", + "unherit": "^1.0.4" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize-html": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.20.1.tgz", + "integrity": "sha512-txnH8TQjaQvg2Q0HY06G6CDJLVYCpbnxrdO0WN8gjCKaU5J0KbyGYhZxx5QJg3WLZ1lB7XU9kDkfrCXUozqptA==", + "requires": { + "chalk": "^2.4.1", + "htmlparser2": "^3.10.0", + "lodash.clonedeep": "^4.5.0", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.mergewith": "^4.6.1", + "postcss": "^7.0.5", + "srcset": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "scheduler": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "optional": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "scroll-behavior": { + "version": "0.9.10", + "resolved": "https://registry.npmjs.org/scroll-behavior/-/scroll-behavior-0.9.10.tgz", + "integrity": "sha512-JVJQkBkqMLEM4ATtbHTKare97zhz/qlla9mNttFYY/bcpyOb4BuBGEQ/N9AQWXvshzf6zo9jP60TlphnJ4YPoQ==", + "requires": { + "dom-helpers": "^3.2.1", + "invariant": "^2.2.2" + } + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "~2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selfsigned": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "requires": { + "semver": "^5.0.3" + } + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "requires": { + "semver": "^5.3.0" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.8.0.tgz", + "integrity": "sha512-3tHgtF4OzDmeKYj6V9nSyceRS0UJ3C7VqyD2Yj28vC/z2j6jG5FmFGahOKMD9CrglxTm3tETr87jEypaYV8DUg==" + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-compare": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/shallow-compare/-/shallow-compare-1.2.2.tgz", + "integrity": "sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg==" + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "sharp": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.22.1.tgz", + "integrity": "sha512-lXzSk/FL5b/MpWrT1pQZneKe25stVjEbl6uhhJcTULm7PhmJgKKRbTDM/vtjyUuC/RLqL2PRyC4rpKwbv3soEw==", + "requires": { + "color": "^3.1.1", + "detect-libc": "^1.0.3", + "fs-copy-file-sync": "^1.1.1", + "nan": "^2.13.2", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.0", + "semver": "^6.0.0", + "simple-get": "^3.0.3", + "tar": "^4.4.8", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "sift": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/sift/-/sift-5.1.0.tgz", + "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "signedsource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", + "integrity": "sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=" + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.0.3.tgz", + "integrity": "sha512-Wvre/Jq5vgoz31Z9stYWPLn0PqRqmBDpFSdypAnHu5AvRVCYPRYGnvryNLiXu8GOBNDH82J2FRHUGMjjHUpXFw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sisteransi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", + "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.3.1", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.2.0", + "socket.io-parser": "~3.3.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "requires": { + "sort-keys": "^1.0.0" + }, + "dependencies": { + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "space-separated-tokens": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz", + "integrity": "sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA==" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "requires": { + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "srcset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", + "integrity": "sha1-pWad4StC87HV6D7QPHEEb8SPQe8=", + "requires": { + "array-uniq": "^1.0.2", + "number-is-nan": "^1.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" + }, + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" + }, + "state-toggle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", + "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "requires": { + "debug": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "optional": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "optional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-similarity": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-1.2.2.tgz", + "integrity": "sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==", + "requires": { + "lodash.every": "^4.6.0", + "lodash.flattendeep": "^4.4.0", + "lodash.foreach": "^4.5.0", + "lodash.map": "^4.6.0", + "lodash.maxby": "^4.6.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trim": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", + "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "strip-comments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", + "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", + "requires": { + "babel-extract-comments": "^1.0.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0" + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "style-loader": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", + "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" + } + }, + "style-to-object": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.2.3.tgz", + "integrity": "sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==", + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "styled-components": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.4.0.tgz", + "integrity": "sha512-xQ6vTI/0zNjZ1BBDRxyjvBddrxhQ3DxjeCdaLM1lSn5FDnkTOQgRkmWvcUiTajqc5nJqKVl+7sUioMqktD0+Zw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@emotion/is-prop-valid": "^0.8.1", + "@emotion/unitless": "^0.7.0", + "babel-plugin-styled-components": ">= 1", + "css-to-react-native": "^2.2.2", + "memoize-one": "^5.0.0", + "merge-anything": "^2.2.4", + "prop-types": "^15.5.4", + "react-is": "^16.6.0", + "stylis": "^3.5.0", + "stylis-rule-sheet": "^0.0.10", + "supports-color": "^5.5.0" + } + }, + "styled-system": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.1.tgz", + "integrity": "sha512-jTFstSW5valWSkCsJhgh0fqUFLi1hL+S7Zj6Q6Dj1VTkR77l8B3/mgtSROjjiIwRG9SLW1BsJWjLn8mTNiwqgg==", + "requires": { + "@styled-system/background": "^5.1.1", + "@styled-system/border": "^5.1.1", + "@styled-system/color": "^5.1.1", + "@styled-system/core": "^5.1.1", + "@styled-system/flexbox": "^5.1.1", + "@styled-system/grid": "^5.1.1", + "@styled-system/layout": "^5.1.1", + "@styled-system/position": "^5.1.1", + "@styled-system/shadow": "^5.1.1", + "@styled-system/space": "^5.1.1", + "@styled-system/typography": "^5.1.1", + "@styled-system/variant": "^5.1.1", + "object-assign": "^4.1.1" + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "stylis": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" + }, + "stylis-rule-sheet": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.33", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + } + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "tar": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "^0.7.0" + } + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "terser-webpack-plugin": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.4.tgz", + "integrity": "sha512-64IiILNQlACWZLzFlpzNaG0bpQ4ytaB7fwOsbpsdIV70AfLUmIGGeuKL0YV2WmtcrURjE2aOvHD4/lrFV3Rg+Q==", + "requires": { + "cacache": "^11.3.2", + "find-cache-dir": "^2.0.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^3.17.0", + "webpack-sources": "^1.3.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timm": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.6.2.tgz", + "integrity": "sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw==" + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" + }, + "tlds": { + "version": "1.203.1", + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.203.1.tgz", + "integrity": "sha512-7MUlYyGJ6rSitEZ3r1Q1QNV8uSIzapS8SmmhSusBuIc7uIxPPwsKllEP0GRp1NS6Ik6F+fRZvnjDWm3ecv2hDw==" + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "topo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", + "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "requires": { + "hoek": "4.x.x" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-lines": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.2.tgz", + "integrity": "sha512-3GOuyNeTqk3FAqc3jOJtw7FTjYl94XBR5aD9QnDbK/T4CA9sW/J0l9RoaRPE9wyPP7NF331qnHnvJFBJ+IDkmQ==" + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "trim-trailing-lines": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", + "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==" + }, + "trough": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", + "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==" + }, + "true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" + }, + "ts-pnp": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.2.tgz", + "integrity": "sha512-f5Knjh7XCyRIzoC/z1Su1yLLRrPrFCgtUAh/9fCSP6NKbATwpOL1+idQVXQokK9GRFURn/jYPGPfegIctwunoA==" + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "type-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-of/-/type-of-2.0.1.tgz", + "integrity": "sha1-5yoXQYllaOn2KDeNgW1pEvfyOXI=" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "ua-parser-js": { + "version": "0.7.20", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", + "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==" + }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + }, + "dependencies": { + "buffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.0.tgz", + "integrity": "sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + } + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "unherit": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", + "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", + "requires": { + "inherits": "^2.0.1", + "xtend": "^4.0.1" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + }, + "dependencies": { + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "requires": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + } + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unist-builder": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.4.tgz", + "integrity": "sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==", + "requires": { + "object-assign": "^4.1.0" + } + }, + "unist-util-generated": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.4.tgz", + "integrity": "sha512-SA7Sys3h3X4AlVnxHdvN/qYdr4R38HzihoEVY2Q2BZu8NHWDnw5OGcC/tXWjQfd4iG+M6qRFNIRGqJmp2ez4Ww==" + }, + "unist-util-is": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.3.tgz", + "integrity": "sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==" + }, + "unist-util-modify-children": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.4.tgz", + "integrity": "sha512-8iey9wkoB62C7Vi/8zcRUmi4b1f5AYKTwMkyEgLduo2D8+OY65RoSvbn6k9tVNri6qumXxAwXDVlXWQi0sENTw==", + "requires": { + "array-iterate": "^1.0.0" + } + }, + "unist-util-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", + "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==" + }, + "unist-util-remove-position": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz", + "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==", + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unist-util-select/-/unist-util-select-1.5.0.tgz", + "integrity": "sha1-qTwr6MD2U4J4A7gTMa3sKqJM2TM=", + "requires": { + "css-selector-parser": "^1.1.0", + "debug": "^2.2.0", + "nth-check": "^1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-children": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-1.1.3.tgz", + "integrity": "sha512-/GQ8KNRrG+qD30H76FZNc6Ok+8XTu8lxJByN5LnQ4eQfqxda2gP0CPsCX63BRB26ZRMNf6i1c+jlvNlqysEoFg==" + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "requires": { + "unist-util-is": "^3.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "^2.0.0" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "requires": { + "ci-info": "^1.5.0" + } + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "requires": { + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "url-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-4.1.1.tgz", + "integrity": "sha512-ViSDgDPNKkrQHI81GLCjdDN+Rsk3tAW/uLXlBOJxtcHzWZjta58Z0APXhfXzS89YszsheMnEvXeDXsWUB53wwA==", + "requires": { + "ip-regex": "^1.0.1", + "tlds": "^1.187.0" + }, + "dependencies": { + "ip-regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=" + } + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "requires": { + "pako": "^1.0.5" + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "v8-compile-cache": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==" + }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + } + } + }, + "vfile-location": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.5.tgz", + "integrity": "sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==" + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-namespaces": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.3.tgz", + "integrity": "sha512-r8sAtNmgR0WKOKOxzuSgk09JsHlpKlB+uHi937qypOu3PZ17UxPrierFKDye/uNHjNTTEshu5PId8rojIPj/tA==" + }, + "webpack": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz", + "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "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", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", + "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.2", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz", + "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==", + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.6", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.0", + "killable": "^1.0.1", + "loglevel": "^1.6.3", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.21", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.4", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.0", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "12.0.5" + }, + "dependencies": { + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + } + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "requires": { + "original": "^1.0.0" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "is-absolute-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.1.tgz", + "integrity": "sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-hot-middleware": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", + "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", + "requires": { + "ansi-html": "0.0.7", + "html-entities": "^1.2.0", + "querystring": "^0.2.0", + "strip-ansi": "^3.0.0" + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "requires": { + "lodash": "^4.17.5" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "webpack-stats-plugin": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-stats-plugin/-/webpack-stats-plugin-0.1.5.tgz", + "integrity": "sha1-KeXxLr/VMVjTHWVqETrB97hhedk=" + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "requires": { + "string-width": "^2.1.1" + } + }, + "with-open-file": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.6.tgz", + "integrity": "sha512-SQS05JekbtwQSgCYlBsZn/+m2gpn4zWsqpCYIrCHva0+ojXcnmUEPsBN6Ipoz3vmY/81k5PvYEWSxER2g4BTqA==", + "requires": { + "p-finally": "^1.0.0", + "p-try": "^2.1.0", + "pify": "^4.0.1" + }, + "dependencies": { + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "workbox-background-sync": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz", + "integrity": "sha512-ypLo0B6dces4gSpaslmDg5wuoUWrHHVJfFWwl1udvSylLdXvnrfhFfriCS42SNEe5lsZtcNZF27W/SMzBlva7Q==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-broadcast-cache-update": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.3.tgz", + "integrity": "sha512-pJl4lbClQcvp0SyTiEw0zLSsVYE1RDlCPtpKnpMjxFtu8lCFTAEuVyzxp9w7GF4/b3P4h5nyQ+q7V9mIR7YzGg==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-build": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-3.6.3.tgz", + "integrity": "sha512-w0clZ/pVjL8VXy6GfthefxpEXs0T8uiRuopZSFVQ8ovfbH6c6kUpEh6DcYwm/Y6dyWPiCucdyAZotgjz+nRz8g==", + "requires": { + "babel-runtime": "^6.26.0", + "common-tags": "^1.4.0", + "fs-extra": "^4.0.2", + "glob": "^7.1.2", + "joi": "^11.1.1", + "lodash.template": "^4.4.0", + "pretty-bytes": "^4.0.2", + "stringify-object": "^3.2.2", + "strip-comments": "^1.0.2", + "workbox-background-sync": "^3.6.3", + "workbox-broadcast-cache-update": "^3.6.3", + "workbox-cache-expiration": "^3.6.3", + "workbox-cacheable-response": "^3.6.3", + "workbox-core": "^3.6.3", + "workbox-google-analytics": "^3.6.3", + "workbox-navigation-preload": "^3.6.3", + "workbox-precaching": "^3.6.3", + "workbox-range-requests": "^3.6.3", + "workbox-routing": "^3.6.3", + "workbox-strategies": "^3.6.3", + "workbox-streams": "^3.6.3", + "workbox-sw": "^3.6.3" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "workbox-cache-expiration": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-cache-expiration/-/workbox-cache-expiration-3.6.3.tgz", + "integrity": "sha512-+ECNph/6doYx89oopO/UolYdDmQtGUgo8KCgluwBF/RieyA1ZOFKfrSiNjztxOrGJoyBB7raTIOlEEwZ1LaHoA==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-cacheable-response": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-3.6.3.tgz", + "integrity": "sha512-QpmbGA9SLcA7fklBLm06C4zFg577Dt8u3QgLM0eMnnbaVv3rhm4vbmDpBkyTqvgK/Ly8MBDQzlXDtUCswQwqqg==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.6.3.tgz", + "integrity": "sha512-cx9cx0nscPkIWs8Pt98HGrS9/aORuUcSkWjG25GqNWdvD/pSe7/5Oh3BKs0fC+rUshCiyLbxW54q0hA+GqZeSQ==" + }, + "workbox-google-analytics": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-3.6.3.tgz", + "integrity": "sha512-RQBUo/6SXtIaQTRFj4RQZ9e1gAl7D8oS5S+Hi173Kk70/BgJjzPwXpC5A249Jv5YfkCOLMQCeF9A27BiD0b0ig==", + "requires": { + "workbox-background-sync": "^3.6.3", + "workbox-core": "^3.6.3", + "workbox-routing": "^3.6.3", + "workbox-strategies": "^3.6.3" + } + }, + "workbox-navigation-preload": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-3.6.3.tgz", + "integrity": "sha512-dd26xTX16DUu0i+MhqZK/jQXgfIitu0yATM4jhRXEmpMqQ4MxEeNvl2CgjDMOHBnCVMax+CFZQWwxMx/X/PqCw==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-precaching": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-3.6.3.tgz", + "integrity": "sha512-aBqT66BuMFviPTW6IpccZZHzpA8xzvZU2OM1AdhmSlYDXOJyb1+Z6blVD7z2Q8VNtV1UVwQIdImIX+hH3C3PIw==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-range-requests": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-3.6.3.tgz", + "integrity": "sha512-R+yLWQy7D9aRF9yJ3QzwYnGFnGDhMUij4jVBUVtkl67oaVoP1ymZ81AfCmfZro2kpPRI+vmNMfxxW531cqdx8A==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-routing": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-3.6.3.tgz", + "integrity": "sha512-bX20i95OKXXQovXhFOViOK63HYmXvsIwZXKWbSpVeKToxMrp0G/6LZXnhg82ijj/S5yhKNRf9LeGDzaqxzAwMQ==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-strategies": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-3.6.3.tgz", + "integrity": "sha512-Pg5eulqeKet2y8j73Yw6xTgLdElktcWExGkzDVCGqfV9JCvnGuEpz5eVsCIK70+k4oJcBCin9qEg3g3CwEIH3g==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-streams": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-3.6.3.tgz", + "integrity": "sha512-rqDuS4duj+3aZUYI1LsrD2t9hHOjwPqnUIfrXSOxSVjVn83W2MisDF2Bj+dFUZv4GalL9xqErcFW++9gH+Z27w==", + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-sw": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-3.6.3.tgz", + "integrity": "sha512-IQOUi+RLhvYCiv80RP23KBW/NTtIvzvjex28B8NW1jOm+iV4VIu3VXKXTA6er5/wjjuhmtB28qEAUqADLAyOSg==" + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + } + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xstate": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.6.7.tgz", + "integrity": "sha512-mqgtH6BXOgjOHVDxZPyW/h6QUC5kfEggh5IN8uOitjzrdCScE/a/cwcRvgcH8CGAXYReDNvasOKD0aFBWAZ1fg==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yaml-loader": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/yaml-loader/-/yaml-loader-0.5.0.tgz", + "integrity": "sha512-p9QIzcFSNm4mCw/m5NdyMfN4RE4aFZJWRRb01ERVNGCym8VNbKtw3OYZXnvUIkim6U/EjqE/2yIh9F/msShH9A==", + "requires": { + "js-yaml": "^3.5.2" + } + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "^4.1.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "yoga-layout-prebuilt": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.9.3.tgz", + "integrity": "sha512-9SNQpwuEh2NucU83i2KMZnONVudZ86YNcFk9tq74YaqrQfgJWO3yB9uzH1tAg8iqh5c9F5j0wuyJ2z72wcum2w==", + "optional": true + }, + "yurnalist": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/yurnalist/-/yurnalist-1.0.5.tgz", + "integrity": "sha512-EuLjqX3Q15iVM0UtZa5Ju536uRmklKd2kKhdE5D5fIh8RZmh+pJ8c6wj2oGo0TA+T/Ii2o79cIHCTMfciW8jlA==", + "requires": { + "babel-runtime": "^6.26.0", + "chalk": "^2.1.0", + "cli-table3": "^0.5.1", + "debug": "^4.1.0", + "deep-equal": "^1.0.1", + "detect-indent": "^5.0.0", + "inquirer": "^6.2.0", + "invariant": "^2.2.0", + "is-builtin-module": "^3.0.0", + "is-ci": "^2.0.0", + "leven": "^2.0.0", + "loud-rejection": "^1.2.0", + "node-emoji": "^1.6.1", + "object-path": "^0.11.2", + "read": "^1.0.7", + "rimraf": "^2.5.0", + "semver": "^5.1.0", + "strip-ansi": "^5.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "zwitch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.4.tgz", + "integrity": "sha512-YO803/X+13GNaZB7fVopjvHH0uWQKgJkgKnU1YCjxShjKGVuN9PPHHW8g+uFDpkHpSTNi3rCMKMewIcbC1BAYg==" + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000000000..1cd5209d64bbc --- /dev/null +++ b/docs/package.json @@ -0,0 +1,44 @@ +{ + "name": "npm-cli-docs", + "description": "npm cli docs", + "version": "0.1.0", + "author": "Tanya Brassie ", + "license": "Artistic-2.0", + "repository": { + "type": "git", + "url": "https://github.com/npm/cli" + }, + "dependencies": { + "babel-plugin-styled-components": "^1.10.6", + "eslint": "^6.3.0", + "gatsby": "^2.13.73", + "gatsby-image": "^2.2.10", + "gatsby-plugin-catch-links": "^2.1.9", + "gatsby-plugin-manifest": "^2.2.6", + "gatsby-plugin-no-sourcemaps": "^2.1.1", + "gatsby-plugin-offline": "^2.2.7", + "gatsby-plugin-prefetch-google-fonts": "^1.4.3", + "gatsby-plugin-react-helmet": "^3.1.4", + "gatsby-plugin-root-import": "^2.0.5", + "gatsby-plugin-sharp": "^2.2.13", + "gatsby-plugin-styled-components": "^3.1.11", + "gatsby-remark-autolink-headers": "^2.1.10", + "gatsby-remark-prismjs": "^3.3.13", + "gatsby-source-filesystem": "^2.1.21", + "gatsby-transformer-remark": "^2.6.22", + "prismjs": "^1.17.1", + "prop-types": "^15.7.2", + "react": "^16.9.0", + "react-dom": "^16.9.0", + "react-helmet": "^5.2.1", + "rebass": "^4.0.5", + "styled-components": "^4.4.0" + }, + "scripts": { + "develop": "gatsby develop", + "start": "npm run develop", + "build": "gatsby build", + "build:static": "GATSBY_IS_STATIC=true gatsby build --prefix-paths", + "serve": "gatsby serve" + } +} diff --git a/docs/src/components/Accordion.js b/docs/src/components/Accordion.js new file mode 100644 index 0000000000000..e7086f4ec09aa --- /dev/null +++ b/docs/src/components/Accordion.js @@ -0,0 +1,57 @@ +import React from 'react' +import styled from 'styled-components' +import downCarrot from '../images/down-carrot.svg' +import upCarrot from '../images/up-carrot.svg' + +const SectionButton = styled.button` + outline: none; + background-color: transparent; + cursor: pointer; + color: red; + border: none; + font-size: 18px; + font-weight: bold; + padding: 5px 0; + transition: opacity .5s; + + &:after { + background: center / contain no-repeat url(${(props) => props.isOpen ? upCarrot : downCarrot}); + content: ''; + height: 11px; + width: 28px; + display: inline-block; + } + + &:hover { + opacity: .6; + } +` + +class Accordion extends React.Component { + constructor (props) { + super(props) + this.state = { + isOpen: true + } + this.onHide = this.onHide.bind(this) + } + + onHide () { + this.setState({isOpen: !this.state.isOpen}) + } + + render () { + return ( +
+ {this.props.section} + {this.state.isOpen && +
+ {this.props.children} +
+ } +
+ ) + } +} + +export default Accordion diff --git a/docs/src/components/Button.js b/docs/src/components/Button.js new file mode 100644 index 0000000000000..f8372ba7cd512 --- /dev/null +++ b/docs/src/components/Button.js @@ -0,0 +1,22 @@ +import {Link} from 'gatsby' +import {colors} from '../theme' +import styled from 'styled-components' + +export const LinkButton = styled(Link)` + background-color: ${colors.red}; + color: ${colors.white}; + font-size: 20px; + border-radius: 1px; + padding: 20px; + box-shadow: 8px 8px 0 rgba(251,59,73,.2); + text-decoration: none; + text-align: center; + display: inline-block; + min-width: 180px; + font-weight: 700; + transition: opacity .5s; + + &:hover { + opacity: .8; + } +` diff --git a/docs/src/components/DocLinks.js b/docs/src/components/DocLinks.js new file mode 100644 index 0000000000000..27c85582e13bf --- /dev/null +++ b/docs/src/components/DocLinks.js @@ -0,0 +1,74 @@ +import React from 'react' +import styled from 'styled-components' +import {StaticQuery, graphql} from 'gatsby' +import {Flex} from 'rebass' +import {SidebarLink} from './links' +import Accordion from './Accordion' + +const IS_STATIC = process.env.GATSBY_IS_STATIC + +const LinkDesc = styled.span` + font-size: 11px; + line-height: 1.5; + text-transform: lowercase; + display: block; + font-weight: 400; + color: ${(props) => props.theme.colors.darkGray}; +` + +const DocLinks = ({data}) => { + const linkInfo = data.allMarkdownRemark.nodes + const sections = ['cli-commands', 'configuring-npm', 'using-npm'] + let sortedData = {} + + sections.map((section) => ( + sortedData[section] = linkInfo.filter(function (item) { + return item.frontmatter.section === section + }) + )) + + return sections.map((section, index) => ( + + {sortedData[section].map((linkData, index) => { + const title = section === 'cli-commands' + ? linkData.frontmatter.title.replace(/(npm-)+([a-zA-Z\\.-]*)/, 'npm $2') + : linkData.frontmatter.title + + return ( + + + {title} + {linkData.frontmatter.description} + + + ) + }) + } + + )) +} + +export default props => ( + } + /> +) diff --git a/docs/src/components/FoundTypo.js b/docs/src/components/FoundTypo.js new file mode 100644 index 0000000000000..b92f9a09cfd54 --- /dev/null +++ b/docs/src/components/FoundTypo.js @@ -0,0 +1,23 @@ +import React from 'react' +import styled from 'styled-components' + +const Container = styled.div` + margin: 80px 0; + border-top: 1px solid black; + padding: 20px 0; +` + +const FoundTypo = () => { + return ( + +

👀 Found a typo? Let us know!

+

The current stable version of npm is here. To upgrade, run: npm install npm@latest -g

+

+ To report bugs or submit feature requests for the docs, please post here. + Submit npm issues here. +

+
+ ) +} + +export default FoundTypo diff --git a/docs/src/components/MobileSidebar.js b/docs/src/components/MobileSidebar.js new file mode 100644 index 0000000000000..13835e6aa78a1 --- /dev/null +++ b/docs/src/components/MobileSidebar.js @@ -0,0 +1,33 @@ +import React from 'react' +import styled from 'styled-components' +import DocLinks from './DocLinks' +import {} from '../components/Sidebar' + +const MobileContainer = styled.div` + border-left: 1px solid #86838333; + border-bottom: 1px solid #86838333; + padding: 30px 30px 200px; + width: 340px; + display: block; + height: calc(100vh - 54px); + overflow: scroll; + position: fixed; + top: 54px; + right: 0px; + background-color: ${(props) => props.theme.colors.white}; + z-index: 100; + + @media screen and (min-width: ${(props) => props.theme.breakpoints.TABLET}) { + display: none; + } +` + +const MobileSidebar = () => { + return ( + + + + ) +} + +export default MobileSidebar diff --git a/docs/src/components/Sidebar.js b/docs/src/components/Sidebar.js new file mode 100644 index 0000000000000..582f51fbc8363 --- /dev/null +++ b/docs/src/components/Sidebar.js @@ -0,0 +1,30 @@ +import React from 'react' +import styled from 'styled-components' +import DocLinks from './DocLinks' + +const Container = styled.nav` + border-right: 1px solid #86838333; + padding: 30px; + height: 100vh; + display: none; + width: 380px; + position: sticky; + overflow: scroll; + padding-bottom: 200px; + top: 54px; + background-color: ${(props) => props.theme.colors.white}; + + @media screen and (min-width: ${(props) => props.theme.breakpoints.TABLET}) { + display: block; + } +` + +const Sidebar = () => { + return ( + + + + ) +} + +export default Sidebar diff --git a/docs/src/components/home/DarkBlock.js b/docs/src/components/home/DarkBlock.js new file mode 100644 index 0000000000000..aebebcddcdf71 --- /dev/null +++ b/docs/src/components/home/DarkBlock.js @@ -0,0 +1,35 @@ +import React from 'react' +import styled from 'styled-components' +import {Flex, Box} from 'rebass' +import {LinkButton} from '../Button' + +const Container = styled(Flex)` + background-color: ${(props) => props.theme.colors.purpleBlack}; + color: ${(props) => props.theme.colors.white}; +` + +const ContentWrapper = styled(Flex)` + max-width: 640px; + align-items: center; +` + +const Text = styled.p` + line-height: 1.5; + text-align: center; +` + +const DarkBlock = () => { + return ( + + + + Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod Lorem ipsum dolor sit amet, tetuer adipiscing elit, sed diam nonummy nibmod + Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod Lorem ipsum dolor sit amet, tetuer adipiscing elit, sed diam nonummy nibmod + + read docs + + + ) +} + +export default DarkBlock diff --git a/docs/src/components/home/FeatureCard.js b/docs/src/components/home/FeatureCard.js new file mode 100644 index 0000000000000..744a01bb7224f --- /dev/null +++ b/docs/src/components/home/FeatureCard.js @@ -0,0 +1,39 @@ +import React from 'react' +import styled from 'styled-components' +import {Flex, Image, Text} from 'rebass' + +const Card = styled(Flex)` + background-color: #f2f2f2ab; + box-shadow: 5px 5px 1px 1px ${(props) => props.theme.colors.red}; + border-radius: 2px; +` + +const Desc = styled.p` + padding: 5px 0; + font-size: 16px; +` + +const Title = styled(Text)` + font-size: 24px; + font-weight: 500; + text-shadow: 1px 2px 2px #f061df6e; +` + +const Icon = styled(Image)` + width: 110px; + flex-shrink: 0; +` + +const FeatureCard = ({icon, text, title}) => { + return ( + + + + {title} + {text} + + + ) +} + +export default FeatureCard diff --git a/docs/src/components/home/Features.js b/docs/src/components/home/Features.js new file mode 100644 index 0000000000000..330beca867401 --- /dev/null +++ b/docs/src/components/home/Features.js @@ -0,0 +1,83 @@ +import React from 'react' +import styled from 'styled-components' +import FeatureCard from './FeatureCard' +import { FeatureLink } from '../links' +import { Flex } from 'rebass' +import rectangles from '../../images/background-rectangles.svg' +import terminalIcon from '../../images/terminal-icon.svg' +import networkIcon from '../../images/network-icon.svg' +import npmIcon from '../../images/npm-icon.png' +import managerIcon from '../../images/manager-icon.svg' + +const ContainerInner = styled(Flex)` + background: linear-gradient(84deg, #fb881799, #ff4b0199, #c1212799, #e02aff99); +` + +const Container = styled.div` + background: top / cover no-repeat url(${rectangles}); +` + +const ContentWrapper = styled(Flex)` + max-width: 640px; +` + +const featureTexts = { + textOne: 'Download, install, and configure.', + textTwo: 'All available npm commands.', + textThree: 'How npm things work.', + textFour: 'Publish your own public or private packages to the registry.' +} + +const featureTitles = { + titleOne: 'Getting Started', + titleTwo: 'Command Reference', + titleThree: 'Using npm', + titleFour: 'Publishing' +} + +const aStyle = { + color: '#231f20', + textDecoration: 'none' +} +const productsLink = `https://www.npmjs.com/products` + +const Features = () => { + return ( + + + + + + + + + + + + + + + + + + + ) +} + +export default Features diff --git a/docs/src/components/home/Footer.js b/docs/src/components/home/Footer.js new file mode 100644 index 0000000000000..851b8dd5652a7 --- /dev/null +++ b/docs/src/components/home/Footer.js @@ -0,0 +1,29 @@ +import React from 'react' +import boxes from '../../images/background-boxes.svg' +import styled from 'styled-components' +import {Flex, Box} from 'rebass' + +const Container = styled(Flex)` + background: center / cover no-repeat url(${boxes}); + height: 380px; + background-color: ${(props) => props.theme.colors.offWhite}; + ` + +const ContentWrapper = styled(Box)` + align-content: center; + width: 100%; + text-align: center; + background-color: ${(props) => props.theme.colors.white}; +` + +const Footer = () => { + return ( + + + Footer Text 🤪 + + + ) +} + +export default Footer diff --git a/docs/src/components/home/Terminal.js b/docs/src/components/home/Terminal.js new file mode 100644 index 0000000000000..20ebb0f73d455 --- /dev/null +++ b/docs/src/components/home/Terminal.js @@ -0,0 +1,120 @@ +import React from 'react' +import styled, {keyframes} from 'styled-components' +import {Flex, Box, Button as RebassButton} from 'rebass' +import closeX from '../../images/x.svg' +import {LinkButton} from '../Button' +import bracket from '../../images/bracket.svg' + +const TerminalBody = styled(Flex)` + background-color: ${(props) => props.theme.colors.purpleBlack}; + border: 2px solid ${(props) => props.theme.colors.purpleBlack}; + color: ${(props) => props.theme.colors.white}; + flex-direction: column; + max-width: 620px; + width: 100%; + height: 100%; + box-shadow: 0px 0px 17px 1px #dc3bc180; + border-radius: 2px; + top: ${(props) => props.top}; + left: ${(props) => props.left}; + right: 0; + position: absolute; +` + +const Top = styled(Flex)` + background-color: ${(props) => props.theme.colors.white}; + height: 18px; +` + +const SiteName = styled(Flex)` + font-size: 45px; + font-family: 'Inconsolata', sans-serif; + font-weight: 700; + letter-spacing: 5px; + text-shadow: 3px 2px 4px #abf1e04d; + + @media screen and (min-width: ${(props) => props.theme.breakpoints.TABLET}) { + font-size: 70px; + } +` + +const Bottom = styled(Flex)` + flex-direction: column; + padding: 30px; + + @media screen and (min-width: ${(props) => props.theme.breakpoints.TABLET}) { + font-size: 70px; + padding: 30px 50px; + + } +` + +const blink = keyframes` + 0% { + opacity: 0; + } + 50% { + opacity 1; + } + 100% { + opacity: 0; + } +` + +const Cursor = styled.span` + color: ${(props) => props.theme.colors.red}; + text-shadow: none; + opacity: 1; + animation: ${blink}; + animation-duration: 3s; + animation-iteration-count: infinite; + animation-fill-mode: both; +` + +const Bracket = styled.span` + background: center / contain no-repeat url(${bracket}); + width: 25px; + margin-right: 5px; + margin-top: 10px; +` + +const Text = styled.strong` + font-size: 15px; + font-weight: 400; + letter-spacing: 1px; + line-height: 1.4; + + @media screen and (min-width: ${(props) => props.theme.breakpoints.TABLET}) { + font-size: 18px; + } +` + +const ModalButton = styled(RebassButton)` + cursor: pointer; + background: center no-repeat url(${closeX}); + width: 14px; + height: 14px; +` + +const Terminal = ({onClose, top, left}) => { + return ( + + + + + + npm cli _ + + The intelligent package manager for the Node Javascript Platform. Install stuff and get coding! + + + + read docs + + + + + ) +} + +export default Terminal diff --git a/docs/src/components/home/Windows.js b/docs/src/components/home/Windows.js new file mode 100644 index 0000000000000..fcdfd0eed029a --- /dev/null +++ b/docs/src/components/home/Windows.js @@ -0,0 +1,73 @@ +import React from 'react' +import Terminal from './Terminal' +import styled from 'styled-components' + +const Container = styled.div` + position: relative; + height: 350px; + width: 80%; + margin: auto; + left: -4%; + + @media screen and (min-width: ${(props) => props.theme.breakpoints.TABLET}) { + height: 400px; + } +` + +class Windows extends React.Component { + constructor (props) { + super(props) + this.state = { + showTopTerminal: true, + showMiddleTerminal: true, + showBottomTerminal: true, + counter: 0 + } + this.onHide = this.onHide.bind(this) + } + + onHide (terminal) { + this.setState({ [terminal]: false, counter: this.state.counter + 1 }, () => { + if (this.state.counter === 3) { + this.setState({ + showTopTerminal: true, + showMiddleTerminal: true, + showBottomTerminal: true, + counter: 0 + }) + } + }) + } + + render () { + return ( + + {this.state.showTopTerminal && + this.onHide('showTopTerminal')} + top={'0%'} + left={'0%'} + /> + } + + {this.state.showMiddleTerminal && + this.onHide('showMiddleTerminal')} + top={'8%'} + left={'5%'} + /> + } + + {this.state.showBottomTerminal && + this.onHide('showBottomTerminal')} + top={'16%'} + left={'10%'} + /> + } + + ) + } +} + +export default Windows diff --git a/docs/src/components/home/cubes.js b/docs/src/components/home/cubes.js new file mode 100644 index 0000000000000..65a2b8bd953f2 --- /dev/null +++ b/docs/src/components/home/cubes.js @@ -0,0 +1,101 @@ +import styled, {css, keyframes} from 'styled-components' +import purpleCube from '../../images/purple-cube.svg' +import orangeCube from '../../images/orange-cube.svg' +import redCube from '../../images/red-cube.svg' +import purpleGradientCube from '../../images/purple-gradient-cube.svg' +import pinkGradientCube from '../../images/pink-gradient-cube.svg' + +const commonCubeStyles = css` + background-position: center; + background-repeat: no-repeat; + position: absolute; +` + +const wiggle = keyframes` + 0% { + transform: rotate(0deg); + } + 33% { + transform: rotate(8deg); + } + 100% { + transform: rotate(0deg); + } +` + +export const CubeTopLeft = styled.div` + ${commonCubeStyles}; + background-image: url(${purpleCube}); + height: 35px; + width: 35px; + top: 10%; + left: 8%; + + animation-name: ${wiggle}; + animation-duration: 2.5s; + animation-delay: .5s; + animation-iteration-count: infinite; + animation-fill-mode: both; + animation-timing-function: ease-in-out; +` + +export const CubeMiddleLeft = styled.span` + ${commonCubeStyles}; + background-image: url(${orangeCube}); + height: 30px; + width: 30px; + top: 40%; + left: 17%; + + animation-name: ${wiggle}; + animation-duration: 2.5s; + animation-iteration-count: infinite; + animation-fill-mode: both; + animation-timing-function: ease-in-out; +` + +export const CubeBottomLeft = styled.span` + ${commonCubeStyles}; + background-image: url(${redCube}); + height: 45px; + width: 45px; + top: 78%; + left: 12%; + + animation-name: ${wiggle}; + animation-duration: 3s; + animation-iteration-count: infinite; + animation-fill-mode: both; + animation-timing-function: ease-in-out; +` + +export const CubeBottomRight = styled.span` + ${commonCubeStyles}; + background-image: url(${pinkGradientCube}); + height: 40px; + width: 40px; + top: 70%; + right: 12%; + + animation-name: ${wiggle}; + animation-duration: 2.5s; + animation-iteration-count: infinite; + animation-delay: .3s; + animation-fill-mode: both; + animation-timing-function: ease-in-out; +` + +export const CubeTopRight = styled.span` + ${commonCubeStyles}; + background-image: url(${purpleGradientCube}); + height: 40px; + width: 40px; + top: 14%; + right: 12%; + + animation-name: ${wiggle}; + animation-duration: 3s; + animation-iteration-count: infinite; + animation-fill-mode: backwards; + animation-timing-function: ease-in-out; +` diff --git a/docs/src/components/home/hero.js b/docs/src/components/home/hero.js new file mode 100644 index 0000000000000..eb690b290de82 --- /dev/null +++ b/docs/src/components/home/hero.js @@ -0,0 +1,25 @@ +import React from 'react' +import styled from 'styled-components' +import Windows from './Windows' +import {Flex} from 'rebass' +import {CubeTopLeft, CubeMiddleLeft, CubeBottomLeft, CubeTopRight, CubeBottomRight} from './cubes' + +const Container = styled(Flex)` + background-color: ${(props) => props.theme.colors.offWhite}; + position: relative; +` + +const Hero = () => { + return ( + + + + + + + + + ) +} + +export default Hero diff --git a/docs/src/components/layout.js b/docs/src/components/layout.js new file mode 100644 index 0000000000000..5fab7b22a7dbc --- /dev/null +++ b/docs/src/components/layout.js @@ -0,0 +1,18 @@ +import React from 'react' +import Navbar from './Navbar' +import Sidebar from './Sidebar' +import {Flex, Box} from 'rebass' + +const Layout = ({children, showSidebar}) => { + return ( + + + + {showSidebar && } + {children} + + + ) +} + +export default Layout diff --git a/docs/src/components/links.js b/docs/src/components/links.js new file mode 100644 index 0000000000000..b0424c132cc0c --- /dev/null +++ b/docs/src/components/links.js @@ -0,0 +1,50 @@ +import {Link} from 'gatsby' +import styled, {css} from 'styled-components' + +const baseLinkStyles = css` + font-weight: 500; + text-decoration: none; + letter-spacing: .3px; + font-size: 14px; +` +const featureLinkStyles = css` + ${baseLinkStyles} + color: ${(props) => props.theme.colors.black}; + transition: opacity .5s + &:hover { + opacity: .9; + } +` + +const navLinkStyles = css` + ${baseLinkStyles}; + color: ${(props) => props.theme.colors.black}; + transition: opacity .5s; + margin: 0 10px; + + &:hover { + opacity: .5; + } +` +export const FeatureLink = styled(Link)` + ${featureLinkStyles} +` + +export const NavLink = styled(Link)` + ${navLinkStyles}; +` + +export const BasicNavLink = styled.a` + ${navLinkStyles}; +` + +export const SidebarLink = styled(Link)` + ${baseLinkStyles}; + color: ${(props) => props.theme.colors.red}; + padding: 10px; + transition: background-color .3s; + + &:hover { + background-color: ${(props) => props.theme.colors.lightPurple}; + } +` diff --git a/docs/src/components/navbar.js b/docs/src/components/navbar.js new file mode 100644 index 0000000000000..37356a6a47a05 --- /dev/null +++ b/docs/src/components/navbar.js @@ -0,0 +1,136 @@ +import React from 'react' +import styled from 'styled-components' +import {Flex, Image, Box} from 'rebass' +import cliLogo from '../images/cli-logo.svg' +import {Link} from 'gatsby' +import {NavLink, BasicNavLink} from './links' +import MobileSidebar from '../components/MobileSidebar' +import hamburger from '../images/hamburger.svg' +import hamburgerClose from '../images/hamburger-close.svg' + +const IS_STATIC = !!process.env.GATSBY_IS_STATIC + +const Container = styled(Flex)` + width: 100%; + border-bottom: 1px solid #86838333; + position: sticky; + top: 0; + background-color: ${(props) => props.theme.colors.white}; + z-index: 1; +` + +const Inner = styled(Flex)` + border-top: 3px solid; + border-image: linear-gradient(139deg, #fb8817, #ff4b01, #c12127, #e02aff) 3; + margin: auto; + height: 53px; + padding: 0 30px; + align-items: center; + width: 100%; +` + +const Logo = styled(Image)` + width: 120px; + padding: 0px 5px; + height: 18px; + vertical-align: middle; + display: inline-block; + transition: opacity .5s; + + &:hover { + opacity: .8; + } +` + +const Links = styled.ul` + display: none; + + @media screen and (min-width: ${(props) => props.theme.breakpoints.TABLET}) { + display: block; + margin-left: auto; + } +` + +const Heart = styled(Box)` + font-size: 15px; + display: inline-block; +` + +const Hamburger = styled.button` + border: none; + background: center no-repeat url(${(props) => props.isOpen ? hamburgerClose : hamburger}); + height: 30px; + width: 30px; + display: block; + margin-left: auto; + transition: opacity .5s; + cursor: pointer; + + &:hover { + opacity: .6; + } + + @media screen and (min-width: ${(props) => props.theme.breakpoints.TABLET}) { + display: none; + } +` + +class Navbar extends React.Component { + constructor (props) { + super(props) + this.state = { + value: null, + showMobileNav: false + } + this.enableBody = this.enableBody.bind(this) + this.toggleNav = this.toggleNav.bind(this) + } + + componentDidMount () { + window.addEventListener('resize', () => { + this.enableBody() + this.setState({showMobileNav: false}) + }) + } + + componentWillUnmount () { + this.enableBody() + } + + enableBody () { + window.document.getElementsByTagName('body')[0].classList.remove('disabled-body') + } + + toggleNav () { + this.setState({showMobileNav: !this.state.showMobileNav}) + window.document.getElementsByTagName('body')[0].classList.toggle('disabled-body') + } + + render () { + return ( + + + + + + + + + docs + + npmjs.org + + + + + {this.state.showMobileNav && } + + ) + } +} + +export default Navbar diff --git a/docs/src/components/scripts.js b/docs/src/components/scripts.js new file mode 100644 index 0000000000000..54ad165400448 --- /dev/null +++ b/docs/src/components/scripts.js @@ -0,0 +1,23 @@ +import React from 'react' + +const IS_STATIC = process.env.GATSBY_IS_STATIC + +const Scripts = () => { + if (IS_STATIC) { + return ( + - - -
- diff --git a/html/index.html b/html/index.html deleted file mode 100644 index 32dd01a34f8ee..0000000000000 --- a/html/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - npm - JavaScript Package Manager - -

npm

- -

npm is a package manager for node. You can use it to install - and publish your node programs. It manages dependencies and does other cool stuff.

- -

Easy Zero Line Install

- -

Install Node.js
-(npm comes with it.)

- -

Because a one-line install is one too many.

- -

Fancy Install

- -
    -
  1. Get the code. -
  2. Do what the README - says to do. -
- -

There's a pretty thorough install script at -https://npmjs.org/install.sh

- -

For maximum security, make sure to thoroughly inspect every -program that you run on your computer!

- -

Other Cool Stuff

- - - - - diff --git a/html/n-64.png b/html/n-64.png deleted file mode 100644 index 994330a1a9b089b7b06c810c475f615d7bb39229..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?O3?zSk_}l@c*aCb)Tu)n=|NsAADcb2PP(<0& z#WAFUFzopr05*&s A#sB~S diff --git a/html/n-large.png b/html/n-large.png deleted file mode 100644 index 34008b23afce6c2e4b3487ec56b7f74893afaf6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K585o&?RN5XZRUpL{;1l9{+QR(*|NlzSPG5l{ zCY~;iAr*{oPc3C+Fce_eaJ&A6``3WH)J4J!7xMfCSRVRz%vRuNQdq;+1fn>a7#LjH YS5GYGxHQup$Yx;hboFyt=akR{018PYcK`qY diff --git a/html/npm-16.png b/html/npm-16.png deleted file mode 100644 index e97b01d1fc5a15b0ce155ef5b79ab522017d72fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|@}4e^Ar*|t7P*OjLW`ES{jXr; lH92tf<-){}!wNn%4EC)1zf4{2rVdof;OXk;vd$@?2>@7a7uNs) diff --git a/html/npm-256-square.png b/html/npm-256-square.png deleted file mode 100644 index b3556f93cc8f618abf3fba409d61b83e28526d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2940 zcmV-?3xo8DP)EX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8 zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH; zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_ z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(? z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$ z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9 zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o zKq~;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_ z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc* zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0 zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_ zfYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2 zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgYq4YG!XMxcgB zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_ zZ94aL3A#4AQM!e?+jYlFJ5+DSzi0S9#6BJCZ5(XZOGfi zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$< z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0 z70L*m6G6C?@k ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S? zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!$(^sg%jf zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ z>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExT zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38 zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k ztLNYS;`>X_Sp3-V3;B!Bzpi$kZ2>+AL0 z-Qkdu*JfzYOH1dds?t+c1)b!b00001bW%=J06^y0W&i*Hx=BPqRCodH)inWvK>&c! zp9DCpxQv7#02Y7jM|5{Y+U|Sy@@R-kCXGF3b-!*X5H>6xWk8EX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8 zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH; zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_ z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(? z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$ z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9 zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o zKq~;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_ z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc* zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0 zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_ zfYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2 zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgYq4YG!XMxcgB zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_ zZ94aL3A#4AQM!e?+jYlFJ5+DSzi0S9#6BJCZ5(XZOGfi zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$< z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0 z70L*m6G6C?@k ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S? zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!$(^sg%jf zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ z>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExT zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38 zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k ztLNYS;`>X_Sp3-V3;B!Bzpi*L_t(| z0qxGUp#m@fK*4;07MDR702_c2Xt0ivs96$scfD7|b3u|M%}N|79wz-H4zzsc#FDQK z00000001adCzTEWQq^foz_Dl2%h^#tZTaOsKxX~o8P5O!0000000000d|9gqpP>G=Qv00000fd27%SKU9-(*Xbg c00000LnN#iAW)e~f&c&j07*qoM6N<$g63?M!TEX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8 zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH; zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_ z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(? z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$ z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9 zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o zKq~;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_ z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc* zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0 zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_ zfYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2 zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgYq4YG!XMxcgB zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_ zZ94aL3A#4AQM!e?+jYlFJ5+DSzi0S9#6BJCZ5(XZOGfi zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$< z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0 z70L*m6G6C?@k ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S? zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!$(^sg%jf zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ z>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExT zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38 zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k ztLNYS;`>X_Sp3-V3;B!Bzpi$kY!kdjJH zbHe}t00DGTPE!Ct=GbNc002ixL_t(|0b>|)U=)l3K>~m-3WSs(0LD-RGT^|FItsvo zPz8>HPz8cu#_&`C0t2D|2B3~a1JqCe2QUFNKnn#l1*2dT001x^M1>3+`%3@-002ov JPDHLkV1h)^R-pg@ diff --git a/html/npm-fin.png b/html/npm-fin.png deleted file mode 100644 index 5174b98af861532deae62ed1c2f5ac4ec969d678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24623 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 diff --git a/html/npm-large.png b/html/npm-large.png deleted file mode 100644 index 59fed0014cb9f92dffdaedb39f8a377cc6146382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210523 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%0ADY2orf+>s0MF`_Fus%-V!pD&r~aR2~7 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%0A0z!oegc{@KM>h@r1Otc+rwMT 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 X;5VzA&ONBWUm-auWy!+FCa?bwd5iO7 diff --git a/html/npm-logo-white-trans.png b/html/npm-logo-white-trans.png deleted file mode 100644 index 531569a172f88c751b6adb04f8ac571529623cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85690 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 "; - position:absolute; - display:block; - opacity:0.5; - color:#f00; - margin:0 0 0 -2em; -} -abbr, acronym { - border-bottom:1px dotted #aaa; -} -kbd, code, pre { - font-family:monospace; - margin:0; - font-size:18px; - line-height:24px; - background:#eee; - outline:1px solid #ccc; -} -kbd code, kbd pre, kbd kbd, -pre code, pre pre, pre kbd, -code code, code pre, code kbd { outline: none } -.dollar::before { - content:"$ "; - display:inline; -} -p, ul, ol, dl, pre { - margin:30px 0; - line-height:30px; -} -hr { - margin:30px auto 29px; - width:66%; - height:1px; - background:#aaa; -} -pre { - display:block; -} -dd :first-child { - margin-top:0; -} - -body { - quotes:"“" "”" "‘" "’"; - width:666px; - margin:30px auto 120px; - font-family:Times New Roman, serif; - font-size:20px; - background:#fff; - line-height:30px; - color:#111; -} - -blockquote { - position:relative; - font-size:16px; - line-height:30px; - font-weight:bold; - width:85%; - margin:0 auto; -} -blockquote::before { - font-size:90px; - display:block; - position:absolute; - top:20px; - right:100%; - content:"“"; - padding-right:10px; - color:#ccc; -} -.source cite::before { - content:"— "; -} -.source { - padding-left:20%; - margin-top:30px; -} -.source cite span { - font-style:normal; -} -blockquote p { - margin-bottom:0; -} -.quote blockquote { - font-weight:normal; -} - -h1, h2, h3, h4, h5, h6, dt, #header { - font-family:serif; - font-size:20px; - font-weight:bold; -} -h2 { - background:#eee; -} -h1, h2 { - line-height:40px; -} - -i, em, cite { - font-style:italic; -} -b, strong { - font-weight:bold; -} -i, em, cite, b, strong, small { - line-height:28px; -} -small, .small, .small *, aside { - font-style:italic; - color:#669; - font-size:18px; -} -small a, .small a { - text-decoration:underline; -} -del { - text-decoration:line-through; -} -ins { - text-decoration:underline; -} -.alignright { display:block; float:right; margin-left:1em; } -.alignleft { display:block; float:left; margin-right:1em; } - -q:before, q q q:before, q q q q q:before, q q q q q q q:before { content:"“"; } -q q:before, q q q q:before, q q q q q q:before, q q q q q q q q:before { content:"‘"; } -q:after, q q q:after, q q q q q:after, q q q q q q q:after { content:"”"; } -q q:after, q q q q:after, q q q q q q:after, q q q q q q q q:after { content:"’"; } - -a { color:#00f; text-decoration:none; } -a:visited { color:#636; } -a:hover, a:active { color:#c00!important; text-decoration:underline; } - -h1 { - font-weight:bold; - background:#fff; -} -h1 a, h1 a:visited { - font-family:monospace; - font-size:60px; - color:#c00; - display:block; -} -h1 a:focus, h1 a:hover, h1 a:active { - color:#f00!important; - text-decoration:none; -} - -.navigation { - display:table; - width:100%; - margin:0 0 30px 0; - position:relative; -} -#nav-above { - margin-bottom:0; -} -.navigation .nav-previous { - display:table-cell; - text-align:left; - width:50%; -} -/* hang the » and « off into the margins */ -.navigation .nav-previous a:before, .navigation .nav-next a:after { - content: "«"; - display:block; - height:30px; - margin-bottom:-30px; - text-decoration:none; - margin-left:-15px; -} -.navigation .nav-next a:after { - content: "»"; - text-align:right; - margin-left:0; - margin-top:-30px; - margin-right:-15px; -} - - -.navigation .nav-next { - display:table-cell; - text-align:right; - width:50%; -} -.navigation a { - display:block; - width:100%; - height:100%; -} - -input, button, textarea { - border:0; - line-height:30px; -} -textarea { - height:300px; -} -input { - height:30px; - line-height:30px; -} -input.submit, input#submit, input.button, button, input[type=submit] { - cursor:hand; cursor:pointer; - outline:1px solid #ccc; -} - -#wrapper { - margin-bottom:90px; - position:relative; - z-index:1; - *zoom:1; - background:#fff; -} -#wrapper:after { - display:block; - content:"."; - visibility:hidden; - width:0; - height:0; - clear:both; -} - -.sidebar .xoxo > li { - float:left; - width:50%; -} -.sidebar li { - list-style:none; -} -.sidebar #elsewhere { - margin-left:-10%; - margin-right:-10%; -} -.sidebar #rss-links, .sidebar #twitter-feeds { - float:right; - clear:right; - width:20%; -} -.sidebar #comment { - clear:both; - float:none; - width:100%; -} -.sidebar #search { - clear:both; - float:none; - width:100%; -} -.sidebar #search h2 { - margin-left:40%; -} -.sidebar #search #s { - width:90%; - float:left; -} -.sidebar #search #searchsubmit { - width:10%; - float:right; -} -.sidebar * { - font-size:15px; - line-height:30px; -} - -#footer, #footer * { - text-align:center; - font-size:16px; - color:#ccc; - font-style:italic; - word-spacing:1em; - margin-top:0; -} - -#toc { - position:absolute; - top:0; - right:0; - padding:40px 0 40px 20px; - margin:0; - width:200px; - opacity:0.2; - z-index:-1; -} -#toc:hover { - opacity:1; - background:#fff; - z-index:999; -} -#toc ul { - padding:0; - margin:0; -} -#toc, #toc li { - list-style-type:none; - font-size:15px; - line-height:15px; -} -#toc li { - padding:0 0 0 10px; -} -#toc li a { - position:relative; - display:block; -} - -table#npmlogo { - line-height:10px; - width:180px; - margin:0 auto; -} - -@media print { - a[href] { - color:inherit; - } - a[href]:after { - white-space:nowrap; - content:" " attr(href); - } - a[href^=\#], .navigation { - display:none; - } -} diff --git a/html/static/toc.js b/html/static/toc.js deleted file mode 100644 index 7551e47efdf48..0000000000000 --- a/html/static/toc.js +++ /dev/null @@ -1,29 +0,0 @@ -;(function () { - var wrapper = document.getElementById('wrapper') - var els = Array.prototype.slice.call(wrapper.getElementsByTagName('*'), 0) - .filter(function (el) { - return el.parentNode === wrapper && - el.tagName.match(/H[1-6]/) && - el.id - }) - var l = 2 - var toc = document.createElement('ul') - toc.innerHTML = els.map(function (el) { - var i = el.tagName.charAt(1) - var out = '' - while (i > l) { - out += '
    ' - l++ - } - while (i < l) { - out += '
' - l-- - } - out += '
  • ' + - (el.innerText || el.text || el.innerHTML) + - '' - return out - }).join('\n') - toc.id = 'toc' - document.body.appendChild(toc) -})() diff --git a/lib/help.js b/lib/help.js index 3f70f2dc1f84c..61f1f3f94cc66 100644 --- a/lib/help.js +++ b/lib/help.js @@ -63,7 +63,7 @@ function help (args, cb) { // legacy if (section === 'global') section = 'folders' - else if (section === 'json') section = 'package.json' + else if (section.match(/.*json/)) section = section.replace('.json', '-json') // find either /section.n or /npm-section.n // The glob is used in the glob. The regexp is used much @@ -140,24 +140,21 @@ function viewMan (man, cb) { function htmlMan (man) { var sect = +man.match(/([0-9]+)$/)[1] - var f = path.basename(man).replace(/([0-9]+)$/, 'html') + var f = path.basename(man).replace(/[.]([0-9]+)$/, '') switch (sect) { case 1: - sect = 'cli' - break - case 3: - sect = 'api' + sect = 'cli-commands' break case 5: - sect = 'files' + sect = 'configuring-npm' break case 7: - sect = 'misc' + sect = 'using-npm' break default: throw new Error('invalid man section: ' + sect) } - return path.resolve(__dirname, '..', 'html', 'doc', sect, f) + return path.resolve(__dirname, '..', 'docs', 'public', sect, f, 'index.html') } function npmUsage (valid, cb) { diff --git a/package.json b/package.json index 8f7add5b84b5f..c9c6f2ac4dad6 100644 --- a/package.json +++ b/package.json @@ -291,7 +291,7 @@ }, "scripts": { "dumpconf": "env | grep npm | sort | uniq", - "prepare": "node bin/npm-cli.js rebuild && node bin/npm-cli.js --no-audit --no-timing prune --prefix=. --no-global && rimraf test/*/*/node_modules && make -j4 doc", + "prepare": "node bin/npm-cli.js rebuild && node bin/npm-cli.js --no-audit --no-timing prune --prefix=. --no-global && rimraf test/*/*/node_modules && make -j4 mandocs", "preversion": "bash scripts/update-authors.sh && git add AUTHORS && git commit -m \"update AUTHORS\" || true", "licenses": "licensee --production --errors-only", "tap": "tap -J --timeout 300 --no-esm", diff --git a/scripts/doc-build.sh b/scripts/doc-build.sh deleted file mode 100755 index a37a5e2618fa8..0000000000000 --- a/scripts/doc-build.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash - -if [[ $DEBUG != "" ]]; then - set -x -fi -set -o errexit -set -o pipefail - -src=$1 -dest=$2 -name=$(basename ${src%.*}) -date=$(date -u +'%Y-%m-%d %H:%M:%S') -version=$(node bin/npm-cli.js -v) - -mkdir -p $(dirname $dest) - -html_replace_tokens () { - local url=$1 - sed "s|@NAME@|$name|g" \ - | sed "s|@DATE@|$date|g" \ - | sed "s|@URL@|$url|g" \ - | sed "s|@VERSION@|$version|g" \ - | perl -p -e 's/]*)>([^\(]*\([0-9]\)) -- (.*?)<\/h1>/

    \2<\/h1>

    \3<\/p>/g' \ - | perl -p -e 's/npm-npm/npm/g' \ - | perl -p -e 's/([^"-])(npm-)?README(?!\.html)(\(1\))?/\1README<\/a>/g' \ - | perl -p -e 's/<a href="[^"]+README.html">README<\/a><\/title>/<title>README<\/title>/g' \ - | perl -p -e 's/([^"-])([^\(> ]+)(\(1\))/\1<a href="..\/cli\/\2.html">\2\3<\/a>/g' \ - | perl -p -e 's/([^"-])([^\(> ]+)(\(3\))/\1<a href="..\/api\/\2.html">\2\3<\/a>/g' \ - | perl -p -e 's/([^"-])([^\(> ]+)(\(5\))/\1<a href="..\/files\/\2.html">\2\3<\/a>/g' \ - | perl -p -e 's/([^"-])([^\(> ]+)(\(7\))/\1<a href="..\/misc\/\2.html">\2\3<\/a>/g' \ - | perl -p -e 's/\([1357]\)<\/a><\/h1>/<\/a><\/h1>/g' \ - | (if [ $(basename $(dirname $dest)) == "doc" ]; then - perl -p -e 's/ href="\.\.\// href="/g' - else - cat - fi) -} - -man_replace_tokens () { - sed "s|@VERSION@|$version|g" \ - | perl -p -e 's/(npm\\-)?([a-zA-Z\\\.\-]*)\(1\)/npm help \2/g' \ - | perl -p -e 's/(npm\\-)?([a-zA-Z\\\.\-]*)\(([57])\)/npm help \3 \2/g' \ - | perl -p -e 's/(npm\\-)?([a-zA-Z\\\.\-]*)\(3\)/npm apihelp \2/g' \ - | perl -p -e 's/npm\(1\)/npm help npm/g' \ - | perl -p -e 's/npm\(3\)/npm apihelp npm/g' -} - -case $dest in - *.[1357]) - ./node_modules/.bin/marked-man --roff $src \ - | man_replace_tokens > $dest - exit $? - ;; - *.html) - url=${dest/html\//} - (cat html/dochead.html && \ - cat $src | ./node_modules/.bin/marked && - cat html/docfoot.html)\ - | html_replace_tokens $url \ - > $dest - exit $? - ;; - *) - echo "Invalid destination type: $dest" >&2 - exit 1 - ;; -esac diff --git a/scripts/docs-build.js b/scripts/docs-build.js new file mode 100644 index 0000000000000..fd7d74f642a0a --- /dev/null +++ b/scripts/docs-build.js @@ -0,0 +1,31 @@ +#!/usr/bin/env node + +var fs = require('fs') +var marked = require('marked-man') +var npm = require('../lib/npm.js') +var args = process.argv.slice(2) +var src = args[0] +var dest = args[1] || src + +fs.readFile(src, 'utf8', function (err, data) { + if (err) return console.log(err) + + var fileExt = src.split('.').pop() + var result = data.replace(/@VERSION@/g, npm.version) + + if (fileExt === 'md') { + result = marked( + result.replace(/---([\s\S]+)---/g, '') + .replace(/(npm-)?([a-zA-Z\\.-]*)\(1\)/g, 'npm help $2') + .replace(/(npm-)?([a-zA-Z\\.-]*)\((5|7)\)/g, 'npm help $2') + .replace(/(npm-)?([a-zA-Z\\.-]*)\(3\)/g, 'npm apihelp $2') + .replace(/npm(1)/g, 'npm help npm') + .replace(/npm(3)/g, 'npm apihelp npm') + .trim() + ) + } + + fs.writeFile(dest, result, 'utf8', function (err) { + if (err) return console.log(err) + }) +}) diff --git a/test/tap/config-meta.js b/test/tap/config-meta.js index 97918b8897f8f..a98d5e6c4dabd 100644 --- a/test/tap/config-meta.js +++ b/test/tap/config-meta.js @@ -11,7 +11,7 @@ var root = path.resolve(__dirname, '..', '..') var lib = path.resolve(root, 'lib') var bin = path.resolve(root, 'bin') var nm = path.resolve(root, 'node_modules') -var doc = path.resolve(root, 'doc/misc/npm-config.md') +var doc = path.resolve(root, 'docs/content/using-npm/config.md') var FILES = [] var CONFS = {} var DOC = {} @@ -85,12 +85,12 @@ test('get lines', function (t) { test('get docs', function (t) { var d = fs.readFileSync(doc, 'utf8').split(/\r|\n/) // walk down until the '## Config Settings' section - for (var i = 0; i < d.length && d[i] !== '## Config Settings'; i++); + for (var i = 0; i < d.length && d[i] !== '### Config Settings'; i++); i++ // now gather up all the ^###\s lines until the next ^##\s - for (; i < d.length && !d[i].match(/^## /); i++) { - if (d[i].match(/^### /)) { - DOC[ d[i].replace(/^### /, '').trim() ] = true + for (; i < d.length && !d[i].match(/^### /); i++) { + if (d[i].match(/^#### /)) { + DOC[ d[i].replace(/^#### /, '').trim() ] = true } } t.pass('read the docs') diff --git a/test/tap/semver-doc.js b/test/tap/semver-doc.js index 31c75fffd8ad7..1cc978201c7a4 100644 --- a/test/tap/semver-doc.js +++ b/test/tap/semver-doc.js @@ -3,7 +3,7 @@ var test = require('tap').test test('semver doc is up to date', function (t) { var path = require('path') var moddoc = path.join(__dirname, '../../node_modules/semver/README.md') - var mydoc = path.join(__dirname, '../../doc/misc/semver.md') + var mydoc = path.join(__dirname, '../../docs/content/using-npm/semver.md') var fs = require('fs') var mod = fs.readFileSync(moddoc, 'utf8').replace(/semver\(1\)/, 'semver(7)') var my = fs.readFileSync(mydoc, 'utf8') From cd14d47014e8c96ffd6a18791e8752028b19d637 Mon Sep 17 00:00:00 2001 From: Jordan Harband <ljharb@gmail.com> Date: Sun, 3 Nov 2019 10:01:16 -0800 Subject: [PATCH 06/19] unsupported: npm v6.10.0 breaks on node v6.0, v6.1, v9.0 - v9.2 https://github.com/nvm-sh/nvm/commit/100861d529d26a4022ee4ac6dc5d8df86a3a6f65 PR-URL: https://github.com/npm/cli/pull/279 Credit: @ljharb Close: #279 Reviewed-by: @ruyadorno --- lib/utils/unsupported.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/unsupported.js b/lib/utils/unsupported.js index aaae8c4426653..71a304030e242 100644 --- a/lib/utils/unsupported.js +++ b/lib/utils/unsupported.js @@ -9,7 +9,7 @@ var supportedNode = [ {ver: '12', min: '12.0.0'}, {ver: '13', min: '13.0.0'} ] -var knownBroken = '<6.0.0' +var knownBroken = '<6.2.0 || 9.0 - 9.2' var checkVersion = exports.checkVersion = function (version) { var versionNoPrerelease = version.replace(/-.*$/, '') From 266d07681f99e212e06d52b00aa41ad7b7c54467 Mon Sep 17 00:00:00 2001 From: "Kyle E. Mitchell" <kyle@kemitchell.com> Date: Fri, 30 Aug 2019 09:10:35 -0700 Subject: [PATCH 07/19] support: add support subcommand PR-URL: https://github.com/npm/cli/pull/246 Credit: @kemitchell Close: #246 Reviewed-by: @ruyadorno Thanks @kemitchell for providing the initial work that served as a base for `npm fund`, its original commits messages are preserved as such: - support: add support subcommand - support: fix request caching - support: further sanitize contributor data - doc: Fix typo - support: simplify to just collecting and showing URLs - install: improve `npm support` test - install: drop "the" before "projects you depend on" - doc: Reword mention of `npm support` in `package.json` spec --- docs/content/configuring-npm/package-json.md | 10 +++ lib/config/cmd-list.js | 1 + lib/install.js | 15 +++- lib/support.js | 88 ++++++++++++++++++++ lib/utils/valid-support-url.js | 19 +++++ package-lock.json | 20 +++-- test/tap/install-mention-support.js | 39 +++++++++ test/tap/support.js | 77 +++++++++++++++++ 8 files changed, 259 insertions(+), 10 deletions(-) create mode 100644 lib/support.js create mode 100644 lib/utils/valid-support-url.js create mode 100644 test/tap/install-mention-support.js create mode 100644 test/tap/support.js diff --git a/docs/content/configuring-npm/package-json.md b/docs/content/configuring-npm/package-json.md index 92700887136e5..f17bd6d83e80b 100755 --- a/docs/content/configuring-npm/package-json.md +++ b/docs/content/configuring-npm/package-json.md @@ -194,6 +194,16 @@ Both email and url are optional either way. npm also sets a top-level "maintainers" field with your npm user info. +### support + +You can specify a URL for up-to-date information about ways to support +development of your package: + + { "support": "https://example.com/project/support" } + +Users can use the `npm support` subcommand to list the `support` URLs +of all dependencies of the project, direct and indirect. + ### files The optional `files` field is an array of file patterns that describes diff --git a/lib/config/cmd-list.js b/lib/config/cmd-list.js index fa4390fcdcba7..c11c8c30982b8 100644 --- a/lib/config/cmd-list.js +++ b/lib/config/cmd-list.js @@ -91,6 +91,7 @@ var cmdList = [ 'token', 'profile', 'audit', + 'support', 'org', 'help', diff --git a/lib/install.js b/lib/install.js index 8cc6d16bdd169..52fe96c47f5ff 100644 --- a/lib/install.js +++ b/lib/install.js @@ -119,6 +119,7 @@ var unlock = locker.unlock var parseJSON = require('./utils/parse-json.js') var output = require('./utils/output.js') var saveMetrics = require('./utils/metrics.js').save +var validSupportURL = require('./utils/valid-support-url') // install specific libraries var copyTree = require('./install/copy-tree.js') @@ -802,6 +803,8 @@ Installer.prototype.printInstalledForHuman = function (diffs, auditResult) { var added = 0 var updated = 0 var moved = 0 + // Check if any installed packages have support properties. + var haveSupportable = false // Count the number of contributors to packages added, tracking // contributors we've seen, so we can produce a running unique count. var contributors = new Set() @@ -809,6 +812,11 @@ Installer.prototype.printInstalledForHuman = function (diffs, auditResult) { var mutation = action[0] var pkg = action[1] if (pkg.failed) return + if ( + mutation !== 'remove' && validSupportURL(pkg.package.support) + ) { + haveSupportable = true + } if (mutation === 'remove') { ++removed } else if (mutation === 'move') { @@ -872,7 +880,12 @@ Installer.prototype.printInstalledForHuman = function (diffs, auditResult) { report += ' in ' + ((Date.now() - this.started) / 1000) + 's' output(report) - return auditResult && audit.printInstallReport(auditResult) + if (haveSupportable) { + output('Run `npm support` to support projects you depend on.') + } + if (auditResult) { + audit.printInstallReport(auditResult) + } function packages (num) { return num + ' package' + (num > 1 ? 's' : '') diff --git a/lib/support.js b/lib/support.js new file mode 100644 index 0000000000000..5813df93ff2a6 --- /dev/null +++ b/lib/support.js @@ -0,0 +1,88 @@ +'use strict' + +const npm = require('./npm.js') +const output = require('./utils/output.js') +const path = require('path') +const readPackageTree = require('read-package-tree') +const semver = require('semver') +const validSupportURL = require('./utils/valid-support-url') + +module.exports = support + +const usage = require('./utils/usage') +support.usage = usage( + 'support', + '\nnpm support [--json]' +) + +support.completion = function (opts, cb) { + const argv = opts.conf.argv.remain + switch (argv[2]) { + case 'support': + return cb(null, []) + default: + return cb(new Error(argv[2] + ' not recognized')) + } +} + +// Compare lib/ls.js. +function support (args, silent, cb) { + if (typeof cb !== 'function') { + cb = silent + silent = false + } + const dir = path.resolve(npm.dir, '..') + readPackageTree(dir, function (err, tree) { + if (err) { + process.exitCode = 1 + return cb(err) + } + const data = findPackages(tree) + if (silent) return cb(null, data) + var out + if (npm.config.get('json')) { + out = JSON.stringify(data, null, 2) + } else { + out = data.map(displayPackage).join('\n\n') + } + output(out) + cb(err, data) + }) +} + +function findPackages (root) { + const set = new Set() + iterate(root) + return Array.from(set).sort(function (a, b) { + const comparison = a.name + .toLowerCase() + .localeCompare(b.name.toLowerCase()) + return comparison === 0 + ? semver.compare(a.version, b.version) + : comparison + }) + + function iterate (node) { + node.children.forEach(recurse) + } + + function recurse (node) { + const metadata = node.package + const support = metadata.support + if (support && validSupportURL(support)) { + set.add({ + name: metadata.name, + version: metadata.version, + path: node.path, + homepage: metadata.homepage, + repository: metadata.repository, + support: metadata.support + }) + } + if (node.children) iterate(node) + } +} + +function displayPackage (entry) { + return entry.name + '@' + entry.version + ': ' + entry.support +} diff --git a/lib/utils/valid-support-url.js b/lib/utils/valid-support-url.js new file mode 100644 index 0000000000000..d575dcdf03b52 --- /dev/null +++ b/lib/utils/valid-support-url.js @@ -0,0 +1,19 @@ +const URL = require('url').URL + +// Is the value of a `support` property of a `package.json` object +// a valid URL for `npm support` to display? +module.exports = function (argument) { + if (typeof argument !== 'string' || argument.length === 0) { + return false + } + try { + var parsed = new URL(argument) + } catch (error) { + return false + } + if ( + parsed.protocol !== 'https:' && + parsed.protocol !== 'http:' + ) return false + return parsed.host +} diff --git a/package-lock.json b/package-lock.json index 125f37f22e6c3..5dd3a858aefa8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -438,6 +438,17 @@ "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" + }, + "dependencies": { + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "supports-color": { @@ -2426,15 +2437,6 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", diff --git a/test/tap/install-mention-support.js b/test/tap/install-mention-support.js new file mode 100644 index 0000000000000..a1cb2c4aaf7d7 --- /dev/null +++ b/test/tap/install-mention-support.js @@ -0,0 +1,39 @@ +'use strict' +var test = require('tap').test +var Tacks = require('tacks') +var Dir = Tacks.Dir +var File = Tacks.File +var common = require('../common-tap.js') + +var fixturepath = common.pkg +var fixture = new Tacks(Dir({ + 'package.json': File({}), + 'hassupport': Dir({ + 'package.json': File({ + name: 'hassupport', + version: '7.7.7', + support: 'http://example.com/project/support' + }) + }) +})) + +test('setup', function (t) { + fixture.remove(fixturepath) + fixture.create(fixturepath) + t.end() +}) + +test('install-report', function (t) { + common.npm(['install', '--no-save', './hassupport'], {cwd: fixturepath}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'installed successfully') + t.is(stderr, '', 'no warnings') + t.includes(stdout, '`npm support`', 'mentions `npm support`') + t.end() + }) +}) + +test('cleanup', function (t) { + fixture.remove(fixturepath) + t.end() +}) diff --git a/test/tap/support.js b/test/tap/support.js new file mode 100644 index 0000000000000..93d4887423a13 --- /dev/null +++ b/test/tap/support.js @@ -0,0 +1,77 @@ +'use strict' +var test = require('tap').test +var Tacks = require('tacks') +var path = require('path') +var Dir = Tacks.Dir +var File = Tacks.File +var common = require('../common-tap.js') + +var fixturepath = common.pkg +var fixture = new Tacks(Dir({ + 'package.json': File({ + name: 'a', + version: '0.0.0', + dependencies: { 'hassupport': '7.7.7' } + }), + 'node_modules': Dir({ + hassupport: Dir({ + 'package.json': File({ + name: 'hassupport', + version: '7.7.7', + homepage: 'http://example.com/project', + support: 'http://example.com/project/donate' + }) + }) + }) +})) + +test('setup', function (t) { + fixture.remove(fixturepath) + fixture.create(fixturepath) + t.end() +}) + +test('support --json', function (t) { + common.npm(['support', '--json'], {cwd: fixturepath}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'exited 0') + t.is(stderr, '', 'no warnings') + var parsed + t.doesNotThrow(function () { + parsed = JSON.parse(stdout) + }, 'valid JSON') + t.deepEqual( + parsed, + [ + { + name: 'hassupport', + version: '7.7.7', + homepage: 'http://example.com/project', + support: 'http://example.com/project/donate', + path: path.resolve(fixturepath, 'node_modules', 'hassupport') + } + ], + 'output data' + ) + t.end() + }) +}) + +test('support', function (t) { + common.npm(['support'], {cwd: fixturepath}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'exited 0') + t.is(stderr, '', 'no warnings') + t.includes(stdout, 'hassupport', 'outputs project name') + t.includes(stdout, '7.7.7', 'outputs project version') + t.includes(stdout, 'http://example.com/project', 'outputs contributor homepage') + t.includes(stdout, 'http://example.com/project/donate', 'outputs support link') + t.end() + }) +}) + +test('cleanup', function (t) { + t.pass(fixturepath) + fixture.remove(fixturepath) + t.end() +}) From 4414b06d944c56bee05ccfb85260055a767ee334 Mon Sep 17 00:00:00 2001 From: Ruy Adorno <ruyadorno@hotmail.com> Date: Wed, 23 Oct 2019 17:23:24 -0400 Subject: [PATCH 08/19] fund: add fund command This commit introduces the `npm fund` command that lists all `funding` info provided by the installed dependencies of a given project. Notes on implementation: - `lib/utils/funding.js` Provides helpers to validate funding info and return a tree-shaped structure containing the funding data for all deps. - `lib/fund.js` Implements `npm fund <pkg>` command - Added tests - `npm install` mention of funding - `npm fund <pkg>` variations - unit tests for added `lib/utils` and `lib/install` helpers - Added docs for `npm fund`, `funding` `package.json` property - Fixed `lib/utils/open-url` to support `--json` config - Documented `unicode` on `npm install` docs - fix tests - fix planned tap tests - alternative solution to --no-browser arg - docs: moved fund docs to new location Refs: https://github.com/npm/rfcs/blob/2d2f00457ab19b3003eb6ac5ab3d250259fd5a81/accepted/0017-add-funding-support.md PR-URL: https://github.com/npm/cli/pull/273 Credit: @ruyadorno Close: #273 Reviewed-by: @darcyclarke --- docs/content/cli-commands/npm-audit.md | 2 +- docs/content/cli-commands/npm-fund.md | 60 +++ docs/content/cli-commands/npm-install.md | 5 + docs/content/cli-commands/npm-ls.md | 8 + docs/content/configuring-npm/package-json.md | 22 +- docs/content/using-npm/config.md | 9 + lib/config/cmd-list.js | 2 +- lib/config/defaults.js | 3 + lib/fund.js | 202 ++++++++ lib/install.js | 31 +- lib/install/fund.js | 48 ++ lib/support.js | 88 ---- lib/utils/funding.js | 145 ++++++ lib/utils/open-url.js | 23 +- lib/utils/valid-support-url.js | 19 - package-lock.json | 20 +- tap-snapshots/test-tap-fund.js-TAP.test.js | 54 +++ tap-snapshots/test-tap-repo.js-TAP.test.js | 21 + test/tap/fund.js | 298 ++++++++++++ test/tap/install-mention-funding.js | 127 +++++ test/tap/install-mention-support.js | 39 -- test/tap/install.fund.js | 100 ++++ test/tap/repo.js | 35 ++ test/tap/support.js | 77 --- test/tap/utils.funding.js | 480 +++++++++++++++++++ 25 files changed, 1663 insertions(+), 255 deletions(-) create mode 100644 docs/content/cli-commands/npm-fund.md create mode 100644 lib/fund.js create mode 100644 lib/install/fund.js delete mode 100644 lib/support.js create mode 100644 lib/utils/funding.js delete mode 100644 lib/utils/valid-support-url.js create mode 100644 tap-snapshots/test-tap-fund.js-TAP.test.js create mode 100644 tap-snapshots/test-tap-repo.js-TAP.test.js create mode 100644 test/tap/fund.js create mode 100644 test/tap/install-mention-funding.js delete mode 100644 test/tap/install-mention-support.js create mode 100644 test/tap/install.fund.js delete mode 100644 test/tap/support.js create mode 100644 test/tap/utils.funding.js diff --git a/docs/content/cli-commands/npm-audit.md b/docs/content/cli-commands/npm-audit.md index 8e488614142d0..22b238a1f7159 100755 --- a/docs/content/cli-commands/npm-audit.md +++ b/docs/content/cli-commands/npm-audit.md @@ -8,7 +8,7 @@ description: Run a security audit ## Run a security audit -### Synposis +### Synopsis ```bash npm audit [--json|--parseable|--audit-level=(low|moderate|high|critical)] diff --git a/docs/content/cli-commands/npm-fund.md b/docs/content/cli-commands/npm-fund.md new file mode 100644 index 0000000000000..f6ad5a9fbf523 --- /dev/null +++ b/docs/content/cli-commands/npm-fund.md @@ -0,0 +1,60 @@ +--- +section: cli-commands +title: npm-fund +description: Retrieve funding information +--- + +# npm-fund + +## Retrieve funding information + +### Synopsis + +```bash + npm fund [<pkg>] +``` + +### Description + +This command retrieves information on how to fund the dependencies of +a given project. If no package name is provided, it will list all +dependencies that are looking for funding in a tree-structure in which +are listed the type of funding and the url to visit. If a package name +is provided then it tries to open its funding url using the `--browser` +config param. + +The list will avoid duplicated entries and will stack all packages +that share the same type/url as a single entry. Given this nature the +list is not going to have the same shape of the output from `npm ls`. + +### Configuration + +#### browser + +* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` +* Type: String + +The browser that is called by the `npm fund` command to open websites. + +#### json + +* Default: false +* Type: Boolean + +Show information in JSON format. + +#### unicode + +* Type: Boolean +* Default: true + +Whether to represent the tree structure using unicode characters. +Set it to `false` in order to use all-ansi output. + +## See Also + +* [npm-docs](/cli-commands/npm-docs) +* [npm-config](/cli-commands/npm-config) +* [npm-install](/cli-commands/npm-install) +* [npm-ls](/cli-commands/npm-ls) + diff --git a/docs/content/cli-commands/npm-install.md b/docs/content/cli-commands/npm-install.md index 684ab9ffa1b7f..523fd68f96a49 100755 --- a/docs/content/cli-commands/npm-install.md +++ b/docs/content/cli-commands/npm-install.md @@ -357,6 +357,10 @@ local copy exists on disk. npm install sax --force ``` +The `--no-fund` argument will hide the message displayed at the end of each +install that aknowledges the number of dependencies looking for funding. +See `npm-fund(1)` + The `-g` or `--global` argument will cause npm to install the package globally rather than locally. See [npm-folders](/docs/configuring-npm/folders). @@ -481,6 +485,7 @@ affects a real use-case, it will be investigated. * [npm folders](/configuring-npm/folders) * [npm update](/cli-commands/npm-update) * [npm audit](/cli-commands/npm-audit) +* [npm fund](/cli-commands/npm-fund) * [npm link](/cli-commands/npm-link) * [npm rebuild](/cli-commands/npm-rebuild) * [npm scripts](/using-npm/scripts) diff --git a/docs/content/cli-commands/npm-ls.md b/docs/content/cli-commands/npm-ls.md index 1eaa1bb92c4b3..703b319b40dae 100755 --- a/docs/content/cli-commands/npm-ls.md +++ b/docs/content/cli-commands/npm-ls.md @@ -109,6 +109,14 @@ When "prod" or "production", is an alias to `production`. Display only dependencies which are linked +#### unicode + +* Type: Boolean +* Default: true + +Whether to represent the tree structure using unicode characters. +Set it to false in order to use all-ansi output. + ### See Also * [npm config](/cli-commands/npm-config) diff --git a/docs/content/configuring-npm/package-json.md b/docs/content/configuring-npm/package-json.md index f17bd6d83e80b..6c19b94ba3515 100755 --- a/docs/content/configuring-npm/package-json.md +++ b/docs/content/configuring-npm/package-json.md @@ -194,15 +194,25 @@ Both email and url are optional either way. npm also sets a top-level "maintainers" field with your npm user info. -### support +### funding -You can specify a URL for up-to-date information about ways to support -development of your package: +You can specify an object containing an URL that provides up-to-date +information about ways to help fund development of your package: - { "support": "https://example.com/project/support" } + "funding": { + "type" : "individual", + "url" : "http://example.com/donate" + } + + "funding": { + "type" : "patreon", + "url" : "https://www.patreon.com/my-account" + } -Users can use the `npm support` subcommand to list the `support` URLs -of all dependencies of the project, direct and indirect. +Users can use the `npm fund` subcommand to list the `funding` URLs of all +dependencies of their project, direct and indirect. A shortcut to visit each +funding url is also available when providing the project name such as: +`npm fund <projectname>`. ### files diff --git a/docs/content/using-npm/config.md b/docs/content/using-npm/config.md index 4a0fd5f07199a..b5b43710021d6 100755 --- a/docs/content/using-npm/config.md +++ b/docs/content/using-npm/config.md @@ -449,6 +449,15 @@ packages. The "maxTimeout" config for the `retry` module to use when fetching packages. +#### fund + +* Default: true +* Type: Boolean + +When "true" displays the message at the end of each `npm install` +aknowledging the number of dependencies looking for funding. +See [`npm-fund`](/docs/cli-commands/npm-fund) for details. + #### git * Default: `"git"` diff --git a/lib/config/cmd-list.js b/lib/config/cmd-list.js index c11c8c30982b8..d9d0d85b7d520 100644 --- a/lib/config/cmd-list.js +++ b/lib/config/cmd-list.js @@ -91,7 +91,7 @@ var cmdList = [ 'token', 'profile', 'audit', - 'support', + 'fund', 'org', 'help', diff --git a/lib/config/defaults.js b/lib/config/defaults.js index 57d373df1e10c..e07da3aaf97f4 100644 --- a/lib/config/defaults.js +++ b/lib/config/defaults.js @@ -143,6 +143,8 @@ Object.defineProperty(exports, 'defaults', {get: function () { force: false, 'format-package-lock': true, + fund: true, + 'fetch-retries': 2, 'fetch-retry-factor': 10, 'fetch-retry-mintimeout': 10000, @@ -284,6 +286,7 @@ exports.types = { editor: String, 'engine-strict': Boolean, force: Boolean, + fund: Boolean, 'format-package-lock': Boolean, 'fetch-retries': Number, 'fetch-retry-factor': Number, diff --git a/lib/fund.js b/lib/fund.js new file mode 100644 index 0000000000000..4981e461596c0 --- /dev/null +++ b/lib/fund.js @@ -0,0 +1,202 @@ +'use strict' + +const path = require('path') + +const archy = require('archy') +const figgyPudding = require('figgy-pudding') +const readPackageTree = require('read-package-tree') + +const npm = require('./npm.js') +const npmConfig = require('./config/figgy-config.js') +const fetchPackageMetadata = require('./fetch-package-metadata.js') +const computeMetadata = require('./install/deps.js').computeMetadata +const readShrinkwrap = require('./install/read-shrinkwrap.js') +const mutateIntoLogicalTree = require('./install/mutate-into-logical-tree.js') +const output = require('./utils/output.js') +const openUrl = require('./utils/open-url.js') +const { getFundingInfo, validFundingUrl } = require('./utils/funding.js') + +const FundConfig = figgyPudding({ + browser: {}, // used by ./utils/open-url + global: {}, + json: {}, + unicode: {} +}) + +module.exports = fundCmd + +const usage = require('./utils/usage') +fundCmd.usage = usage( + 'fund', + 'npm fund [--json]', + 'npm fund [--browser] [[<@scope>/]<pkg>' +) + +fundCmd.completion = function (opts, cb) { + const argv = opts.conf.argv.remain + switch (argv[2]) { + case 'fund': + return cb(null, []) + default: + return cb(new Error(argv[2] + ' not recognized')) + } +} + +function printJSON (fundingInfo) { + return JSON.stringify(fundingInfo, null, 2) +} + +// the human-printable version does some special things that turned out to +// be very verbose but hopefully not hard to follow: we stack up items +// that have a shared url/type and make sure they're printed at the highest +// level possible, in that process they also carry their dependencies along +// with them, moving those up in the visual tree +function printHuman (fundingInfo, opts) { + // mapping logic that keeps track of seen items in order to be able + // to push all other items from the same type/url in the same place + const seen = new Map() + + function seenKey ({ type, url } = {}) { + return url ? String(type) + String(url) : null + } + + function setStackedItem (funding, result) { + const key = seenKey(funding) + if (key && !seen.has(key)) seen.set(key, result) + } + + function retrieveStackedItem (funding) { + const key = seenKey(funding) + if (key && seen.has(key)) return seen.get(key) + } + + // --- + + const getFundingItems = (fundingItems) => + Object.keys(fundingItems || {}).map((fundingItemName) => { + // first-level loop, prepare the pretty-printed formatted data + const fundingItem = fundingItems[fundingItemName] + const { version, funding } = fundingItem + const { type, url } = funding || {} + + const printableVersion = version ? `@${version}` : '' + const printableType = type && { label: `type: ${funding.type}` } + const printableUrl = url && { label: `url: ${funding.url}` } + const result = { + fundingItem, + label: fundingItemName + printableVersion, + nodes: [] + } + + if (printableType) { + result.nodes.push(printableType) + } + + if (printableUrl) { + result.nodes.push(printableUrl) + } + + setStackedItem(funding, result) + + return result + }).reduce((res, result) => { + // recurse and exclude nodes that are going to be stacked together + const { fundingItem } = result + const { dependencies, funding } = fundingItem + const items = getFundingItems(dependencies) + const stackedResult = retrieveStackedItem(funding) + items.forEach(i => result.nodes.push(i)) + + if (stackedResult && stackedResult !== result) { + stackedResult.label += `, ${result.label}` + items.forEach(i => stackedResult.nodes.push(i)) + return res + } + + res.push(result) + + return res + }, []) + + const [ result ] = getFundingItems({ + [fundingInfo.name]: { + dependencies: fundingInfo.dependencies, + funding: fundingInfo.funding, + version: fundingInfo.version + } + }) + + return archy(result, '', { unicode: opts.unicode }) +} + +function openFundingUrl (packageName, cb) { + function getUrlAndOpen (packageMetadata) { + const { funding } = packageMetadata + const { type, url } = funding || {} + const noFundingError = + new Error(`No funding method available for: ${packageName}`) + noFundingError.code = 'ENOFUND' + const typePrefix = type ? `${type} funding` : 'Funding' + const msg = `${typePrefix} available at the following URL` + + if (validFundingUrl(funding)) { + openUrl(url, msg, cb) + } else { + throw noFundingError + } + } + + fetchPackageMetadata( + packageName, + '.', + { fullMetadata: true }, + function (err, packageMetadata) { + if (err) return cb(err) + getUrlAndOpen(packageMetadata) + } + ) +} + +function fundCmd (args, cb) { + const opts = FundConfig(npmConfig()) + const dir = path.resolve(npm.dir, '..') + const packageName = args[0] + + if (opts.global) { + const err = new Error('`npm fund` does not support globals') + err.code = 'EFUNDGLOBAL' + throw err + } + + if (packageName) { + openFundingUrl(packageName, cb) + return + } + + readPackageTree(dir, function (err, tree) { + if (err) { + process.exitCode = 1 + return cb(err) + } + + readShrinkwrap.andInflate(tree, function () { + const fundingInfo = getFundingInfo( + mutateIntoLogicalTree.asReadInstalled( + computeMetadata(tree) + ) + ) + + const print = opts.json + ? printJSON + : printHuman + + output( + print( + fundingInfo, + opts + ) + ) + cb(err, tree) + }) + }) +} diff --git a/lib/install.js b/lib/install.js index 52fe96c47f5ff..a4cf2b186de51 100644 --- a/lib/install.js +++ b/lib/install.js @@ -119,7 +119,6 @@ var unlock = locker.unlock var parseJSON = require('./utils/parse-json.js') var output = require('./utils/output.js') var saveMetrics = require('./utils/metrics.js').save -var validSupportURL = require('./utils/valid-support-url') // install specific libraries var copyTree = require('./install/copy-tree.js') @@ -139,6 +138,10 @@ var validateArgs = require('./install/validate-args.js') var saveRequested = require('./install/save.js').saveRequested var saveShrinkwrap = require('./install/save.js').saveShrinkwrap var audit = require('./install/audit.js') +var { + getPrintFundingReport, + getPrintFundingReportJSON +} = require('./install/fund.js') var getSaveType = require('./install/save.js').getSaveType var doSerialActions = require('./install/actions.js').doSerial var doReverseSerialActions = require('./install/actions.js').doReverseSerial @@ -241,6 +244,7 @@ function Installer (where, dryrun, args, opts) { this.saveOnlyLock = opts.saveOnlyLock this.global = opts.global != null ? opts.global : this.where === path.resolve(npm.globalDir, '..') this.audit = npm.config.get('audit') && !this.global + this.fund = npm.config.get('fund') && !this.global this.started = Date.now() } Installer.prototype = {} @@ -803,8 +807,6 @@ Installer.prototype.printInstalledForHuman = function (diffs, auditResult) { var added = 0 var updated = 0 var moved = 0 - // Check if any installed packages have support properties. - var haveSupportable = false // Count the number of contributors to packages added, tracking // contributors we've seen, so we can produce a running unique count. var contributors = new Set() @@ -812,11 +814,6 @@ Installer.prototype.printInstalledForHuman = function (diffs, auditResult) { var mutation = action[0] var pkg = action[1] if (pkg.failed) return - if ( - mutation !== 'remove' && validSupportURL(pkg.package.support) - ) { - haveSupportable = true - } if (mutation === 'remove') { ++removed } else if (mutation === 'move') { @@ -880,9 +877,6 @@ Installer.prototype.printInstalledForHuman = function (diffs, auditResult) { report += ' in ' + ((Date.now() - this.started) / 1000) + 's' output(report) - if (haveSupportable) { - output('Run `npm support` to support projects you depend on.') - } if (auditResult) { audit.printInstallReport(auditResult) } @@ -907,9 +901,23 @@ Installer.prototype.printInstalledForHuman = function (diffs, auditResult) { if (argument.url) returned += ' (' + argument.email + ')' return returned } + + const { fund, idealTree } = this + const printFundingReport = getPrintFundingReport({ + fund, + idealTree + }) + if (printFundingReport.length) { + output(printFundingReport) + } } Installer.prototype.printInstalledForJSON = function (diffs, auditResult) { + const { fund, idealTree } = this + const printFundingReport = getPrintFundingReportJSON({ + fund, + idealTree + }) var result = { added: [], removed: [], @@ -918,6 +926,7 @@ Installer.prototype.printInstalledForJSON = function (diffs, auditResult) { failed: [], warnings: [], audit: auditResult, + funding: printFundingReport, elapsed: Date.now() - this.started } var self = this diff --git a/lib/install/fund.js b/lib/install/fund.js new file mode 100644 index 0000000000000..55a167a95583a --- /dev/null +++ b/lib/install/fund.js @@ -0,0 +1,48 @@ +'use strict' + +const { EOL } = require('os') + +const computeMetadata = require('./deps.js').computeMetadata +const mutateIntoLogicalTree = require('./mutate-into-logical-tree.js') +var { getFundingInfo } = require('../utils/funding.js') + +exports.getPrintFundingReport = getPrintFundingReport +exports.getPrintFundingReportJSON = getPrintFundingReportJSON + +function getFundingResult ({ fund, idealTree }) { + if (fund) { + const fundingInfoTree = + mutateIntoLogicalTree.asReadInstalled( + computeMetadata(idealTree) + ) + const fundResult = getFundingInfo(fundingInfoTree, { countOnly: true }) + return fundResult + } else { + return {} + } +} + +function getPrintFundingReport ({ fund, idealTree }, opts) { + const fundResult = getFundingResult({ fund, idealTree }) + const { length } = fundResult || {} + const { json } = opts || {} + + function padding (msg) { + return json ? '' : (EOL + msg) + } + + function packageQuantity (amount) { + return `package${amount > 1 ? 's are' : ' is'}` + } + + if (!length) return '' + + return padding('') + length + ' ' + + packageQuantity(length) + + ' looking for funding.' + + padding('Run "npm fund" to find out more.') +} + +function getPrintFundingReportJSON ({ fund, idealTree }) { + return getPrintFundingReport({ fund, idealTree }, { json: true }) +} diff --git a/lib/support.js b/lib/support.js deleted file mode 100644 index 5813df93ff2a6..0000000000000 --- a/lib/support.js +++ /dev/null @@ -1,88 +0,0 @@ -'use strict' - -const npm = require('./npm.js') -const output = require('./utils/output.js') -const path = require('path') -const readPackageTree = require('read-package-tree') -const semver = require('semver') -const validSupportURL = require('./utils/valid-support-url') - -module.exports = support - -const usage = require('./utils/usage') -support.usage = usage( - 'support', - '\nnpm support [--json]' -) - -support.completion = function (opts, cb) { - const argv = opts.conf.argv.remain - switch (argv[2]) { - case 'support': - return cb(null, []) - default: - return cb(new Error(argv[2] + ' not recognized')) - } -} - -// Compare lib/ls.js. -function support (args, silent, cb) { - if (typeof cb !== 'function') { - cb = silent - silent = false - } - const dir = path.resolve(npm.dir, '..') - readPackageTree(dir, function (err, tree) { - if (err) { - process.exitCode = 1 - return cb(err) - } - const data = findPackages(tree) - if (silent) return cb(null, data) - var out - if (npm.config.get('json')) { - out = JSON.stringify(data, null, 2) - } else { - out = data.map(displayPackage).join('\n\n') - } - output(out) - cb(err, data) - }) -} - -function findPackages (root) { - const set = new Set() - iterate(root) - return Array.from(set).sort(function (a, b) { - const comparison = a.name - .toLowerCase() - .localeCompare(b.name.toLowerCase()) - return comparison === 0 - ? semver.compare(a.version, b.version) - : comparison - }) - - function iterate (node) { - node.children.forEach(recurse) - } - - function recurse (node) { - const metadata = node.package - const support = metadata.support - if (support && validSupportURL(support)) { - set.add({ - name: metadata.name, - version: metadata.version, - path: node.path, - homepage: metadata.homepage, - repository: metadata.repository, - support: metadata.support - }) - } - if (node.children) iterate(node) - } -} - -function displayPackage (entry) { - return entry.name + '@' + entry.version + ': ' + entry.support -} diff --git a/lib/utils/funding.js b/lib/utils/funding.js new file mode 100644 index 0000000000000..2c994e0b6b426 --- /dev/null +++ b/lib/utils/funding.js @@ -0,0 +1,145 @@ +'use strict' + +const URL = require('url').URL + +exports.getFundingInfo = getFundingInfo +exports.validFundingUrl = validFundingUrl + +// Is the value of a `funding` property of a `package.json` +// a valid type+url for `npm fund` to display? +function validFundingUrl (funding) { + if (!funding || !funding.url) { + return false + } + + try { + var parsed = new URL(funding.url) + } catch (error) { + return false + } + + if ( + parsed.protocol !== 'https:' && + parsed.protocol !== 'http:' + ) return false + + return Boolean(parsed.host) +} + +function getFundingInfo (idealTree, opts) { + let length = 0 + const seen = new Set() + const { countOnly } = opts || {} + const empty = () => Object.create(null) + const _trailingDependencies = Symbol('trailingDependencies') + + function tracked (name, version) { + const key = String(name) + String(version) + if (seen.has(key)) { + return true + } + seen.add(key) + } + + function retrieveDependencies (dependencies) { + const trailing = dependencies[_trailingDependencies] + + if (trailing) { + return Object.assign( + empty(), + dependencies, + trailing + ) + } + + return dependencies + } + + function hasDependencies (dependencies) { + return dependencies && ( + Object.keys(dependencies).length || + dependencies[_trailingDependencies] + ) + } + + function getFundingDependencies (tree) { + const deps = tree && tree.dependencies + if (!deps) return empty() + + // broken into two steps to make sure items appearance + // within top levels takes precedence over nested ones + return (Object.keys(deps)).map((key) => { + const dep = deps[key] + const { name, funding, version } = dep + + const fundingItem = {} + + // avoids duplicated items within the funding tree + if (tracked(name, version)) return empty() + + if (version) { + fundingItem.version = version + } + + if (funding && validFundingUrl(funding)) { + fundingItem.funding = funding + length++ + } + + return { + dep, + fundingItem + } + }).reduce((res, { dep, fundingItem }, i) => { + if (!fundingItem) return res + + // recurse + const dependencies = dep.dependencies && + Object.keys(dep.dependencies).length > 0 && + getFundingDependencies(dep) + + // if we're only counting items there's no need + // to add all the data to the resulting object + if (countOnly) return null + + if (hasDependencies(dependencies)) { + fundingItem.dependencies = retrieveDependencies(dependencies) + } + + if (fundingItem.funding) { + res[dep.name] = fundingItem + } else if (fundingItem.dependencies) { + res[_trailingDependencies] = + Object.assign( + empty(), + res[_trailingDependencies], + fundingItem.dependencies + ) + } + + return res + }, empty()) + } + + const idealTreeDependencies = getFundingDependencies(idealTree) + const result = { + length + } + + if (!countOnly) { + result.name = idealTree.name || idealTree.path + + if (idealTree && idealTree.version) { + result.version = idealTree.version + } + + if (idealTree && idealTree.funding) { + result.funding = idealTree.funding + } + + result.dependencies = + retrieveDependencies(idealTreeDependencies) + } + + return result +} diff --git a/lib/utils/open-url.js b/lib/utils/open-url.js index 7a48d2e868959..e1ed2b3fab76d 100644 --- a/lib/utils/open-url.js +++ b/lib/utils/open-url.js @@ -5,9 +5,28 @@ const opener = require('opener') // attempt to open URL in web-browser, print address otherwise: module.exports = function open (url, errMsg, cb, browser = npm.config.get('browser')) { - opener(url, { command: npm.config.get('browser') }, (er) => { + function printAlternateMsg () { + const json = npm.config.get('json') + const alternateMsg = json + ? JSON.stringify({ + title: errMsg, + url + }, null, 2) + : `${errMsg}:\n\n${url}` + + output(alternateMsg) + } + + const skipBrowser = process.argv.indexOf('--no-browser') > -1 + + if (skipBrowser) { + printAlternateMsg() + return cb() + } + + opener(url, { command: browser }, (er) => { if (er && er.code === 'ENOENT') { - output(`${errMsg}:\n\n${url}`) + printAlternateMsg() return cb() } else { return cb(er) diff --git a/lib/utils/valid-support-url.js b/lib/utils/valid-support-url.js deleted file mode 100644 index d575dcdf03b52..0000000000000 --- a/lib/utils/valid-support-url.js +++ /dev/null @@ -1,19 +0,0 @@ -const URL = require('url').URL - -// Is the value of a `support` property of a `package.json` object -// a valid URL for `npm support` to display? -module.exports = function (argument) { - if (typeof argument !== 'string' || argument.length === 0) { - return false - } - try { - var parsed = new URL(argument) - } catch (error) { - return false - } - if ( - parsed.protocol !== 'https:' && - parsed.protocol !== 'http:' - ) return false - return parsed.host -} diff --git a/package-lock.json b/package-lock.json index 5dd3a858aefa8..125f37f22e6c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -438,17 +438,6 @@ "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" - }, - "dependencies": { - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } } }, "supports-color": { @@ -2437,6 +2426,15 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", diff --git a/tap-snapshots/test-tap-fund.js-TAP.test.js b/tap-snapshots/test-tap-fund.js-TAP.test.js new file mode 100644 index 0000000000000..e351a21c66919 --- /dev/null +++ b/tap-snapshots/test-tap-fund.js-TAP.test.js @@ -0,0 +1,54 @@ +/* IMPORTANT + * This snapshot file is auto-generated, but designed for humans. + * It should be checked into source control and tracked carefully. + * Re-generate by setting TAP_SNAPSHOT=1 and running tests. + * Make sure to inspect the output below. Do not ignore changes! + */ +'use strict' +exports[`test/tap/fund.js TAP fund containing multi-level nested deps with no funding > should omit dependencies with no funding declared 1`] = ` +nested-no-funding-packages@1.0.0 ++-- lorem@1.0.0 +| \`-- url: https://example.com/lorem +\`-- bar@1.0.0 + +-- type: individual + +-- url: http://example.com/donate + \`-- sub-bar@1.0.0 + \`-- url: https://example.com/sponsor + + +` + +exports[`test/tap/fund.js TAP fund does not support global > should throw EFUNDGLOBAL error 1`] = ` + +` + +exports[`test/tap/fund.js TAP fund does not support global > should write error msgs to stderr 1`] = ` +npm ERR! code EFUNDGLOBAL +npm ERR! \`npm fund\` does not support globals +` + +exports[`test/tap/fund.js TAP fund does not support global, using --json option > should write error msgs to stderr 1`] = ` +npm ERR! code EFUNDGLOBAL +npm ERR! \`npm fund\` does not support globals +` + +exports[`test/tap/fund.js TAP fund in which same maintainer owns all its deps > should print stack packages together 1`] = ` +maintainer-owns-all-deps@1.0.0, dep-bar@1.0.0, dep-sub-foo@1.0.0, dep-foo@1.0.0 ++-- type: individual +\`-- url: http://example.com/donate + + +` + +exports[`test/tap/fund.js TAP fund using package argument with no browser > should open funding url 1`] = ` +individual funding available at the following URL: + +http://example.com/donate + +` + +exports[`test/tap/fund.js TAP fund with no package containing funding > should print empty funding info 1`] = ` +no-funding-package@0.0.0 + + +` diff --git a/tap-snapshots/test-tap-repo.js-TAP.test.js b/tap-snapshots/test-tap-repo.js-TAP.test.js new file mode 100644 index 0000000000000..3fba79edb8d42 --- /dev/null +++ b/tap-snapshots/test-tap-repo.js-TAP.test.js @@ -0,0 +1,21 @@ +/* IMPORTANT + * This snapshot file is auto-generated, but designed for humans. + * It should be checked into source control and tracked carefully. + * Re-generate by setting TAP_SNAPSHOT=1 and running tests. + * Make sure to inspect the output below. Do not ignore changes! + */ +'use strict' +exports[`test/tap/repo.js TAP npm repo underscore --json > should print json result 1`] = ` +{ + "title": "repository available at the following URL", + "url": "https://github.com/jashkenas/underscore" +} + +` + +exports[`test/tap/repo.js TAP npm repo underscore --no-browser > should print alternative msg 1`] = ` +repository available at the following URL: + +https://github.com/jashkenas/underscore + +` diff --git a/test/tap/fund.js b/test/tap/fund.js new file mode 100644 index 0000000000000..cc66bea51a056 --- /dev/null +++ b/test/tap/fund.js @@ -0,0 +1,298 @@ +'use strict' + +const fs = require('fs') +const path = require('path') + +const test = require('tap').test +const Tacks = require('tacks') +const Dir = Tacks.Dir +const File = Tacks.File +const common = require('../common-tap.js') +const isWindows = require('../../lib/utils/is-windows.js') + +const base = common.pkg +const noFunding = path.join(base, 'no-funding-package') +const maintainerOwnsAllDeps = path.join(base, 'maintainer-owns-all-deps') +const nestedNoFundingPackages = path.join(base, 'nested-no-funding-packages') + +function getFixturePackage ({ name, version, dependencies, funding }, extras) { + const getDeps = () => Object + .keys(dependencies) + .reduce((res, dep) => (Object.assign({}, res, { + [dep]: '*' + })), {}) + + return Dir(Object.assign({ + 'package.json': File({ + name, + version: version || '1.0.0', + funding: (funding === undefined) ? { + type: 'individual', + url: 'http://example.com/donate' + } : funding, + dependencies: dependencies && getDeps(dependencies) + }) + }, extras)) +} + +const fixture = new Tacks(Dir({ + 'no-funding-package': Dir({ + 'package.json': File({ + name: 'no-funding-package', + version: '0.0.0' + }) + }), + 'maintainer-owns-all-deps': getFixturePackage({ + name: 'maintainer-owns-all-deps', + dependencies: { + 'dep-foo': '*', + 'dep-bar': '*' + } + }, { + node_modules: Dir({ + 'dep-foo': getFixturePackage({ + name: 'dep-foo', + dependencies: { + 'dep-sub-foo': '*' + } + }, { + node_modules: Dir({ + 'dep-sub-foo': getFixturePackage({ + name: 'dep-sub-foo' + }) + }) + }), + 'dep-bar': getFixturePackage({ + name: 'dep-bar' + }) + }) + }), + 'nested-no-funding-packages': getFixturePackage({ + name: 'nested-no-funding-packages', + funding: null, + dependencies: { + foo: '*' + }, + devDependencies: { + lorem: '*' + } + }, { + node_modules: Dir({ + foo: getFixturePackage({ + name: 'foo', + dependencies: { + bar: '*' + }, + funding: null + }, { + node_modules: Dir({ + bar: getFixturePackage({ + name: 'bar' + }, { + node_modules: Dir({ + 'sub-bar': getFixturePackage({ + name: 'sub-bar', + funding: { + url: 'https://example.com/sponsor' + } + }) + }) + }) + }) + }), + lorem: getFixturePackage({ + name: 'lorem', + funding: { + url: 'https://example.com/lorem' + } + }) + }) + }) +})) + +function checkOutput (t, { code, stdout, stderr }) { + t.is(code, 0, `exited code 0`) + t.is(stderr, '', 'no warnings') +} + +function jsonTest (t, { assertionMsg, expected, stdout }) { + let parsed = JSON.parse(stdout) + t.deepEqual(parsed, expected, assertionMsg) +} + +function snapshotTest (t, { stdout, assertionMsg }) { + t.matchSnapshot(stdout, assertionMsg) +} + +function testFundCmd ({ title, assertionMsg, args = [], opts = {}, output = checkOutput, assertion = snapshotTest, expected }) { + const validate = (t) => (err, code, stdout, stderr) => { + if (err) throw err + + output(t, { code, stdout, stderr }) + assertion(t, { assertionMsg, expected, stdout }) + } + + return test(title, (t) => { + t.plan(3) + common.npm(['fund', '--unicode=false'].concat(args), opts, validate(t)) + }) +} + +test('setup', function (t) { + fixture.remove(base) + fixture.create(base) + t.end() +}) + +testFundCmd({ + title: 'fund with no package containing funding', + assertionMsg: 'should print empty funding info', + opts: { cwd: noFunding } +}) + +testFundCmd({ + title: 'fund in which same maintainer owns all its deps', + assertionMsg: 'should print stack packages together', + opts: { cwd: maintainerOwnsAllDeps } +}) + +testFundCmd({ + title: 'fund in which same maintainer owns all its deps, using --json option', + assertionMsg: 'should print stack packages together', + args: ['--json'], + opts: { cwd: maintainerOwnsAllDeps }, + assertion: jsonTest, + expected: { + length: 3, + name: 'maintainer-owns-all-deps', + version: '1.0.0', + funding: { type: 'individual', url: 'http://example.com/donate' }, + dependencies: { + 'dep-bar': { + version: '1.0.0', + funding: { type: 'individual', url: 'http://example.com/donate' } + }, + 'dep-foo': { + version: '1.0.0', + funding: { type: 'individual', url: 'http://example.com/donate' }, + dependencies: { + 'dep-sub-foo': { + version: '1.0.0', + funding: { type: 'individual', url: 'http://example.com/donate' } + } + } + } + } + } +}) + +testFundCmd({ + title: 'fund containing multi-level nested deps with no funding', + assertionMsg: 'should omit dependencies with no funding declared', + opts: { cwd: nestedNoFundingPackages } +}) + +testFundCmd({ + title: 'fund containing multi-level nested deps with no funding, using --json option', + assertionMsg: 'should omit dependencies with no funding declared', + args: ['--json'], + opts: { cwd: nestedNoFundingPackages }, + assertion: jsonTest, + expected: { + length: 3, + name: 'nested-no-funding-packages', + version: '1.0.0', + dependencies: { + lorem: { version: '1.0.0', funding: { url: 'https://example.com/lorem' } }, + bar: { + version: '1.0.0', + funding: { type: 'individual', url: 'http://example.com/donate' }, + dependencies: { + 'sub-bar': { + version: '1.0.0', + funding: { url: 'https://example.com/sponsor' } + } + } + } + } + } +}) + +testFundCmd({ + title: 'fund does not support global', + assertionMsg: 'should throw EFUNDGLOBAL error', + args: ['--global'], + output: (t, { code, stdout, stderr }) => { + t.is(code, 1, `exited code 0`) + const [ errCode, errCmd ] = stderr.split('\n') + t.matchSnapshot(`${errCode}\n${errCmd}`, 'should write error msgs to stderr') + } +}) + +testFundCmd({ + title: 'fund does not support global, using --json option', + assertionMsg: 'should throw EFUNDGLOBAL error', + args: ['--global', '--json'], + output: (t, { code, stdout, stderr }) => { + t.is(code, 1, `exited code 0`) + const [ errCode, errCmd ] = stderr.split('\n') + t.matchSnapshot(`${errCode}\n${errCmd}`, 'should write error msgs to stderr') + }, + assertion: jsonTest, + expected: { + error: { + code: 'EFUNDGLOBAL', + summary: '`npm fund` does not support globals', + detail: '' + } + } +}) + +testFundCmd({ + title: 'fund using package argument with no browser', + assertionMsg: 'should open funding url', + args: ['.', '--no-browser'], + opts: { cwd: maintainerOwnsAllDeps } +}) + +testFundCmd({ + title: 'fund using package argument with no browser, using --json option', + assertionMsg: 'should open funding url', + args: ['.', '--json', '--no-browser'], + opts: { cwd: maintainerOwnsAllDeps }, + assertion: jsonTest, + expected: { + title: 'individual funding available at the following URL', + url: 'http://example.com/donate' + } +}) + +if (!isWindows) { + test('fund using package argument', function (t) { + const fakeBrowser = path.join(common.pkg, '_script.sh') + const outFile = path.join(common.pkg, '_output') + + const s = '#!/usr/bin/env bash\n' + + 'echo "$@" > ' + JSON.stringify(common.pkg) + '/_output\n' + fs.writeFileSync(fakeBrowser, s) + fs.chmodSync(fakeBrowser, '0755') + + common.npm([ + 'fund', '.', + '--loglevel=silent', + '--browser=' + fakeBrowser + ], { cwd: maintainerOwnsAllDeps }, function (err, code, stdout, stderr) { + t.ifError(err, 'repo command ran without error') + t.equal(code, 0, 'exit ok') + var res = fs.readFileSync(outFile, 'utf8') + t.equal(res, 'http://example.com/donate\n') + t.end() + }) + }) +} + +test('cleanup', function (t) { + t.pass(base) + fixture.remove(base) + t.end() +}) diff --git a/test/tap/install-mention-funding.js b/test/tap/install-mention-funding.js new file mode 100644 index 0000000000000..ebd25a57324c1 --- /dev/null +++ b/test/tap/install-mention-funding.js @@ -0,0 +1,127 @@ +'use strict' +const path = require('path') +const test = require('tap').test +const Tacks = require('tacks') +const Dir = Tacks.Dir +const File = Tacks.File +const common = require('../common-tap.js') + +const base = common.pkg +const singlePackage = path.join(base, 'single-funding-package') +const multiplePackages = path.join(base, 'top-level-funding') + +function getFixturePackage ({ name, version, dependencies, funding }) { + return Dir({ + 'package.json': File({ + name, + version: version || '1.0.0', + funding: funding || { + type: 'individual', + url: 'http://example.com/donate' + }, + dependencies: dependencies || {} + }) + }) +} + +const fixture = new Tacks(Dir({ + 'package.json': File({}), + 'single-funding-package': getFixturePackage({ + name: 'single-funding-package' + }), + 'top-level-funding': getFixturePackage({ + name: 'top-level-funding', + dependencies: { + 'dep-foo': 'file:../dep-foo', + 'dep-bar': 'file:../dep-bar' + } + }), + 'dep-foo': getFixturePackage({ + name: 'dep-foo', + funding: { + type: 'corporate', + url: 'https://corp.example.com/sponsor' + }, + dependencies: { + 'sub-dep-bar': 'file:../sub-dep-bar' + } + }), + 'dep-bar': getFixturePackage({ + name: 'dep-bar', + version: '2.1.0', + dependencies: { + 'sub-dep-bar': 'file:../sub-dep-bar' + } + }), + 'sub-dep-bar': getFixturePackage({ + name: 'sub-dep-bar', + funding: { + type: 'foo', + url: 'http://example.com/foo' + } + }) +})) + +test('mention npm fund upon installing single dependency', function (t) { + setup(t) + common.npm(['install', '--no-save', singlePackage], {cwd: base}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'installed successfully') + t.is(stderr, '', 'no warnings') + t.includes(stdout, '1 package is looking for funding.', 'should print amount of packages needing funding') + t.includes(stdout, 'Run "npm fund" to find out more.', 'should print npm fund mention') + t.end() + }) +}) + +test('mention npm fund upon installing multiple dependencies', function (t) { + setup(t) + common.npm(['install', '--no-save', multiplePackages], {cwd: base}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'installed successfully') + t.is(stderr, '', 'no warnings') + t.includes(stdout, '4 packages are looking for funding.', 'should print amount of packages needing funding') + t.includes(stdout, 'Run "npm fund" to find out more.', 'should print npm fund mention') + t.end() + }) +}) + +test('skips mention npm fund using --no-fund option', function (t) { + setup(t) + common.npm(['install', '--no-save', '--no-fund', multiplePackages], {cwd: base}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'installed successfully') + t.is(stderr, '', 'no warnings') + t.doesNotHave(stdout, '4 packages are looking for funding.', 'should print amount of packages needing funding') + t.doesNotHave(stdout, 'Run "npm fund" to find out more.', 'should print npm fund mention') + t.end() + }) +}) + +test('mention packages looking for funding using --json', function (t) { + setup(t) + common.npm(['install', '--no-save', '--json', multiplePackages], {cwd: base}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'installed successfully') + t.is(stderr, '', 'no warnings') + const res = JSON.parse(stdout) + t.match(res.funding, '4 packages are looking for funding.', 'should print amount of packages needing funding') + t.end() + }) +}) + +test('cleanup', function (t) { + cleanup() + t.end() +}) + +function setup (t) { + fixture.create(base) + t.teardown(() => { + cleanup() + }) +} + +function cleanup () { + fixture.remove(base) +} diff --git a/test/tap/install-mention-support.js b/test/tap/install-mention-support.js deleted file mode 100644 index a1cb2c4aaf7d7..0000000000000 --- a/test/tap/install-mention-support.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict' -var test = require('tap').test -var Tacks = require('tacks') -var Dir = Tacks.Dir -var File = Tacks.File -var common = require('../common-tap.js') - -var fixturepath = common.pkg -var fixture = new Tacks(Dir({ - 'package.json': File({}), - 'hassupport': Dir({ - 'package.json': File({ - name: 'hassupport', - version: '7.7.7', - support: 'http://example.com/project/support' - }) - }) -})) - -test('setup', function (t) { - fixture.remove(fixturepath) - fixture.create(fixturepath) - t.end() -}) - -test('install-report', function (t) { - common.npm(['install', '--no-save', './hassupport'], {cwd: fixturepath}, function (err, code, stdout, stderr) { - if (err) throw err - t.is(code, 0, 'installed successfully') - t.is(stderr, '', 'no warnings') - t.includes(stdout, '`npm support`', 'mentions `npm support`') - t.end() - }) -}) - -test('cleanup', function (t) { - fixture.remove(fixturepath) - t.end() -}) diff --git a/test/tap/install.fund.js b/test/tap/install.fund.js new file mode 100644 index 0000000000000..37a61e42891af --- /dev/null +++ b/test/tap/install.fund.js @@ -0,0 +1,100 @@ +'use strict' + +const { EOL } = require('os') +const { test } = require('tap') +const { getPrintFundingReport } = require('../../lib/install/fund') + +test('message when there are no funding found', (t) => { + t.deepEqual( + getPrintFundingReport({}), + '', + 'should not print any message if missing info' + ) + t.deepEqual( + getPrintFundingReport({ + name: 'foo', + version: '1.0.0', + dependencies: {} + }), + '', + 'should not print any message if package has no dependencies' + ) + t.deepEqual( + getPrintFundingReport({ + fund: true, + idealTree: { + name: 'foo', + version: '1.0.0', + dependencies: { + bar: {}, + lorem: {} + } + } + }), + '', + 'should not print any message if no package has funding info' + ) + t.end() +}) + +test('print appropriate message for a single package', (t) => { + t.deepEqual( + getPrintFundingReport({ + fund: true, + idealTree: { + name: 'foo', + version: '1.0.0', + children: [ + { + package: { + name: 'bar', + version: '1.0.0', + funding: { type: 'foo', url: 'http://example.com' } + } + } + ] + } + }), + `${EOL}1 package is looking for funding.${EOL}Run "npm fund" to find out more.`, + 'should print single package message' + ) + t.end() +}) + +test('print appropriate message for many packages', (t) => { + t.deepEqual( + getPrintFundingReport({ + fund: true, + idealTree: { + name: 'foo', + version: '1.0.0', + children: [ + { + package: { + name: 'bar', + version: '1.0.0', + funding: { type: 'foo', url: 'http://example.com' } + } + }, + { + package: { + name: 'lorem', + version: '1.0.0', + funding: { type: 'foo', url: 'http://example.com' } + } + }, + { + package: { + name: 'ipsum', + version: '1.0.0', + funding: { type: 'foo', url: 'http://example.com' } + } + } + ] + } + }), + `${EOL}3 packages are looking for funding.${EOL}Run "npm fund" to find out more.`, + 'should print many package message' + ) + t.end() +}) diff --git a/test/tap/repo.js b/test/tap/repo.js index 0ee50af192cb1..3e97fdeaed228 100644 --- a/test/tap/repo.js +++ b/test/tap/repo.js @@ -41,6 +41,41 @@ test('npm repo underscore', function (t) { }) }) +test('npm repo underscore --json', function (t) { + mr({ port: common.port }, function (er, s) { + common.npm([ + 'repo', 'underscore', + '--json', + '--registry=' + common.registry, + '--loglevel=silent', + '--no-browser' + ], opts, function (err, code, stdout, stderr) { + t.ifError(err, 'repo command ran without error') + t.equal(code, 0, 'exit ok') + t.matchSnapshot(stdout, 'should print json result') + s.close() + t.end() + }) + }) +}) + +test('npm repo underscore --no-browser', function (t) { + mr({ port: common.port }, function (er, s) { + common.npm([ + 'repo', 'underscore', + '--no-browser', + '--registry=' + common.registry, + '--loglevel=silent' + ], opts, function (err, code, stdout, stderr) { + t.ifError(err, 'repo command ran without error') + t.equal(code, 0, 'exit ok') + t.matchSnapshot(stdout, 'should print alternative msg') + s.close() + t.end() + }) + }) +}) + test('npm repo optimist - github (https://)', function (t) { mr({ port: common.port }, function (er, s) { common.npm([ diff --git a/test/tap/support.js b/test/tap/support.js deleted file mode 100644 index 93d4887423a13..0000000000000 --- a/test/tap/support.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict' -var test = require('tap').test -var Tacks = require('tacks') -var path = require('path') -var Dir = Tacks.Dir -var File = Tacks.File -var common = require('../common-tap.js') - -var fixturepath = common.pkg -var fixture = new Tacks(Dir({ - 'package.json': File({ - name: 'a', - version: '0.0.0', - dependencies: { 'hassupport': '7.7.7' } - }), - 'node_modules': Dir({ - hassupport: Dir({ - 'package.json': File({ - name: 'hassupport', - version: '7.7.7', - homepage: 'http://example.com/project', - support: 'http://example.com/project/donate' - }) - }) - }) -})) - -test('setup', function (t) { - fixture.remove(fixturepath) - fixture.create(fixturepath) - t.end() -}) - -test('support --json', function (t) { - common.npm(['support', '--json'], {cwd: fixturepath}, function (err, code, stdout, stderr) { - if (err) throw err - t.is(code, 0, 'exited 0') - t.is(stderr, '', 'no warnings') - var parsed - t.doesNotThrow(function () { - parsed = JSON.parse(stdout) - }, 'valid JSON') - t.deepEqual( - parsed, - [ - { - name: 'hassupport', - version: '7.7.7', - homepage: 'http://example.com/project', - support: 'http://example.com/project/donate', - path: path.resolve(fixturepath, 'node_modules', 'hassupport') - } - ], - 'output data' - ) - t.end() - }) -}) - -test('support', function (t) { - common.npm(['support'], {cwd: fixturepath}, function (err, code, stdout, stderr) { - if (err) throw err - t.is(code, 0, 'exited 0') - t.is(stderr, '', 'no warnings') - t.includes(stdout, 'hassupport', 'outputs project name') - t.includes(stdout, '7.7.7', 'outputs project version') - t.includes(stdout, 'http://example.com/project', 'outputs contributor homepage') - t.includes(stdout, 'http://example.com/project/donate', 'outputs support link') - t.end() - }) -}) - -test('cleanup', function (t) { - t.pass(fixturepath) - fixture.remove(fixturepath) - t.end() -}) diff --git a/test/tap/utils.funding.js b/test/tap/utils.funding.js new file mode 100644 index 0000000000000..60a7a1e67eb5a --- /dev/null +++ b/test/tap/utils.funding.js @@ -0,0 +1,480 @@ +'use strict' + +const { test } = require('tap') +const { getFundingInfo } = require('../../lib/utils/funding') + +test('empty tree', (t) => { + t.deepEqual( + getFundingInfo({}), + { + name: null, + dependencies: {}, + length: 0 + }, + 'should return empty list' + ) + t.end() +}) + +test('single item missing funding', (t) => { + t.deepEqual( + getFundingInfo({ name: 'project', + dependencies: { + 'single-item': { + name: 'single-item', + version: '1.0.0' + } + }}), + { + name: 'project', + dependencies: {}, + length: 0 + }, + 'should return empty list' + ) + t.end() +}) + +test('use path if name is missing', (t) => { + t.deepEqual( + getFundingInfo({ name: undefined, + path: '/tmp/foo', + children: { + 'single-item': { + name: 'single-item', + version: '1.0.0' + } + }}), + { + name: '/tmp/foo', + dependencies: {}, + length: 0 + }, + 'should use path as top level name' + ) + t.end() +}) + +test('single item tree', (t) => { + t.deepEqual( + getFundingInfo({ name: 'project', + dependencies: { + 'single-item': { + name: 'single-item', + version: '1.0.0', + funding: { + type: 'foo', + url: 'http://example.com' + } + } + }}), + { + name: 'project', + dependencies: { + 'single-item': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'http://example.com' + } + } + }, + length: 1 + }, + 'should return list with a single item' + ) + t.end() +}) + +test('duplicate items along the tree', (t) => { + t.deepEqual( + getFundingInfo({ name: 'project', + version: '2.3.4', + dependencies: { + 'single-item': { + name: 'single-item', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'shared-top-first': { + name: 'shared-top-first', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + }, + 'sub-dep': { + name: 'sub-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'shared-nested-first': { + name: 'shared-nested-first', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'shared-top-first': { + name: 'shared-top-first', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + } + } + }, + 'shared-nested-first': { + name: 'shared-nested-first', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + } + }}), + { + name: 'project', + version: '2.3.4', + dependencies: { + 'single-item': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'shared-top-first': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + }, + 'sub-dep': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + }, + 'shared-nested-first': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + } + }, + length: 4 + }, + 'should return list with a single item' + ) + t.end() +}) + +test('multi-level nested items tree', (t) => { + t.deepEqual( + getFundingInfo({ name: 'project', + dependencies: { + 'first-level-dep': { + name: 'first-level-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'sub-dep': { + name: 'sub-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + package: { + name: 'sub-sub-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: {} + } + } + } + } + } + }}), + { + name: 'project', + dependencies: { + 'first-level-dep': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'sub-dep': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'sub-sub-dep': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + } + } + } + }, + length: 3 + }, + 'should return list with all items' + ) + t.end() +}) + +test('missing fund nested items tree', (t) => { + t.deepEqual( + getFundingInfo({ name: 'project', + dependencies: { + 'first-level-dep': { + name: 'first-level-dep', + version: '1.0.0', + funding: { + type: 'foo' + }, + dependencies: { + 'sub-dep': { + name: 'sub-dep', + version: '1.0.0', + dependencies: { + 'sub-sub-dep-01': { + name: 'sub-sub-dep-01', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'non-funding-child': { + name: 'non-funding-child', + version: '1.0.0', + dependencies: { + 'sub-sub-sub-dep': { + name: 'sub-sub-sub-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + } + } + }, + 'sub-sub-dep-02': { + name: 'sub-sub-dep-02', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: {} + }, + 'sub-sub-dep-03': { + name: 'sub-sub-dep-03', + version: '1.0.0', + funding: { + type: 'foo', + url: 'git://example.git' + }, + dependencies: { + 'sub-sub-sub-dep-03': { + name: 'sub-sub-sub-dep-03', + version: '1.0.0', + dependencies: { + 'sub-sub-sub-sub-dep': { + name: 'sub-sub-sub-sub-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'http://example.com' + } + } + } + } + } + } + } + } + } + } + }}), + { + name: 'project', + dependencies: { + 'sub-sub-dep-01': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'sub-sub-sub-dep': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + }, + 'sub-sub-dep-02': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + }, + 'sub-sub-sub-sub-dep': { + version: '1.0.0', + funding: { + type: 'foo', + url: 'http://example.com' + } + } + }, + length: 4 + }, + 'should return list excluding missing funding items' + ) + t.end() +}) + +test('countOnly option', (t) => { + t.deepEqual( + getFundingInfo({ name: 'project', + dependencies: { + 'first-level-dep': { + name: 'first-level-dep', + version: '1.0.0', + funding: { + type: 'foo' + }, + dependencies: { + 'sub-dep': { + name: 'sub-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'sub-sub-dep': { + name: 'sub-sub-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + }, + dependencies: {} + } + }, + 'sub-sub-dep': { + name: 'sub-sub-dep', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + } + }}, { countOnly: true }), + { + length: 2 + }, + 'should return only the length property' + ) + t.end() +}) + +test('handle different versions', (t) => { + t.deepEqual( + getFundingInfo({ name: 'project', + dependencies: { + foo: { + name: 'foo', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + bar: { + name: 'bar', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + }, + lorem: { + dependencies: { + fooo: { + name: 'foo', + version: '2.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + }, + dependencies: { + 'foo-bar': { + name: 'foo-bar', + version: '1.0.0', + funding: { + type: 'foo', + url: 'https://example.com' + } + } + } + } + } + } + } + }, { countOnly: true }), + { + length: 4 + }, + 'should treat different versions as diff packages' + ) + t.end() +}) From b5110eaa0b1eae32b265ea07e03d06380cadf6c9 Mon Sep 17 00:00:00 2001 From: Ruy Adorno <ruyadorno@hotmail.com> Date: Tue, 5 Nov 2019 12:43:35 -0500 Subject: [PATCH 09/19] docs: removed refs to npm-index --- README.md | 1 - docs/content/cli-commands/npm-help.md | 1 - scripts/index-build.js | 58 --------------------------- 3 files changed, 60 deletions(-) delete mode 100755 scripts/index-build.js diff --git a/README.md b/README.md index bb33879fd0118..16c7e4b18cdf0 100644 --- a/README.md +++ b/README.md @@ -163,4 +163,3 @@ doubt tell you to put the output in a gist or email. * npm(1) * npm-help(1) -* npm-index(7) diff --git a/docs/content/cli-commands/npm-help.md b/docs/content/cli-commands/npm-help.md index 724382aae8c4a..c5fbbe78c4012 100755 --- a/docs/content/cli-commands/npm-help.md +++ b/docs/content/cli-commands/npm-help.md @@ -42,4 +42,3 @@ Set to `"browser"` to view html help content in the default web browser. * [npmrc](/configuring-npm/npmrc) * [package.json](/configuring-npm/package-json) * [npm help-search](/cli-commands/npm-help-search) -* [npm index](/cli-commands/npm-index) diff --git a/scripts/index-build.js b/scripts/index-build.js deleted file mode 100755 index e782716d77291..0000000000000 --- a/scripts/index-build.js +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env node -var fs = require('fs') -var path = require('path') -var root = path.resolve(__dirname, '..') -var glob = require('glob') -var conversion = { 'cli': 1, 'api': 3, 'files': 5, 'misc': 7 } - -glob(root + '/{README.md,doc/*/*.md}', function (er, files) { - if (er) throw er - - output(files.map(function (f) { - var b = path.basename(f) - if (b === 'README.md') return [0, b] - if (b === 'index.md') return null - var s = conversion[path.basename(path.dirname(f))] - return [s, f] - }).filter(function (f) { - return f - }).sort(function (a, b) { - return (a[0] === b[0]) - ? (path.basename(a[1]) === 'npm.md' ? -1 - : path.basename(b[1]) === 'npm.md' ? 1 - : a[1] > b[1] ? 1 : -1) - : a[0] - b[0] - })) -}) - -function output (files) { - console.log( - 'npm-index(7) -- Index of all npm documentation\n' + - '==============================================\n') - - writeLines(files, 0) - writeLines(files, 1, 'Command Line Documentation', 'Using npm on the command line') - writeLines(files, 3, 'API Documentation', 'Using npm in your Node programs') - writeLines(files, 5, 'Files', 'File system structures npm uses') - writeLines(files, 7, 'Misc', 'Various other bits and bobs') -} - -function writeLines (files, sxn, heading, desc) { - if (heading) { - console.log('## %s\n\n%s\n', heading, desc) - } - files.filter(function (f) { - return f[0] === sxn - }).forEach(writeLine) -} - -function writeLine (sd) { - var sxn = sd[0] || 1 - var doc = sd[1] - var d = path.basename(doc, '.md') - - var content = fs.readFileSync(doc, 'utf8').split('\n')[0].split('-- ')[1] - - console.log('### %s(%d)\n', d, sxn) - console.log(content + '\n') -} From 34fe7db7e8e11dc8c6843bef71a744f23995655d Mon Sep 17 00:00:00 2001 From: Darcy Clarke <darcy@darcyclarke.me> Date: Tue, 5 Nov 2019 10:57:59 -0500 Subject: [PATCH 10/19] chore: create settings.yml file - This will ensure we inherit our standard labels from the `open-source-project-boilerplate` PR-URL: https://github.com/npm/cli/pull/282 Credit: @darcyclarke Close: #282 Reviewed-by: @ruyadorno --- .github/settings.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/settings.yml diff --git a/.github/settings.yml b/.github/settings.yml new file mode 100644 index 0000000000000..4aaa0dd57e4ad --- /dev/null +++ b/.github/settings.yml @@ -0,0 +1,2 @@ +--- +_extends: 'open-source-project-boilerplate' From c6a5c3a965e5c91f43a3c080ffff02ca80501870 Mon Sep 17 00:00:00 2001 From: orion <oletizi@mac.com> Date: Thu, 31 Oct 2019 10:25:44 -0700 Subject: [PATCH 11/19] docs: added copy to the features page - Added an install page (copied from existing online docs) - Added a FeatureLink component to components/links.js --- docs/content/configuring-npm/install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/configuring-npm/install.md b/docs/content/configuring-npm/install.md index 4de8492dee948..9e4f222b40373 100644 --- a/docs/content/configuring-npm/install.md +++ b/docs/content/configuring-npm/install.md @@ -63,4 +63,4 @@ Or see [this page](https://nodejs.org/en/download/package-manager/) to install n For more information on installing Node.js on a variety of operating systems, see [this page][pkg-mgr]. -[pkg-mgr]: https://nodejs.org/en/download/package-manager/ \ No newline at end of file +[pkg-mgr]: https://nodejs.org/en/download/package-manager/ From 4ff1bb180b1db8c72e51b3d57bd4e268b738e049 Mon Sep 17 00:00:00 2001 From: orion <oletizi@mac.com> Date: Thu, 31 Oct 2019 15:16:35 -0700 Subject: [PATCH 12/19] docs: Updated lorem ipsum with real copy. Modified the copy of the "Publish" card to make the transition to npmjs.com/products less jarring PR-URL: https://github.com/npm/cli/pull/277 Credit: @oletizi Close: #277 Reviewed-by: @ruyadorno --- docs/src/components/home/DarkBlock.js | 10 ++++++++-- docs/src/components/home/Features.js | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/src/components/home/DarkBlock.js b/docs/src/components/home/DarkBlock.js index aebebcddcdf71..ebe77533141c1 100644 --- a/docs/src/components/home/DarkBlock.js +++ b/docs/src/components/home/DarkBlock.js @@ -18,13 +18,19 @@ const Text = styled.p` text-align: center; ` +const aStyle = { + color: '#fb3b49', + textDecoration: 'none' +} + const DarkBlock = () => { return ( <Container> <ContentWrapper px={4} py={6} m='auto' flexDirection='column'> <Text> - Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod Lorem ipsum dolor sit amet, tetuer adipiscing elit, sed diam nonummy nibmod - Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod Lorem ipsum dolor sit amet, tetuer adipiscing elit, sed diam nonummy nibmod + <p>The current stable version of npm is <a href={'https://github.com/npm/cli/releases/latest'} style={aStyle}>available on GitHub.</a></p> + <p>To upgrade, run: <code className={'language-text'} style={{color: 'white'}}>npm install npm@latest -g</code></p> + <p>To report bugs or submit feature requests, <a href={'#'} style={aStyle}>please XXX.</a></p> </Text> <Box pt={4}><LinkButton to='cli-commands/npm' w={'120px'}>read docs</LinkButton></Box> </ContentWrapper> diff --git a/docs/src/components/home/Features.js b/docs/src/components/home/Features.js index 330beca867401..0aac994bee029 100644 --- a/docs/src/components/home/Features.js +++ b/docs/src/components/home/Features.js @@ -25,7 +25,7 @@ const featureTexts = { textOne: 'Download, install, and configure.', textTwo: 'All available npm commands.', textThree: 'How npm things work.', - textFour: 'Publish your own public or private packages to the registry.' + textFour: 'Publish your own public or private packages to the registry with a free or paid account on npmjs.com from npm, Inc.' } const featureTitles = { From d3c859883abbdeb0ee6bb93ebb3a980a602dfff4 Mon Sep 17 00:00:00 2001 From: isaacs <i@izs.me> Date: Tue, 5 Nov 2019 10:14:35 -0800 Subject: [PATCH 13/19] doc: Move @VERSION@ for html docs into gatsby --- Makefile | 4 +--- docs/src/templates/Page.js | 5 ++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index c1f3751b44687..11e656c43a458 100644 --- a/Makefile +++ b/Makefile @@ -52,8 +52,6 @@ htmldocs: cd docs && node ../bin/npm-cli.js install && \ node ../bin/npm-cli.js run build:static echo>&2 && \ rm -rf node_modules .cache public/*js public/*json public/404* public/page-data public/manifest* - find docs/public -name '*.html' -exec \ - node scripts/docs-build.js {} \; docs: mandocs htmldocs @@ -92,7 +90,7 @@ man/man1/npx.1: node_modules/libnpx/libnpx.1 man/man5/npm-json.5: man/man5/package.json.5 cp $< $@ -man/man5/npm-global.5: man/man5/foslders.5 +man/man5/npm-global.5: man/man5/folders.5 cp $< $@ man/man5/%.5: docs/content/configuring-npm/%.md scripts/docs-build.js package.json $(build-doc-tools) diff --git a/docs/src/templates/Page.js b/docs/src/templates/Page.js index a79abf1719ef3..bd7d6a01ca3b3 100644 --- a/docs/src/templates/Page.js +++ b/docs/src/templates/Page.js @@ -5,6 +5,7 @@ import styled, { ThemeProvider } from 'styled-components' import {theme} from 'src/theme' import FoundTypo from 'src/components/FoundTypo' import Scripts from 'src/components/Scripts' +const version = require('../../../package.json').version const Content = styled.div` max-width: 760px; @@ -20,7 +21,9 @@ const Page = ({data}) => { <ThemeProvider theme={theme}> <Layout showSidebar> <Content className='documentation'> - <div dangerouslySetInnerHTML={{ __html: html }} /> + <div dangerouslySetInnerHTML={{ + __html: html.replace(/@VERSION@/g, version) + }} /> <FoundTypo /> <Scripts /> </Content> From 6700bfae560cc43234a57239ea7de678223d98c5 Mon Sep 17 00:00:00 2001 From: isaacs <i@izs.me> Date: Tue, 5 Nov 2019 10:22:35 -0800 Subject: [PATCH 14/19] doc: fix hyperlink refs in man page docs PR-URL: https://github.com/npm/cli/pull/283 Credit: @isaacs Close: #283 Reviewed-by: @ruyadorno --- scripts/docs-build.js | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/scripts/docs-build.js b/scripts/docs-build.js index fd7d74f642a0a..f6b87ae9d0445 100644 --- a/scripts/docs-build.js +++ b/scripts/docs-build.js @@ -10,22 +10,17 @@ var dest = args[1] || src fs.readFile(src, 'utf8', function (err, data) { if (err) return console.log(err) - var fileExt = src.split('.').pop() var result = data.replace(/@VERSION@/g, npm.version) + .replace(/---([\s\S]+)---/g, '') + .replace(/(npm-)?([a-zA-Z\\.-]*)\(1\)/g, 'npm help $2') + .replace(/(npm-)?([a-zA-Z\\.-]*)\((5|7)\)/g, 'npm help $2') + .replace(/npm(1)/g, 'npm help npm') + .replace(/\[([^\]]+)\]\(\/cli-commands\/([^)]+)\)/g, 'npm help $2') + .replace(/\[([^\]]+)\]\(\/configuring-npm\/([^)]+)\)/g, 'npm help $2') + .replace(/\[([^\]]+)\]\(\/using-npm\/([^)]+)\)/g, 'npm help $2') + .trim() - if (fileExt === 'md') { - result = marked( - result.replace(/---([\s\S]+)---/g, '') - .replace(/(npm-)?([a-zA-Z\\.-]*)\(1\)/g, 'npm help $2') - .replace(/(npm-)?([a-zA-Z\\.-]*)\((5|7)\)/g, 'npm help $2') - .replace(/(npm-)?([a-zA-Z\\.-]*)\(3\)/g, 'npm apihelp $2') - .replace(/npm(1)/g, 'npm help npm') - .replace(/npm(3)/g, 'npm apihelp npm') - .trim() - ) - } - - fs.writeFile(dest, result, 'utf8', function (err) { + fs.writeFile(dest, marked(result), 'utf8', function (err) { if (err) return console.log(err) }) }) From d3cb3abe8cee54bd2624acdcf8043932ef0d660a Mon Sep 17 00:00:00 2001 From: Ruy Adorno <ruyadorno@hotmail.com> Date: Tue, 5 Nov 2019 14:19:37 -0500 Subject: [PATCH 15/19] read-cmd-shim@1.0.5 --- node_modules/read-cmd-shim/index.js | 7 +++++++ node_modules/read-cmd-shim/package.json | 22 +++++++++++----------- package-lock.json | 6 +++--- package.json | 2 +- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/node_modules/read-cmd-shim/index.js b/node_modules/read-cmd-shim/index.js index f565ababe4e03..3af2512f6cb43 100644 --- a/node_modules/read-cmd-shim/index.js +++ b/node_modules/read-cmd-shim/index.js @@ -4,11 +4,18 @@ var fs = require('graceful-fs') function extractPath (path, cmdshimContents) { if (/[.]cmd$/.test(path)) { return extractPathFromCmd(cmdshimContents) + } else if (/[.]ps1$/.test(path)) { + return extractPathFromPowershell(cmdshimContents) } else { return extractPathFromCygwin(cmdshimContents) } } +function extractPathFromPowershell (cmdshimContents) { + var matches = cmdshimContents.match(/"[$]basedir[/]([^"]+?)"\s+[$]args/) + return matches && matches[1] +} + function extractPathFromCmd (cmdshimContents) { var matches = cmdshimContents.match(/"%(?:~dp0|dp0%)\\([^"]+?)"\s+%[*]/) return matches && matches[1] diff --git a/node_modules/read-cmd-shim/package.json b/node_modules/read-cmd-shim/package.json index df2fe27e7b170..101651109d4ff 100644 --- a/node_modules/read-cmd-shim/package.json +++ b/node_modules/read-cmd-shim/package.json @@ -1,29 +1,29 @@ { - "_from": "read-cmd-shim@1.0.4", - "_id": "read-cmd-shim@1.0.4", + "_from": "read-cmd-shim@1.0.5", + "_id": "read-cmd-shim@1.0.5", "_inBundle": false, - "_integrity": "sha512-Pqpl3qJ/QdOIjRYA0q5DND/gLvGOfpIz/fYVDGYpOXfW/lFrIttmLsBnd6IkyK10+JHU9zhsaudfvrQTBB9YFQ==", + "_integrity": "sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==", "_location": "/read-cmd-shim", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "read-cmd-shim@1.0.4", + "raw": "read-cmd-shim@1.0.5", "name": "read-cmd-shim", "escapedName": "read-cmd-shim", - "rawSpec": "1.0.4", + "rawSpec": "1.0.5", "saveSpec": null, - "fetchSpec": "1.0.4" + "fetchSpec": "1.0.5" }, "_requiredBy": [ "#USER", "/", "/gentle-fs" ], - "_resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.4.tgz", - "_shasum": "b4a53d43376211b45243f0072b6e603a8e37640d", - "_spec": "read-cmd-shim@1.0.4", - "_where": "/Users/claudiahdz/npm/cli", + "_resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", + "_shasum": "87e43eba50098ba5a32d0ceb583ab8e43b961c16", + "_spec": "read-cmd-shim@1.0.5", + "_where": "/Users/ruyadorno/Documents/workspace/cli", "author": { "name": "Rebecca Turner", "email": "me@re-becca.org", @@ -59,5 +59,5 @@ "pretest": "standard", "test": "tap test/*.js --100" }, - "version": "1.0.4" + "version": "1.0.5" } diff --git a/package-lock.json b/package-lock.json index 125f37f22e6c3..f8032f1f15072 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4845,9 +4845,9 @@ } }, "read-cmd-shim": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.4.tgz", - "integrity": "sha512-Pqpl3qJ/QdOIjRYA0q5DND/gLvGOfpIz/fYVDGYpOXfW/lFrIttmLsBnd6IkyK10+JHU9zhsaudfvrQTBB9YFQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", + "integrity": "sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==", "requires": { "graceful-fs": "^4.1.2" } diff --git a/package.json b/package.json index c9c6f2ac4dad6..7a7192a9ab1a8 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "query-string": "^6.8.2", "qw": "~1.0.1", "read": "~1.0.7", - "read-cmd-shim": "^1.0.4", + "read-cmd-shim": "^1.0.5", "read-installed": "~4.0.3", "read-package-json": "^2.1.0", "read-package-tree": "^5.3.1", From e4455409fe6fe9c198b250b488129171f0b4624a Mon Sep 17 00:00:00 2001 From: NoDocCat <nodoccat@outlook.com> Date: Mon, 4 Nov 2019 16:15:54 +0800 Subject: [PATCH 16/19] fix: on uninstall package, *.ps1 not delete PR-URL: https://github.com/npm/cli/pull/281 Credit: @NoDocCat Close: #281 Reviewed-by: @ruyadorno --- lib/unbuild.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/unbuild.js b/lib/unbuild.js index e06ee5eb30e20..3e8d3e4f1f3ed 100644 --- a/lib/unbuild.js +++ b/lib/unbuild.js @@ -78,8 +78,11 @@ function rmBins (pkg, folder, parent, top, cb) { const binRoot = top ? npm.bin : path.resolve(parent, '.bin') asyncMap(Object.keys(pkg.bin), function (b, cb) { if (process.platform === 'win32') { - chain([ [gentlyRm, path.resolve(binRoot, b) + '.cmd', true, folder], - [gentlyRm, path.resolve(binRoot, b), true, folder] ], cb) + chain([ + [gentlyRm, path.resolve(binRoot, b) + '.ps1', true, folder], + [gentlyRm, path.resolve(binRoot, b) + '.cmd', true, folder], + [gentlyRm, path.resolve(binRoot, b), true, folder] + ], cb) } else { gentlyRm(path.resolve(binRoot, b), true, folder, cb) } From ea99e3b16f3e911e759a4fd00d238af0d996fde4 Mon Sep 17 00:00:00 2001 From: Ruy Adorno <ruyadorno@hotmail.com> Date: Tue, 5 Nov 2019 14:33:49 -0500 Subject: [PATCH 17/19] docs: updated changelog for 6.13.0 --- CHANGELOG.md | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b7380a5fc37c..f655bd00ac8e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,51 @@ ## 6.13.0 (2019-11-05) -* [`9a2d8af84`](https://github.com/npm/cli/commit/9a2d8af84f7328f13d8f578cf4b150b9d5f09517) - [#240](https://github.com/npm/cli/pull/240) - Clean up some test flakiness and inconsistency - ([@isaacs](https://github.com/isaacs)) -* [`688cd97be`](https://github.com/npm/cli/commit/688cd97be94ca949719424ff69ff515a68c5caba) - [#272](https://github.com/npm/cli/pull/272) - use github actions for CI - ([@JasonEtco](https://github.com/JasonEtco)) +### NEW FEATURES + +* [`4414b06d9`](https://github.com/npm/cli/commit/4414b06d944c56bee05ccfb85260055a767ee334) + [#273](https://github.com/npm/cli/pull/273) + add fund command + ([@ruyadorno](https://github.com/ruyadorno)) + +### DOCUMENTATION + +* [`ae4c74d04`](https://github.com/npm/cli/commit/ae4c74d04f820a0255a92bdfe77ecf97af134fae) + [#274](https://github.com/npm/cli/pull/274) + migrate existing docs to gatsby + ([@claudiahdz](https://github.com/claudiahdz)) +* [`4ff1bb180`](https://github.com/npm/cli/commit/4ff1bb180b1db8c72e51b3d57bd4e268b738e049) + [#277](https://github.com/npm/cli/pull/277) + updated documentation copy + ([@oletizi](https://github.com/oletizi)) + +### BUG FIXES + +* [`e4455409f`](https://github.com/npm/cli/commit/e4455409fe6fe9c198b250b488129171f0b4624a) + [#281](https://github.com/npm/cli/pull/281) + delete ps1 files on package removal + ([@NoDocCat](https://github.com/NoDocCat)) +* [`cd14d4701`](https://github.com/npm/cli/commit/cd14d47014e8c96ffd6a18791e8752028b19d637) + [#279](https://github.com/npm/cli/pull/279) + update supported node list to remove v6.0, v6.1, v9.0 - v9.2 + ([@ljharb](https://github.com/ljharb)) ### DEPENDENCIES * [`a37296b20`](https://github.com/npm/cli/commit/a37296b20ca3e19c2bbfa78fedcfe695e03fda69) `pacote@9.5.9` +* [`d3cb3abe8`](https://github.com/npm/cli/commit/d3cb3abe8cee54bd2624acdcf8043932ef0d660a) + `read-cmd-shim@1.0.5` + +### TESTING + +* [`688cd97be`](https://github.com/npm/cli/commit/688cd97be94ca949719424ff69ff515a68c5caba) + [#272](https://github.com/npm/cli/pull/272) + use github actions for CI + ([@JasonEtco](https://github.com/JasonEtco)) +* [`9a2d8af84`](https://github.com/npm/cli/commit/9a2d8af84f7328f13d8f578cf4b150b9d5f09517) + [#240](https://github.com/npm/cli/pull/240) + Clean up some flakiness and inconsistency + ([@isaacs](https://github.com/isaacs)) ## 6.12.1 (2019-10-29) From a148bd0aca74b6c12251f26abe83a4a61677300f Mon Sep 17 00:00:00 2001 From: Ruy Adorno <ruyadorno@hotmail.com> Date: Tue, 5 Nov 2019 14:43:01 -0500 Subject: [PATCH 18/19] update AUTHORS --- AUTHORS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AUTHORS b/AUTHORS index 14356c0d919b5..173358ade7719 100644 --- a/AUTHORS +++ b/AUTHORS @@ -663,3 +663,7 @@ Christian Clauss <cclauss@me.com> Nikita Lebedev <bloomber111@gmail.com> Henrik Gemal <henrik@gemal.dk> Philip Harrison <philip@mailharrison.com> +Jason Etcovitch <jasonetco@github.com> +Darcy Clarke <darcy@darcyclarke.me> +orion <oletizi@mac.com> +NoDocCat <nodoccat@outlook.com> From 9c7161de7218b63d487131a4fb67e942b772820e Mon Sep 17 00:00:00 2001 From: Ruy Adorno <ruyadorno@hotmail.com> Date: Tue, 5 Nov 2019 14:43:01 -0500 Subject: [PATCH 19/19] 6.13.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8032f1f15072..36d43678bc538 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "npm", - "version": "6.12.1", + "version": "6.13.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7a7192a9ab1a8..931787dbda6f9 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "6.12.1", + "version": "6.13.0", "name": "npm", "description": "a package manager for JavaScript", "keywords": [