UNPKG

pertain

Version:

Automated pub/sub across project dependencies. Run code from any installed package based on declarative rules in package.json

58 lines 4.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const debug_1 = __importDefault(require("debug")); const ExplicitDependencySet_1 = __importDefault(require("./ExplicitDependencySet")); const PackageJson_1 = __importDefault(require("./PackageJson")); const resolverFactory_1 = __importDefault(require("./resolverFactory")); const debug = (0, debug_1.default)('pertain:main'); const depsAndDevDeps = (pkg) => { // Merging the two dependency sets that we look at will dedupe them. // We don't care whether it comes from devDependencies or dependencies. // Both are relevant, because many applications with a build step compile // code from devDependencies. const allDependencyNames = Object.keys(Object.assign(Object.assign({}, pkg.dependencies), pkg.devDependencies)); allDependencyNames.push('./'); // rootDir too return allDependencyNames; }; /** * Caches the ExplicitDependencySet calculated for a given project root. * It should not change during the lifetime of this process, so there's no * point in recalculating it. */ const dependencySetCache = new Map(); /** * Query the direct dependencies of the Node project at `rootDir` for all * packages which have a particular `package.json` property. Return them in * peerDependency order. */ function pertain(rootDir, subject, getDependencies = (found) => found) { let depSet = dependencySetCache.get(rootDir); if (!depSet) { debug('no cached depset for %s', rootDir); // A convenience function which can be replaced with an alternate resolver // algorithm. const resolve = (0, resolverFactory_1.default)(rootDir); const packageJson = new PackageJson_1.default(rootDir); const allDependencyNames = getDependencies(depsAndDevDeps(packageJson), packageJson, rootDir, subject); debug('%s allDependencyNames %s', rootDir, allDependencyNames); depSet = new ExplicitDependencySet_1.default(resolve, allDependencyNames); dependencySetCache.set(rootDir, depSet); } return depSet.pertaining(subject).map((dep) => ({ name: dep.name, modulePath: dep.modulePath, path: dep.pertains(subject), subject, })); } /** * Clear out the cache of dependencies that have already been detected and * loaded. Use if the dependency graph changes and you want to "hot reload" * functionality. Or, for testing. */ pertain.clearCache = () => dependencySetCache.clear(); exports.default = pertain; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVydGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJ0YWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQThCO0FBQzlCLG9GQUE0RDtBQUM1RCxnRUFBd0M7QUFDeEMsd0VBQXlDO0FBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBUyxFQUFDLGNBQWMsQ0FBQyxDQUFDO0FBU3hDLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBZ0IsRUFBWSxFQUFFO0lBQ3BELG9FQUFvRTtJQUNwRSx1RUFBdUU7SUFDdkUseUVBQXlFO0lBQ3pFLDZCQUE2QjtJQUM3QixNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLGlDQUNqQyxHQUFHLENBQUMsWUFBWSxHQUNoQixHQUFHLENBQUMsZUFBZSxFQUN0QixDQUFDO0lBQ0gsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYztJQUM3QyxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUMsQ0FBQztBQStCRjs7OztHQUlHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztBQUVwRTs7OztHQUlHO0FBQ0gsU0FBUyxPQUFPLENBQ2QsT0FBZSxFQUNmLE9BQWUsRUFDZixrQkFBb0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7SUFFcEQsSUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxLQUFLLENBQUMseUJBQXlCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsMEVBQTBFO1FBQzFFLGFBQWE7UUFDYixNQUFNLE9BQU8sR0FBRyxJQUFBLHlCQUFRLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxxQkFBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUN4QyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQzNCLFdBQVcsRUFDWCxPQUFPLEVBQ1AsT0FBTyxDQUNSLENBQUM7UUFDRixLQUFLLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDL0QsTUFBTSxHQUFHLElBQUksK0JBQXFCLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDaEUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN6QztJQUNELE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1FBQ2QsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO1FBQzFCLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBVztRQUNyQyxPQUFPO0tBQ1IsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE9BQU8sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7QUFFdEQsa0JBQWUsT0FBTyxDQUFDIn0=