dependencies-hierarchy
Advanced tools
Comparing version 6.0.0-1 to 6.0.0-2
@@ -21,3 +21,3 @@ import { DependenciesField, Registries } from '@pnpm/types'; | ||
} | ||
export declare function forPackages(packages: PackageSelector[], projectPath: string, opts?: { | ||
export declare function forPackages(packages: PackageSelector[], projectPaths: string[], opts: { | ||
depth: number; | ||
@@ -28,5 +28,5 @@ include?: { | ||
registries?: Registries; | ||
lockfileDirectory?: string; | ||
lockfileDirectory: string; | ||
}): {}; | ||
export default function (projectPath: string, opts?: { | ||
export default function (projectPaths: string[], opts: { | ||
depth: number; | ||
@@ -37,4 +37,6 @@ include?: { | ||
registries?: Registries; | ||
lockfileDirectory?: string; | ||
}): Promise<DependenciesHierarchy>; | ||
lockfileDirectory: string; | ||
}): Promise<{ | ||
[prefix: string]: DependenciesHierarchy; | ||
}>; | ||
export declare type DependenciesHierarchy = { | ||
@@ -41,0 +43,0 @@ dependencies?: PackageNode[]; |
@@ -16,28 +16,51 @@ "use strict"; | ||
const semver = require("semver"); | ||
function forPackages(packages, projectPath, opts) { | ||
function forPackages(packages, projectPaths, opts) { | ||
assert(packages, 'packages should be defined'); | ||
if (!packages.length) | ||
return {}; | ||
return dependenciesHierarchy(projectPath, packages, opts); | ||
return dependenciesHierarchy(projectPaths, packages, opts); | ||
} | ||
exports.forPackages = forPackages; | ||
function default_1(projectPath, opts) { | ||
return dependenciesHierarchy(projectPath, [], opts); | ||
function default_1(projectPaths, opts) { | ||
return dependenciesHierarchy(projectPaths, [], opts); | ||
} | ||
exports.default = default_1; | ||
async function dependenciesHierarchy(projectPath, searched, maybeOpts) { | ||
const lockfileDirectory = maybeOpts && maybeOpts.lockfileDirectory || projectPath; | ||
const virtualStoreDir = await utils_1.realNodeModulesDir(lockfileDirectory); | ||
async function dependenciesHierarchy(projectPaths, searched, maybeOpts) { | ||
if (!maybeOpts || !maybeOpts.lockfileDirectory) { | ||
throw new TypeError('opts.lockfileDirectory is required'); | ||
} | ||
const virtualStoreDir = await utils_1.realNodeModulesDir(maybeOpts.lockfileDirectory); | ||
const modules = await modules_yaml_1.read(virtualStoreDir); | ||
const registries = utils_1.normalizeRegistries(Object.assign({}, maybeOpts && maybeOpts.registries, modules && modules.registries)); | ||
const currentLockfile = await lockfile_file_1.readCurrentLockfile(lockfileDirectory, { ignoreIncompatible: false }); | ||
if (!currentLockfile) | ||
return {}; | ||
const opts = Object.assign({ depth: 0 }, maybeOpts); | ||
const include = maybeOpts && maybeOpts.include || { | ||
dependencies: true, | ||
devDependencies: true, | ||
optionalDependencies: true, | ||
const currentLockfile = await lockfile_file_1.readCurrentLockfile(maybeOpts.lockfileDirectory, { ignoreIncompatible: false }); | ||
const result = {}; | ||
if (!currentLockfile) { | ||
for (let projectPath of projectPaths) { | ||
result[projectPath] = {}; | ||
} | ||
return result; | ||
} | ||
const opts = { | ||
depth: maybeOpts.depth || 0, | ||
include: maybeOpts.include || { | ||
dependencies: true, | ||
devDependencies: true, | ||
optionalDependencies: true, | ||
}, | ||
lockfileDirectory: maybeOpts.lockfileDirectory, | ||
registries, | ||
skipped: new Set(modules && modules.skipped || []), | ||
}; | ||
const importerId = lockfile_file_1.getLockfileImporterId(lockfileDirectory, projectPath); | ||
(await Promise.all(projectPaths.map(async (projectPath) => { | ||
return [ | ||
projectPath, | ||
await dependenciesHierarchyForPackage(projectPath, currentLockfile, searched, opts), | ||
]; | ||
}))).forEach(([projectPath, dependenciesHierarchy]) => { | ||
result[projectPath] = dependenciesHierarchy; | ||
}); | ||
return result; | ||
} | ||
async function dependenciesHierarchyForPackage(projectPath, currentLockfile, searched, opts) { | ||
const importerId = lockfile_file_1.getLockfileImporterId(opts.lockfileDirectory, projectPath); | ||
if (!currentLockfile.importers[importerId]) | ||
@@ -49,16 +72,16 @@ return {}; | ||
const unsavedDeps = allDirectDeps.filter((directDep) => !savedDeps[directDep]); | ||
const wantedLockfile = await lockfile_file_1.readWantedLockfile(lockfileDirectory, { ignoreIncompatible: false }) || { packages: {} }; | ||
const wantedLockfile = await lockfile_file_1.readWantedLockfile(opts.lockfileDirectory, { ignoreIncompatible: false }) || { packages: {} }; | ||
const getChildrenTree = getTree.bind(null, { | ||
currentDepth: 1, | ||
currentPackages: currentLockfile.packages, | ||
includeOptionalDependencies: include.optionalDependencies === true, | ||
currentPackages: currentLockfile.packages || {}, | ||
includeOptionalDependencies: opts.include.optionalDependencies === true, | ||
maxDepth: opts.depth, | ||
modulesDir, | ||
registries, | ||
registries: opts.registries, | ||
searched, | ||
skipped: new Set(modules && modules.skipped || []), | ||
skipped: opts.skipped, | ||
wantedPackages: wantedLockfile.packages || {}, | ||
}); | ||
const result = {}; | ||
for (const dependenciesField of types_1.DEPENDENCIES_FIELDS.sort().filter(dependenciedField => include[dependenciedField])) { | ||
for (const dependenciesField of types_1.DEPENDENCIES_FIELDS.sort().filter(dependenciedField => opts.include[dependenciedField])) { | ||
const topDeps = currentLockfile.importers[importerId][dependenciesField] || {}; | ||
@@ -72,4 +95,4 @@ result[dependenciesField] = []; | ||
ref: topDeps[alias], | ||
registries, | ||
skipped: new Set(modules && modules.skipped || []), | ||
registries: opts.registries, | ||
skipped: opts.skipped, | ||
wantedPackages: wantedLockfile.packages || {}, | ||
@@ -76,0 +99,0 @@ }); |
{ | ||
"name": "dependencies-hierarchy", | ||
"version": "6.0.0-1", | ||
"version": "6.0.0-2", | ||
"description": "Creates a dependencies hierarchy for a symlinked `node_modules`", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
16127
322