From 9bb36dc8cd9fabf5f4afb808b0f306751067b3f5 Mon Sep 17 00:00:00 2001 From: isaacs Date: Wed, 21 Oct 2020 14:03:43 -0700 Subject: [PATCH] Do not conflict on meta-peers that will not be replaced When in a situation where a project has dependencies on several members of a peer set, it was encountering a spurious ERESOLVE error if the entire set was being replaced, but _one_ of the members did not need to be. For example: ``` root -> (a@1, b@1, c@1) a@1 -> PEER(b@1, c@1) a@2 -> PEER(b@2, c@1) b@1 -> PEER(c@1) b@2 -> PEER(c@1) ``` resulting in the tree: ``` root +-- a@1 +-- b@1 +-- c@1 ``` If we try to upgrade both `a` and `b` to version 2, however, we would check the set of peers for each dependency node being replaced, and find that there was a `c` node with a non-peer dependency from the root node, and treat it as a conflict, even though there was no need for `c` to be modified at all! Resolve this by skipping the check when not doing `canPlacePeers` (since it's either already a conflict, or already set to be overridden by the version from the virtualRoot), and ignoring the conflict when a non-overridden node exists in the virtualRoot which meets the non-peer edge keeping the current dependency node in place. In those cases, either we will replace or keep the current node anyway, so there's no need to conflict on it. Fix: npm/cli#2000 --- lib/arborist/build-ideal-tree.js | 42 +- ...t-arborist-build-ideal-tree.js-TAP.test.js | 5299 +++++++++++++++-- test/arborist/build-ideal-tree.js | 517 +- test/fixtures/carbonium/package-lock.json | 2466 ++++++++ test/fixtures/carbonium/package.json | 9 + ...ting-peer-dep-conflict-chain-single-a.json | 156 + ...-peer-dep-conflict-chain-single-a.min.json | 63 + ...ting-peer-dep-conflict-chain-single-b.json | 164 + ...-peer-dep-conflict-chain-single-b.min.json | 71 + .../single-a/1/package.json | 7 + .../single-a/2/package.json | 7 + .../single-b/1/package.json | 8 + .../single-b/2/package.json | 8 + 13 files changed, 8101 insertions(+), 716 deletions(-) create mode 100644 test/fixtures/carbonium/package-lock.json create mode 100644 test/fixtures/carbonium/package.json create mode 100644 test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-a.json create mode 100644 test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-a.min.json create mode 100644 test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-b.json create mode 100644 test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-b.min.json create mode 100644 test/fixtures/testing-peer-dep-conflict-chain/single-a/1/package.json create mode 100644 test/fixtures/testing-peer-dep-conflict-chain/single-a/2/package.json create mode 100644 test/fixtures/testing-peer-dep-conflict-chain/single-b/1/package.json create mode 100644 test/fixtures/testing-peer-dep-conflict-chain/single-b/2/package.json diff --git a/lib/arborist/build-ideal-tree.js b/lib/arborist/build-ideal-tree.js index ae9965e2e..d0150d238 100644 --- a/lib/arborist/build-ideal-tree.js +++ b/lib/arborist/build-ideal-tree.js @@ -1339,20 +1339,36 @@ This is a one-time fix-up, please be patient... // If strict or ours, conflict. Otherwise, keep. if (isSource) { // check to see if the current module could go deeper in the tree - const peerSet = getPeerSet(current) let canReplace = true - OUTER: for (const p of peerSet) { - // if any have a non-peer dep from the target, or a peer dep if - // the target is root, then cannot safely replace and dupe deeper. - for (const edge of p.edgesIn) { - if (peerSet.has(edge.from)) - continue - - // only respect valid edges, however, since we're likely trying - // to fix the very one that's currently broken! - if (edge.from === target && edge.valid) { - canReplace = false - break OUTER + // only do this check when we're placing peers. when we're placing + // the original in the source, we know that the edge from the source + // is the thing we're trying to place, so its peer set will need to be + // placed here as well. the virtualRoot already has the appropriate + // overrides applied. + if (peerEntryEdge) { + const peerSet = getPeerSet(current) + OUTER: for (const p of peerSet) { + // if any have a non-peer dep from the target, or a peer dep if + // the target is root, then cannot safely replace and dupe deeper. + for (const edge of p.edgesIn) { + if (peerSet.has(edge.from)) + continue + + // only respect valid edges, however, since we're likely trying + // to fix the very one that's currently broken! If the virtual + // root's replacement is ok, and doesn't have any invalid edges + // indicating that it was an overridden peer, then ignore the + // conflict and continue. If it WAS an override, then we need + // to get the conflict here so that we can decide whether to + // accept the current dep node, clobber it, or fail the install. + if (edge.from === target && edge.valid) { + const rep = dep.parent.children.get(edge.name) + const override = rep && ([...rep.edgesIn].some(e => !e.valid)) + if (!rep || !rep.satisfies(edge) || override) { + canReplace = false + break OUTER + } + } } } } diff --git a/tap-snapshots/test-arborist-build-ideal-tree.js-TAP.test.js b/tap-snapshots/test-arborist-build-ideal-tree.js-TAP.test.js index af94cfcfd..18c6ce018 100644 --- a/tap-snapshots/test-arborist-build-ideal-tree.js-TAP.test.js +++ b/tap-snapshots/test-arborist-build-ideal-tree.js-TAP.test.js @@ -258,467 +258,613 @@ Node { } ` -exports[`test/arborist/build-ideal-tree.js TAP bad shrinkwrap file > bad shrinkwrap 1`] = ` +exports[`test/arborist/build-ideal-tree.js TAP allow updating when peer outside of explicit update set conflict, but resolves appropriately with --force > succeed if force applied 1`] = ` Node { "children": Map { - "@isaacs/testing-peer-deps-b" => Node { + "@isaacs/testing-peer-dep-conflict-chain-a" => Node { "edgesIn": Set { Edge { "from": "", - "name": "@isaacs/testing-peer-deps-b", - "spec": "1", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "2", "type": "prod", }, + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-e", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "2", + "type": "peer", + }, + Edge { + "error": "INVALID", + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "type": "peer", + }, + Edge { + "error": "INVALID", + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "type": "peer", + }, }, "edgesOut": Map { - "@isaacs/testing-peer-deps-c" => Edge { - "name": "@isaacs/testing-peer-deps-c", - "spec": "1", - "to": "node_modules/@isaacs/testing-peer-deps-c", + "@isaacs/testing-peer-dep-conflict-chain-b" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-b", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-b", "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-peer-deps-b", - "name": "@isaacs/testing-peer-deps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-b/-/testing-peer-deps-b-1.2.4.tgz", + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-a/-/testing-peer-dep-conflict-chain-a-2.0.0.tgz", }, - "@isaacs/testing-peer-deps-c" => Node { + "@isaacs/testing-peer-dep-conflict-chain-b" => Node { "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-peer-deps-b", - "name": "@isaacs/testing-peer-deps-c", - "spec": "1", + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "name": "@isaacs/testing-peer-dep-conflict-chain-b", + "spec": "2", "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-peer-deps-c", - "name": "@isaacs/testing-peer-deps-c", + "edgesOut": Map { + "@isaacs/testing-peer-dep-conflict-chain-c" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-c", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-c", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-b", "peer": true, - "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-c/-/testing-peer-deps-c-1.2.3.tgz", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-b/-/testing-peer-dep-conflict-chain-b-2.0.0.tgz", }, - "@isaacs/testing-peer-deps-d" => Node { - "children": Map { - "@isaacs/testing-peer-deps-a" => Node { - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-peer-deps-d", - "name": "@isaacs/testing-peer-deps-a", - "spec": "2", - "type": "prod", - }, - }, - "edgesOut": Map { - "@isaacs/testing-peer-deps-b" => Edge { - "name": "@isaacs/testing-peer-deps-b", - "spec": "2", - "to": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-b", - "type": "peer", - }, - }, - "location": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-a", - "name": "@isaacs/testing-peer-deps-a", - "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-a/-/testing-peer-deps-a-2.0.0.tgz", + "@isaacs/testing-peer-dep-conflict-chain-c" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-c", + "spec": "2", + "type": "peer", }, - "@isaacs/testing-peer-deps-b" => Node { - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-a", - "name": "@isaacs/testing-peer-deps-b", - "spec": "2", - "type": "peer", - }, - }, - "edgesOut": Map { - "@isaacs/testing-peer-deps-c" => Edge { - "name": "@isaacs/testing-peer-deps-c", - "spec": "2", - "to": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-c", - "type": "peer", - }, - }, - "location": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-b", - "name": "@isaacs/testing-peer-deps-b", - "peer": true, - "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-b/-/testing-peer-deps-b-2.0.1.tgz", + }, + "edgesOut": Map { + "@isaacs/testing-peer-dep-conflict-chain-d" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-d", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-d", + "type": "peer", }, - "@isaacs/testing-peer-deps-c" => Node { - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-b", - "name": "@isaacs/testing-peer-deps-c", - "spec": "2", - "type": "peer", - }, - }, - "location": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-c", - "name": "@isaacs/testing-peer-deps-c", - "peer": true, - "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-c/-/testing-peer-deps-c-2.0.0.tgz", + }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-c", + "name": "@isaacs/testing-peer-dep-conflict-chain-c", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-c/-/testing-peer-dep-conflict-chain-c-2.0.0.tgz", + }, + "@isaacs/testing-peer-dep-conflict-chain-d" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-c", + "name": "@isaacs/testing-peer-dep-conflict-chain-d", + "spec": "2", + "type": "peer", + }, + }, + "edgesOut": Map { + "@isaacs/testing-peer-dep-conflict-chain-e" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-e", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-e", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-d", + "name": "@isaacs/testing-peer-dep-conflict-chain-d", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-d/-/testing-peer-dep-conflict-chain-d-2.0.0.tgz", + }, + "@isaacs/testing-peer-dep-conflict-chain-e" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-d", + "name": "@isaacs/testing-peer-dep-conflict-chain-e", + "spec": "2", + "type": "peer", + }, + }, + "edgesOut": Map { + "@isaacs/testing-peer-dep-conflict-chain-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "type": "peer", }, }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-e", + "name": "@isaacs/testing-peer-dep-conflict-chain-e", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-e/-/testing-peer-dep-conflict-chain-e-2.0.0.tgz", + }, + "@isaacs/testing-peer-dep-conflict-chain-single-a" => Node { "edgesIn": Set { Edge { "from": "", - "name": "@isaacs/testing-peer-deps-d", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", "spec": "2", "type": "prod", }, + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "spec": "2", + "type": "peer", + }, }, "edgesOut": Map { - "@isaacs/testing-peer-deps-a" => Edge { - "name": "@isaacs/testing-peer-deps-a", + "@isaacs/testing-peer-dep-conflict-chain-a" => Edge { + "error": "INVALID", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-2.0.1.tgz", + }, + "@isaacs/testing-peer-dep-conflict-chain-single-b" => Node { + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", "spec": "2", - "to": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-a", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-peer-deps-d", - "name": "@isaacs/testing-peer-deps-d", - "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-d/-/testing-peer-deps-d-2.0.0.tgz", + "edgesOut": Map { + "@isaacs/testing-peer-dep-conflict-chain-a" => Edge { + "error": "INVALID", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "type": "peer", + }, + "@isaacs/testing-peer-dep-conflict-chain-single-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-2.0.1.tgz", }, }, "edgesOut": Map { - "@isaacs/testing-peer-deps-b" => Edge { - "name": "@isaacs/testing-peer-deps-b", - "spec": "1", - "to": "node_modules/@isaacs/testing-peer-deps-b", + "@isaacs/testing-peer-dep-conflict-chain-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", "type": "prod", }, - "@isaacs/testing-peer-deps-d" => Edge { - "name": "@isaacs/testing-peer-deps-d", + "@isaacs/testing-peer-dep-conflict-chain-single-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", "spec": "2", - "to": "node_modules/@isaacs/testing-peer-deps-d", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a", + "type": "prod", + }, + "@isaacs/testing-peer-dep-conflict-chain-single-b" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b", "type": "prod", }, }, "location": "", - "name": "testing-peer-deps-bad-sw", + "name": "build-ideal-tree-allow-updating-when-peer-outside-of-explicit-update-set-conflict-but-resolves-appropriately-with-force", "resolved": null, } ` -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, complete:true > no missing deps, because complete: true 1`] = ` +exports[`test/arborist/build-ideal-tree.js TAP allow updating when peer outside of explicit update set valid, no force required > must match snapshot 1`] = ` Node { "children": Map { - "@isaacs/testing-bundledeps" => Node { - "children": Map { - "@isaacs/testing-bundledeps-a" => Node { - "bundled": true, - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "type": "prod", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", - "type": "prod", - }, - }, - "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-a", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", - }, - "@isaacs/testing-bundledeps-b" => Node { - "bundled": true, - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "type": "prod", - }, - }, - "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", - }, - }, + "@isaacs/testing-peer-dep-conflict-chain-a" => Node { "edgesIn": Set { Edge { "from": "", - "name": "@isaacs/testing-bundledeps", - "spec": "*", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", "type": "prod", }, + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-e", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "type": "peer", + }, + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "type": "peer", + }, + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "type": "peer", + }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-a" => Edge { - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", - "type": "prod", - }, - "@isaacs/testing-bundledeps-c" => Edge { - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-c", - "type": "prod", + "@isaacs/testing-peer-dep-conflict-chain-b" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-b", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-b", + "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-a/-/testing-peer-dep-conflict-chain-a-1.0.0.tgz", }, - "@isaacs/testing-bundledeps-b" => Node { + "@isaacs/testing-peer-dep-conflict-chain-b" => Node { "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "type": "prod", + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "name": "@isaacs/testing-peer-dep-conflict-chain-b", + "spec": "1", + "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "edgesOut": Map { + "@isaacs/testing-peer-dep-conflict-chain-c" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-c", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-c", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-b", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-b/-/testing-peer-dep-conflict-chain-b-1.0.0.tgz", }, - "@isaacs/testing-bundledeps-c" => Node { + "@isaacs/testing-peer-dep-conflict-chain-c" => Node { "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "type": "prod", + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-c", + "spec": "1", + "type": "peer", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", - "type": "prod", + "@isaacs/testing-peer-dep-conflict-chain-d" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-d", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-d", + "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-c", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps" => Edge { - "name": "@isaacs/testing-bundledeps", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps", - "type": "prod", + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-c", + "name": "@isaacs/testing-peer-dep-conflict-chain-c", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-c/-/testing-peer-dep-conflict-chain-c-1.0.0.tgz", }, - }, - "location": "", - "name": "testing-bundledeps-empty", - "resolved": null, -} -` - -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, complete:true > no missing deps, because complete:true 1`] = ` -Node { - "children": Map { - "@isaacs/testing-bundledeps" => Node { - "bundled": true, - "children": Map { - "@isaacs/testing-bundledeps-a" => Node { - "bundled": true, - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "type": "prod", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", - "type": "prod", - }, - }, - "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-a", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + "@isaacs/testing-peer-dep-conflict-chain-d" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-c", + "name": "@isaacs/testing-peer-dep-conflict-chain-d", + "spec": "1", + "type": "peer", }, - "@isaacs/testing-bundledeps-b" => Node { - "bundled": true, - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "type": "prod", - }, - }, - "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "edgesOut": Map { + "@isaacs/testing-peer-dep-conflict-chain-e" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-e", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-e", + "type": "peer", }, }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-d", + "name": "@isaacs/testing-peer-dep-conflict-chain-d", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-d/-/testing-peer-dep-conflict-chain-d-1.0.0.tgz", + }, + "@isaacs/testing-peer-dep-conflict-chain-e" => Node { "edgesIn": Set { Edge { - "from": "", - "name": "@isaacs/testing-bundledeps", - "spec": "*", - "type": "prod", + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-d", + "name": "@isaacs/testing-peer-dep-conflict-chain-e", + "spec": "1", + "type": "peer", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-a" => Edge { - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", - "type": "prod", - }, - "@isaacs/testing-bundledeps-c" => Edge { - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-c", - "type": "prod", + "@isaacs/testing-peer-dep-conflict-chain-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-e", + "name": "@isaacs/testing-peer-dep-conflict-chain-e", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-e/-/testing-peer-dep-conflict-chain-e-1.0.0.tgz", }, - "@isaacs/testing-bundledeps-b" => Node { - "bundled": true, + "@isaacs/testing-peer-dep-conflict-chain-single-a" => Node { "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", + "from": "", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "spec": "2", "type": "prod", }, + Edge { + "from": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "spec": "2", + "type": "peer", + }, }, - "location": "node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "edgesOut": Map { + "@isaacs/testing-peer-dep-conflict-chain-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-2.0.1.tgz", }, - "@isaacs/testing-bundledeps-c" => Node { - "bundled": true, + "@isaacs/testing-peer-dep-conflict-chain-single-b" => Node { "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", + "from": "", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "spec": "2", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", - "type": "prod", + "@isaacs/testing-peer-dep-conflict-chain-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "type": "peer", + }, + "@isaacs/testing-peer-dep-conflict-chain-single-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a", + "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-c", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + "location": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-2.0.1.tgz", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps" => Edge { - "name": "@isaacs/testing-bundledeps", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps", + "@isaacs/testing-peer-dep-conflict-chain-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-a", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-a", + "type": "prod", + }, + "@isaacs/testing-peer-dep-conflict-chain-single-a" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a", + "type": "prod", + }, + "@isaacs/testing-peer-dep-conflict-chain-single-b" => Edge { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b", "type": "prod", }, }, "location": "", - "name": "testing-bundledeps-empty", + "name": "build-ideal-tree-allow-updating-when-peer-outside-of-explicit-update-set-valid-no-force-required", "resolved": null, } ` -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, empty > bundle deps testing 1`] = ` +exports[`test/arborist/build-ideal-tree.js TAP bad shrinkwrap file > bad shrinkwrap 1`] = ` Node { "children": Map { - "@isaacs/testing-bundledeps" => Node { + "@isaacs/testing-peer-deps-b" => Node { "edgesIn": Set { Edge { "from": "", - "name": "@isaacs/testing-bundledeps", - "spec": "*", + "name": "@isaacs/testing-peer-deps-b", + "spec": "1", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-a" => Edge { - "error": "MISSING", - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "to": null, - "type": "prod", - }, - "@isaacs/testing-bundledeps-c" => Edge { - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-c", - "type": "prod", + "@isaacs/testing-peer-deps-c" => Edge { + "name": "@isaacs/testing-peer-deps-c", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-deps-c", + "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + "location": "node_modules/@isaacs/testing-peer-deps-b", + "name": "@isaacs/testing-peer-deps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-b/-/testing-peer-deps-b-1.2.4.tgz", }, - "@isaacs/testing-bundledeps-b" => Node { + "@isaacs/testing-peer-deps-c" => Node { "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "type": "prod", + "from": "node_modules/@isaacs/testing-peer-deps-b", + "name": "@isaacs/testing-peer-deps-c", + "spec": "1", + "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "location": "node_modules/@isaacs/testing-peer-deps-c", + "name": "@isaacs/testing-peer-deps-c", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-c/-/testing-peer-deps-c-1.2.3.tgz", }, - "@isaacs/testing-bundledeps-c" => Node { + "@isaacs/testing-peer-deps-d" => Node { + "children": Map { + "@isaacs/testing-peer-deps-a" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-peer-deps-d", + "name": "@isaacs/testing-peer-deps-a", + "spec": "2", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-peer-deps-b" => Edge { + "name": "@isaacs/testing-peer-deps-b", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-b", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-a", + "name": "@isaacs/testing-peer-deps-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-a/-/testing-peer-deps-a-2.0.0.tgz", + }, + "@isaacs/testing-peer-deps-b" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-a", + "name": "@isaacs/testing-peer-deps-b", + "spec": "2", + "type": "peer", + }, + }, + "edgesOut": Map { + "@isaacs/testing-peer-deps-c" => Edge { + "name": "@isaacs/testing-peer-deps-c", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-c", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-b", + "name": "@isaacs/testing-peer-deps-b", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-b/-/testing-peer-deps-b-2.0.1.tgz", + }, + "@isaacs/testing-peer-deps-c" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-b", + "name": "@isaacs/testing-peer-deps-c", + "spec": "2", + "type": "peer", + }, + }, + "location": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-c", + "name": "@isaacs/testing-peer-deps-c", + "peer": true, + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-c/-/testing-peer-deps-c-2.0.0.tgz", + }, + }, "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", + "from": "", + "name": "@isaacs/testing-peer-deps-d", + "spec": "2", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", + "@isaacs/testing-peer-deps-a" => Edge { + "name": "@isaacs/testing-peer-deps-a", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-deps-d/node_modules/@isaacs/testing-peer-deps-a", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-c", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + "location": "node_modules/@isaacs/testing-peer-deps-d", + "name": "@isaacs/testing-peer-deps-d", + "resolved": "https://registry.npmjs.org/@isaacs/testing-peer-deps-d/-/testing-peer-deps-d-2.0.0.tgz", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps" => Edge { - "name": "@isaacs/testing-bundledeps", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps", + "@isaacs/testing-peer-deps-b" => Edge { + "name": "@isaacs/testing-peer-deps-b", + "spec": "1", + "to": "node_modules/@isaacs/testing-peer-deps-b", + "type": "prod", + }, + "@isaacs/testing-peer-deps-d" => Edge { + "name": "@isaacs/testing-peer-deps-d", + "spec": "2", + "to": "node_modules/@isaacs/testing-peer-deps-d", "type": "prod", }, }, "location": "", - "name": "testing-bundledeps-empty", + "name": "testing-peer-deps-bad-sw", "resolved": null, } ` -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, empty > should have some missing deps in the ideal tree 1`] = ` +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, complete:true > no missing deps, because complete: true 1`] = ` Node { "children": Map { "@isaacs/testing-bundledeps" => Node { - "bundled": true, + "children": Map { + "@isaacs/testing-bundledeps-a" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + }, "edgesIn": Set { Edge { "from": "", @@ -729,10 +875,9 @@ Node { }, "edgesOut": Map { "@isaacs/testing-bundledeps-a" => Edge { - "error": "MISSING", "name": "@isaacs/testing-bundledeps-a", "spec": "*", - "to": null, + "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", "type": "prod", }, "@isaacs/testing-bundledeps-c" => Edge { @@ -747,7 +892,6 @@ Node { "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", }, "@isaacs/testing-bundledeps-b" => Node { - "bundled": true, "edgesIn": Set { Edge { "from": "node_modules/@isaacs/testing-bundledeps-c", @@ -761,7 +905,6 @@ Node { "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", }, "@isaacs/testing-bundledeps-c" => Node { - "bundled": true, "edgesIn": Set { Edge { "from": "node_modules/@isaacs/testing-bundledeps", @@ -797,7 +940,7 @@ Node { } ` -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, full > add stuff, no missing deps 1`] = ` +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, complete:true > no missing deps, because complete:true 1`] = ` Node { "children": Map { "@isaacs/testing-bundledeps" => Node { @@ -855,408 +998,4364 @@ Node { "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", "type": "prod", }, - "@isaacs/testing-bundledeps-c" => Edge { - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-c", + "@isaacs/testing-bundledeps-c" => Edge { + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-c", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-c" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-c", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps" => Edge { + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps", + "type": "prod", + }, + }, + "location": "", + "name": "testing-bundledeps-empty", + "resolved": null, +} +` + +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, empty > bundle deps testing 1`] = ` +Node { + "children": Map { + "@isaacs/testing-bundledeps" => Node { + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-a" => Edge { + "error": "MISSING", + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "to": null, + "type": "prod", + }, + "@isaacs/testing-bundledeps-c" => Edge { + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-c", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-c" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-c", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps" => Edge { + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps", + "type": "prod", + }, + }, + "location": "", + "name": "testing-bundledeps-empty", + "resolved": null, +} +` + +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, empty > should have some missing deps in the ideal tree 1`] = ` +Node { + "children": Map { + "@isaacs/testing-bundledeps" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-a" => Edge { + "error": "MISSING", + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "to": null, + "type": "prod", + }, + "@isaacs/testing-bundledeps-c" => Edge { + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-c", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-c" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-c", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps" => Edge { + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps", + "type": "prod", + }, + }, + "location": "", + "name": "testing-bundledeps-empty", + "resolved": null, +} +` + +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, full > add stuff, no missing deps 1`] = ` +Node { + "children": Map { + "@isaacs/testing-bundledeps" => Node { + "bundled": true, + "children": Map { + "@isaacs/testing-bundledeps-a" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + }, + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-a" => Edge { + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "type": "prod", + }, + "@isaacs/testing-bundledeps-c" => Edge { + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-c", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-c" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-c", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-1.0.0.tgz", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps" => Edge { + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps", + "type": "prod", + }, + }, + "location": "", + "name": "testing-bundledeps", + "resolved": null, +} +` + +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, full > no missing deps 1`] = ` +Node { + "children": Map { + "@isaacs/testing-bundledeps" => Node { + "children": Map { + "@isaacs/testing-bundledeps-a" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + }, + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-a" => Edge { + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "type": "prod", + }, + "@isaacs/testing-bundledeps-c" => Edge { + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-c", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-c" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps", + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-c", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-1.0.0.tgz", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps" => Edge { + "name": "@isaacs/testing-bundledeps", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps", + "type": "prod", + }, + }, + "location": "", + "name": "testing-bundledeps", + "resolved": null, +} +` + +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 2 > add new bundled dep c 1`] = ` +Node { + "children": Map { + "@isaacs/testing-bundledeps-a" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-c" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-c", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-a" => Edge { + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-a", + "type": "prod", + }, + "@isaacs/testing-bundledeps-c" => Edge { + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-c", + "type": "prod", + }, + }, + "location": "", + "name": "testing-bundledeps-2", + "resolved": null, +} +` + +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 2 > bundle deps testing 1`] = ` +Node { + "children": Map { + "@isaacs/testing-bundledeps-a" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-a", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-b" => Node { + "bundled": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-a", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-c" => Node { + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-c", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-a" => Edge { + "name": "@isaacs/testing-bundledeps-a", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-a", + "type": "prod", + }, + "@isaacs/testing-bundledeps-c" => Edge { + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-c", + "type": "prod", + }, + }, + "location": "", + "name": "testing-bundledeps-2", + "resolved": null, +} +` + +exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 2 > remove bundled dependency a 1`] = ` +Node { + "children": Map { + "@isaacs/testing-bundledeps-b" => Node { + "edgesIn": Set { + Edge { + "from": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-b", + "name": "@isaacs/testing-bundledeps-b", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + }, + "@isaacs/testing-bundledeps-c" => Node { + "edgesIn": Set { + Edge { + "from": "", + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "type": "prod", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-b" => Edge { + "name": "@isaacs/testing-bundledeps-b", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-b", + "type": "prod", + }, + }, + "location": "node_modules/@isaacs/testing-bundledeps-c", + "name": "@isaacs/testing-bundledeps-c", + "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + }, + }, + "edgesOut": Map { + "@isaacs/testing-bundledeps-c" => Edge { + "name": "@isaacs/testing-bundledeps-c", + "spec": "*", + "to": "node_modules/@isaacs/testing-bundledeps-c", + "type": "prod", + }, + }, + "location": "", + "name": "testing-bundledeps-2", + "resolved": null, +} +` + +exports[`test/arborist/build-ideal-tree.js TAP carbonium eslint conflicts > must match snapshot 1`] = ` +Node { + "children": Map { + "@babel/code-frame" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "@babel/code-frame", + "spec": "^7.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "@babel/highlight" => Edge { + "name": "@babel/highlight", + "spec": "^7.10.4", + "to": "node_modules/@babel/highlight", + "type": "prod", + }, + }, + "location": "node_modules/@babel/code-frame", + "name": "@babel/code-frame", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + }, + "@babel/helper-validator-identifier" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight", + "name": "@babel/helper-validator-identifier", + "spec": "^7.10.4", + "type": "prod", + }, + }, + "location": "node_modules/@babel/helper-validator-identifier", + "name": "@babel/helper-validator-identifier", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + }, + "@babel/highlight" => Node { + "children": Map { + "ansi-styles" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight/node_modules/chalk", + "name": "ansi-styles", + "spec": "^3.2.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "color-convert" => Edge { + "name": "color-convert", + "spec": "^1.9.0", + "to": "node_modules/@babel/highlight/node_modules/color-convert", + "type": "prod", + }, + }, + "location": "node_modules/@babel/highlight/node_modules/ansi-styles", + "name": "ansi-styles", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + }, + "chalk" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight", + "name": "chalk", + "spec": "^2.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "ansi-styles" => Edge { + "name": "ansi-styles", + "spec": "^3.2.1", + "to": "node_modules/@babel/highlight/node_modules/ansi-styles", + "type": "prod", + }, + "escape-string-regexp" => Edge { + "name": "escape-string-regexp", + "spec": "^1.0.5", + "to": "node_modules/escape-string-regexp", + "type": "prod", + }, + "supports-color" => Edge { + "name": "supports-color", + "spec": "^5.3.0", + "to": "node_modules/@babel/highlight/node_modules/supports-color", + "type": "prod", + }, + }, + "location": "node_modules/@babel/highlight/node_modules/chalk", + "name": "chalk", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + }, + "color-convert" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight/node_modules/ansi-styles", + "name": "color-convert", + "spec": "^1.9.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "color-name" => Edge { + "name": "color-name", + "spec": "1.1.3", + "to": "node_modules/@babel/highlight/node_modules/color-name", + "type": "prod", + }, + }, + "location": "node_modules/@babel/highlight/node_modules/color-convert", + "name": "color-convert", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + }, + "color-name" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight/node_modules/color-convert", + "name": "color-name", + "spec": "1.1.3", + "type": "prod", + }, + }, + "location": "node_modules/@babel/highlight/node_modules/color-name", + "name": "color-name", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + }, + "has-flag" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight/node_modules/supports-color", + "name": "has-flag", + "spec": "^3.0.0", + "type": "prod", + }, + }, + "location": "node_modules/@babel/highlight/node_modules/has-flag", + "name": "has-flag", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + }, + "supports-color" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight/node_modules/chalk", + "name": "supports-color", + "spec": "^5.3.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "has-flag" => Edge { + "name": "has-flag", + "spec": "^3.0.0", + "to": "node_modules/@babel/highlight/node_modules/has-flag", + "type": "prod", + }, + }, + "location": "node_modules/@babel/highlight/node_modules/supports-color", + "name": "supports-color", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + }, + }, + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/code-frame", + "name": "@babel/highlight", + "spec": "^7.10.4", + "type": "prod", + }, + }, + "edgesOut": Map { + "@babel/helper-validator-identifier" => Edge { + "name": "@babel/helper-validator-identifier", + "spec": "^7.10.4", + "to": "node_modules/@babel/helper-validator-identifier", + "type": "prod", + }, + "chalk" => Edge { + "name": "chalk", + "spec": "^2.0.0", + "to": "node_modules/@babel/highlight/node_modules/chalk", + "type": "prod", + }, + "js-tokens" => Edge { + "name": "js-tokens", + "spec": "^4.0.0", + "to": "node_modules/js-tokens", + "type": "prod", + }, + }, + "location": "node_modules/@babel/highlight", + "name": "@babel/highlight", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + }, + "@eslint/eslintrc" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "@eslint/eslintrc", + "spec": "^0.1.3", + "type": "prod", + }, + }, + "edgesOut": Map { + "ajv" => Edge { + "name": "ajv", + "spec": "^6.12.4", + "to": "node_modules/ajv", + "type": "prod", + }, + "debug" => Edge { + "name": "debug", + "spec": "^4.1.1", + "to": "node_modules/debug", + "type": "prod", + }, + "espree" => Edge { + "name": "espree", + "spec": "^7.3.0", + "to": "node_modules/espree", + "type": "prod", + }, + "globals" => Edge { + "name": "globals", + "spec": "^12.1.0", + "to": "node_modules/globals", + "type": "prod", + }, + "ignore" => Edge { + "name": "ignore", + "spec": "^4.0.6", + "to": "node_modules/ignore", + "type": "prod", + }, + "import-fresh" => Edge { + "name": "import-fresh", + "spec": "^3.2.1", + "to": "node_modules/import-fresh", + "type": "prod", + }, + "js-yaml" => Edge { + "name": "js-yaml", + "spec": "^3.13.1", + "to": "node_modules/js-yaml", + "type": "prod", + }, + "lodash" => Edge { + "name": "lodash", + "spec": "^4.17.19", + "to": "node_modules/lodash", + "type": "prod", + }, + "minimatch" => Edge { + "name": "minimatch", + "spec": "^3.0.4", + "to": "node_modules/minimatch", + "type": "prod", + }, + "strip-json-comments" => Edge { + "name": "strip-json-comments", + "spec": "^3.1.1", + "to": "node_modules/strip-json-comments", + "type": "prod", + }, + }, + "location": "node_modules/@eslint/eslintrc", + "name": "@eslint/eslintrc", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + }, + "@nodelib/fs.scandir" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@nodelib/fs.walk", + "name": "@nodelib/fs.scandir", + "spec": "2.1.3", + "type": "prod", + }, + }, + "edgesOut": Map { + "@nodelib/fs.stat" => Edge { + "name": "@nodelib/fs.stat", + "spec": "2.0.3", + "to": "node_modules/@nodelib/fs.stat", + "type": "prod", + }, + "run-parallel" => Edge { + "name": "run-parallel", + "spec": "^1.1.9", + "to": "node_modules/run-parallel", + "type": "prod", + }, + }, + "location": "node_modules/@nodelib/fs.scandir", + "name": "@nodelib/fs.scandir", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + }, + "@nodelib/fs.stat" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@nodelib/fs.scandir", + "name": "@nodelib/fs.stat", + "spec": "2.0.3", + "type": "prod", + }, + Edge { + "from": "node_modules/fast-glob", + "name": "@nodelib/fs.stat", + "spec": "^2.0.2", + "type": "prod", + }, + }, + "location": "node_modules/@nodelib/fs.stat", + "name": "@nodelib/fs.stat", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + }, + "@nodelib/fs.walk" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/fast-glob", + "name": "@nodelib/fs.walk", + "spec": "^1.2.3", + "type": "prod", + }, + }, + "edgesOut": Map { + "@nodelib/fs.scandir" => Edge { + "name": "@nodelib/fs.scandir", + "spec": "2.1.3", + "to": "node_modules/@nodelib/fs.scandir", + "type": "prod", + }, + "fastq" => Edge { + "name": "fastq", + "spec": "^1.6.0", + "to": "node_modules/fastq", + "type": "prod", + }, + }, + "location": "node_modules/@nodelib/fs.walk", + "name": "@nodelib/fs.walk", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + }, + "@types/json-schema" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/experimental-utils", + "name": "@types/json-schema", + "spec": "^7.0.3", + "type": "prod", + }, + }, + "location": "node_modules/@types/json-schema", + "name": "@types/json-schema", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + }, + "@typescript-eslint/eslint-plugin" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "", + "name": "@typescript-eslint/eslint-plugin", + "spec": "4", + "type": "dev", + }, + }, + "edgesOut": Map { + "@typescript-eslint/experimental-utils" => Edge { + "name": "@typescript-eslint/experimental-utils", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/experimental-utils", + "type": "prod", + }, + "@typescript-eslint/parser" => Edge { + "name": "@typescript-eslint/parser", + "spec": "^4.0.0", + "to": "node_modules/@typescript-eslint/parser", + "type": "peer", + }, + "@typescript-eslint/scope-manager" => Edge { + "name": "@typescript-eslint/scope-manager", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/scope-manager", + "type": "prod", + }, + "debug" => Edge { + "name": "debug", + "spec": "^4.1.1", + "to": "node_modules/debug", + "type": "prod", + }, + "eslint" => Edge { + "name": "eslint", + "spec": "^5.0.0 || ^6.0.0 || ^7.0.0", + "to": "node_modules/eslint", + "type": "peer", + }, + "functional-red-black-tree" => Edge { + "name": "functional-red-black-tree", + "spec": "^1.0.1", + "to": "node_modules/functional-red-black-tree", + "type": "prod", + }, + "regexpp" => Edge { + "name": "regexpp", + "spec": "^3.0.0", + "to": "node_modules/regexpp", + "type": "prod", + }, + "semver" => Edge { + "name": "semver", + "spec": "^7.3.2", + "to": "node_modules/semver", + "type": "prod", + }, + "tsutils" => Edge { + "name": "tsutils", + "spec": "^3.17.1", + "to": "node_modules/tsutils", + "type": "prod", + }, + }, + "location": "node_modules/@typescript-eslint/eslint-plugin", + "name": "@typescript-eslint/eslint-plugin", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.4.1.tgz", + }, + "@typescript-eslint/experimental-utils" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "@typescript-eslint/experimental-utils", + "spec": "4.4.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "@types/json-schema" => Edge { + "name": "@types/json-schema", + "spec": "^7.0.3", + "to": "node_modules/@types/json-schema", + "type": "prod", + }, + "@typescript-eslint/scope-manager" => Edge { + "name": "@typescript-eslint/scope-manager", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/scope-manager", + "type": "prod", + }, + "@typescript-eslint/types" => Edge { + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/types", + "type": "prod", + }, + "@typescript-eslint/typescript-estree" => Edge { + "name": "@typescript-eslint/typescript-estree", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/typescript-estree", + "type": "prod", + }, + "eslint" => Edge { + "name": "eslint", + "spec": "*", + "to": "node_modules/eslint", + "type": "peer", + }, + "eslint-scope" => Edge { + "name": "eslint-scope", + "spec": "^5.0.0", + "to": "node_modules/eslint-scope", + "type": "prod", + }, + "eslint-utils" => Edge { + "name": "eslint-utils", + "spec": "^2.0.0", + "to": "node_modules/eslint-utils", + "type": "prod", + }, + }, + "location": "node_modules/@typescript-eslint/experimental-utils", + "name": "@typescript-eslint/experimental-utils", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.4.1.tgz", + }, + "@typescript-eslint/parser" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "", + "name": "@typescript-eslint/parser", + "spec": "4", + "type": "dev", + }, + Edge { + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "@typescript-eslint/parser", + "spec": "^4.0.0", + "type": "peer", + }, + }, + "edgesOut": Map { + "@typescript-eslint/scope-manager" => Edge { + "name": "@typescript-eslint/scope-manager", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/scope-manager", + "type": "prod", + }, + "@typescript-eslint/types" => Edge { + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/types", + "type": "prod", + }, + "@typescript-eslint/typescript-estree" => Edge { + "name": "@typescript-eslint/typescript-estree", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/typescript-estree", + "type": "prod", + }, + "debug" => Edge { + "name": "debug", + "spec": "^4.1.1", + "to": "node_modules/debug", + "type": "prod", + }, + "eslint" => Edge { + "name": "eslint", + "spec": "^5.0.0 || ^6.0.0 || ^7.0.0", + "to": "node_modules/eslint", + "type": "peer", + }, + }, + "location": "node_modules/@typescript-eslint/parser", + "name": "@typescript-eslint/parser", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.4.1.tgz", + }, + "@typescript-eslint/scope-manager" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "@typescript-eslint/scope-manager", + "spec": "4.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/experimental-utils", + "name": "@typescript-eslint/scope-manager", + "spec": "4.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/parser", + "name": "@typescript-eslint/scope-manager", + "spec": "4.4.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "@typescript-eslint/types" => Edge { + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/types", + "type": "prod", + }, + "@typescript-eslint/visitor-keys" => Edge { + "name": "@typescript-eslint/visitor-keys", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/visitor-keys", + "type": "prod", + }, + }, + "location": "node_modules/@typescript-eslint/scope-manager", + "name": "@typescript-eslint/scope-manager", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.4.1.tgz", + }, + "@typescript-eslint/types" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/experimental-utils", + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/parser", + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/scope-manager", + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/typescript-estree", + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/visitor-keys", + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "type": "prod", + }, + }, + "location": "node_modules/@typescript-eslint/types", + "name": "@typescript-eslint/types", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.4.1.tgz", + }, + "@typescript-eslint/typescript-estree" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/experimental-utils", + "name": "@typescript-eslint/typescript-estree", + "spec": "4.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/parser", + "name": "@typescript-eslint/typescript-estree", + "spec": "4.4.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "@typescript-eslint/types" => Edge { + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/types", + "type": "prod", + }, + "@typescript-eslint/visitor-keys" => Edge { + "name": "@typescript-eslint/visitor-keys", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/visitor-keys", + "type": "prod", + }, + "debug" => Edge { + "name": "debug", + "spec": "^4.1.1", + "to": "node_modules/debug", + "type": "prod", + }, + "globby" => Edge { + "name": "globby", + "spec": "^11.0.1", + "to": "node_modules/globby", + "type": "prod", + }, + "is-glob" => Edge { + "name": "is-glob", + "spec": "^4.0.1", + "to": "node_modules/is-glob", + "type": "prod", + }, + "lodash" => Edge { + "name": "lodash", + "spec": "^4.17.15", + "to": "node_modules/lodash", + "type": "prod", + }, + "semver" => Edge { + "name": "semver", + "spec": "^7.3.2", + "to": "node_modules/semver", + "type": "prod", + }, + "tsutils" => Edge { + "name": "tsutils", + "spec": "^3.17.1", + "to": "node_modules/tsutils", + "type": "prod", + }, + }, + "location": "node_modules/@typescript-eslint/typescript-estree", + "name": "@typescript-eslint/typescript-estree", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.1.tgz", + }, + "@typescript-eslint/visitor-keys" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/scope-manager", + "name": "@typescript-eslint/visitor-keys", + "spec": "4.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/typescript-estree", + "name": "@typescript-eslint/visitor-keys", + "spec": "4.4.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "@typescript-eslint/types" => Edge { + "name": "@typescript-eslint/types", + "spec": "4.4.1", + "to": "node_modules/@typescript-eslint/types", + "type": "prod", + }, + "eslint-visitor-keys" => Edge { + "name": "eslint-visitor-keys", + "spec": "^2.0.0", + "to": "node_modules/eslint-visitor-keys", + "type": "prod", + }, + }, + "location": "node_modules/@typescript-eslint/visitor-keys", + "name": "@typescript-eslint/visitor-keys", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.4.1.tgz", + }, + "acorn" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/acorn-jsx", + "name": "acorn", + "spec": "^6.0.0 || ^7.0.0 || ^8.0.0", + "type": "peer", + }, + Edge { + "from": "node_modules/espree", + "name": "acorn", + "spec": "^7.4.0", + "type": "prod", + }, + }, + "location": "node_modules/acorn", + "name": "acorn", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + }, + "acorn-jsx" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/espree", + "name": "acorn-jsx", + "spec": "^5.2.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "acorn" => Edge { + "name": "acorn", + "spec": "^6.0.0 || ^7.0.0 || ^8.0.0", + "to": "node_modules/acorn", + "type": "peer", + }, + }, + "location": "node_modules/acorn-jsx", + "name": "acorn-jsx", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + }, + "ajv" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "ajv", + "spec": "^6.12.4", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "ajv", + "spec": "^6.10.0", + "type": "prod", + }, + Edge { + "from": "node_modules/table", + "name": "ajv", + "spec": "^6.10.2", + "type": "prod", + }, + }, + "edgesOut": Map { + "fast-deep-equal" => Edge { + "name": "fast-deep-equal", + "spec": "^3.1.1", + "to": "node_modules/fast-deep-equal", + "type": "prod", + }, + "fast-json-stable-stringify" => Edge { + "name": "fast-json-stable-stringify", + "spec": "^2.0.0", + "to": "node_modules/fast-json-stable-stringify", + "type": "prod", + }, + "json-schema-traverse" => Edge { + "name": "json-schema-traverse", + "spec": "^0.4.1", + "to": "node_modules/json-schema-traverse", + "type": "prod", + }, + "uri-js" => Edge { + "name": "uri-js", + "spec": "^4.2.2", + "to": "node_modules/uri-js", + "type": "prod", + }, + }, + "location": "node_modules/ajv", + "name": "ajv", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + }, + "ansi-colors" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/enquirer", + "name": "ansi-colors", + "spec": "^4.1.1", + "type": "prod", + }, + }, + "location": "node_modules/ansi-colors", + "name": "ansi-colors", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + }, + "ansi-regex" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/strip-ansi", + "name": "ansi-regex", + "spec": "^5.0.0", + "type": "prod", + }, + }, + "location": "node_modules/ansi-regex", + "name": "ansi-regex", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + }, + "ansi-styles" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/chalk", + "name": "ansi-styles", + "spec": "^4.1.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "color-convert" => Edge { + "name": "color-convert", + "spec": "^2.0.1", + "to": "node_modules/color-convert", + "type": "prod", + }, + }, + "location": "node_modules/ansi-styles", + "name": "ansi-styles", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + }, + "argparse" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/js-yaml", + "name": "argparse", + "spec": "^1.0.7", + "type": "prod", + }, + }, + "edgesOut": Map { + "sprintf-js" => Edge { + "name": "sprintf-js", + "spec": "~1.0.2", + "to": "node_modules/sprintf-js", + "type": "prod", + }, + }, + "location": "node_modules/argparse", + "name": "argparse", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + }, + "array-union" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/globby", + "name": "array-union", + "spec": "^2.1.0", + "type": "prod", + }, + }, + "location": "node_modules/array-union", + "name": "array-union", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + }, + "astral-regex" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/slice-ansi", + "name": "astral-regex", + "spec": "^1.0.0", + "type": "prod", + }, + }, + "location": "node_modules/astral-regex", + "name": "astral-regex", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + }, + "balanced-match" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/brace-expansion", + "name": "balanced-match", + "spec": "^1.0.0", + "type": "prod", + }, + }, + "location": "node_modules/balanced-match", + "name": "balanced-match", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + }, + "brace-expansion" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/minimatch", + "name": "brace-expansion", + "spec": "^1.1.7", + "type": "prod", + }, + }, + "edgesOut": Map { + "balanced-match" => Edge { + "name": "balanced-match", + "spec": "^1.0.0", + "to": "node_modules/balanced-match", + "type": "prod", + }, + "concat-map" => Edge { + "name": "concat-map", + "spec": "0.0.1", + "to": "node_modules/concat-map", + "type": "prod", + }, + }, + "location": "node_modules/brace-expansion", + "name": "brace-expansion", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + }, + "braces" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/micromatch", + "name": "braces", + "spec": "^3.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "fill-range" => Edge { + "name": "fill-range", + "spec": "^7.0.1", + "to": "node_modules/fill-range", + "type": "prod", + }, + }, + "location": "node_modules/braces", + "name": "braces", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + }, + "callsites" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/parent-module", + "name": "callsites", + "spec": "^3.0.0", + "type": "prod", + }, + }, + "location": "node_modules/callsites", + "name": "callsites", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + }, + "chalk" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "chalk", + "spec": "^4.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "ansi-styles" => Edge { + "name": "ansi-styles", + "spec": "^4.1.0", + "to": "node_modules/ansi-styles", + "type": "prod", + }, + "supports-color" => Edge { + "name": "supports-color", + "spec": "^7.1.0", + "to": "node_modules/supports-color", + "type": "prod", + }, + }, + "location": "node_modules/chalk", + "name": "chalk", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + }, + "color-convert" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/ansi-styles", + "name": "color-convert", + "spec": "^2.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "color-name" => Edge { + "name": "color-name", + "spec": "~1.1.4", + "to": "node_modules/color-name", + "type": "prod", + }, + }, + "location": "node_modules/color-convert", + "name": "color-convert", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + }, + "color-name" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/color-convert", + "name": "color-name", + "spec": "~1.1.4", + "type": "prod", + }, + }, + "location": "node_modules/color-name", + "name": "color-name", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + }, + "concat-map" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/brace-expansion", + "name": "concat-map", + "spec": "0.0.1", + "type": "prod", + }, + }, + "location": "node_modules/concat-map", + "name": "concat-map", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + }, + "cross-spawn" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "cross-spawn", + "spec": "^7.0.2", + "type": "prod", + }, + }, + "edgesOut": Map { + "path-key" => Edge { + "name": "path-key", + "spec": "^3.1.0", + "to": "node_modules/path-key", + "type": "prod", + }, + "shebang-command" => Edge { + "name": "shebang-command", + "spec": "^2.0.0", + "to": "node_modules/shebang-command", + "type": "prod", + }, + "which" => Edge { + "name": "which", + "spec": "^2.0.1", + "to": "node_modules/which", + "type": "prod", + }, + }, + "location": "node_modules/cross-spawn", + "name": "cross-spawn", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + }, + "debug" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "debug", + "spec": "^4.1.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "debug", + "spec": "^4.1.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/parser", + "name": "debug", + "spec": "^4.1.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/typescript-estree", + "name": "debug", + "spec": "^4.1.1", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "debug", + "spec": "^4.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "ms" => Edge { + "name": "ms", + "spec": "2.1.2", + "to": "node_modules/ms", + "type": "prod", + }, + }, + "location": "node_modules/debug", + "name": "debug", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + }, + "deep-is" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/optionator", + "name": "deep-is", + "spec": "^0.1.3", + "type": "prod", + }, + }, + "location": "node_modules/deep-is", + "name": "deep-is", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + }, + "dir-glob" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/globby", + "name": "dir-glob", + "spec": "^3.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "path-type" => Edge { + "name": "path-type", + "spec": "^4.0.0", + "to": "node_modules/path-type", + "type": "prod", + }, + }, + "location": "node_modules/dir-glob", + "name": "dir-glob", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + }, + "doctrine" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "doctrine", + "spec": "^3.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "esutils" => Edge { + "name": "esutils", + "spec": "^2.0.2", + "to": "node_modules/esutils", + "type": "prod", + }, + }, + "location": "node_modules/doctrine", + "name": "doctrine", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + }, + "emoji-regex" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/string-width", + "name": "emoji-regex", + "spec": "^7.0.1", + "type": "prod", + }, + }, + "location": "node_modules/emoji-regex", + "name": "emoji-regex", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + }, + "enquirer" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "enquirer", + "spec": "^2.3.5", + "type": "prod", + }, + }, + "edgesOut": Map { + "ansi-colors" => Edge { + "name": "ansi-colors", + "spec": "^4.1.1", + "to": "node_modules/ansi-colors", + "type": "prod", + }, + }, + "location": "node_modules/enquirer", + "name": "enquirer", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + }, + "escape-string-regexp" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight/node_modules/chalk", + "name": "escape-string-regexp", + "spec": "^1.0.5", + "type": "prod", + }, + }, + "location": "node_modules/escape-string-regexp", + "name": "escape-string-regexp", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + }, + "eslint" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "", + "name": "eslint", + "spec": "^7", + "type": "dev", + }, + Edge { + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "eslint", + "spec": "^5.0.0 || ^6.0.0 || ^7.0.0", + "type": "peer", + }, + Edge { + "from": "node_modules/@typescript-eslint/experimental-utils", + "name": "eslint", + "spec": "*", + "type": "peer", + }, + Edge { + "from": "node_modules/@typescript-eslint/parser", + "name": "eslint", + "spec": "^5.0.0 || ^6.0.0 || ^7.0.0", + "type": "peer", + }, + }, + "edgesOut": Map { + "@babel/code-frame" => Edge { + "name": "@babel/code-frame", + "spec": "^7.0.0", + "to": "node_modules/@babel/code-frame", + "type": "prod", + }, + "@eslint/eslintrc" => Edge { + "name": "@eslint/eslintrc", + "spec": "^0.1.3", + "to": "node_modules/@eslint/eslintrc", + "type": "prod", + }, + "ajv" => Edge { + "name": "ajv", + "spec": "^6.10.0", + "to": "node_modules/ajv", + "type": "prod", + }, + "chalk" => Edge { + "name": "chalk", + "spec": "^4.0.0", + "to": "node_modules/chalk", + "type": "prod", + }, + "cross-spawn" => Edge { + "name": "cross-spawn", + "spec": "^7.0.2", + "to": "node_modules/cross-spawn", + "type": "prod", + }, + "debug" => Edge { + "name": "debug", + "spec": "^4.0.1", + "to": "node_modules/debug", + "type": "prod", + }, + "doctrine" => Edge { + "name": "doctrine", + "spec": "^3.0.0", + "to": "node_modules/doctrine", + "type": "prod", + }, + "enquirer" => Edge { + "name": "enquirer", + "spec": "^2.3.5", + "to": "node_modules/enquirer", + "type": "prod", + }, + "eslint-scope" => Edge { + "name": "eslint-scope", + "spec": "^5.1.1", + "to": "node_modules/eslint-scope", + "type": "prod", + }, + "eslint-utils" => Edge { + "name": "eslint-utils", + "spec": "^2.1.0", + "to": "node_modules/eslint-utils", + "type": "prod", + }, + "eslint-visitor-keys" => Edge { + "name": "eslint-visitor-keys", + "spec": "^2.0.0", + "to": "node_modules/eslint-visitor-keys", + "type": "prod", + }, + "espree" => Edge { + "name": "espree", + "spec": "^7.3.0", + "to": "node_modules/espree", + "type": "prod", + }, + "esquery" => Edge { + "name": "esquery", + "spec": "^1.2.0", + "to": "node_modules/esquery", + "type": "prod", + }, + "esutils" => Edge { + "name": "esutils", + "spec": "^2.0.2", + "to": "node_modules/esutils", + "type": "prod", + }, + "file-entry-cache" => Edge { + "name": "file-entry-cache", + "spec": "^5.0.1", + "to": "node_modules/file-entry-cache", + "type": "prod", + }, + "functional-red-black-tree" => Edge { + "name": "functional-red-black-tree", + "spec": "^1.0.1", + "to": "node_modules/functional-red-black-tree", + "type": "prod", + }, + "glob-parent" => Edge { + "name": "glob-parent", + "spec": "^5.0.0", + "to": "node_modules/glob-parent", + "type": "prod", + }, + "globals" => Edge { + "name": "globals", + "spec": "^12.1.0", + "to": "node_modules/globals", + "type": "prod", + }, + "ignore" => Edge { + "name": "ignore", + "spec": "^4.0.6", + "to": "node_modules/ignore", + "type": "prod", + }, + "import-fresh" => Edge { + "name": "import-fresh", + "spec": "^3.0.0", + "to": "node_modules/import-fresh", + "type": "prod", + }, + "imurmurhash" => Edge { + "name": "imurmurhash", + "spec": "^0.1.4", + "to": "node_modules/imurmurhash", + "type": "prod", + }, + "is-glob" => Edge { + "name": "is-glob", + "spec": "^4.0.0", + "to": "node_modules/is-glob", + "type": "prod", + }, + "js-yaml" => Edge { + "name": "js-yaml", + "spec": "^3.13.1", + "to": "node_modules/js-yaml", + "type": "prod", + }, + "json-stable-stringify-without-jsonify" => Edge { + "name": "json-stable-stringify-without-jsonify", + "spec": "^1.0.1", + "to": "node_modules/json-stable-stringify-without-jsonify", + "type": "prod", + }, + "levn" => Edge { + "name": "levn", + "spec": "^0.4.1", + "to": "node_modules/levn", + "type": "prod", + }, + "lodash" => Edge { + "name": "lodash", + "spec": "^4.17.19", + "to": "node_modules/lodash", + "type": "prod", + }, + "minimatch" => Edge { + "name": "minimatch", + "spec": "^3.0.4", + "to": "node_modules/minimatch", + "type": "prod", + }, + "natural-compare" => Edge { + "name": "natural-compare", + "spec": "^1.4.0", + "to": "node_modules/natural-compare", + "type": "prod", + }, + "optionator" => Edge { + "name": "optionator", + "spec": "^0.9.1", + "to": "node_modules/optionator", + "type": "prod", + }, + "progress" => Edge { + "name": "progress", + "spec": "^2.0.0", + "to": "node_modules/progress", + "type": "prod", + }, + "regexpp" => Edge { + "name": "regexpp", + "spec": "^3.1.0", + "to": "node_modules/regexpp", + "type": "prod", + }, + "semver" => Edge { + "name": "semver", + "spec": "^7.2.1", + "to": "node_modules/semver", + "type": "prod", + }, + "strip-ansi" => Edge { + "name": "strip-ansi", + "spec": "^6.0.0", + "to": "node_modules/strip-ansi", + "type": "prod", + }, + "strip-json-comments" => Edge { + "name": "strip-json-comments", + "spec": "^3.1.0", + "to": "node_modules/strip-json-comments", + "type": "prod", + }, + "table" => Edge { + "name": "table", + "spec": "^5.2.3", + "to": "node_modules/table", + "type": "prod", + }, + "text-table" => Edge { + "name": "text-table", + "spec": "^0.2.0", + "to": "node_modules/text-table", + "type": "prod", + }, + "v8-compile-cache" => Edge { + "name": "v8-compile-cache", + "spec": "^2.0.3", + "to": "node_modules/v8-compile-cache", + "type": "prod", + }, + }, + "location": "node_modules/eslint", + "name": "eslint", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + }, + "eslint-scope" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/experimental-utils", + "name": "eslint-scope", + "spec": "^5.0.0", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "eslint-scope", + "spec": "^5.1.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "esrecurse" => Edge { + "name": "esrecurse", + "spec": "^4.3.0", + "to": "node_modules/esrecurse", + "type": "prod", + }, + "estraverse" => Edge { + "name": "estraverse", + "spec": "^4.1.1", + "to": "node_modules/estraverse", + "type": "prod", + }, + }, + "location": "node_modules/eslint-scope", + "name": "eslint-scope", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + }, + "eslint-utils" => Node { + "children": Map { + "eslint-visitor-keys" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint-utils", + "name": "eslint-visitor-keys", + "spec": "^1.1.0", + "type": "prod", + }, + }, + "location": "node_modules/eslint-utils/node_modules/eslint-visitor-keys", + "name": "eslint-visitor-keys", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + }, + }, + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/experimental-utils", + "name": "eslint-utils", + "spec": "^2.0.0", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "eslint-utils", + "spec": "^2.1.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "eslint-visitor-keys" => Edge { + "name": "eslint-visitor-keys", + "spec": "^1.1.0", + "to": "node_modules/eslint-utils/node_modules/eslint-visitor-keys", + "type": "prod", + }, + }, + "location": "node_modules/eslint-utils", + "name": "eslint-utils", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + }, + "eslint-visitor-keys" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/visitor-keys", + "name": "eslint-visitor-keys", + "spec": "^2.0.0", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "eslint-visitor-keys", + "spec": "^2.0.0", + "type": "prod", + }, + }, + "location": "node_modules/eslint-visitor-keys", + "name": "eslint-visitor-keys", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + }, + "espree" => Node { + "children": Map { + "eslint-visitor-keys" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/espree", + "name": "eslint-visitor-keys", + "spec": "^1.3.0", + "type": "prod", + }, + }, + "location": "node_modules/espree/node_modules/eslint-visitor-keys", + "name": "eslint-visitor-keys", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + }, + }, + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "espree", + "spec": "^7.3.0", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "espree", + "spec": "^7.3.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "acorn" => Edge { + "name": "acorn", + "spec": "^7.4.0", + "to": "node_modules/acorn", + "type": "prod", + }, + "acorn-jsx" => Edge { + "name": "acorn-jsx", + "spec": "^5.2.0", + "to": "node_modules/acorn-jsx", + "type": "prod", + }, + "eslint-visitor-keys" => Edge { + "name": "eslint-visitor-keys", + "spec": "^1.3.0", + "to": "node_modules/espree/node_modules/eslint-visitor-keys", + "type": "prod", + }, + }, + "location": "node_modules/espree", + "name": "espree", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + }, + "esprima" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/js-yaml", + "name": "esprima", + "spec": "^4.0.0", + "type": "prod", + }, + }, + "location": "node_modules/esprima", + "name": "esprima", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + }, + "esquery" => Node { + "children": Map { + "estraverse" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/esquery", + "name": "estraverse", + "spec": "^5.1.0", + "type": "prod", + }, + }, + "location": "node_modules/esquery/node_modules/estraverse", + "name": "estraverse", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + }, + }, + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "esquery", + "spec": "^1.2.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "estraverse" => Edge { + "name": "estraverse", + "spec": "^5.1.0", + "to": "node_modules/esquery/node_modules/estraverse", + "type": "prod", + }, + }, + "location": "node_modules/esquery", + "name": "esquery", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + }, + "esrecurse" => Node { + "children": Map { + "estraverse" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/esrecurse", + "name": "estraverse", + "spec": "^5.2.0", + "type": "prod", + }, + }, + "location": "node_modules/esrecurse/node_modules/estraverse", + "name": "estraverse", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + }, + }, + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint-scope", + "name": "esrecurse", + "spec": "^4.3.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "estraverse" => Edge { + "name": "estraverse", + "spec": "^5.2.0", + "to": "node_modules/esrecurse/node_modules/estraverse", + "type": "prod", + }, + }, + "location": "node_modules/esrecurse", + "name": "esrecurse", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + }, + "estraverse" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint-scope", + "name": "estraverse", + "spec": "^4.1.1", + "type": "prod", + }, + }, + "location": "node_modules/estraverse", + "name": "estraverse", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + }, + "esutils" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/doctrine", + "name": "esutils", + "spec": "^2.0.2", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "esutils", + "spec": "^2.0.2", + "type": "prod", + }, + }, + "location": "node_modules/esutils", + "name": "esutils", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + }, + "fast-deep-equal" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/ajv", + "name": "fast-deep-equal", + "spec": "^3.1.1", + "type": "prod", + }, + }, + "location": "node_modules/fast-deep-equal", + "name": "fast-deep-equal", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + }, + "fast-glob" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/globby", + "name": "fast-glob", + "spec": "^3.1.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "@nodelib/fs.stat" => Edge { + "name": "@nodelib/fs.stat", + "spec": "^2.0.2", + "to": "node_modules/@nodelib/fs.stat", + "type": "prod", + }, + "@nodelib/fs.walk" => Edge { + "name": "@nodelib/fs.walk", + "spec": "^1.2.3", + "to": "node_modules/@nodelib/fs.walk", + "type": "prod", + }, + "glob-parent" => Edge { + "name": "glob-parent", + "spec": "^5.1.0", + "to": "node_modules/glob-parent", + "type": "prod", + }, + "merge2" => Edge { + "name": "merge2", + "spec": "^1.3.0", + "to": "node_modules/merge2", + "type": "prod", + }, + "micromatch" => Edge { + "name": "micromatch", + "spec": "^4.0.2", + "to": "node_modules/micromatch", + "type": "prod", + }, + "picomatch" => Edge { + "name": "picomatch", + "spec": "^2.2.1", + "to": "node_modules/picomatch", + "type": "prod", + }, + }, + "location": "node_modules/fast-glob", + "name": "fast-glob", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + }, + "fast-json-stable-stringify" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/ajv", + "name": "fast-json-stable-stringify", + "spec": "^2.0.0", + "type": "prod", + }, + }, + "location": "node_modules/fast-json-stable-stringify", + "name": "fast-json-stable-stringify", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + }, + "fast-levenshtein" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/optionator", + "name": "fast-levenshtein", + "spec": "^2.0.6", + "type": "prod", + }, + }, + "location": "node_modules/fast-levenshtein", + "name": "fast-levenshtein", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + }, + "fastq" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@nodelib/fs.walk", + "name": "fastq", + "spec": "^1.6.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "reusify" => Edge { + "name": "reusify", + "spec": "^1.0.4", + "to": "node_modules/reusify", + "type": "prod", + }, + }, + "location": "node_modules/fastq", + "name": "fastq", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + }, + "file-entry-cache" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "file-entry-cache", + "spec": "^5.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "flat-cache" => Edge { + "name": "flat-cache", + "spec": "^2.0.1", + "to": "node_modules/flat-cache", + "type": "prod", + }, + }, + "location": "node_modules/file-entry-cache", + "name": "file-entry-cache", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + }, + "fill-range" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/braces", + "name": "fill-range", + "spec": "^7.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "to-regex-range" => Edge { + "name": "to-regex-range", + "spec": "^5.0.1", + "to": "node_modules/to-regex-range", + "type": "prod", + }, + }, + "location": "node_modules/fill-range", + "name": "fill-range", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + }, + "flat-cache" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/file-entry-cache", + "name": "flat-cache", + "spec": "^2.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "flatted" => Edge { + "name": "flatted", + "spec": "^2.0.0", + "to": "node_modules/flatted", + "type": "prod", + }, + "rimraf" => Edge { + "name": "rimraf", + "spec": "2.6.3", + "to": "node_modules/rimraf", + "type": "prod", + }, + "write" => Edge { + "name": "write", + "spec": "1.0.3", + "to": "node_modules/write", + "type": "prod", + }, + }, + "location": "node_modules/flat-cache", + "name": "flat-cache", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + }, + "flatted" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/flat-cache", + "name": "flatted", + "spec": "^2.0.0", + "type": "prod", + }, + }, + "location": "node_modules/flatted", + "name": "flatted", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + }, + "fs.realpath" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/glob", + "name": "fs.realpath", + "spec": "^1.0.0", + "type": "prod", + }, + }, + "location": "node_modules/fs.realpath", + "name": "fs.realpath", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + }, + "functional-red-black-tree" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "functional-red-black-tree", + "spec": "^1.0.1", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "functional-red-black-tree", + "spec": "^1.0.1", + "type": "prod", + }, + }, + "location": "node_modules/functional-red-black-tree", + "name": "functional-red-black-tree", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + }, + "glob" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/rimraf", + "name": "glob", + "spec": "^7.1.3", + "type": "prod", + }, + }, + "edgesOut": Map { + "fs.realpath" => Edge { + "name": "fs.realpath", + "spec": "^1.0.0", + "to": "node_modules/fs.realpath", + "type": "prod", + }, + "inflight" => Edge { + "name": "inflight", + "spec": "^1.0.4", + "to": "node_modules/inflight", + "type": "prod", + }, + "inherits" => Edge { + "name": "inherits", + "spec": "2", + "to": "node_modules/inherits", + "type": "prod", + }, + "minimatch" => Edge { + "name": "minimatch", + "spec": "^3.0.4", + "to": "node_modules/minimatch", + "type": "prod", + }, + "once" => Edge { + "name": "once", + "spec": "^1.3.0", + "to": "node_modules/once", + "type": "prod", + }, + "path-is-absolute" => Edge { + "name": "path-is-absolute", + "spec": "^1.0.0", + "to": "node_modules/path-is-absolute", + "type": "prod", + }, + }, + "location": "node_modules/glob", + "name": "glob", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + }, + "glob-parent" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "glob-parent", + "spec": "^5.0.0", + "type": "prod", + }, + Edge { + "from": "node_modules/fast-glob", + "name": "glob-parent", + "spec": "^5.1.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "is-glob" => Edge { + "name": "is-glob", + "spec": "^4.0.1", + "to": "node_modules/is-glob", + "type": "prod", + }, + }, + "location": "node_modules/glob-parent", + "name": "glob-parent", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + }, + "globals" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "globals", + "spec": "^12.1.0", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "globals", + "spec": "^12.1.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "type-fest" => Edge { + "name": "type-fest", + "spec": "^0.8.1", + "to": "node_modules/type-fest", + "type": "prod", + }, + }, + "location": "node_modules/globals", + "name": "globals", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + }, + "globby" => Node { + "children": Map { + "ignore" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/globby", + "name": "ignore", + "spec": "^5.1.4", + "type": "prod", + }, + }, + "location": "node_modules/globby/node_modules/ignore", + "name": "ignore", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + }, + }, + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/typescript-estree", + "name": "globby", + "spec": "^11.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "array-union" => Edge { + "name": "array-union", + "spec": "^2.1.0", + "to": "node_modules/array-union", + "type": "prod", + }, + "dir-glob" => Edge { + "name": "dir-glob", + "spec": "^3.0.1", + "to": "node_modules/dir-glob", + "type": "prod", + }, + "fast-glob" => Edge { + "name": "fast-glob", + "spec": "^3.1.1", + "to": "node_modules/fast-glob", + "type": "prod", + }, + "ignore" => Edge { + "name": "ignore", + "spec": "^5.1.4", + "to": "node_modules/globby/node_modules/ignore", + "type": "prod", + }, + "merge2" => Edge { + "name": "merge2", + "spec": "^1.3.0", + "to": "node_modules/merge2", + "type": "prod", + }, + "slash" => Edge { + "name": "slash", + "spec": "^3.0.0", + "to": "node_modules/slash", + "type": "prod", + }, + }, + "location": "node_modules/globby", + "name": "globby", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + }, + "has-flag" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/supports-color", + "name": "has-flag", + "spec": "^4.0.0", + "type": "prod", + }, + }, + "location": "node_modules/has-flag", + "name": "has-flag", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + }, + "ignore" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "ignore", + "spec": "^4.0.6", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "ignore", + "spec": "^4.0.6", + "type": "prod", + }, + }, + "location": "node_modules/ignore", + "name": "ignore", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + }, + "import-fresh" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "import-fresh", + "spec": "^3.2.1", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "import-fresh", + "spec": "^3.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "parent-module" => Edge { + "name": "parent-module", + "spec": "^1.0.0", + "to": "node_modules/parent-module", + "type": "prod", + }, + "resolve-from" => Edge { + "name": "resolve-from", + "spec": "^4.0.0", + "to": "node_modules/resolve-from", + "type": "prod", + }, + }, + "location": "node_modules/import-fresh", + "name": "import-fresh", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + }, + "imurmurhash" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "imurmurhash", + "spec": "^0.1.4", + "type": "prod", + }, + }, + "location": "node_modules/imurmurhash", + "name": "imurmurhash", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + }, + "inflight" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/glob", + "name": "inflight", + "spec": "^1.0.4", + "type": "prod", + }, + }, + "edgesOut": Map { + "once" => Edge { + "name": "once", + "spec": "^1.3.0", + "to": "node_modules/once", + "type": "prod", + }, + "wrappy" => Edge { + "name": "wrappy", + "spec": "1", + "to": "node_modules/wrappy", + "type": "prod", + }, + }, + "location": "node_modules/inflight", + "name": "inflight", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + }, + "inherits" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/glob", + "name": "inherits", + "spec": "2", + "type": "prod", + }, + }, + "location": "node_modules/inherits", + "name": "inherits", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + }, + "is-extglob" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/is-glob", + "name": "is-extglob", + "spec": "^2.1.1", + "type": "prod", + }, + }, + "location": "node_modules/is-extglob", + "name": "is-extglob", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + }, + "is-fullwidth-code-point" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/slice-ansi", + "name": "is-fullwidth-code-point", + "spec": "^2.0.0", + "type": "prod", + }, + Edge { + "from": "node_modules/string-width", + "name": "is-fullwidth-code-point", + "spec": "^2.0.0", + "type": "prod", + }, + }, + "location": "node_modules/is-fullwidth-code-point", + "name": "is-fullwidth-code-point", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + }, + "is-glob" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/typescript-estree", + "name": "is-glob", + "spec": "^4.0.1", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "is-glob", + "spec": "^4.0.0", + "type": "prod", + }, + Edge { + "from": "node_modules/glob-parent", + "name": "is-glob", + "spec": "^4.0.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "is-extglob" => Edge { + "name": "is-extglob", + "spec": "^2.1.1", + "to": "node_modules/is-extglob", + "type": "prod", + }, + }, + "location": "node_modules/is-glob", + "name": "is-glob", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + }, + "is-number" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/to-regex-range", + "name": "is-number", + "spec": "^7.0.0", + "type": "prod", + }, + }, + "location": "node_modules/is-number", + "name": "is-number", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + }, + "isexe" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/which", + "name": "isexe", + "spec": "^2.0.0", + "type": "prod", + }, + }, + "location": "node_modules/isexe", + "name": "isexe", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + }, + "js-tokens" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@babel/highlight", + "name": "js-tokens", + "spec": "^4.0.0", + "type": "prod", + }, + }, + "location": "node_modules/js-tokens", + "name": "js-tokens", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + }, + "js-yaml" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "js-yaml", + "spec": "^3.13.1", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "js-yaml", + "spec": "^3.13.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "argparse" => Edge { + "name": "argparse", + "spec": "^1.0.7", + "to": "node_modules/argparse", + "type": "prod", + }, + "esprima" => Edge { + "name": "esprima", + "spec": "^4.0.0", + "to": "node_modules/esprima", + "type": "prod", + }, + }, + "location": "node_modules/js-yaml", + "name": "js-yaml", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + }, + "json-schema-traverse" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/ajv", + "name": "json-schema-traverse", + "spec": "^0.4.1", + "type": "prod", + }, + }, + "location": "node_modules/json-schema-traverse", + "name": "json-schema-traverse", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + }, + "json-stable-stringify-without-jsonify" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "json-stable-stringify-without-jsonify", + "spec": "^1.0.1", + "type": "prod", + }, + }, + "location": "node_modules/json-stable-stringify-without-jsonify", + "name": "json-stable-stringify-without-jsonify", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + }, + "levn" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "levn", + "spec": "^0.4.1", + "type": "prod", + }, + Edge { + "from": "node_modules/optionator", + "name": "levn", + "spec": "^0.4.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "prelude-ls" => Edge { + "name": "prelude-ls", + "spec": "^1.2.1", + "to": "node_modules/prelude-ls", + "type": "prod", + }, + "type-check" => Edge { + "name": "type-check", + "spec": "~0.4.0", + "to": "node_modules/type-check", + "type": "prod", + }, + }, + "location": "node_modules/levn", + "name": "levn", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + }, + "lodash" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "lodash", + "spec": "^4.17.19", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/typescript-estree", + "name": "lodash", + "spec": "^4.17.15", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "lodash", + "spec": "^4.17.19", + "type": "prod", + }, + Edge { + "from": "node_modules/table", + "name": "lodash", + "spec": "^4.17.14", + "type": "prod", + }, + }, + "location": "node_modules/lodash", + "name": "lodash", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + }, + "merge2" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/fast-glob", + "name": "merge2", + "spec": "^1.3.0", + "type": "prod", + }, + Edge { + "from": "node_modules/globby", + "name": "merge2", + "spec": "^1.3.0", + "type": "prod", + }, + }, + "location": "node_modules/merge2", + "name": "merge2", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + }, + "micromatch" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/fast-glob", + "name": "micromatch", + "spec": "^4.0.2", + "type": "prod", + }, + }, + "edgesOut": Map { + "braces" => Edge { + "name": "braces", + "spec": "^3.0.1", + "to": "node_modules/braces", + "type": "prod", + }, + "picomatch" => Edge { + "name": "picomatch", + "spec": "^2.0.5", + "to": "node_modules/picomatch", + "type": "prod", + }, + }, + "location": "node_modules/micromatch", + "name": "micromatch", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + }, + "minimatch" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "minimatch", + "spec": "^3.0.4", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "minimatch", + "spec": "^3.0.4", + "type": "prod", + }, + Edge { + "from": "node_modules/glob", + "name": "minimatch", + "spec": "^3.0.4", + "type": "prod", + }, + }, + "edgesOut": Map { + "brace-expansion" => Edge { + "name": "brace-expansion", + "spec": "^1.1.7", + "to": "node_modules/brace-expansion", + "type": "prod", + }, + }, + "location": "node_modules/minimatch", + "name": "minimatch", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + }, + "minimist" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/mkdirp", + "name": "minimist", + "spec": "^1.2.5", + "type": "prod", + }, + }, + "location": "node_modules/minimist", + "name": "minimist", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + }, + "mkdirp" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/write", + "name": "mkdirp", + "spec": "^0.5.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "minimist" => Edge { + "name": "minimist", + "spec": "^1.2.5", + "to": "node_modules/minimist", + "type": "prod", + }, + }, + "location": "node_modules/mkdirp", + "name": "mkdirp", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + }, + "ms" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/debug", + "name": "ms", + "spec": "2.1.2", + "type": "prod", + }, + }, + "location": "node_modules/ms", + "name": "ms", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + }, + "natural-compare" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "natural-compare", + "spec": "^1.4.0", + "type": "prod", + }, + }, + "location": "node_modules/natural-compare", + "name": "natural-compare", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + }, + "once" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/glob", + "name": "once", + "spec": "^1.3.0", + "type": "prod", + }, + Edge { + "from": "node_modules/inflight", + "name": "once", + "spec": "^1.3.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "wrappy" => Edge { + "name": "wrappy", + "spec": "1", + "to": "node_modules/wrappy", + "type": "prod", + }, + }, + "location": "node_modules/once", + "name": "once", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + }, + "optionator" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "optionator", + "spec": "^0.9.1", + "type": "prod", + }, + }, + "edgesOut": Map { + "deep-is" => Edge { + "name": "deep-is", + "spec": "^0.1.3", + "to": "node_modules/deep-is", + "type": "prod", + }, + "fast-levenshtein" => Edge { + "name": "fast-levenshtein", + "spec": "^2.0.6", + "to": "node_modules/fast-levenshtein", + "type": "prod", + }, + "levn" => Edge { + "name": "levn", + "spec": "^0.4.1", + "to": "node_modules/levn", + "type": "prod", + }, + "prelude-ls" => Edge { + "name": "prelude-ls", + "spec": "^1.2.1", + "to": "node_modules/prelude-ls", + "type": "prod", + }, + "type-check" => Edge { + "name": "type-check", + "spec": "^0.4.0", + "to": "node_modules/type-check", + "type": "prod", + }, + "word-wrap" => Edge { + "name": "word-wrap", + "spec": "^1.2.3", + "to": "node_modules/word-wrap", + "type": "prod", + }, + }, + "location": "node_modules/optionator", + "name": "optionator", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + }, + "parent-module" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/import-fresh", + "name": "parent-module", + "spec": "^1.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "callsites" => Edge { + "name": "callsites", + "spec": "^3.0.0", + "to": "node_modules/callsites", + "type": "prod", + }, + }, + "location": "node_modules/parent-module", + "name": "parent-module", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + }, + "path-is-absolute" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/glob", + "name": "path-is-absolute", + "spec": "^1.0.0", + "type": "prod", + }, + }, + "location": "node_modules/path-is-absolute", + "name": "path-is-absolute", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + }, + "path-key" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/cross-spawn", + "name": "path-key", + "spec": "^3.1.0", + "type": "prod", + }, + }, + "location": "node_modules/path-key", + "name": "path-key", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + }, + "path-type" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/dir-glob", + "name": "path-type", + "spec": "^4.0.0", + "type": "prod", + }, + }, + "location": "node_modules/path-type", + "name": "path-type", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + }, + "picomatch" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/fast-glob", + "name": "picomatch", + "spec": "^2.2.1", + "type": "prod", + }, + Edge { + "from": "node_modules/micromatch", + "name": "picomatch", + "spec": "^2.0.5", + "type": "prod", + }, + }, + "location": "node_modules/picomatch", + "name": "picomatch", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + }, + "prelude-ls" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/levn", + "name": "prelude-ls", + "spec": "^1.2.1", + "type": "prod", + }, + Edge { + "from": "node_modules/optionator", + "name": "prelude-ls", + "spec": "^1.2.1", + "type": "prod", + }, + Edge { + "from": "node_modules/type-check", + "name": "prelude-ls", + "spec": "^1.2.1", + "type": "prod", + }, + }, + "location": "node_modules/prelude-ls", + "name": "prelude-ls", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + }, + "progress" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "progress", + "spec": "^2.0.0", + "type": "prod", + }, + }, + "location": "node_modules/progress", + "name": "progress", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + }, + "punycode" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/uri-js", + "name": "punycode", + "spec": "^2.1.0", + "type": "prod", + }, + }, + "location": "node_modules/punycode", + "name": "punycode", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + }, + "regexpp" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "regexpp", + "spec": "^3.0.0", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "regexpp", + "spec": "^3.1.0", + "type": "prod", + }, + }, + "location": "node_modules/regexpp", + "name": "regexpp", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + }, + "resolve-from" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/import-fresh", + "name": "resolve-from", + "spec": "^4.0.0", + "type": "prod", + }, + }, + "location": "node_modules/resolve-from", + "name": "resolve-from", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + }, + "reusify" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/fastq", + "name": "reusify", + "spec": "^1.0.4", + "type": "prod", + }, + }, + "location": "node_modules/reusify", + "name": "reusify", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + }, + "rimraf" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/flat-cache", + "name": "rimraf", + "spec": "2.6.3", + "type": "prod", + }, + }, + "edgesOut": Map { + "glob" => Edge { + "name": "glob", + "spec": "^7.1.3", + "to": "node_modules/glob", + "type": "prod", + }, + }, + "location": "node_modules/rimraf", + "name": "rimraf", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + }, + "run-parallel" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@nodelib/fs.scandir", + "name": "run-parallel", + "spec": "^1.1.9", + "type": "prod", + }, + }, + "location": "node_modules/run-parallel", + "name": "run-parallel", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + }, + "semver" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "semver", + "spec": "^7.3.2", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/typescript-estree", + "name": "semver", + "spec": "^7.3.2", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "semver", + "spec": "^7.2.1", + "type": "prod", + }, + }, + "location": "node_modules/semver", + "name": "semver", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + }, + "shebang-command" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/cross-spawn", + "name": "shebang-command", + "spec": "^2.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "shebang-regex" => Edge { + "name": "shebang-regex", + "spec": "^3.0.0", + "to": "node_modules/shebang-regex", + "type": "prod", + }, + }, + "location": "node_modules/shebang-command", + "name": "shebang-command", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + }, + "shebang-regex" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/shebang-command", + "name": "shebang-regex", + "spec": "^3.0.0", + "type": "prod", + }, + }, + "location": "node_modules/shebang-regex", + "name": "shebang-regex", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + }, + "slash" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/globby", + "name": "slash", + "spec": "^3.0.0", + "type": "prod", + }, + }, + "location": "node_modules/slash", + "name": "slash", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + }, + "slice-ansi" => Node { + "children": Map { + "ansi-styles" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/slice-ansi", + "name": "ansi-styles", + "spec": "^3.2.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "color-convert" => Edge { + "name": "color-convert", + "spec": "^1.9.0", + "to": "node_modules/slice-ansi/node_modules/color-convert", + "type": "prod", + }, + }, + "location": "node_modules/slice-ansi/node_modules/ansi-styles", + "name": "ansi-styles", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + }, + "color-convert" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/slice-ansi/node_modules/ansi-styles", + "name": "color-convert", + "spec": "^1.9.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "color-name" => Edge { + "name": "color-name", + "spec": "1.1.3", + "to": "node_modules/slice-ansi/node_modules/color-name", + "type": "prod", + }, + }, + "location": "node_modules/slice-ansi/node_modules/color-convert", + "name": "color-convert", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + }, + "color-name" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/slice-ansi/node_modules/color-convert", + "name": "color-name", + "spec": "1.1.3", + "type": "prod", + }, + }, + "location": "node_modules/slice-ansi/node_modules/color-name", + "name": "color-name", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + }, + }, + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/table", + "name": "slice-ansi", + "spec": "^2.1.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "ansi-styles" => Edge { + "name": "ansi-styles", + "spec": "^3.2.0", + "to": "node_modules/slice-ansi/node_modules/ansi-styles", + "type": "prod", + }, + "astral-regex" => Edge { + "name": "astral-regex", + "spec": "^1.0.0", + "to": "node_modules/astral-regex", + "type": "prod", + }, + "is-fullwidth-code-point" => Edge { + "name": "is-fullwidth-code-point", + "spec": "^2.0.0", + "to": "node_modules/is-fullwidth-code-point", + "type": "prod", + }, + }, + "location": "node_modules/slice-ansi", + "name": "slice-ansi", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + }, + "sprintf-js" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/argparse", + "name": "sprintf-js", + "spec": "~1.0.2", + "type": "prod", + }, + }, + "location": "node_modules/sprintf-js", + "name": "sprintf-js", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + }, + "string-width" => Node { + "children": Map { + "ansi-regex" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/string-width/node_modules/strip-ansi", + "name": "ansi-regex", + "spec": "^4.1.0", + "type": "prod", + }, + }, + "location": "node_modules/string-width/node_modules/ansi-regex", + "name": "ansi-regex", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + }, + "strip-ansi" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/string-width", + "name": "strip-ansi", + "spec": "^5.1.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "ansi-regex" => Edge { + "name": "ansi-regex", + "spec": "^4.1.0", + "to": "node_modules/string-width/node_modules/ansi-regex", + "type": "prod", + }, + }, + "location": "node_modules/string-width/node_modules/strip-ansi", + "name": "strip-ansi", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + }, + }, + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/table", + "name": "string-width", + "spec": "^3.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "emoji-regex" => Edge { + "name": "emoji-regex", + "spec": "^7.0.1", + "to": "node_modules/emoji-regex", + "type": "prod", + }, + "is-fullwidth-code-point" => Edge { + "name": "is-fullwidth-code-point", + "spec": "^2.0.0", + "to": "node_modules/is-fullwidth-code-point", + "type": "prod", + }, + "strip-ansi" => Edge { + "name": "strip-ansi", + "spec": "^5.1.0", + "to": "node_modules/string-width/node_modules/strip-ansi", + "type": "prod", + }, + }, + "location": "node_modules/string-width", + "name": "string-width", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + }, + "strip-ansi" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/eslint", + "name": "strip-ansi", + "spec": "^6.0.0", + "type": "prod", + }, + }, + "edgesOut": Map { + "ansi-regex" => Edge { + "name": "ansi-regex", + "spec": "^5.0.0", + "to": "node_modules/ansi-regex", + "type": "prod", + }, + }, + "location": "node_modules/strip-ansi", + "name": "strip-ansi", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + }, + "strip-json-comments" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/@eslint/eslintrc", + "name": "strip-json-comments", + "spec": "^3.1.1", + "type": "prod", + }, + Edge { + "from": "node_modules/eslint", + "name": "strip-json-comments", + "spec": "^3.1.0", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + "location": "node_modules/strip-json-comments", + "name": "strip-json-comments", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", }, - "@isaacs/testing-bundledeps-b" => Node { - "bundled": true, + "supports-color" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", + "from": "node_modules/chalk", + "name": "supports-color", + "spec": "^7.1.0", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "edgesOut": Map { + "has-flag" => Edge { + "name": "has-flag", + "spec": "^4.0.0", + "to": "node_modules/has-flag", + "type": "prod", + }, + }, + "location": "node_modules/supports-color", + "name": "supports-color", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", }, - "@isaacs/testing-bundledeps-c" => Node { - "bundled": true, + "table" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", + "from": "node_modules/eslint", + "name": "table", + "spec": "^5.2.3", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", + "ajv" => Edge { + "name": "ajv", + "spec": "^6.10.2", + "to": "node_modules/ajv", "type": "prod", }, - }, - "location": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-c", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-1.0.0.tgz", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps" => Edge { - "name": "@isaacs/testing-bundledeps", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps", - "type": "prod", - }, - }, - "location": "", - "name": "testing-bundledeps", - "resolved": null, -} -` - -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 1, full > no missing deps 1`] = ` -Node { - "children": Map { - "@isaacs/testing-bundledeps" => Node { - "children": Map { - "@isaacs/testing-bundledeps-a" => Node { - "bundled": true, - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "type": "prod", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", - "type": "prod", - }, - }, - "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-a", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + "lodash" => Edge { + "name": "lodash", + "spec": "^4.17.14", + "to": "node_modules/lodash", + "type": "prod", }, - "@isaacs/testing-bundledeps-b" => Node { - "bundled": true, - "edgesIn": Set { - Edge { - "from": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "type": "prod", - }, - }, - "location": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "slice-ansi" => Edge { + "name": "slice-ansi", + "spec": "^2.1.0", + "to": "node_modules/slice-ansi", + "type": "prod", + }, + "string-width" => Edge { + "name": "string-width", + "spec": "^3.0.0", + "to": "node_modules/string-width", + "type": "prod", }, }, + "location": "node_modules/table", + "name": "table", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + }, + "text-table" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "", - "name": "@isaacs/testing-bundledeps", - "spec": "*", + "from": "node_modules/eslint", + "name": "text-table", + "spec": "^0.2.0", "type": "prod", }, }, - "edgesOut": Map { - "@isaacs/testing-bundledeps-a" => Edge { - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps/node_modules/@isaacs/testing-bundledeps-a", + "location": "node_modules/text-table", + "name": "text-table", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + }, + "to-regex-range" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/fill-range", + "name": "to-regex-range", + "spec": "^5.0.1", "type": "prod", }, - "@isaacs/testing-bundledeps-c" => Edge { - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-c", + }, + "edgesOut": Map { + "is-number" => Edge { + "name": "is-number", + "spec": "^7.0.0", + "to": "node_modules/is-number", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps/-/testing-bundledeps-1.0.0.tgz", + "location": "node_modules/to-regex-range", + "name": "to-regex-range", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", }, - "@isaacs/testing-bundledeps-b" => Node { + "tslib" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", + "from": "node_modules/tsutils", + "name": "tslib", + "spec": "^1.8.1", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "location": "node_modules/tslib", + "name": "tslib", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", }, - "@isaacs/testing-bundledeps-c" => Node { + "tsutils" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps", - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", + "from": "node_modules/@typescript-eslint/eslint-plugin", + "name": "tsutils", + "spec": "^3.17.1", + "type": "prod", + }, + Edge { + "from": "node_modules/@typescript-eslint/typescript-estree", + "name": "tsutils", + "spec": "^3.17.1", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", + "tslib" => Edge { + "name": "tslib", + "spec": "^1.8.1", + "to": "node_modules/tslib", "type": "prod", }, + "typescript" => Edge { + "name": "typescript", + "spec": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", + "to": "node_modules/typescript", + "type": "peer", + }, }, - "location": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-c", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-1.0.0.tgz", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps" => Edge { - "name": "@isaacs/testing-bundledeps", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps", - "type": "prod", + "location": "node_modules/tsutils", + "name": "tsutils", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", }, - }, - "location": "", - "name": "testing-bundledeps", - "resolved": null, -} -` - -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 2 > add new bundled dep c 1`] = ` -Node { - "children": Map { - "@isaacs/testing-bundledeps-a" => Node { - "bundled": true, + "type-check" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "", - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", + "from": "node_modules/levn", + "name": "type-check", + "spec": "~0.4.0", + "type": "prod", + }, + Edge { + "from": "node_modules/optionator", + "name": "type-check", + "spec": "^0.4.0", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", + "prelude-ls" => Edge { + "name": "prelude-ls", + "spec": "^1.2.1", + "to": "node_modules/prelude-ls", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-a", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + "location": "node_modules/type-check", + "name": "type-check", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", }, - "@isaacs/testing-bundledeps-b" => Node { - "bundled": true, + "type-fest" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "type": "prod", - }, - Edge { - "from": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", + "from": "node_modules/globals", + "name": "type-fest", + "spec": "^0.8.1", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "location": "node_modules/type-fest", + "name": "type-fest", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", }, - "@isaacs/testing-bundledeps-c" => Node { - "bundled": true, + "typescript" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "", - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "type": "prod", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", - "type": "prod", + "from": "node_modules/tsutils", + "name": "typescript", + "spec": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", + "type": "peer", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-c", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps-a" => Edge { - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-a", - "type": "prod", - }, - "@isaacs/testing-bundledeps-c" => Edge { - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-c", - "type": "prod", + "location": "node_modules/typescript", + "name": "typescript", + "peer": true, + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", }, - }, - "location": "", - "name": "testing-bundledeps-2", - "resolved": null, -} -` - -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 2 > bundle deps testing 1`] = ` -Node { - "children": Map { - "@isaacs/testing-bundledeps-a" => Node { - "bundled": true, + "uri-js" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "", - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", + "from": "node_modules/ajv", + "name": "uri-js", + "spec": "^4.2.2", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", + "punycode" => Edge { + "name": "punycode", + "spec": "^2.1.0", + "to": "node_modules/punycode", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-a", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-a/-/testing-bundledeps-a-1.0.0.tgz", + "location": "node_modules/uri-js", + "name": "uri-js", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", }, - "@isaacs/testing-bundledeps-b" => Node { - "bundled": true, + "v8-compile-cache" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps-a", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "type": "prod", - }, - Edge { - "from": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", + "from": "node_modules/eslint", + "name": "v8-compile-cache", + "spec": "^2.0.3", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "location": "node_modules/v8-compile-cache", + "name": "v8-compile-cache", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", }, - "@isaacs/testing-bundledeps-c" => Node { + "which" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "", - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", + "from": "node_modules/cross-spawn", + "name": "which", + "spec": "^2.0.1", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", + "isexe" => Edge { + "name": "isexe", + "spec": "^2.0.0", + "to": "node_modules/isexe", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-c", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", - }, - }, - "edgesOut": Map { - "@isaacs/testing-bundledeps-a" => Edge { - "name": "@isaacs/testing-bundledeps-a", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-a", - "type": "prod", + "location": "node_modules/which", + "name": "which", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", }, - "@isaacs/testing-bundledeps-c" => Edge { - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-c", - "type": "prod", + "word-wrap" => Node { + "dev": true, + "edgesIn": Set { + Edge { + "from": "node_modules/optionator", + "name": "word-wrap", + "spec": "^1.2.3", + "type": "prod", + }, + }, + "location": "node_modules/word-wrap", + "name": "word-wrap", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", }, - }, - "location": "", - "name": "testing-bundledeps-2", - "resolved": null, -} -` - -exports[`test/arborist/build-ideal-tree.js TAP bundle deps example 2 > remove bundled dependency a 1`] = ` -Node { - "children": Map { - "@isaacs/testing-bundledeps-b" => Node { + "wrappy" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", + "from": "node_modules/inflight", + "name": "wrappy", + "spec": "1", + "type": "prod", + }, + Edge { + "from": "node_modules/once", + "name": "wrappy", + "spec": "1", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-b", - "name": "@isaacs/testing-bundledeps-b", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-b/-/testing-bundledeps-b-1.0.0.tgz", + "location": "node_modules/wrappy", + "name": "wrappy", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", }, - "@isaacs/testing-bundledeps-c" => Node { + "write" => Node { + "dev": true, "edgesIn": Set { Edge { - "from": "", - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", + "from": "node_modules/flat-cache", + "name": "write", + "spec": "1.0.3", "type": "prod", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-b" => Edge { - "name": "@isaacs/testing-bundledeps-b", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-b", + "mkdirp" => Edge { + "name": "mkdirp", + "spec": "^0.5.1", + "to": "node_modules/mkdirp", "type": "prod", }, }, - "location": "node_modules/@isaacs/testing-bundledeps-c", - "name": "@isaacs/testing-bundledeps-c", - "resolved": "https://registry.npmjs.org/@isaacs/testing-bundledeps-c/-/testing-bundledeps-c-2.0.0.tgz", + "location": "node_modules/write", + "name": "write", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", }, }, "edgesOut": Map { - "@isaacs/testing-bundledeps-c" => Edge { - "name": "@isaacs/testing-bundledeps-c", - "spec": "*", - "to": "node_modules/@isaacs/testing-bundledeps-c", - "type": "prod", + "@typescript-eslint/eslint-plugin" => Edge { + "name": "@typescript-eslint/eslint-plugin", + "spec": "4", + "to": "node_modules/@typescript-eslint/eslint-plugin", + "type": "dev", + }, + "@typescript-eslint/parser" => Edge { + "name": "@typescript-eslint/parser", + "spec": "4", + "to": "node_modules/@typescript-eslint/parser", + "type": "dev", + }, + "eslint" => Edge { + "name": "eslint", + "spec": "^7", + "to": "node_modules/eslint", + "type": "dev", }, }, "location": "", - "name": "testing-bundledeps-2", + "name": "carbonium", "resolved": null, } ` diff --git a/test/arborist/build-ideal-tree.js b/test/arborist/build-ideal-tree.js index aab0005fd..316b0bd46 100644 --- a/test/arborist/build-ideal-tree.js +++ b/test/arborist/build-ideal-tree.js @@ -23,7 +23,6 @@ const warningTracker = () => { } } - // two little helper functions to make the loaded trees // easier to look at in the snapshot results. const printEdge = (edge, inout) => ({ @@ -57,14 +56,14 @@ const printTree = tree => ({ error: { code: tree.error.code, ...(tree.error.path ? { path: relative(__dirname, tree.error.path) } - : {}), - } + : {}), + }, } : {}), ...(tree.isLink ? { target: { name: tree.target.name, - parent: tree.target.parent && tree.target.parent.location - } + parent: tree.target.parent && tree.target.parent.location, + }, } : {}), ...(tree.inBundle ? { bundled: true } : {}), ...(tree.edgesIn.size ? { @@ -75,19 +74,19 @@ const printTree = tree => ({ ...(tree.edgesOut.size ? { edgesOut: new Map([...tree.edgesOut.entries()] .sort((a, b) => a[0].localeCompare(b[0])) - .map(([name, edge]) => [name, printEdge(edge, 'out')])) + .map(([name, edge]) => [name, printEdge(edge, 'out')])), } : {}), - ...( !tree.fsChildren.size ? {} : { + ...(!tree.fsChildren.size ? {} : { fsChildren: new Set([...tree.fsChildren] .sort((a, b) => a.path.localeCompare(b.path)) .map(tree => printTree(tree))), }), - ...( tree.target || !tree.children.size ? {} - : { - children: new Map([...tree.children.entries()] - .sort((a, b) => a[0].localeCompare(b[0])) - .map(([name, tree]) => [name, printTree(tree)])) - }), + ...(tree.target || !tree.children.size ? {} + : { + children: new Map([...tree.children.entries()] + .sort((a, b) => a[0].localeCompare(b[0])) + .map(([name, tree]) => [name, printTree(tree)])), + }), __proto__: { constructor: tree.constructor }, }) @@ -108,7 +107,9 @@ t.test('fail on mismatched engine when engineStrict is set', async t => { ...OPT, nodeVersion: '12.18.4', engineStrict: true, - }).then(() => { throw new Error('failed to fail') }), { code: 'EBADENGINE' }) + }).then(() => { + throw new Error('failed to fail') + }), { code: 'EBADENGINE' }) }) t.test('fail on malformed package.json', t => { @@ -146,8 +147,10 @@ t.test('fail on mismatched platform', async t => { const path = resolve(fixtures, 'platform-specification') t.rejects(buildIdeal(path, { ...OPT, - nodeVersion: '4.0.0' - }).then(() => { throw new Error('failed to fail') }), { code: 'EBADPLATFORM' }) + nodeVersion: '4.0.0', + }).then(() => { + throw new Error('failed to fail') + }), { code: 'EBADPLATFORM' }) }) t.test('ignore mismatched platform for optional dependencies', async t => { @@ -180,9 +183,9 @@ t.test('a tree with an outdated dep, missing dep, no lockfile', async t => { once: '1.3.3', wrappy: '1.0.1', } - for (const [name, version] of Object.entries(expected)) { + for (const [name, version] of Object.entries(expected)) t.equal(tree.children.get(name).package.version, version, `expect ${name}@${version}`) - } + t.matchSnapshot(printTree(tree), 'should not update all') }) @@ -232,27 +235,27 @@ t.test('cyclical peer deps', t => { t.resolveMatchSnapshot(printIdeal(path), 'cyclical peer deps') .then(() => t.resolveMatchSnapshot(printIdeal(path, { // just reload the dep at its current required version - add: [ '@isaacs/peer-dep-cycle-a' ], + add: ['@isaacs/peer-dep-cycle-a'], }), 'cyclical peer deps - reload a dependency')) .then(() => t.resolveMatchSnapshot(printIdeal(path, { - add: [ '@isaacs/peer-dep-cycle-a@2.x' ], + add: ['@isaacs/peer-dep-cycle-a@2.x'], }), 'cyclical peer deps - upgrade a package')) .then(() => t.rejects(printIdeal(path, { // this conflicts with the direct dep on a@1 PEER-> b@1 - add: [ '@isaacs/peer-dep-cycle-b@2.x' ], + add: ['@isaacs/peer-dep-cycle-b@2.x'], }))) - // this conflict is ok since we're using legacy peer deps + // this conflict is ok since we're using legacy peer deps .then(() => t.resolveMatchSnapshot(printIdeal(path, { - add: [ '@isaacs/peer-dep-cycle-b@2.x' ], + add: ['@isaacs/peer-dep-cycle-b@2.x'], legacyPeerDeps: true, }))) .then(() => t.resolveMatchSnapshot(printIdeal(path, { // use @latest rather than @2.x to exercise the 'explicit tag' path - add: [ '@isaacs/peer-dep-cycle-b@latest' ], - rm: [ '@isaacs/peer-dep-cycle-a' ], + add: ['@isaacs/peer-dep-cycle-b@latest'], + rm: ['@isaacs/peer-dep-cycle-a'], }), 'can add b@2 if we remove a@1 dep')) .then(() => t.resolveMatchSnapshot(printIdeal(path, { - rm: [ '@isaacs/peer-dep-cycle-a' ], + rm: ['@isaacs/peer-dep-cycle-a'], }), 'remove the dep, prune everything')) )) }) @@ -280,8 +283,8 @@ t.test('nested cyclical peer deps', t => { t.matchSnapshot(await printIdeal(path), 'nested peer deps cycle') t.matchSnapshot(await printIdeal(path, { - // just make sure it works if it gets a spec object - add: [ npa('@isaacs/peer-dep-cycle-a@2.x') ], + // just make sure it works if it gets a spec object + add: [npa('@isaacs/peer-dep-cycle-a@2.x')], }), 'upgrade a') t.matchSnapshot(await printIdeal(path, { @@ -294,7 +297,7 @@ t.test('nested cyclical peer deps', t => { t.matchSnapshot(await printIdeal(path, { force: true, - add: [ '@isaacs/peer-dep-cycle-c@2.x' ], + add: ['@isaacs/peer-dep-cycle-c@2.x'], }), 'upgrade c, forcibly') await t.rejects(printIdeal(path, { @@ -303,7 +306,6 @@ t.test('nested cyclical peer deps', t => { '@isaacs/peer-dep-cycle-c@2.x', ], }), ers[path], 'try (and fail) to upgrade c and a incompatibly') - })) }) @@ -333,7 +335,7 @@ t.test('dedupe example - deduped', t => { t.test('expose explicitRequest', async t => { const path = resolve(fixtures, 'simple') const arb = new Arborist({...OPT}) - const tree = await arb.buildIdealTree({ add: [ 'abbrev' ] }) + const tree = await arb.buildIdealTree({ add: ['abbrev'] }) t.ok(arb.explicitRequests, 'exposes the explicit request') t.strictSame(arb.explicitRequests, new Set(['abbrev'])) t.ok(arb.explicitRequests.has('abbrev'), 'should contain explicit item') @@ -348,7 +350,7 @@ t.test('bundle deps example 1, empty', t => { return t.resolveMatchSnapshot(printIdeal(path), 'bundle deps testing') .then(() => t.resolveMatchSnapshot(printIdeal(path, { saveBundle: true, - add: [ '@isaacs/testing-bundledeps' ], + add: ['@isaacs/testing-bundledeps'], }), 'should have some missing deps in the ideal tree')) }) @@ -359,7 +361,7 @@ t.test('bundle deps example 1, full', t => { return t.resolveMatchSnapshot(printIdeal(path), 'no missing deps') .then(() => t.resolveMatchSnapshot(printIdeal(path, { saveBundle: true, - add: [ '@isaacs/testing-bundledeps' ], + add: ['@isaacs/testing-bundledeps'], }), 'add stuff, no missing deps')) }) @@ -372,7 +374,7 @@ t.test('bundle deps example 1, complete:true', t => { }), 'no missing deps, because complete: true') .then(() => t.resolveMatchSnapshot(printIdeal(path, { saveBundle: true, - add: [ '@isaacs/testing-bundledeps' ], + add: ['@isaacs/testing-bundledeps'], complete: true, }), 'no missing deps, because complete:true')) }) @@ -383,7 +385,7 @@ t.test('bundle deps example 2', t => { return t.resolveMatchSnapshot(printIdeal(path), 'bundle deps testing') .then(() => t.resolveMatchSnapshot(printIdeal(path, { saveBundle: true, - add: [ '@isaacs/testing-bundledeps-c' ], + add: ['@isaacs/testing-bundledeps-c'], }), 'add new bundled dep c')) .then(() => t.resolveMatchSnapshot(printIdeal(path, { rm: ['@isaacs/testing-bundledeps-a'], @@ -448,7 +450,7 @@ t.test('update', t => { t.resolveMatchSnapshot(printIdeal(flowOutdated, { update: { - names: [ 'flow-parser' ], + names: ['flow-parser'], }, }), 'update flow parser') @@ -464,12 +466,12 @@ t.test('update', t => { t.resolveMatchSnapshot(printIdeal(tapAndFlow, { update: { all: true, - } + }, }), 'update everything') t.resolveMatchSnapshot(printIdeal(tapAndFlow, { update: { names: ['ink'], - } + }, }), 'update ink') t.end() @@ -586,7 +588,7 @@ t.test('contrived dep placement tests', t => { name: 'virtual-root', path: '/virtual-root', pkg: { ...root.package }, - }) + }), }) const a = new Arborist({ ...OPT }) a[kPeerSetSource].set(sameFoo, root) @@ -607,7 +609,7 @@ t.test('contrived dep placement tests', t => { name: 'virtual-root', path: '/virtual-root', pkg: { ...root.package }, - }) + }), }) a[kPeerSetSource].set(tooNew, root) t.match(a[kCanPlaceDep](tooNew, root, existingBar.edgesOut.get('foo')), @@ -626,7 +628,7 @@ t.test('contrived dep placement tests', t => { name: 'virtual-root', path: '/virtual-root', pkg: { ...root.package }, - }) + }), }) // note: it'll actually not bother replacing in this case, because // the original edge is not an error, but the canPlace result is still @@ -683,7 +685,7 @@ t.test('contrived dep placement tests', t => { name: 'virtual-root', path: '/virtual-root', pkg: { ...root.package }, - }) + }), }) a[kPeerSetSource].set(newFoo, root) @@ -707,7 +709,7 @@ t.test('contrived dep placement tests', t => { name: 'virtual-root', path: '/virtual-root', pkg: { ...root.package }, - }) + }), }) t.match(a[kCanPlaceDep](tooNew, root, existingBar.edgesOut.get('foo')), Symbol('CONFLICT'), 'conflicts with root dependency') @@ -734,25 +736,25 @@ t.test('contrived dep placement tests', t => { children: [ { name: 'b', - pkg: { name: 'b', version: '1.0.0', dependencies: {c:''}}, + pkg: { name: 'b', version: '1.0.0', dependencies: {c: ''}}, children: [ // gets its d1 dep from a's child node { name: 'c', - pkg: { name: 'c', version: '1.0.0', dependencies: {d:'1'}}, + pkg: { name: 'c', version: '1.0.0', dependencies: {d: '1'}}, }, // trying to place a d2 on behalf of this one { name: 'e', - pkg: { name: 'e', version: '1.0.0', dependencies: {d:'2'}}, + pkg: { name: 'e', version: '1.0.0', dependencies: {d: '2'}}, }, ], }, // the dep being shadowed { name: 'd', - pkg: {name:'d', version: '1.0.0'}, - } + pkg: {name: 'd', version: '1.0.0'}, + }, ], }) @@ -768,8 +770,8 @@ t.test('contrived dep placement tests', t => { }, 'gut check') const d2 = new Node({ name: 'd', - pkg: {name:'d', version: '2.0.0'}, - parent: new Node({ path: '/virtual-root' }) + pkg: {name: 'd', version: '2.0.0'}, + parent: new Node({ path: '/virtual-root' }), }) a[kPeerSetSource].set(d2, e) @@ -798,25 +800,25 @@ t.test('contrived dep placement tests', t => { children: [ { name: 'b', - pkg: { name: 'b', version: '1.0.0', dependencies: {c:''}}, + pkg: { name: 'b', version: '1.0.0', dependencies: {c: ''}}, children: [ // gets its d1 dep from a's child node { name: 'c', - pkg: { name: 'c', version: '1.0.0', dependencies: {d:'1||2'}}, + pkg: { name: 'c', version: '1.0.0', dependencies: {d: '1||2'}}, }, // trying to place a d2 on behalf of this one { name: 'e', - pkg: { name: 'e', version: '1.0.0', dependencies: {d:'2'}}, + pkg: { name: 'e', version: '1.0.0', dependencies: {d: '2'}}, }, ], }, // the dep being shadowed { name: 'd', - pkg: {name:'d', version: '1.0.0'}, - } + pkg: {name: 'd', version: '1.0.0'}, + }, ], }) @@ -832,8 +834,8 @@ t.test('contrived dep placement tests', t => { }, 'gut check') const d2 = new Node({ name: 'd', - pkg: {name:'d', version: '2.0.0'}, - parent: new Node({ path: '/virtual-root' }) + pkg: {name: 'd', version: '2.0.0'}, + parent: new Node({ path: '/virtual-root' }), }) a[kPeerSetSource].set(d2, e) @@ -941,10 +943,11 @@ t.test('contrived dep placement tests', t => { children: [ { name: 'e', - pkg: { name: 'e', dependencies: { - c: '1', - f: '', - }}, + pkg: { name: 'e', + dependencies: { + c: '1', + f: '', + }}, children: [ { name: 'c', pkg: { name: 'c', version: '1.2.3' } }, { @@ -1004,10 +1007,10 @@ t.test('contrived dep placement tests', t => { // attempting to place b@2 at root on behalf of a is a no-op, because // it's already there and fine. const root = new Node({ - pkg: { dependencies: {a:'', b:'2'}}, + pkg: { dependencies: {a: '', b: '2'}}, path: '/root', children: [ - { pkg: { name: 'a', version: '1.2.3', dependencies: {b:'2'}}}, + { pkg: { name: 'a', version: '1.2.3', dependencies: {b: '2'}}}, { pkg: { name: 'b', version: '2.3.4'}}, ], }) @@ -1037,7 +1040,7 @@ t.test('contrived dep placement tests', t => { const a = new Arborist({ ...OPT }) const root = new Node({ path: '/some/path', - pkg: { name: 'root', dependencies: { 'foo': '*' }}, + pkg: { name: 'root', dependencies: { foo: '*' }}, }) const target = new Node({ path: '/some/other/path', @@ -1052,7 +1055,7 @@ t.test('contrived dep placement tests', t => { }) const bar = new Node({ name: 'bar', - pkg: { name: 'bar', version:'1.2.3' }, + pkg: { name: 'bar', version: '1.2.3' }, parent: new Node({ path: '/virtual-root' }), }) const edge = target.edgesOut.get('bar') @@ -1069,7 +1072,7 @@ t.test('contrived dep placement tests', t => { const root = new Node({ path: '/some/path', realpath: '/some/path', - pkg: { name: 'root', dependencies: { 'foo': '*' }}, + pkg: { name: 'root', dependencies: { foo: '*' }}, }) const target = new Node({ path: '/some/path/to/packages', @@ -1085,7 +1088,7 @@ t.test('contrived dep placement tests', t => { }) const bar = new Node({ name: 'bar', - pkg: { name: 'bar', version:'1.2.3' }, + pkg: { name: 'bar', version: '1.2.3' }, parent: new Node({ path: '/virtual-root' }), }) const edge = target.edgesOut.get('bar') @@ -1102,12 +1105,12 @@ t.test('contrived dep placement tests', t => { t.test('global style', t => t.resolveMatchSnapshot(printIdeal(t.testdir(), { globalStyle: true, - add: [ 'rimraf' ], + add: ['rimraf'], }))) t.test('global', t => t.resolveMatchSnapshot(printIdeal(t.testdir(), { global: true, - add: [ 'rimraf' ], + add: ['rimraf'], }))) t.test('global has to add or remove', t => t.rejects(printIdeal(t.testdir(), { @@ -1191,7 +1194,7 @@ t.test('no fix available, linked top package', async t => { t.matchSnapshot(printTree(await arb.buildIdealTree())) t.strictSame(checkLogs(), [['warn', 'audit', 'Manual fix required in linked project at ./mkdirp-unfixable for mkdirp@*.\n' + - "'cd ./mkdirp-unfixable' and run 'npm audit' for details." + "'cd ./mkdirp-unfixable' and run 'npm audit' for details.", ]]) }) @@ -1276,19 +1279,19 @@ t.test('add symlink that points to a symlink', t => { 'global-prefix': { lib: { node_modules: { - a: t.fixture('symlink', '../../../linked-pkg') - } - } + a: t.fixture('symlink', '../../../linked-pkg'), + }, + }, }, 'linked-pkg': { 'package.json': JSON.stringify({ name: 'a', - version: '1.0.0' - }) + version: '1.0.0', + }), }, 'my-project': { - 'package.json': JSON.stringify({}) - } + 'package.json': JSON.stringify({}), + }, }) const path = resolve(fixt, 'my-project') const arb = new Arborist({ @@ -1299,8 +1302,8 @@ t.test('add symlink that points to a symlink', t => { add: [ // simulates the string used by `npm link ` when // installing a package available in the global space - `file:${resolve(fixt, 'global-prefix/lib/node_modules/a')}` - ] + `file:${resolve(fixt, 'global-prefix/lib/node_modules/a')}`, + ], }).then(tree => t.matchSnapshot( printTree(tree), @@ -1342,14 +1345,14 @@ t.test('resolve links in global mode', t => { const path = t.testdir({ global: {}, lib: { - 'my-project': {} + 'my-project': {}, }, 'linked-dep': { 'package.json': JSON.stringify({ name: 'linked-dep', - version: '1.0.0' - }) - } + version: '1.0.0', + }), + }, }) const fixturedir = resolve(path, 'lib', 'my-project') @@ -1511,7 +1514,7 @@ t.test('update a node if its bundled by the root project', async t => { 'package.json': JSON.stringify({ name: 'abbrev', version: '1.0.0', - }) + }), }, }, 'package.json': JSON.stringify({ @@ -1546,7 +1549,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-a': '1', '@isaacs/testing-peer-dep-conflict-chain-b': '2', - } + }, }, error: true, }, @@ -1555,7 +1558,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-a': '2', '@isaacs/testing-peer-dep-conflict-chain-b': '1', - } + }, }, error: true, }, @@ -1567,7 +1570,7 @@ t.test('more peer dep conflicts', t => { '@isaacs/testing-peer-dep-conflict-chain-c': '2', '@isaacs/testing-peer-dep-conflict-chain-d': '2', '@isaacs/testing-peer-dep-conflict-chain-e': '2', - } + }, }, error: true, }, @@ -1579,7 +1582,7 @@ t.test('more peer dep conflicts', t => { '@isaacs/testing-peer-dep-conflict-chain-c': '1', '@isaacs/testing-peer-dep-conflict-chain-d': '1', '@isaacs/testing-peer-dep-conflict-chain-e': '1', - } + }, }, error: true, }, @@ -1591,7 +1594,7 @@ t.test('more peer dep conflicts', t => { '@isaacs/testing-peer-dep-conflict-chain-b': '1', '@isaacs/testing-peer-dep-conflict-chain-l': '1', '@isaacs/testing-peer-dep-conflict-chain-m': '1', - } + }, }, error: true, }, @@ -1600,7 +1603,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-a': '1', '@isaacs/testing-peer-dep-conflict-chain-w': '2', - } + }, }, error: true, }, @@ -1609,7 +1612,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-j': '1', '@isaacs/testing-peer-dep-conflict-chain-v': '2', - } + }, }, error: false, resolvable: true, @@ -1619,7 +1622,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-a': '2', '@isaacs/testing-peer-dep-conflict-chain-j': '1', - } + }, }, error: false, resolvable: true, @@ -1628,9 +1631,9 @@ t.test('more peer dep conflicts', t => { pkg: { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-j': '1', - } + }, }, - add: [ '@isaacs/testing-peer-dep-conflict-chain-a@2' ], + add: ['@isaacs/testing-peer-dep-conflict-chain-a@2'], error: false, resolvable: true, }, @@ -1638,9 +1641,9 @@ t.test('more peer dep conflicts', t => { pkg: { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-j': '1', - } + }, }, - add: [ '@isaacs/testing-peer-dep-conflict-chain-v@2' ], + add: ['@isaacs/testing-peer-dep-conflict-chain-v@2'], error: false, resolvable: true, }, @@ -1649,7 +1652,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-ii': '1', '@isaacs/testing-peer-dep-conflict-chain-j': '2', - } + }, }, error: false, resolvable: true, @@ -1659,7 +1662,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-i': '1', '@isaacs/testing-peer-dep-conflict-chain-jj': '2', - } + }, }, error: false, resolvable: true, @@ -1669,7 +1672,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-jj': '1', '@isaacs/testing-peer-dep-conflict-chain-j': '2', - } + }, }, error: false, resolvable: true, @@ -1679,7 +1682,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-j': '1', '@isaacs/testing-peer-dep-conflict-chain-jj': '2', - } + }, }, error: false, resolvable: true, @@ -1688,7 +1691,7 @@ t.test('more peer dep conflicts', t => { pkg: { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-p': '1', - } + }, }, // XXX should this be false? it's not OUR fault, after all? // but it is a conflict in a peerSet that the root is sourcing. @@ -1698,7 +1701,7 @@ t.test('more peer dep conflicts', t => { pkg: { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-p': '2', - } + }, }, error: false, }, @@ -1717,7 +1720,7 @@ t.test('more peer dep conflicts', t => { dependencies: { '@isaacs/testing-peer-dep-conflict-chain-v': '1', '@isaacs/testing-peer-dep-conflict-chain-y': '2', - } + }, }, error: true, resolvable: false, @@ -1803,3 +1806,311 @@ t.test('make sure yargs works', async t => { const yargs = resolve(fixtures, 'yargs') t.matchSnapshot(await printIdeal(yargs), 'yargs should build fine') }) + +t.test('allow updating when peer outside of explicit update set', t => { + // see https://github.com/npm/cli/issues/2000 + t.plan(2) + t.test('valid, no force required', async t => { + const path = t.testdir({ + 'package.json': JSON.stringify({ + name: 'x', + version: '1.0.0', + dependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '1', + '@isaacs/testing-peer-dep-conflict-chain-single-a': '^1.0.1', + '@isaacs/testing-peer-dep-conflict-chain-single-b': '^1.0.1', + }, + }), + 'package-lock.json': JSON.stringify({ + name: 'x', + version: '1.0.0', + lockfileVersion: 2, + requires: true, + packages: { + '': { + dependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '1', + '@isaacs/testing-peer-dep-conflict-chain-single-a': '^1.0.1', + '@isaacs/testing-peer-dep-conflict-chain-single-b': '^1.0.1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-a': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-a/-/testing-peer-dep-conflict-chain-a-1.0.0.tgz', + integrity: 'sha512-yUUG0Sem+AzNZ0uPXmEZN/GHHMmAg3kbM/zrijnd+tAAKVV5PhWXVUuLKJ3Q6wSAxz3WuYG08OaJl3lpV4UFOA==', + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-b': '1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-b': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-b/-/testing-peer-dep-conflict-chain-b-1.0.0.tgz', + integrity: 'sha512-tbsZ8No4L7h5YiIqDwGlJ14dg44oG4ZstF/wx7eZKUlnZax392thEeac5MNGFsv1T0Uqtiby9+SdpIRpejrHSw==', + peer: true, + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-c': '1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-c': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-c/-/testing-peer-dep-conflict-chain-c-1.0.0.tgz', + integrity: 'sha512-173OUwUJK8QN4CGTF+oPHwoOHbUzgxjC3tzg2kBVLE/eak02ZXJrW9l4LmW03vqcToADVhsVMcFLIaAb6yd1mQ==', + peer: true, + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-d': '1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-d': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-d/-/testing-peer-dep-conflict-chain-d-1.0.0.tgz', + integrity: 'sha512-zOtmaure/xJHmz7yGU7T33hjV6MZpo8Y6v1GuxDBx0PbqGoCxxCMacNtTUsEL5Sj8T19r5UShGZQmirNqPuhww==', + peer: true, + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-e': '1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-e': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-e/-/testing-peer-dep-conflict-chain-e-1.0.0.tgz', + integrity: 'sha512-EDuAVgd6DBGe2tKQKdQt7Z6RoptSWQem4W++F+bqC31E0JuRVJHu44sENtIviUGsi0jVJS5xD75cL6kvvbaw/Q==', + peer: true, + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a': { + version: '1.0.1', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-1.0.1.tgz', + integrity: 'sha512-NLHsR3z4e5I7+IXbe8l0SXDSdsghDtbsCMAG3deh21djZAH4dawx0bR/V/knYDrd0OZWdr0jDhivmVm42SmB1w==', + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b': { + version: '1.0.1', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-1.0.1.tgz', + integrity: 'sha512-cyXyBAMPJWv28bHI0cJrer64eqQsM59CR+/ideNwthD5X5hZVyvVMTpuai7noDA34jllf9Xgb+jcPgt2xmvR6A==', + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '1', + '@isaacs/testing-peer-dep-conflict-chain-single-a': '1', + }, + }, + }, + dependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-a/-/testing-peer-dep-conflict-chain-a-1.0.0.tgz', + integrity: 'sha512-yUUG0Sem+AzNZ0uPXmEZN/GHHMmAg3kbM/zrijnd+tAAKVV5PhWXVUuLKJ3Q6wSAxz3WuYG08OaJl3lpV4UFOA==', + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-b': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-b/-/testing-peer-dep-conflict-chain-b-1.0.0.tgz', + integrity: 'sha512-tbsZ8No4L7h5YiIqDwGlJ14dg44oG4ZstF/wx7eZKUlnZax392thEeac5MNGFsv1T0Uqtiby9+SdpIRpejrHSw==', + peer: true, + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-c': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-c/-/testing-peer-dep-conflict-chain-c-1.0.0.tgz', + integrity: 'sha512-173OUwUJK8QN4CGTF+oPHwoOHbUzgxjC3tzg2kBVLE/eak02ZXJrW9l4LmW03vqcToADVhsVMcFLIaAb6yd1mQ==', + peer: true, + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-d': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-d/-/testing-peer-dep-conflict-chain-d-1.0.0.tgz', + integrity: 'sha512-zOtmaure/xJHmz7yGU7T33hjV6MZpo8Y6v1GuxDBx0PbqGoCxxCMacNtTUsEL5Sj8T19r5UShGZQmirNqPuhww==', + peer: true, + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-e': { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-e/-/testing-peer-dep-conflict-chain-e-1.0.0.tgz', + integrity: 'sha512-EDuAVgd6DBGe2tKQKdQt7Z6RoptSWQem4W++F+bqC31E0JuRVJHu44sENtIviUGsi0jVJS5xD75cL6kvvbaw/Q==', + peer: true, + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-single-a': { + version: '1.0.1', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-1.0.1.tgz', + integrity: 'sha512-NLHsR3z4e5I7+IXbe8l0SXDSdsghDtbsCMAG3deh21djZAH4dawx0bR/V/knYDrd0OZWdr0jDhivmVm42SmB1w==', + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-single-b': { + version: '1.0.1', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-1.0.1.tgz', + integrity: 'sha512-cyXyBAMPJWv28bHI0cJrer64eqQsM59CR+/ideNwthD5X5hZVyvVMTpuai7noDA34jllf9Xgb+jcPgt2xmvR6A==', + requires: {}, + }, + }, + }), + }) + t.matchSnapshot(await printIdeal(path, { + add: [ + '@isaacs/testing-peer-dep-conflict-chain-single-a@2', + '@isaacs/testing-peer-dep-conflict-chain-single-b@2', + ], + })) + }) + + t.test('conflict, but resolves appropriately with --force', async t => { + const path = t.testdir({ + 'package.json': JSON.stringify({ + name: 'x', + version: '1.0.0', + dependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '2', + '@isaacs/testing-peer-dep-conflict-chain-single-a': '^1.0.1', + '@isaacs/testing-peer-dep-conflict-chain-single-b': '^1.0.1', + }, + }), + 'package-lock.json': JSON.stringify({ + name: 'x', + lockfileVersion: 2, + requires: true, + packages: { + '': { + dependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '2', + '@isaacs/testing-peer-dep-conflict-chain-single-a': '^1.0.1', + '@isaacs/testing-peer-dep-conflict-chain-single-b': '^1.0.1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-a': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-a/-/testing-peer-dep-conflict-chain-a-2.0.0.tgz', + integrity: 'sha512-B1L3NDBf8/nZSDM+E0AmotxaSGi5e/EUPRpoGLS0nAqulv3itMULe7s4VREyuS195j4JlhJEaz9C8idB9mA8Bw==', + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-b': '2', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-b': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-b/-/testing-peer-dep-conflict-chain-b-2.0.0.tgz', + integrity: 'sha512-6Lh4Gj5Nl5i+IhYxCjBmD5acTRkSni5m/wjXZCVaj0xJUVaNO+MprVlktUc0w1WN8E6CM4yhrkVdFTMDxBIZ0Q==', + peer: true, + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-c': '2', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-c': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-c/-/testing-peer-dep-conflict-chain-c-2.0.0.tgz', + integrity: 'sha512-iRawfr15PBTW8PHYySyCF/DvgNuEy8hCZQfWkLrdfiQvJfbMWsbSLAdX2HBT2hh0pefc0v+vBKpuhPi/jy6pvQ==', + peer: true, + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-d': '2', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-d': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-d/-/testing-peer-dep-conflict-chain-d-2.0.0.tgz', + integrity: 'sha512-zDS6IzO10KmLdtrG1m8M5wZ8wzmHPWaUBc4QaqptvI/nhLrgcH8OZB0hoMmK8tQg4MalbOyam4EdKOg7u9kGGg==', + peer: true, + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-e': '2', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-e': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-e/-/testing-peer-dep-conflict-chain-e-2.0.0.tgz', + integrity: 'sha512-HEcKq/WWndty//qXYNL9TxDve0FAJqSPAAFU7t6Hm5AtluOGmIPiGUf7Ei9HGe60iBrrfmnzSxfFRG7j0SbW9Q==', + peer: true, + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '2', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-single-a': { + version: '1.0.1', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-1.0.1.tgz', + integrity: 'sha512-NLHsR3z4e5I7+IXbe8l0SXDSdsghDtbsCMAG3deh21djZAH4dawx0bR/V/knYDrd0OZWdr0jDhivmVm42SmB1w==', + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '1', + }, + }, + 'node_modules/@isaacs/testing-peer-dep-conflict-chain-single-b': { + version: '1.0.1', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-1.0.1.tgz', + integrity: 'sha512-cyXyBAMPJWv28bHI0cJrer64eqQsM59CR+/ideNwthD5X5hZVyvVMTpuai7noDA34jllf9Xgb+jcPgt2xmvR6A==', + peerDependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': '1', + '@isaacs/testing-peer-dep-conflict-chain-single-a': '1', + }, + }, + }, + dependencies: { + '@isaacs/testing-peer-dep-conflict-chain-a': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-a/-/testing-peer-dep-conflict-chain-a-2.0.0.tgz', + integrity: 'sha512-B1L3NDBf8/nZSDM+E0AmotxaSGi5e/EUPRpoGLS0nAqulv3itMULe7s4VREyuS195j4JlhJEaz9C8idB9mA8Bw==', + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-b': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-b/-/testing-peer-dep-conflict-chain-b-2.0.0.tgz', + integrity: 'sha512-6Lh4Gj5Nl5i+IhYxCjBmD5acTRkSni5m/wjXZCVaj0xJUVaNO+MprVlktUc0w1WN8E6CM4yhrkVdFTMDxBIZ0Q==', + peer: true, + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-c': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-c/-/testing-peer-dep-conflict-chain-c-2.0.0.tgz', + integrity: 'sha512-iRawfr15PBTW8PHYySyCF/DvgNuEy8hCZQfWkLrdfiQvJfbMWsbSLAdX2HBT2hh0pefc0v+vBKpuhPi/jy6pvQ==', + peer: true, + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-d': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-d/-/testing-peer-dep-conflict-chain-d-2.0.0.tgz', + integrity: 'sha512-zDS6IzO10KmLdtrG1m8M5wZ8wzmHPWaUBc4QaqptvI/nhLrgcH8OZB0hoMmK8tQg4MalbOyam4EdKOg7u9kGGg==', + peer: true, + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-e': { + version: '2.0.0', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-e/-/testing-peer-dep-conflict-chain-e-2.0.0.tgz', + integrity: 'sha512-HEcKq/WWndty//qXYNL9TxDve0FAJqSPAAFU7t6Hm5AtluOGmIPiGUf7Ei9HGe60iBrrfmnzSxfFRG7j0SbW9Q==', + peer: true, + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-single-a': { + version: '1.0.1', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-1.0.1.tgz', + integrity: 'sha512-NLHsR3z4e5I7+IXbe8l0SXDSdsghDtbsCMAG3deh21djZAH4dawx0bR/V/knYDrd0OZWdr0jDhivmVm42SmB1w==', + requires: {}, + }, + '@isaacs/testing-peer-dep-conflict-chain-single-b': { + version: '1.0.1', + resolved: 'https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-1.0.1.tgz', + integrity: 'sha512-cyXyBAMPJWv28bHI0cJrer64eqQsM59CR+/ideNwthD5X5hZVyvVMTpuai7noDA34jllf9Xgb+jcPgt2xmvR6A==', + requires: {}, + }, + }, + }), + }) + t.matchSnapshot(await printIdeal(path, { + force: true, + add: [ + '@isaacs/testing-peer-dep-conflict-chain-single-a@2', + '@isaacs/testing-peer-dep-conflict-chain-single-b@2', + ], + }), 'succeed if force applied') + await t.rejects(printIdeal(path, { + add: [ + '@isaacs/testing-peer-dep-conflict-chain-single-a@2', + '@isaacs/testing-peer-dep-conflict-chain-single-b@2', + ], + }), 'fail without force') + }) +}) + +t.test('carbonium eslint conflicts', async t => { + const path = resolve(fixtures, 'carbonium') + t.matchSnapshot(await printIdeal(path, { + add: [ + '@typescript-eslint/eslint-plugin@4', + '@typescript-eslint/parser@4', + ], + })) +}) diff --git a/test/fixtures/carbonium/package-lock.json b/test/fixtures/carbonium/package-lock.json new file mode 100644 index 000000000..d9de91b28 --- /dev/null +++ b/test/fixtures/carbonium/package-lock.json @@ -0,0 +1,2466 @@ +{ + "name": "carbonium", + "version": "1.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "1.0.1", + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^3.10.1", + "@typescript-eslint/parser": "^3.10.1", + "eslint": "^7" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", + "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "3.10.1", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^3.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", + "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", + "dev": true, + "dependencies": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.10.1", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/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=", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/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=", + "dev": true + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/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=", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slice-ansi/node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typescript": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", + "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "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=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", + "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "3.10.1", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", + "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.10.1", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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=", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "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=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": 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" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "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==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": 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=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "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==", + "dev": true + }, + "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=", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "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==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "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=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "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==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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==", + "dev": true, + "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=", + "dev": true + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.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==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typescript": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", + "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", + "dev": true, + "peer": true + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } +} diff --git a/test/fixtures/carbonium/package.json b/test/fixtures/carbonium/package.json new file mode 100644 index 000000000..29d1f7532 --- /dev/null +++ b/test/fixtures/carbonium/package.json @@ -0,0 +1,9 @@ +{ + "name": "carbonium", + "version": "1.0.1", + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^3.10.1", + "@typescript-eslint/parser": "^3.10.1", + "eslint": "^7" + } +} diff --git a/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-a.json b/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-a.json new file mode 100644 index 000000000..70f40b234 --- /dev/null +++ b/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-a.json @@ -0,0 +1,156 @@ +{ + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "_rev": "3-16d781dc4cbf40eb280424273cb80df1", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "dist-tags": { + "latest": "2.0.1" + }, + "versions": { + "1.0.0": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "1.0.0", + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-a@1.0.0", + "_nodeVersion": "14.8.0", + "_npmVersion": "7.0.3", + "dist": { + "integrity": "sha512-uTqVWww15QTQWHTmooaS0gaYmvUnznvKa+YiUgZw5tq8hXQHrP1O5NkjUDgHPqFBnbMNg5WTOQnnnI9gJPF3Vw==", + "shasum": "1141bc853b3bdc36e4b2309b0136120e79355125", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-1.0.0.tgz", + "fileCount": 1, + "unpackedSize": 87, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj3ZXCRA9TVsSAnZWagAA77wP/2dOJraytnBVNmnA9dAj\niZPUc3KpjsI08tptlEwqRoTXNQjVoNEYCuJBRideybbN7RGO3YjsRMYSKu8K\n/24F+Wvgz/fbvrPp+3Rb5b3eQ+0mzwhuROD3iZ3A+Xb0joKwdJlVLKDGc0rD\nK98tFOOU1YE6Z2eRZzuxKhnkcUYmieVHtM10LXGUWBruyjMioi+UglEta4sO\nt13QKOAzLq2fvxFOneJzD57DCqi82WPJ8LwJncmg01qcybLyMgWLCd1tZEpV\nZleVV8NoelknETP6VzI+ABzvDQOXO8Wk3xJf8GCbArkK6cbpbuB41I1AuxAG\nxxjRASsPOsSJhStwEwMU2ShFHD1jW7wP4ANAcegQ6Q0J9gtJZxOy8q9/UlhW\ncINMoPhtlbEbwhn+TEc6WiFMsoYZD/ERYqq4cqjm6EP1FVx1quftvpjOMoEC\n4fbV+jSt6ikx32MtKe52maaJv8GzT90mxR11hiXbay58NdPCqVpCajZjLnsm\nTw/yJCcZTVW+A5NZDi3tbPA9UAenOnkjt3Zz78VVBgRakKHQHCo++TUSk3mi\nwfr/HGlVUtxYjd90PPrKJ9vgO/e+v630SWoSwe4smGijEUetWlq5MgaY9M2J\nd6Y2tqqrCW0zueadk2b49k+2FZ/wYuwyS/DfPiuChND7LRp8wYl1KiTqfxQN\nXKZw\r\n=xzSC\r\n-----END PGP SIGNATURE-----\r\n" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "directories": {}, + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/testing-peer-dep-conflict-chain-single-a_1.0.0_1603237462752_0.3775410310185776" + }, + "_hasShrinkwrap": false + }, + "2.0.0": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "2.0.0", + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-a@2.0.0", + "_nodeVersion": "14.8.0", + "_npmVersion": "7.0.3", + "dist": { + "integrity": "sha512-EeEqcHtFFh8U7DBN3DF3sY0pTobDFMQdK/ld2dpP5FLjyqux4xJayaCCxgxOEAzuF/umuoLb5ctt4txWznEvqQ==", + "shasum": "0808e3294eea3884cc8aa2c4d13662cb6b722098", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-2.0.0.tgz", + "fileCount": 1, + "unpackedSize": 87, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj3ZbCRA9TVsSAnZWagAASDAP/1PlV0Yf0UEah0HMHdP1\nhwEJ8GZd0Mcl9+UffukvmqmpwiMpOA4KclMcgXj0MdNQAPDThsNYJnZgQidm\nAVexFtRWITxLlVcL0am8+1fvehEZmRveQNs0Iv41mFhqHDpW4YoDn2t4dRH1\n0wGDx2+Yeai8iMdvo/Sbrtq14QBkNcNbHM0Bqh0RTz0prwkHe0dpHGDSf7cJ\nQ3Bg2oxbh3LzeP2WHfIIvp/CHQ2ljGl1I8WjXVImpzxGTD6jPDbORUCRAvxn\n3j5kMYFfiqbEAUGWsMOVIWLYNWwPRirDwPd2bhx4Aiu1oKMVGDXc8VBIY31a\nGYkmKxsY714A/3deWgbH9dYwHbTOvAbha645007SnogvpqxCmSNvg+JpQ2Qv\neWZf9lHGRyk4a5ZRbIqiTEufqb/v0d+dvMXDU6C+06HuEgG2fbEL7hQVM3B9\nv/ntN4XSfAJNsxoSAeOtHlzY5VclubRdtIWboORhwy2CbDc82dxtTMBGF5EN\nYMxxoiU4qbxaay9Erljp65sdYyO88ptElpKGr4bPJ1hDnT1t8Cm5cX3gKKo5\n76XyHeR50zf7QlHNsHTBaplbgwxrlvpKVqjCcyEIboTIanAHVdQ7hj7U58BY\npazy1ulKh2FH4xDbrQDy+N/F1FqX4CXNgRuZfYqFXus/wK5g3koYOtnDLuZ4\nyFQw\r\n=3a5M\r\n-----END PGP SIGNATURE-----\r\n" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "directories": {}, + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/testing-peer-dep-conflict-chain-single-a_2.0.0_1603237467434_0.5944275148761979" + }, + "_hasShrinkwrap": false + }, + "1.0.1": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "1.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + }, + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-a@1.0.1", + "_nodeVersion": "14.8.0", + "_npmVersion": "7.0.3", + "dist": { + "integrity": "sha512-NLHsR3z4e5I7+IXbe8l0SXDSdsghDtbsCMAG3deh21djZAH4dawx0bR/V/knYDrd0OZWdr0jDhivmVm42SmB1w==", + "shasum": "0a3155d2a8522dabd64c3328c66881f22065ca76", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-1.0.1.tgz", + "fileCount": 1, + "unpackedSize": 169, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj46tCRA9TVsSAnZWagAAHXUP+gNBW3uls/DzAdV1WDQG\nh0f6IoIBTfHN8et/vCqdBsFzkBatanUfz/kPQuZY84R6gyMcZ1PwI0bRN0VS\nKF4GDCyDnfQ+jCdj4pB9QOWAJ/Lvyvf4sxcIzsAaAo79di7tIQU0dOYxxm8q\n+i0HzVw1zRBgWiUwD6krSxNGy+2PYf6qaDqjpQ+TiQaRFv7qR1PvAG3GOZ5P\nBgNRYh83qZaXI1JD3BJSFAGnlG3buByTbROwcKn1Rfap9mzT8ZdhvKSFDQep\nKI58olxyEg87Rl1bbdeZ6n6FFzRgt8iWbLVSZwAd2zgwOHwTf1jm0LpYgFlA\nsSEiMaLIkBgu5MX6OzE6nKFh1PewxN86MQXeXm2eZx2/KLDpSuwyxzw+9I77\n2or6goGO3e/Y7wU7IUiNOV2AjZQO09SO0q42sENFcWPAXWOKzfVkXkd+shUe\nOGAiPcdkTwViRI2g/ZV/zCmXBhBZV/X2M0vEikMKdGNQyCx/Wa2lMVs4rZzm\nokiIM5IB92utiK2EoNsSYUVdZp95TpIMHK04Fx66V3l1GtZ24dApktzabKmS\nNMvLcWZgU1IvqvRhZ6GyCKBUcs+EPDhvsRa2dIYroBcVKbwkiRn6bsT2s0O1\nB7f6lAxDYpwaV9H+DEYPG2HCD4X1vWKdt+YJT+MB9CpbNm9gayff2kfKH7qo\nHFC9\r\n=LVIH\r\n-----END PGP SIGNATURE-----\r\n" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "directories": {}, + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/testing-peer-dep-conflict-chain-single-a_1.0.1_1603243692717_0.9572721919859413" + }, + "_hasShrinkwrap": false + }, + "2.0.1": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "2.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + }, + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-a@2.0.1", + "_nodeVersion": "14.8.0", + "_npmVersion": "7.0.3", + "dist": { + "integrity": "sha512-MSjfDt0MxanBWtBmcIUVYo+SmIWgMpVkNKnvZu8Ds4OB65Anf+8OWLnq00qWXsS3e8g5/CWYvuVg8KJFFPcA2w==", + "shasum": "724e1bebce02c3d65716e57fbfcd401553a37a22", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-2.0.1.tgz", + "fileCount": 1, + "unpackedSize": 169, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj46wCRA9TVsSAnZWagAAmSYP/RLWB1lUX5P9c5T/4zS2\nDTF3NWt/uGkYH/6QzW9WisEDDzWI7Yfit9DOJAYO+MIsqhvcSBF/Tk7K8CuY\nwqshlrzfw/Lcj4qVtuHgNh0nAM6yhUnVgW7tsJXua3mpKslYq1B2k5vibyGX\nO0Sqw3/14PK7xvjTuKgOTAkNlEuRvsASBK4cJMUEmt24L0Yk19C7LXPNlorG\nKK76mxrrhKessaIVVq7JdxIdI1UIJiQTvBguFQJDJKGKEZuKu3WkvCydGqet\niirJr/jZPYzIiGCXWbjxgWcBgNHL3MqYuP8O4oNcCEL1oS3kULqn8zGNjrjh\ncItvG5SkAPuQHevRvB1VAGN+XycNWlc+SB2IWZ861pUnIX4vwpX/e7MTARG2\n+eRZQcf1U3gfacFef3OspoQMdMHo45oJJRsJ5Wh+Yx7N8XUfCrE7+sYG3FOu\nj9+UMBmy3HX5c0ft2DGTUzj8OmERgvZr4Crp+9VCnEuyNalOW1j2dv57mTxs\n3VUhFr7y3JYWJ4twq2Z8Us4dOPcICwf2TmboMLeTaNcOpenNt/DNEm6axJbp\ncdi4nYOZJlU6qngAKjjchpBexlMumyHOZMRzFBHdjKVnOabOxXQtReKieZxR\nDBTmDjKYMGw84BiE3nz4M+9HtvEaOGln7dOhJXWd3XAMnar9sjOXgtH+qw0y\nX4t3\r\n=AsZo\r\n-----END PGP SIGNATURE-----\r\n" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "directories": {}, + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/testing-peer-dep-conflict-chain-single-a_2.0.1_1603243696196_0.6264048612210391" + }, + "_hasShrinkwrap": false + } + }, + "time": { + "created": "2020-10-20T23:44:22.692Z", + "1.0.0": "2020-10-20T23:44:22.853Z", + "modified": "2020-10-21T01:28:18.593Z", + "2.0.0": "2020-10-20T23:44:27.640Z", + "1.0.1": "2020-10-21T01:28:12.827Z", + "2.0.1": "2020-10-21T01:28:16.343Z" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "readme": "ERROR: No README data found!", + "readmeFilename": "" +} diff --git a/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-a.min.json b/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-a.min.json new file mode 100644 index 000000000..1c2daaba4 --- /dev/null +++ b/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-a.min.json @@ -0,0 +1,63 @@ +{ + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "dist-tags": { + "latest": "2.0.1" + }, + "versions": { + "1.0.0": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "1.0.0", + "dist": { + "integrity": "sha512-uTqVWww15QTQWHTmooaS0gaYmvUnznvKa+YiUgZw5tq8hXQHrP1O5NkjUDgHPqFBnbMNg5WTOQnnnI9gJPF3Vw==", + "shasum": "1141bc853b3bdc36e4b2309b0136120e79355125", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-1.0.0.tgz", + "fileCount": 1, + "unpackedSize": 87, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj3ZXCRA9TVsSAnZWagAA77wP/2dOJraytnBVNmnA9dAj\niZPUc3KpjsI08tptlEwqRoTXNQjVoNEYCuJBRideybbN7RGO3YjsRMYSKu8K\n/24F+Wvgz/fbvrPp+3Rb5b3eQ+0mzwhuROD3iZ3A+Xb0joKwdJlVLKDGc0rD\nK98tFOOU1YE6Z2eRZzuxKhnkcUYmieVHtM10LXGUWBruyjMioi+UglEta4sO\nt13QKOAzLq2fvxFOneJzD57DCqi82WPJ8LwJncmg01qcybLyMgWLCd1tZEpV\nZleVV8NoelknETP6VzI+ABzvDQOXO8Wk3xJf8GCbArkK6cbpbuB41I1AuxAG\nxxjRASsPOsSJhStwEwMU2ShFHD1jW7wP4ANAcegQ6Q0J9gtJZxOy8q9/UlhW\ncINMoPhtlbEbwhn+TEc6WiFMsoYZD/ERYqq4cqjm6EP1FVx1quftvpjOMoEC\n4fbV+jSt6ikx32MtKe52maaJv8GzT90mxR11hiXbay58NdPCqVpCajZjLnsm\nTw/yJCcZTVW+A5NZDi3tbPA9UAenOnkjt3Zz78VVBgRakKHQHCo++TUSk3mi\nwfr/HGlVUtxYjd90PPrKJ9vgO/e+v630SWoSwe4smGijEUetWlq5MgaY9M2J\nd6Y2tqqrCW0zueadk2b49k+2FZ/wYuwyS/DfPiuChND7LRp8wYl1KiTqfxQN\nXKZw\r\n=xzSC\r\n-----END PGP SIGNATURE-----\r\n" + } + }, + "2.0.0": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "2.0.0", + "dist": { + "integrity": "sha512-EeEqcHtFFh8U7DBN3DF3sY0pTobDFMQdK/ld2dpP5FLjyqux4xJayaCCxgxOEAzuF/umuoLb5ctt4txWznEvqQ==", + "shasum": "0808e3294eea3884cc8aa2c4d13662cb6b722098", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-2.0.0.tgz", + "fileCount": 1, + "unpackedSize": 87, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj3ZbCRA9TVsSAnZWagAASDAP/1PlV0Yf0UEah0HMHdP1\nhwEJ8GZd0Mcl9+UffukvmqmpwiMpOA4KclMcgXj0MdNQAPDThsNYJnZgQidm\nAVexFtRWITxLlVcL0am8+1fvehEZmRveQNs0Iv41mFhqHDpW4YoDn2t4dRH1\n0wGDx2+Yeai8iMdvo/Sbrtq14QBkNcNbHM0Bqh0RTz0prwkHe0dpHGDSf7cJ\nQ3Bg2oxbh3LzeP2WHfIIvp/CHQ2ljGl1I8WjXVImpzxGTD6jPDbORUCRAvxn\n3j5kMYFfiqbEAUGWsMOVIWLYNWwPRirDwPd2bhx4Aiu1oKMVGDXc8VBIY31a\nGYkmKxsY714A/3deWgbH9dYwHbTOvAbha645007SnogvpqxCmSNvg+JpQ2Qv\neWZf9lHGRyk4a5ZRbIqiTEufqb/v0d+dvMXDU6C+06HuEgG2fbEL7hQVM3B9\nv/ntN4XSfAJNsxoSAeOtHlzY5VclubRdtIWboORhwy2CbDc82dxtTMBGF5EN\nYMxxoiU4qbxaay9Erljp65sdYyO88ptElpKGr4bPJ1hDnT1t8Cm5cX3gKKo5\n76XyHeR50zf7QlHNsHTBaplbgwxrlvpKVqjCcyEIboTIanAHVdQ7hj7U58BY\npazy1ulKh2FH4xDbrQDy+N/F1FqX4CXNgRuZfYqFXus/wK5g3koYOtnDLuZ4\nyFQw\r\n=3a5M\r\n-----END PGP SIGNATURE-----\r\n" + } + }, + "1.0.1": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "1.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + }, + "dist": { + "integrity": "sha512-NLHsR3z4e5I7+IXbe8l0SXDSdsghDtbsCMAG3deh21djZAH4dawx0bR/V/knYDrd0OZWdr0jDhivmVm42SmB1w==", + "shasum": "0a3155d2a8522dabd64c3328c66881f22065ca76", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-1.0.1.tgz", + "fileCount": 1, + "unpackedSize": 169, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj46tCRA9TVsSAnZWagAAHXUP+gNBW3uls/DzAdV1WDQG\nh0f6IoIBTfHN8et/vCqdBsFzkBatanUfz/kPQuZY84R6gyMcZ1PwI0bRN0VS\nKF4GDCyDnfQ+jCdj4pB9QOWAJ/Lvyvf4sxcIzsAaAo79di7tIQU0dOYxxm8q\n+i0HzVw1zRBgWiUwD6krSxNGy+2PYf6qaDqjpQ+TiQaRFv7qR1PvAG3GOZ5P\nBgNRYh83qZaXI1JD3BJSFAGnlG3buByTbROwcKn1Rfap9mzT8ZdhvKSFDQep\nKI58olxyEg87Rl1bbdeZ6n6FFzRgt8iWbLVSZwAd2zgwOHwTf1jm0LpYgFlA\nsSEiMaLIkBgu5MX6OzE6nKFh1PewxN86MQXeXm2eZx2/KLDpSuwyxzw+9I77\n2or6goGO3e/Y7wU7IUiNOV2AjZQO09SO0q42sENFcWPAXWOKzfVkXkd+shUe\nOGAiPcdkTwViRI2g/ZV/zCmXBhBZV/X2M0vEikMKdGNQyCx/Wa2lMVs4rZzm\nokiIM5IB92utiK2EoNsSYUVdZp95TpIMHK04Fx66V3l1GtZ24dApktzabKmS\nNMvLcWZgU1IvqvRhZ6GyCKBUcs+EPDhvsRa2dIYroBcVKbwkiRn6bsT2s0O1\nB7f6lAxDYpwaV9H+DEYPG2HCD4X1vWKdt+YJT+MB9CpbNm9gayff2kfKH7qo\nHFC9\r\n=LVIH\r\n-----END PGP SIGNATURE-----\r\n" + } + }, + "2.0.1": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "2.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + }, + "dist": { + "integrity": "sha512-MSjfDt0MxanBWtBmcIUVYo+SmIWgMpVkNKnvZu8Ds4OB65Anf+8OWLnq00qWXsS3e8g5/CWYvuVg8KJFFPcA2w==", + "shasum": "724e1bebce02c3d65716e57fbfcd401553a37a22", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-a/-/testing-peer-dep-conflict-chain-single-a-2.0.1.tgz", + "fileCount": 1, + "unpackedSize": 169, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj46wCRA9TVsSAnZWagAAmSYP/RLWB1lUX5P9c5T/4zS2\nDTF3NWt/uGkYH/6QzW9WisEDDzWI7Yfit9DOJAYO+MIsqhvcSBF/Tk7K8CuY\nwqshlrzfw/Lcj4qVtuHgNh0nAM6yhUnVgW7tsJXua3mpKslYq1B2k5vibyGX\nO0Sqw3/14PK7xvjTuKgOTAkNlEuRvsASBK4cJMUEmt24L0Yk19C7LXPNlorG\nKK76mxrrhKessaIVVq7JdxIdI1UIJiQTvBguFQJDJKGKEZuKu3WkvCydGqet\niirJr/jZPYzIiGCXWbjxgWcBgNHL3MqYuP8O4oNcCEL1oS3kULqn8zGNjrjh\ncItvG5SkAPuQHevRvB1VAGN+XycNWlc+SB2IWZ861pUnIX4vwpX/e7MTARG2\n+eRZQcf1U3gfacFef3OspoQMdMHo45oJJRsJ5Wh+Yx7N8XUfCrE7+sYG3FOu\nj9+UMBmy3HX5c0ft2DGTUzj8OmERgvZr4Crp+9VCnEuyNalOW1j2dv57mTxs\n3VUhFr7y3JYWJ4twq2Z8Us4dOPcICwf2TmboMLeTaNcOpenNt/DNEm6axJbp\ncdi4nYOZJlU6qngAKjjchpBexlMumyHOZMRzFBHdjKVnOabOxXQtReKieZxR\nDBTmDjKYMGw84BiE3nz4M+9HtvEaOGln7dOhJXWd3XAMnar9sjOXgtH+qw0y\nX4t3\r\n=AsZo\r\n-----END PGP SIGNATURE-----\r\n" + } + } + }, + "modified": "2020-10-21T01:28:18.593Z" +} diff --git a/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-b.json b/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-b.json new file mode 100644 index 000000000..6033f7808 --- /dev/null +++ b/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-b.json @@ -0,0 +1,164 @@ +{ + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "_rev": "3-f71c6466b5f68b364722130932ed1022", + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "dist-tags": { + "latest": "2.0.1" + }, + "versions": { + "1.0.0": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "1.0.0", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "1" + }, + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-b@1.0.0", + "_nodeVersion": "14.8.0", + "_npmVersion": "7.0.3", + "dist": { + "integrity": "sha512-uYYhNcq5TAG/AAeWyx4+BTECo79HIHxZyr3TEiRI1LtKsI5jyBdvrAKsKRIhZxbzl28gLQIGhi1d+xfb2e8HEQ==", + "shasum": "109677130c28bbd244101d6cf810d87c1b1346f5", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-1.0.0.tgz", + "fileCount": 1, + "unpackedSize": 176, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj3ZfCRA9TVsSAnZWagAAokEP/j0GlVKPmq6AOwU9ckwg\nNR2YoU22U2l6Ds0i8A+kANjXBHgzg9ZtPpawr/O23l599LrkEeiXMRMphlqi\n8Pb8wwi4tLmsiGRSedCEObCFnoMFjUEmA7vcjSJKJf1P145Ve0ckrQD5LhNC\nYM689I7kxA3VfZLio/60UrQ6d1hcJYz7/wMUbeTGUQNNZdHqPr54dmnS5luK\n+bBaD+M3rxHU/0Gp2k2w+mYE+tubF+ykgIQZfbtKN0IDbk3HvCRX0URUPN/d\nPVnJQo00UvvK/jtbTfVfZHMLQqgPsBNC2SX0v+7//aIewIAraiGJIB2/zl0X\nkqxMb35zenhWp/EiFusVLJ4Ez5BDJcXPl+VcEooEK9EkbUMIzBNGMfBkiAhy\nq/wwzabwQ1xXVfK29DqbehDRFD0vJIq0aSzyjtDCw6K8IX7jHpuucJbcoQi0\nU9Gex8DhFGbdHZI1DOIODhbQnsn6RaNolIIyLbucbKCB9B9Suo4ZX6IQqIVo\nGAGcd2qtQ4kXyYcmgzsAH62Aqpd8auuFsS8Bly1MXiurV/0qDM5EVW3xt/gl\n+flEvG41P95TGBJIQpQct+Z7CQAJAwofP7R5uZz1mjB4+4KIAuEbAK/aepF+\nlbnzndVUzGkhRVyIBmiFq2474CeRnbOyhK4t7Oky8p3GjEcbObCP3yDTdzSs\nYW1m\r\n=L1li\r\n-----END PGP SIGNATURE-----\r\n" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "directories": {}, + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/testing-peer-dep-conflict-chain-single-b_1.0.0_1603237471362_0.798005608933428" + }, + "_hasShrinkwrap": false + }, + "2.0.0": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "2.0.0", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "2" + }, + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-b@2.0.0", + "_nodeVersion": "14.8.0", + "_npmVersion": "7.0.3", + "dist": { + "integrity": "sha512-wHWh9R+t+2OF0SexH3pCiZvyKz5qnrBUAIgl8FsvRC7uAkYc5RSRIr98Vx3DfVkmCvVK2EOYL/9oLhwUzsH2ww==", + "shasum": "0284537a9285b4b238928a76b37c3d7edda58817", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-2.0.0.tgz", + "fileCount": 1, + "unpackedSize": 176, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj3ZjCRA9TVsSAnZWagAAk44P+QHyGo2lp77JmDmsEhv9\nwo/md4ed6tz4Ul3MIhVGX9dVv9r4r9UYMmiiuEUP+vj+I2E6pThC31MlxBAg\nKyllGIjfdtDL5LOLBdNz9cB9RbVBBfVxkuCXL8eywisW/+nCAr9QBByVtFPm\nM5fNiFR74ot7dlTVMAmVq5skA3E3mffoFv2Ily/VbgbYn2yfgpSw/bzJBFp0\nzwDgGurx/af+11dLTSq6ZsUlTlRU1mQ2zInQ7UHv2FJ2ud5briKFS+Dl+Z9M\nAQNLF5QBXGyWUyACQKjPraZlrrOay7hLTHb22F1k9dVg7vbWedFRwk5W91SF\n4MM+HuabH5wekSzSHxFwBZgvjqMm/dcFPUk2ZizwCIhNzXDgwywH+h1RSFV0\n0LeVYNxrnkYXR5br5EZvByYmJ2ayK/AzSo5KjqlfC810P2RTvUaTM5prTpSi\npxdOApWO/eIpU6P8zkmzMlzYAKDq+JAEmhlxqOqeg0bzx9OlgDuW48sV/dtL\nZQ0Py8Jl3Vn5XjYQ0OG79J8+4eT0/E+B/WmYMPaa76opahktvG3Ez80b+P7c\n4G+c7K+NF/gTZ75gqpmO9MyCpcHcBLMcwfvDQsjgoxCyEQbwtklc8ckBXMju\n/iJjLNVkXVaEnLUdPc5qAH84KKmEJMUGraUDlLiKEeMv/gz65FxqQueNxZBo\nGWkX\r\n=Qkz9\r\n-----END PGP SIGNATURE-----\r\n" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "directories": {}, + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/testing-peer-dep-conflict-chain-single-b_2.0.0_1603237474656_0.738672811633097" + }, + "_hasShrinkwrap": false + }, + "1.0.1": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "1.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "1", + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + }, + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-b@1.0.1", + "_nodeVersion": "14.8.0", + "_npmVersion": "7.0.3", + "dist": { + "integrity": "sha512-cyXyBAMPJWv28bHI0cJrer64eqQsM59CR+/ideNwthD5X5hZVyvVMTpuai7noDA34jllf9Xgb+jcPgt2xmvR6A==", + "shasum": "b0a42957f384e7f8aac76890defd1822795913d8", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-1.0.1.tgz", + "fileCount": 1, + "unpackedSize": 230, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj46zCRA9TVsSAnZWagAAMQAP/1hImclS5tfAWvKG2g1x\ndjeaGbgDwiQhn/n2ar/opCw5+VmdzgO8dUUaNHJ/MNyHxt3Hrol4HIgjCWh+\nn6AmLYBAVeXrJW/IYjYFbc2xfa/CSXyOiWD5i0Ya7id9stvAganuUU3OHpSM\nBUIOuDwG4yKfjJAEsSDdseGuAtEHyu7h3D0Y2WWeomt6o5VL5IfTkvM4DqfI\nX2TSjVE6Q9XApUcuzO2khnNOOSdzpTML1/IUVHoxjuBg4iclK9udLDH2NBXu\n+Od8+ZuLCEIUGDL9LK1dgmpShc0yQsn5lhzhZ1aI+ZdJZHcuAFq85+huGGxj\n2KKUvxevw/znQyKUib0t7Q6YRXCkNai8oagiZXkKGj5GtINiztb8FB69zmVb\nteXqITV4ViwTQZYuF607OEBmFLcyKOLQTJB6DwIgOsBHc5sOXhEQOMxAcG+v\nKwpDmfyHJz3vNEeWGWoBXkmr0JktkyagFJ+l6cFcr5FJH8+E59y8ie1usna0\ngylOlLcVrnhvI1uFGQjNAhTyaKo1NmaMi+Z0d4W1y8oJxSGSsiEPMplqjIW2\n6P6t5F69UrARm24WFfRbtAANGbZlxjwCejZ/XadBHL8eGWx9avUrDmtLvdxv\nM7rYkk5IaUZ3am3bX+/YpVK4DZ7P5ClVUxhiMhy9taKJGeWFRhV6IMTl698C\ndRED\r\n=0Ht/\r\n-----END PGP SIGNATURE-----\r\n" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "directories": {}, + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/testing-peer-dep-conflict-chain-single-b_1.0.1_1603243699587_0.10232196313100905" + }, + "_hasShrinkwrap": false + }, + "2.0.1": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "2.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "2", + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + }, + "_id": "@isaacs/testing-peer-dep-conflict-chain-single-b@2.0.1", + "_nodeVersion": "14.8.0", + "_npmVersion": "7.0.3", + "dist": { + "integrity": "sha512-l16+ncFXXgFQjs1UXOQhrBOh64blRph+Jiq8ifC1JMEN+hPdJvzfAz3jbFMc7pcXZMlg5JpW54bPCUkjadG4Dw==", + "shasum": "d4d8e7078a3eca1d1ce16906dfbff9b0b4bf3d64", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-2.0.1.tgz", + "fileCount": 1, + "unpackedSize": 230, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj463CRA9TVsSAnZWagAAii4QAIpkqDvhhIw7QURZqPH9\nWHVTVRbOfIRNhIx3OylMjOo1zRAaC2+PzSUJpsw9fVUcq5mvob3jcxMo9u5/\nPOtZlOOfefRmnOENuN2cU2+iDD/lWdBLuF9lt36rXwQRF5HiErNiUoUF3Bc1\naABZzK+plvnCk5Nm8z4RfJus3wnk8oAJiMemCLt/RX51bqAyZvdjmlGLJcIH\nuU+c95N21iBnmV0dXOyceGcDE46U4N2HNh3j16BFlOM21jr6LlLUWwWzUG7C\n34y7wwVByWyDIwKRKeY8WvErNC0BIbzFhfk/732OCtDtKV9uR6I/YIUrpfeV\nQ9L1FcVp1Lc2M06p2Y8rJLf3vcHnzHljgMH6xaJpgDLAOSeaJlHJ5fytc8S1\nuYpipDar3NNdylxhOJ0NYtJYjgLbrCMaNE/5r4Iz/aGJI1Kqfn8e2rtjs8pF\neLWoS3xI0j6lXofBn1yI4AWYvhkI/n/SzrSXRmXtoRZUmmW85k0WP930RxoN\ny97kl1O/qGbLyvq5maFzLlXsxdDXdcCcpNboXs9i3Hw/OGOu7DsyocHpxbGI\nYUfJb03ZSZD480+IHD40gjY/C/M94ufqbELyBG3oEiZzHj8ZvPIsF4D3ys/u\nMOkk/dPjbu/ihobs7qMBmtnyKcRpY7VzNWaXYeC8D9CnQlQBYkW6PhaoKtqn\n5ma3\r\n=EAKm\r\n-----END PGP SIGNATURE-----\r\n" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "directories": {}, + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/testing-peer-dep-conflict-chain-single-b_2.0.1_1603243702842_0.21445591880520865" + }, + "_hasShrinkwrap": false + } + }, + "time": { + "created": "2020-10-20T23:44:31.314Z", + "1.0.0": "2020-10-20T23:44:31.485Z", + "modified": "2020-10-21T01:28:26.983Z", + "2.0.0": "2020-10-20T23:44:34.795Z", + "1.0.1": "2020-10-21T01:28:19.699Z", + "2.0.1": "2020-10-21T01:28:23.043Z" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "readme": "ERROR: No README data found!", + "readmeFilename": "" +} diff --git a/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-b.min.json b/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-b.min.json new file mode 100644 index 000000000..c10453a72 --- /dev/null +++ b/test/fixtures/registry-mocks/content/isaacs/testing-peer-dep-conflict-chain-single-b.min.json @@ -0,0 +1,71 @@ +{ + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "dist-tags": { + "latest": "2.0.1" + }, + "versions": { + "1.0.0": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "1.0.0", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "1" + }, + "dist": { + "integrity": "sha512-uYYhNcq5TAG/AAeWyx4+BTECo79HIHxZyr3TEiRI1LtKsI5jyBdvrAKsKRIhZxbzl28gLQIGhi1d+xfb2e8HEQ==", + "shasum": "109677130c28bbd244101d6cf810d87c1b1346f5", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-1.0.0.tgz", + "fileCount": 1, + "unpackedSize": 176, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj3ZfCRA9TVsSAnZWagAAokEP/j0GlVKPmq6AOwU9ckwg\nNR2YoU22U2l6Ds0i8A+kANjXBHgzg9ZtPpawr/O23l599LrkEeiXMRMphlqi\n8Pb8wwi4tLmsiGRSedCEObCFnoMFjUEmA7vcjSJKJf1P145Ve0ckrQD5LhNC\nYM689I7kxA3VfZLio/60UrQ6d1hcJYz7/wMUbeTGUQNNZdHqPr54dmnS5luK\n+bBaD+M3rxHU/0Gp2k2w+mYE+tubF+ykgIQZfbtKN0IDbk3HvCRX0URUPN/d\nPVnJQo00UvvK/jtbTfVfZHMLQqgPsBNC2SX0v+7//aIewIAraiGJIB2/zl0X\nkqxMb35zenhWp/EiFusVLJ4Ez5BDJcXPl+VcEooEK9EkbUMIzBNGMfBkiAhy\nq/wwzabwQ1xXVfK29DqbehDRFD0vJIq0aSzyjtDCw6K8IX7jHpuucJbcoQi0\nU9Gex8DhFGbdHZI1DOIODhbQnsn6RaNolIIyLbucbKCB9B9Suo4ZX6IQqIVo\nGAGcd2qtQ4kXyYcmgzsAH62Aqpd8auuFsS8Bly1MXiurV/0qDM5EVW3xt/gl\n+flEvG41P95TGBJIQpQct+Z7CQAJAwofP7R5uZz1mjB4+4KIAuEbAK/aepF+\nlbnzndVUzGkhRVyIBmiFq2474CeRnbOyhK4t7Oky8p3GjEcbObCP3yDTdzSs\nYW1m\r\n=L1li\r\n-----END PGP SIGNATURE-----\r\n" + } + }, + "2.0.0": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "2.0.0", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "2" + }, + "dist": { + "integrity": "sha512-wHWh9R+t+2OF0SexH3pCiZvyKz5qnrBUAIgl8FsvRC7uAkYc5RSRIr98Vx3DfVkmCvVK2EOYL/9oLhwUzsH2ww==", + "shasum": "0284537a9285b4b238928a76b37c3d7edda58817", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-2.0.0.tgz", + "fileCount": 1, + "unpackedSize": 176, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj3ZjCRA9TVsSAnZWagAAk44P+QHyGo2lp77JmDmsEhv9\nwo/md4ed6tz4Ul3MIhVGX9dVv9r4r9UYMmiiuEUP+vj+I2E6pThC31MlxBAg\nKyllGIjfdtDL5LOLBdNz9cB9RbVBBfVxkuCXL8eywisW/+nCAr9QBByVtFPm\nM5fNiFR74ot7dlTVMAmVq5skA3E3mffoFv2Ily/VbgbYn2yfgpSw/bzJBFp0\nzwDgGurx/af+11dLTSq6ZsUlTlRU1mQ2zInQ7UHv2FJ2ud5briKFS+Dl+Z9M\nAQNLF5QBXGyWUyACQKjPraZlrrOay7hLTHb22F1k9dVg7vbWedFRwk5W91SF\n4MM+HuabH5wekSzSHxFwBZgvjqMm/dcFPUk2ZizwCIhNzXDgwywH+h1RSFV0\n0LeVYNxrnkYXR5br5EZvByYmJ2ayK/AzSo5KjqlfC810P2RTvUaTM5prTpSi\npxdOApWO/eIpU6P8zkmzMlzYAKDq+JAEmhlxqOqeg0bzx9OlgDuW48sV/dtL\nZQ0Py8Jl3Vn5XjYQ0OG79J8+4eT0/E+B/WmYMPaa76opahktvG3Ez80b+P7c\n4G+c7K+NF/gTZ75gqpmO9MyCpcHcBLMcwfvDQsjgoxCyEQbwtklc8ckBXMju\n/iJjLNVkXVaEnLUdPc5qAH84KKmEJMUGraUDlLiKEeMv/gz65FxqQueNxZBo\nGWkX\r\n=Qkz9\r\n-----END PGP SIGNATURE-----\r\n" + } + }, + "1.0.1": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "1.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "1", + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + }, + "dist": { + "integrity": "sha512-cyXyBAMPJWv28bHI0cJrer64eqQsM59CR+/ideNwthD5X5hZVyvVMTpuai7noDA34jllf9Xgb+jcPgt2xmvR6A==", + "shasum": "b0a42957f384e7f8aac76890defd1822795913d8", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-1.0.1.tgz", + "fileCount": 1, + "unpackedSize": 230, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj46zCRA9TVsSAnZWagAAMQAP/1hImclS5tfAWvKG2g1x\ndjeaGbgDwiQhn/n2ar/opCw5+VmdzgO8dUUaNHJ/MNyHxt3Hrol4HIgjCWh+\nn6AmLYBAVeXrJW/IYjYFbc2xfa/CSXyOiWD5i0Ya7id9stvAganuUU3OHpSM\nBUIOuDwG4yKfjJAEsSDdseGuAtEHyu7h3D0Y2WWeomt6o5VL5IfTkvM4DqfI\nX2TSjVE6Q9XApUcuzO2khnNOOSdzpTML1/IUVHoxjuBg4iclK9udLDH2NBXu\n+Od8+ZuLCEIUGDL9LK1dgmpShc0yQsn5lhzhZ1aI+ZdJZHcuAFq85+huGGxj\n2KKUvxevw/znQyKUib0t7Q6YRXCkNai8oagiZXkKGj5GtINiztb8FB69zmVb\nteXqITV4ViwTQZYuF607OEBmFLcyKOLQTJB6DwIgOsBHc5sOXhEQOMxAcG+v\nKwpDmfyHJz3vNEeWGWoBXkmr0JktkyagFJ+l6cFcr5FJH8+E59y8ie1usna0\ngylOlLcVrnhvI1uFGQjNAhTyaKo1NmaMi+Z0d4W1y8oJxSGSsiEPMplqjIW2\n6P6t5F69UrARm24WFfRbtAANGbZlxjwCejZ/XadBHL8eGWx9avUrDmtLvdxv\nM7rYkk5IaUZ3am3bX+/YpVK4DZ7P5ClVUxhiMhy9taKJGeWFRhV6IMTl698C\ndRED\r\n=0Ht/\r\n-----END PGP SIGNATURE-----\r\n" + } + }, + "2.0.1": { + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "2.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "2", + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + }, + "dist": { + "integrity": "sha512-l16+ncFXXgFQjs1UXOQhrBOh64blRph+Jiq8ifC1JMEN+hPdJvzfAz3jbFMc7pcXZMlg5JpW54bPCUkjadG4Dw==", + "shasum": "d4d8e7078a3eca1d1ce16906dfbff9b0b4bf3d64", + "tarball": "https://registry.npmjs.org/@isaacs/testing-peer-dep-conflict-chain-single-b/-/testing-peer-dep-conflict-chain-single-b-2.0.1.tgz", + "fileCount": 1, + "unpackedSize": 230, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj463CRA9TVsSAnZWagAAii4QAIpkqDvhhIw7QURZqPH9\nWHVTVRbOfIRNhIx3OylMjOo1zRAaC2+PzSUJpsw9fVUcq5mvob3jcxMo9u5/\nPOtZlOOfefRmnOENuN2cU2+iDD/lWdBLuF9lt36rXwQRF5HiErNiUoUF3Bc1\naABZzK+plvnCk5Nm8z4RfJus3wnk8oAJiMemCLt/RX51bqAyZvdjmlGLJcIH\nuU+c95N21iBnmV0dXOyceGcDE46U4N2HNh3j16BFlOM21jr6LlLUWwWzUG7C\n34y7wwVByWyDIwKRKeY8WvErNC0BIbzFhfk/732OCtDtKV9uR6I/YIUrpfeV\nQ9L1FcVp1Lc2M06p2Y8rJLf3vcHnzHljgMH6xaJpgDLAOSeaJlHJ5fytc8S1\nuYpipDar3NNdylxhOJ0NYtJYjgLbrCMaNE/5r4Iz/aGJI1Kqfn8e2rtjs8pF\neLWoS3xI0j6lXofBn1yI4AWYvhkI/n/SzrSXRmXtoRZUmmW85k0WP930RxoN\ny97kl1O/qGbLyvq5maFzLlXsxdDXdcCcpNboXs9i3Hw/OGOu7DsyocHpxbGI\nYUfJb03ZSZD480+IHD40gjY/C/M94ufqbELyBG3oEiZzHj8ZvPIsF4D3ys/u\nMOkk/dPjbu/ihobs7qMBmtnyKcRpY7VzNWaXYeC8D9CnQlQBYkW6PhaoKtqn\n5ma3\r\n=EAKm\r\n-----END PGP SIGNATURE-----\r\n" + } + } + }, + "modified": "2020-10-21T01:28:26.983Z" +} diff --git a/test/fixtures/testing-peer-dep-conflict-chain/single-a/1/package.json b/test/fixtures/testing-peer-dep-conflict-chain/single-a/1/package.json new file mode 100644 index 000000000..9ce5ff26f --- /dev/null +++ b/test/fixtures/testing-peer-dep-conflict-chain/single-a/1/package.json @@ -0,0 +1,7 @@ +{ + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "1.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + } +} diff --git a/test/fixtures/testing-peer-dep-conflict-chain/single-a/2/package.json b/test/fixtures/testing-peer-dep-conflict-chain/single-a/2/package.json new file mode 100644 index 000000000..7fdd1201e --- /dev/null +++ b/test/fixtures/testing-peer-dep-conflict-chain/single-a/2/package.json @@ -0,0 +1,7 @@ +{ + "name": "@isaacs/testing-peer-dep-conflict-chain-single-a", + "version": "2.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + } +} diff --git a/test/fixtures/testing-peer-dep-conflict-chain/single-b/1/package.json b/test/fixtures/testing-peer-dep-conflict-chain/single-b/1/package.json new file mode 100644 index 000000000..aa2fac1f5 --- /dev/null +++ b/test/fixtures/testing-peer-dep-conflict-chain/single-b/1/package.json @@ -0,0 +1,8 @@ +{ + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "1.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "1", + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + } +} diff --git a/test/fixtures/testing-peer-dep-conflict-chain/single-b/2/package.json b/test/fixtures/testing-peer-dep-conflict-chain/single-b/2/package.json new file mode 100644 index 000000000..e85fd3587 --- /dev/null +++ b/test/fixtures/testing-peer-dep-conflict-chain/single-b/2/package.json @@ -0,0 +1,8 @@ +{ + "name": "@isaacs/testing-peer-dep-conflict-chain-single-b", + "version": "2.0.1", + "peerDependencies": { + "@isaacs/testing-peer-dep-conflict-chain-single-a": "2", + "@isaacs/testing-peer-dep-conflict-chain-a": "1" + } +}