Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 2x 2x 2x 4x 4x 4x 4x 7x 7x 7x 5x 5x 5x 7x 3x 2x 11x 11x 11x 11x 11x 11x 11x 9x 9x 9x 5x 5x 1x 4x 4x 4x 4x | 'use strict' const logicalTree = require('npm-logical-tree') const makeNode = logicalTree.node module.exports = yarnLogicalTree function yarnLogicalTree (pkg, yarnLock, opts) { const tree = makeNode(pkg.name, null, pkg) const allDeps = new Map() const pkgDeps = Object.assign( {}, pkg.devDependencies || {}, pkg.optionalDependencies || {}, pkg.dependencies || {} ) Object.keys(pkgDeps) .forEach(name => { const semverString = pkgDeps[name] let dep = allDeps.get(`${name}@${semverString}`) if (!dep) { const semverString = pkgDeps[name] const depNode = yarnLock[`${name}@${semverString}`] dep = {node: makeNode(name, name, depNode), semverString} } addChild(dep, {node: tree}, allDeps, yarnLock) }) return tree } module.exports.node = makeNode function addChild (dep, treeNode, allDeps, yarnLock) { const tree = treeNode.node const { node, semverString } = dep const lockNode = yarnLock[`${node.name}@${semverString}`] const dependencies = Object.assign( {}, lockNode.optionalDependencies || {}, lockNode.dependencies || {} ) tree.addDep(node) allDeps.set(`${node.name}@${semverString}`, dep) Object.keys(dependencies).forEach(name => { const tdepSemver = dependencies[name] let tdep = allDeps.get(`${name}@${tdepSemver}`) if (!tdep) { const tdepNode = yarnLock[`${name}@${tdepSemver}`] if (!tdepNode) { throw new Error(`${name} not accessible from ${node.name}`) } tdepNode.optional = lockNode.optionalDependencies ? lockNode.optionalDependencies[name] : false tdep = {node: makeNode(name, name, tdepNode), semverString: tdepSemver} addChild(tdep, dep, allDeps, yarnLock) } else { node.addDep(tdep.node) } }) } |