@emahuni/trans-peerdeps
Version:
List and install transitive peerDependencies of your direct, development, optional or peer dependencies
83 lines (82 loc) • 3.54 kB
JavaScript
;
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;
}
}