UNPKG

@emahuni/trans-peerdeps

Version:

List and install transitive peerDependencies of your direct, development, optional or peer dependencies

83 lines (82 loc) 3.54 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; exports.__esModule = true; exports.buildDependencyTree = exports.getDepsMatchingFilters = void 0; var fs = require("fs"); var path = require("path"); var fromEntries = require("object.fromentries"); var dependency_types_1 = require("./dependency-types"); var logger_1 = require("./logger"); function getDepsMatchingFilters(packageJsonPath, dependencyType, filterRegexString) { if (typeof dependencyType === 'object') { var deps = {}; for (var _i = 0, _a = Object.values(dependency_types_1["default"]); _i < _a.length; _i++) { var depT = _a[_i]; deps = __assign(__assign({}, deps), (getDepsMatchingFilters(packageJsonPath, depT, filterRegexString) || {})); } return deps; } if (fs.existsSync(packageJsonPath)) { return filterDependencies(packageJsonPath, dependencyType, filterRegexString); } else { logger_1["default"].logErr("".concat(packageJsonPath, " does not contain a package.json file")); return null; } } exports.getDepsMatchingFilters = getDepsMatchingFilters; function buildDependencyTree(cwd, packageJsonPath, depFilter, peerDepFilter, dependencyType) { if (typeof dependencyType === 'object') { var depsTree = {}; for (var _i = 0, _a = Object.values(dependency_types_1["default"]); _i < _a.length; _i++) { var depT = _a[_i]; depsTree = __assign(__assign({}, depsTree), (buildDependencyTree(cwd, packageJsonPath, depFilter, peerDepFilter, depT) || {})); } return depsTree; } var depsMatchingFilters = getDepsMatchingFilters(packageJsonPath, dependencyType, depFilter); var depTree = fromEntries(Object.keys(depsMatchingFilters).map(function (dep) { var peerDeps = getDepsMatchingFilters(path.join(cwd, 'node_modules', dep, 'package.json'), // todo check if this (cwd) works well with workspaces dependency_types_1["default"].peerDependencies, peerDepFilter); return [dep, peerDeps]; })); return depTree; } exports.buildDependencyTree = buildDependencyTree; function filterDependencies(packageJsonPath, dependencyType, filterRegexString) { if (typeof dependencyType === 'object') { var deps_1 = {}; console.debug("[dependency.util/filterDependencies()]-11: dependencyTypes: %o", dependency_types_1["default"]); for (var _i = 0, _a = Object.values(dependency_types_1["default"]); _i < _a.length; _i++) { var depT = _a[_i]; deps_1 = __assign(__assign({}, deps_1), (filterDependencies(packageJsonPath, depT, filterRegexString) || {})); } return deps_1; } var packageJson = require(packageJsonPath); var deps = Object.keys(packageJson[dependencyType] || {}).filter(function (dep) { var filter = toRegex(filterRegexString); if (!!filter) return filter.test(dep); return true; }); return fromEntries(deps.map(function (dep) { return [dep, packageJson[dependencyType][dep]]; })); } function toRegex(aString) { try { return new RegExp(aString); } catch (_) { return null; } }