@pnpm/reviewing.dependencies-hierarchy 1001.3.1 → 1001.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/reviewing.dependencies-hierarchy",
3
- "version": "1001.3.1",
3
+ "version": "1001.3.2",
4
4
  "description": "Creates a dependencies hierarchy for a symlinked `node_modules`",
5
5
  "keywords": [
6
6
  "pnpm",
@@ -33,16 +33,16 @@
33
33
  "realpath-missing": "^1.1.0",
34
34
  "resolve-link-target": "^2.0.0",
35
35
  "semver": "^7.7.1",
36
+ "@pnpm/dependency-path": "1001.1.10",
37
+ "@pnpm/lockfile.fs": "1001.1.31",
36
38
  "@pnpm/lockfile.detect-dep-types": "1001.0.25",
37
- "@pnpm/lockfile.fs": "1001.1.30",
38
39
  "@pnpm/lockfile.utils": "1004.0.2",
39
40
  "@pnpm/matcher": "1000.1.0",
40
- "@pnpm/normalize-registries": "1000.1.9",
41
41
  "@pnpm/modules-yaml": "1002.0.1",
42
- "@pnpm/read-package-json": "1000.1.7",
43
- "@pnpm/dependency-path": "1001.1.10",
44
42
  "@pnpm/read-modules-dir": "1000.0.0",
43
+ "@pnpm/read-package-json": "1000.1.7",
45
44
  "@pnpm/store.cafs": "1000.1.4",
45
+ "@pnpm/normalize-registries": "1000.1.9",
46
46
  "@pnpm/types": "1001.3.0"
47
47
  },
48
48
  "devDependencies": {
@@ -50,7 +50,7 @@
50
50
  "@types/semver": "7.5.3",
51
51
  "@pnpm/constants": "1001.3.1",
52
52
  "@pnpm/test-fixtures": "1000.0.0",
53
- "@pnpm/reviewing.dependencies-hierarchy": "1001.3.1"
53
+ "@pnpm/reviewing.dependencies-hierarchy": "1001.3.2"
54
54
  },
