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/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" + } +}