UNPKG

transitive-peerdeps

Version:

List and install peerDependencies of your direct dependencies

69 lines (66 loc) 1.93 kB
const fs = require('fs') const path = require('path') const fromEntries = require('object.fromentries') const dependencyTypes = require('./dependency-types') const dependencyUtils = {} dependencyUtils.filterDependencies = ( packageJsonPath, dependencyType, filterRegexString ) => { const packageJson = require(packageJsonPath) const deps = Object.keys(packageJson[dependencyType] || {}).filter( (dep) => { const filter = toRegex(filterRegexString) if (!!filter) { return filter.test(dep) } return true } ) return fromEntries( deps.map((dep) => [dep, packageJson[dependencyType][dep]]) ) } dependencyUtils.getDepsMatchingFilters = ( packageJsonPath, dependencyType, filterRegexString ) => { if (fs.existsSync(packageJsonPath)) { return dependencyUtils.filterDependencies( packageJsonPath, dependencyType, filterRegexString ) } else { console.error(`${packageJsonPath} does not contain a package.json file`) return null } } dependencyUtils.buildDependencyTree = (cwd, packageJsonPath, depFilter, peerDepFilter, dependencyType) => { let depsMatchingFilters = dependencyUtils.getDepsMatchingFilters( packageJsonPath, dependencyType, depFilter ) let depTree = fromEntries( Object.keys(depsMatchingFilters).map((dep) => { const peerDeps = dependencyUtils.getDepsMatchingFilters( path.join(cwd, 'node_modules', dep, 'package.json'), dependencyTypes.peerDependencies, peerDepFilter ) return [dep, peerDeps] }) ) return depTree } const toRegex = (aString) => { try { return new RegExp(aString) } catch (_) { return null } } module.exports = dependencyUtils