55
55
  "engines": {
56
56
  "node": ">=18.12"
@@ -1,22 +0,0 @@
1
- export interface PackageNode {
2
- alias: string;
3
- circular?: true;
4
- deduped?: true;
5
- /**
6
- * When `deduped` is true, the number of transitive dependencies that were
7
- * elided because this subtree was already expanded elsewhere in the tree.
8
- */
9
- dedupedDependenciesCount?: number;
10
- dependencies?: PackageNode[];
11
- dev?: boolean;
12
- isPeer: boolean;
13
- isSkipped: boolean;
14
- isMissing: boolean;
15
- name: string;
16
- optional?: true;
17
- path: string;
18
- resolved?: string;
19
- searched?: true;
20
- version: string;
21
- searchMessage?: string;
22
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=PackageNode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PackageNode.js","sourceRoot":"","sources":["../src/PackageNode.ts"],"names":[],"mappings":""}
@@ -1,25 +0,0 @@
1
- import { type DependenciesField, type Finder, type Registries } from '@pnpm/types';
2
- import { type PackageNode } from './PackageNode.js';
3
- export interface DependenciesHierarchy {
4
- dependencies?: PackageNode[];
5
- devDependencies?: PackageNode[];
6
- optionalDependencies?: PackageNode[];
7
- unsavedDependencies?: PackageNode[];
8
- }
9
- export declare function buildDependenciesHierarchy(projectPaths: string[] | undefined, maybeOpts: {
10
- depth: number;
11
- excludePeerDependencies?: boolean;
12
- include?: {
13
- [dependenciesField in DependenciesField]: boolean;
14
- };
15
- registries?: Registries;
16
- onlyProjects?: boolean;
17
- search?: Finder;
18
- showDedupedSearchMatches?: boolean;
19
- lockfileDir: string;
20
- checkWantedLockfileOnly?: boolean;
21
- modulesDir?: string;
22
- virtualStoreDirMaxLength: number;
23
- }): Promise<{
24
- [projectDir: string]: DependenciesHierarchy;
25
- }>;
@@ -1,262 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.buildDependenciesHierarchy = buildDependenciesHierarchy;
7
- const path_1 = __importDefault(require("path"));
8
- const lockfile_fs_1 = require("@pnpm/lockfile.fs");
9
- const lockfile_detect_dep_types_1 = require("@pnpm/lockfile.detect-dep-types");
10
- const modules_yaml_1 = require("@pnpm/modules-yaml");
11
- const normalize_registries_1 = require("@pnpm/normalize-registries");
12
- const read_modules_dir_1 = require("@pnpm/read-modules-dir");
13
- const read_package_json_1 = require("@pnpm/read-package-json");
14
- const types_1 = require("@pnpm/types");
15
- const normalize_path_1 = __importDefault(require("normalize-path"));
16
- const realpath_missing_1 = __importDefault(require("realpath-missing"));
17
- const resolve_link_target_1 = __importDefault(require("resolve-link-target"));
18
- const buildDependencyGraph_js_1 = require("./buildDependencyGraph.js");
19
- const getTree_js_1 = require("./getTree.js");
20
- const getTreeNodeChildId_js_1 = require("./getTreeNodeChildId.js");
21
- const getPkgInfo_js_1 = require("./getPkgInfo.js");
22
- async function buildDependenciesHierarchy(projectPaths, maybeOpts) {
23
- if (!maybeOpts?.lockfileDir) {
24
- throw new TypeError('opts.lockfileDir is required');
25
- }
26
- const modulesDir = await (0, realpath_missing_1.default)(path_1.default.join(maybeOpts.lockfileDir, maybeOpts.modulesDir ?? 'node_modules'));
27
- const modules = await (0, modules_yaml_1.readModulesManifest)(modulesDir);
28
- const registries = (0, normalize_registries_1.normalizeRegistries)({
29
- ...maybeOpts?.registries,
30
- ...modules?.registries,
31
- });
32
- const internalPnpmDir = path_1.default.join(modulesDir, '.pnpm');
33
- const currentLockfile = await (0, lockfile_fs_1.readCurrentLockfile)(internalPnpmDir, { ignoreIncompatible: false });
34
- const wantedLockfile = await (0, lockfile_fs_1.readWantedLockfile)(maybeOpts.lockfileDir, { ignoreIncompatible: false });
35
- if (projectPaths == null) {
36
- projectPaths = Object.keys(wantedLockfile?.importers ?? {})
37
- .map((id) => path_1.default.join(maybeOpts.lockfileDir, id));
38
- }
39
- const result = {};
40
- const lockfileToUse = maybeOpts.checkWantedLockfileOnly ? wantedLockfile : currentLockfile;
41
- if (!lockfileToUse) {
42
- for (const projectPath of projectPaths) {
43
- result[projectPath] = {};
44
- }
45
- return result;
46
- }
47
- const opts = {
48
- depth: maybeOpts.depth || 0,
49
- excludePeerDependencies: maybeOpts.excludePeerDependencies,
50
- include: maybeOpts.include ?? {
51
- dependencies: true,
52
- devDependencies: true,
53
- optionalDependencies: true,
54
- },
55
- lockfileDir: maybeOpts.lockfileDir,
56
- checkWantedLockfileOnly: maybeOpts.checkWantedLockfileOnly,
57
- onlyProjects: maybeOpts.onlyProjects,
58
- registries,
59
- search: maybeOpts.search,
60
- showDedupedSearchMatches: maybeOpts.showDedupedSearchMatches ?? (maybeOpts.search != null),
61
- skipped: new Set(modules?.skipped ?? []),
62
- modulesDir,
63
- virtualStoreDir: modules?.virtualStoreDir,
64
- virtualStoreDirMaxLength: modules?.virtualStoreDirMaxLength ?? maybeOpts.virtualStoreDirMaxLength,
65
- };
66
- // Build the dependency graph ONCE for all importers and share a single
67
- // MaterializationCache so that identical subtrees are only materialized once.
68
- const allRootIds = [];
69
- for (const projectPath of projectPaths) {
70
- const importerId = (0, lockfile_fs_1.getLockfileImporterId)(opts.lockfileDir, projectPath);
71
- if (lockfileToUse.importers[importerId]) {
72
- allRootIds.push({ type: 'importer', importerId });
73
- }
74
- }
75
- const sharedGraph = (0, buildDependencyGraph_js_1.buildDependencyGraph)(allRootIds, {
76
- currentPackages: lockfileToUse.packages ?? {},
77
- importers: lockfileToUse.importers,
78
- include: opts.include,
79
- lockfileDir: opts.lockfileDir,
80
- });
81
- const sharedMaterializationCache = new Map();
82
- const sharedDepTypes = (0, lockfile_detect_dep_types_1.detectDepTypes)(lockfileToUse);
83
- const ctx = {
84
- currentLockfile: lockfileToUse,
85
- wantedLockfile,
86
- ...opts,
87
- graph: sharedGraph,
88
- materializationCache: sharedMaterializationCache,
89
- depTypes: sharedDepTypes,
90
- };
91
- const getHierarchy = dependenciesHierarchyForPackage.bind(null, ctx);
92
- const pairs = await Promise.all(projectPaths.map(async (projectPath) => {
93
- return [
94
- projectPath,
95
- await getHierarchy(projectPath),
96
- ];
97
- }));
98
- for (const [projectPath, dependenciesHierarchy] of pairs) {
99
- result[projectPath] = dependenciesHierarchy;
100
- }
101
- return result;
102
- }
103
- async function dependenciesHierarchyForPackage(opts, projectPath) {
104
- const { currentLockfile, wantedLockfile, graph, materializationCache, depTypes } = opts;
105
- const importerId = (0, lockfile_fs_1.getLockfileImporterId)(opts.lockfileDir, projectPath);
106
- if (!currentLockfile.importers[importerId])
107
- return {};
108
- const modulesDir = opts.modulesDir && path_1.default.isAbsolute(opts.modulesDir)
109
- ? opts.modulesDir
110
- : path_1.default.join(projectPath, opts.modulesDir ?? 'node_modules');
111
- const savedDeps = getAllDirectDependencies(currentLockfile.importers[importerId]);
112
- // When searching, unsaved deps are irrelevant — they aren't in the lockfile
113
- // graph and can't have dependency subtrees showing paths to the search target.
114
- const unsavedDeps = opts.search
115
- ? []
116
- : ((await (0, read_modules_dir_1.readModulesDir)(modulesDir)) ?? []).filter((directDep) => !savedDeps[directDep]);
117
- const currentPackages = currentLockfile.packages ?? {};
118
- const wantedPackages = wantedLockfile?.packages ?? {};
119
- const getTreeOpts = {
120
- ...opts,
121
- currentPackages,
122
- importers: currentLockfile.importers,
123
- rewriteLinkVersionDir: projectPath,
124
- maxDepth: opts.depth,
125
- wantedPackages,
126
- modulesDir,
127
- };
128
- const parentId = { type: 'importer', importerId };
129
- const getChildrenTree = (nodeId, parentDir) => (0, getTree_js_1.getTree)({ ...getTreeOpts, parentDir, graph, materializationCache }, nodeId);
130
- const result = {};
131
- for (const dependenciesField of types_1.DEPENDENCIES_FIELDS.sort().filter(dependenciesField => opts.include[dependenciesField])) {
132
- const topDeps = currentLockfile.importers[importerId][dependenciesField] ?? {};
133
- result[dependenciesField] = [];
134
- for (const alias in topDeps) {
135
- const ref = topDeps[alias];
136
- const { pkgInfo: packageInfo, readManifest } = (0, getPkgInfo_js_1.getPkgInfo)({
137
- alias,
138
- currentPackages: currentLockfile.packages ?? {},
139
- depTypes,
140
- rewriteLinkVersionDir: projectPath,
141
- linkedPathBaseDir: projectPath,
142
- ref,
143
- registries: opts.registries,
144
- skipped: opts.skipped,
145
- wantedPackages: wantedLockfile?.packages ?? {},
146
- virtualStoreDir: opts.virtualStoreDir,
147
- virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,
148
- modulesDir,
149
- });
150
- let newEntry = null;
151
- const searchMatch = opts.search?.({
152
- alias,
153
- name: packageInfo.name,
154
- version: packageInfo.version,
155
- readManifest,
156
- });
157
- const nodeId = (0, getTreeNodeChildId_js_1.getTreeNodeChildId)({
158
- parentId,
159
- dep: { alias, ref },
160
- lockfileDir: opts.lockfileDir,
161
- importers: currentLockfile.importers,
162
- });
163
- if (opts.onlyProjects && nodeId?.type !== 'importer') {
164
- continue;
165
- }
166
- let treeResult;
167
- if (nodeId == null) {
168
- if ((opts.search != null) && !searchMatch)
169
- continue;
170
- newEntry = packageInfo;
171
- }
172
- else {
173
- treeResult = getChildrenTree(nodeId, packageInfo.path);
174
- if (treeResult.deduped) {
175
- // This subtree was already materialized for a previous importer.
176
- const showDeduped = opts.search == null || Boolean(searchMatch) ||
177
- Boolean(opts.showDedupedSearchMatches && treeResult.hasSearchMatch);
178
- if (showDeduped) {
179
- newEntry = packageInfo;
180
- if (treeResult.count > 0) {
181
- newEntry.deduped = true;
182
- newEntry.dedupedDependenciesCount = treeResult.count;
183
- }
184
- }
185
- }
186
- else if (treeResult.nodes.length > 0) {
187
- newEntry = {
188
- ...packageInfo,
189
- dependencies: treeResult.nodes,
190
- };
191
- }
192
- else if ((opts.search == null) || searchMatch) {
193
- newEntry = packageInfo;
194
- }
195
- }
196
- if (newEntry != null) {
197
- if (searchMatch) {
198
- newEntry.searched = true;
199
- if (typeof searchMatch === 'string') {
200
- newEntry.searchMessage = searchMatch;
201
- }
202
- }
203
- else if (newEntry.deduped && opts.showDedupedSearchMatches && treeResult?.hasSearchMatch) {
204
- newEntry.searched = true;
205
- if (treeResult.searchMessages.length > 0) {
206
- newEntry.searchMessage = treeResult.searchMessages.join('\n');
207
- }
208
- }
209
- result[dependenciesField].push(newEntry);
210
- }
211
- }
212
- }
213
- if (unsavedDeps.length > 0)
214
- await Promise.all(unsavedDeps.map(async (unsavedDep) => {
215
- let pkgPath = path_1.default.join(modulesDir, unsavedDep);
216
- let version;
217
- try {
218
- pkgPath = await (0, resolve_link_target_1.default)(pkgPath);
219
- version = `link:${(0, normalize_path_1.default)(path_1.default.relative(projectPath, pkgPath))}`;
220
- }
221
- catch {
222
- // if error happened. The package is not a link
223
- const pkg = await (0, read_package_json_1.safeReadPackageJsonFromDir)(pkgPath);
224
- version = pkg?.version ?? 'undefined';
225
- }
226
- const pkg = {
227
- alias: unsavedDep,
228
- isMissing: false,
229
- isPeer: false,
230
- isSkipped: false,
231
- name: unsavedDep,
232
- path: pkgPath,
233
- version,
234
- };
235
- const searchMatch = opts.search?.({
236
- alias: pkg.alias,
237
- name: pkg.name,
238
- version: pkg.version,
239
- readManifest: () => (0, read_package_json_1.readPackageJsonFromDirSync)(pkgPath),
240
- });
241
- if ((opts.search != null) && !searchMatch)
242
- return;
243
- const newEntry = pkg;
244
- if (searchMatch) {
245
- newEntry.searched = true;
246
- if (typeof searchMatch === 'string') {
247
- newEntry.searchMessage = searchMatch;
248
- }
249
- }
250
- result.unsavedDependencies = result.unsavedDependencies ?? [];
251
- result.unsavedDependencies.push(newEntry);
252
- }));
253
- return result;
254
- }
255
- function getAllDirectDependencies(projectSnapshot) {
256
- return {
257
- ...projectSnapshot.dependencies,
258
- ...projectSnapshot.devDependencies,
259
- ...projectSnapshot.optionalDependencies,
260
- };
261
- }
262
- //# sourceMappingURL=buildDependenciesHierarchy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildDependenciesHierarchy.js","sourceRoot":"","sources":["../src/buildDependenciesHierarchy.ts"],"names":[],"mappings":"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"}