ls-engines
Version:
Determine if your dependency graph's stated "engines" criteria is met.
38 lines (35 loc) • 990 B
JavaScript
;
const some = require('array.prototype.some');
const toSorted = require('array.prototype.tosorted');
const getTree = require('get-dep-tree');
module.exports = async function getGraphEntries({
mode,
dev,
peer,
production,
selectedEngines,
logger = void undefined,
path = void undefined,
}) {
const tree = await getTree(mode, { dev, logger, path, peer, production });
const nodesWithEngines = await tree.querySelectorAll(':attr(engines, [node])');
return toSorted(
nodesWithEngines.flatMap(({
name,
package: {
_inBundle,
engines,
},
dev: nodeDev = false,
peer: nodePeer = false,
}) => (
!_inBundle
&& engines
&& ((dev || !nodeDev) && (production || nodeDev) && (peer || !nodePeer)) // TODO: figure out why get-dep-tree isn't pruning properly
&& some(selectedEngines, (engine) => engines[engine] !== '*')
? [[name, engines]]
: []
)),
([a, aE], [b, bE]) => a.localeCompare(b) || aE.node.localeCompare(bE.node),
);
};