@pnpm/list 1000.2.6 → 1000.3.0
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/lib/index.d.ts +18 -2
- package/lib/index.js +52 -8
- package/lib/index.js.map +1 -1
- package/lib/peerVariants.d.ts +17 -0
- package/lib/peerVariants.js +52 -0
- package/lib/peerVariants.js.map +1 -0
- package/lib/renderDependentsTree.d.ts +13 -0
- package/lib/renderDependentsTree.js +171 -0
- package/lib/renderDependentsTree.js.map +1 -0
- package/lib/renderJson.d.ts +4 -2
- package/lib/renderJson.js +6 -0
- package/lib/renderJson.js.map +1 -1
- package/lib/renderParseable.js.map +1 -1
- package/lib/renderTree.d.ts +7 -5
- package/lib/renderTree.js +95 -47
- package/lib/renderTree.js.map +1 -1
- package/lib/types.d.ts +2 -2
- package/package.json +8 -8
- package/lib/pruneTree.d.ts +0 -2
- package/lib/pruneTree.js +0 -88
- package/lib/pruneTree.js.map +0 -1
package/lib/index.d.ts
CHANGED
|
@@ -2,9 +2,10 @@ import { type DependenciesField, type Registries, type Finder } from '@pnpm/type
|
|
|
2
2
|
import { renderJson } from './renderJson.js';
|
|
3
3
|
import { renderParseable } from './renderParseable.js';
|
|
4
4
|
import { renderTree } from './renderTree.js';
|
|
5
|
+
import { renderDependentsTree, renderDependentsJson, renderDependentsParseable } from './renderDependentsTree.js';
|
|
5
6
|
import { type PackageDependencyHierarchy } from './types.js';
|
|
6
|
-
export type {
|
|
7
|
-
export { renderJson, renderParseable, renderTree, type PackageDependencyHierarchy };
|
|
7
|
+
export type { DependencyNode } from '@pnpm/reviewing.dependencies-hierarchy';
|
|
8
|
+
export { renderJson, renderParseable, renderTree, type PackageDependencyHierarchy, renderDependentsTree, renderDependentsParseable, renderDependentsJson, };
|
|
8
9
|
export interface FlattenedSearchPackage extends PackageDependencyHierarchy {
|
|
9
10
|
depPath: string;
|
|
10
11
|
}
|
|
@@ -40,6 +41,7 @@ export declare function listForPackages(packages: string[], projectPaths: string
|
|
|
40
41
|
modulesDir?: string;
|
|
41
42
|
virtualStoreDirMaxLength: number;
|
|
42
43
|
finders?: Finder[];
|
|
44
|
+
showSummary?: boolean;
|
|
43
45
|
}): Promise<string>;
|
|
44
46
|
export declare function list(projectPaths: string[], maybeOpts: {
|
|
45
47
|
alwaysPrintRootPackage?: boolean;
|
|
@@ -58,4 +60,18 @@ export declare function list(projectPaths: string[], maybeOpts: {
|
|
|
58
60
|
modulesDir?: string;
|
|
59
61
|
virtualStoreDirMaxLength: number;
|
|
60
62
|
finders?: Finder[];
|
|
63
|
+
showSummary?: boolean;
|
|
64
|
+
}): Promise<string>;
|
|
65
|
+
export declare function whyForPackages(packages: string[], projectPaths: string[], opts: {
|
|
66
|
+
depth?: number;
|
|
67
|
+
lockfileDir: string;
|
|
68
|
+
checkWantedLockfileOnly?: boolean;
|
|
69
|
+
include?: {
|
|
70
|
+
[dependenciesField in DependenciesField]: boolean;
|
|
71
|
+
};
|
|
72
|
+
long?: boolean;
|
|
73
|
+
registries?: Registries;
|
|
74
|
+
reportAs?: 'parseable' | 'tree' | 'json';
|
|
75
|
+
modulesDir?: string;
|
|
76
|
+
finders?: Finder[];
|
|
61
77
|
}): Promise<string>;
|
package/lib/index.js
CHANGED
|
@@ -3,12 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.renderTree = exports.renderParseable = exports.renderJson = void 0;
|
|
6
|
+
exports.renderDependentsJson = exports.renderDependentsParseable = exports.renderDependentsTree = exports.renderTree = exports.renderParseable = exports.renderJson = void 0;
|
|
7
7
|
exports.flattenSearchedPackages = flattenSearchedPackages;
|
|
8
8
|
exports.searchForPackages = searchForPackages;
|
|
9
9
|
exports.listForPackages = listForPackages;
|
|
10
10
|
exports.list = list;
|
|
11
|
+
exports.whyForPackages = whyForPackages;
|
|
11
12
|
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const lockfile_fs_1 = require("@pnpm/lockfile.fs");
|
|
12
14
|
const read_project_manifest_1 = require("@pnpm/read-project-manifest");
|
|
13
15
|
const reviewing_dependencies_hierarchy_1 = require("@pnpm/reviewing.dependencies-hierarchy");
|
|
14
16
|
const renderJson_js_1 = require("./renderJson.js");
|
|
@@ -17,7 +19,10 @@ const renderParseable_js_1 = require("./renderParseable.js");
|
|
|
17
19
|
Object.defineProperty(exports, "renderParseable", { enumerable: true, get: function () { return renderParseable_js_1.renderParseable; } });
|
|
18
20
|
const renderTree_js_1 = require("./renderTree.js");
|
|
19
21
|
Object.defineProperty(exports, "renderTree", { enumerable: true, get: function () { return renderTree_js_1.renderTree; } });
|
|
20
|
-
const
|
|
22
|
+
const renderDependentsTree_js_1 = require("./renderDependentsTree.js");
|
|
23
|
+
Object.defineProperty(exports, "renderDependentsTree", { enumerable: true, get: function () { return renderDependentsTree_js_1.renderDependentsTree; } });
|
|
24
|
+
Object.defineProperty(exports, "renderDependentsJson", { enumerable: true, get: function () { return renderDependentsTree_js_1.renderDependentsJson; } });
|
|
25
|
+
Object.defineProperty(exports, "renderDependentsParseable", { enumerable: true, get: function () { return renderDependentsTree_js_1.renderDependentsParseable; } });
|
|
21
26
|
const DEFAULTS = {
|
|
22
27
|
alwaysPrintRootPackage: true,
|
|
23
28
|
depth: 0,
|
|
@@ -54,7 +59,7 @@ function flattenSearchedPackages(pkgs, opts) {
|
|
|
54
59
|
}
|
|
55
60
|
async function searchForPackages(packages, projectPaths, opts) {
|
|
56
61
|
const search = (0, reviewing_dependencies_hierarchy_1.createPackagesSearcher)(packages, opts.finders);
|
|
57
|
-
return Promise.all(Object.entries(await (0, reviewing_dependencies_hierarchy_1.
|
|
62
|
+
return Promise.all(Object.entries(await (0, reviewing_dependencies_hierarchy_1.buildDependenciesTree)(projectPaths, {
|
|
58
63
|
depth: opts.depth,
|
|
59
64
|
excludePeerDependencies: opts.excludePeerDependencies,
|
|
60
65
|
include: opts.include,
|
|
@@ -63,31 +68,32 @@ async function searchForPackages(packages, projectPaths, opts) {
|
|
|
63
68
|
onlyProjects: opts.onlyProjects,
|
|
64
69
|
registries: opts.registries,
|
|
65
70
|
search,
|
|
71
|
+
showDedupedSearchMatches: true,
|
|
66
72
|
modulesDir: opts.modulesDir,
|
|
67
73
|
virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,
|
|
68
74
|
}))
|
|
69
|
-
.map(async ([projectPath,
|
|
75
|
+
.map(async ([projectPath, buildDependenciesTree]) => {
|
|
70
76
|
const entryPkg = await (0, read_project_manifest_1.safeReadProjectManifestOnly)(projectPath) ?? {};
|
|
71
77
|
return {
|
|
72
78
|
name: entryPkg.name,
|
|
73
79
|
version: entryPkg.version,
|
|
74
80
|
private: entryPkg.private,
|
|
75
81
|
path: projectPath,
|
|
76
|
-
...
|
|
82
|
+
...buildDependenciesTree,
|
|
77
83
|
};
|
|
78
84
|
}));
|
|
79
85
|
}
|
|
80
86
|
async function listForPackages(packages, projectPaths, maybeOpts) {
|
|
81
87
|
const opts = { ...DEFAULTS, ...maybeOpts };
|
|
82
88
|
const pkgs = await searchForPackages(packages, projectPaths, opts);
|
|
83
|
-
const prunedPkgs = (0, pruneTree_js_1.pruneDependenciesTrees)(pkgs ?? null, 10);
|
|
84
89
|
const print = getPrinter(opts.reportAs);
|
|
85
|
-
return print(
|
|
90
|
+
return print(pkgs, {
|
|
86
91
|
alwaysPrintRootPackage: opts.alwaysPrintRootPackage,
|
|
87
92
|
depth: opts.depth,
|
|
88
93
|
long: opts.long,
|
|
89
94
|
search: Boolean(packages.length),
|
|
90
95
|
showExtraneous: opts.showExtraneous,
|
|
96
|
+
showSummary: opts.showSummary,
|
|
91
97
|
});
|
|
92
98
|
}
|
|
93
99
|
async function list(projectPaths, maybeOpts) {
|
|
@@ -97,7 +103,7 @@ async function list(projectPaths, maybeOpts) {
|
|
|
97
103
|
acc[projectPath] = {};
|
|
98
104
|
return acc;
|
|
99
105
|
}, {})
|
|
100
|
-
: await (0, reviewing_dependencies_hierarchy_1.
|
|
106
|
+
: await (0, reviewing_dependencies_hierarchy_1.buildDependenciesTree)(projectPaths, {
|
|
101
107
|
depth: opts.depth,
|
|
102
108
|
excludePeerDependencies: maybeOpts?.excludePeerDependencies,
|
|
103
109
|
include: maybeOpts?.include,
|
|
@@ -125,6 +131,7 @@ async function list(projectPaths, maybeOpts) {
|
|
|
125
131
|
long: opts.long,
|
|
126
132
|
search: false,
|
|
127
133
|
showExtraneous: opts.showExtraneous,
|
|
134
|
+
showSummary: opts.showSummary,
|
|
128
135
|
});
|
|
129
136
|
}
|
|
130
137
|
function getPrinter(reportAs) {
|
|
@@ -134,4 +141,41 @@ function getPrinter(reportAs) {
|
|
|
134
141
|
case 'tree': return renderTree_js_1.renderTree;
|
|
135
142
|
}
|
|
136
143
|
}
|
|
144
|
+
async function whyForPackages(packages, projectPaths, opts) {
|
|
145
|
+
const reportAs = opts.reportAs ?? 'tree';
|
|
146
|
+
const long = opts.long ?? false;
|
|
147
|
+
const depth = opts.depth;
|
|
148
|
+
const importerInfoMap = new Map();
|
|
149
|
+
const modulesDir = opts.modulesDir ?? 'node_modules';
|
|
150
|
+
const lockfile = opts.checkWantedLockfileOnly
|
|
151
|
+
? await (0, lockfile_fs_1.readWantedLockfile)(opts.lockfileDir, { ignoreIncompatible: false })
|
|
152
|
+
: await (0, lockfile_fs_1.readCurrentLockfile)(path_1.default.join(opts.lockfileDir, modulesDir, '.pnpm'), { ignoreIncompatible: false }) ??
|
|
153
|
+
await (0, lockfile_fs_1.readWantedLockfile)(opts.lockfileDir, { ignoreIncompatible: false });
|
|
154
|
+
if (!lockfile)
|
|
155
|
+
return '';
|
|
156
|
+
const importerIds = Object.keys(lockfile.importers);
|
|
157
|
+
const manifests = await Promise.all(importerIds.map((importerId) => (0, read_project_manifest_1.safeReadProjectManifestOnly)(path_1.default.join(opts.lockfileDir, importerId))));
|
|
158
|
+
for (let i = 0; i < importerIds.length; i++) {
|
|
159
|
+
const importerId = importerIds[i];
|
|
160
|
+
const manifest = manifests[i];
|
|
161
|
+
importerInfoMap.set(importerId, {
|
|
162
|
+
name: manifest?.name ?? (importerId === '.' ? 'the root project' : importerId),
|
|
163
|
+
version: manifest?.version ?? '',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
const trees = await (0, reviewing_dependencies_hierarchy_1.buildDependentsTree)(packages, projectPaths, {
|
|
167
|
+
lockfileDir: opts.lockfileDir,
|
|
168
|
+
include: opts.include,
|
|
169
|
+
modulesDir: opts.modulesDir,
|
|
170
|
+
registries: opts.registries,
|
|
171
|
+
finders: opts.finders,
|
|
172
|
+
importerInfoMap,
|
|
173
|
+
lockfile,
|
|
174
|
+
});
|
|
175
|
+
switch (reportAs) {
|
|
176
|
+
case 'json': return (0, renderDependentsTree_js_1.renderDependentsJson)(trees, { long, depth });
|
|
177
|
+
case 'parseable': return (0, renderDependentsTree_js_1.renderDependentsParseable)(trees, { long, depth });
|
|
178
|
+
case 'tree': return (0, renderDependentsTree_js_1.renderDependentsTree)(trees, { long, depth });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
137
181
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare function nameAtVersion(name: string, version: string, colorName?: (s: string) => string): string;
|
|
2
|
+
export declare function peerHashSuffix(pkg: {
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
peersSuffixHash?: string | undefined;
|
|
6
|
+
}, multiPeerPkgs: Map<string, number>): string;
|
|
7
|
+
export declare const DEDUPED_LABEL: string;
|
|
8
|
+
export declare function collectHashes(hashesPerPkg: Map<string, Set<string>>, pkg: {
|
|
9
|
+
name: string;
|
|
10
|
+
version: string;
|
|
11
|
+
peersSuffixHash?: string | undefined;
|
|
12
|
+
}): void;
|
|
13
|
+
/**
|
|
14
|
+
* Given a map of `name@version` → Set of distinct peer hashes,
|
|
15
|
+
* returns only those entries with more than one variant.
|
|
16
|
+
*/
|
|
17
|
+
export declare function filterMultiPeerEntries(hashesPerPkg: Map<string, Set<string>>): Map<string, number>;
|
|
@@ -0,0 +1,52 @@
|
|
|
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.DEDUPED_LABEL = void 0;
|
|
7
|
+
exports.nameAtVersion = nameAtVersion;
|
|
8
|
+
exports.peerHashSuffix = peerHashSuffix;
|
|
9
|
+
exports.collectHashes = collectHashes;
|
|
10
|
+
exports.filterMultiPeerEntries = filterMultiPeerEntries;
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
function nameAtVersion(name, version, colorName) {
|
|
13
|
+
if (!version)
|
|
14
|
+
return colorName ? colorName(name) : name;
|
|
15
|
+
const styledName = colorName ? colorName(name) : name;
|
|
16
|
+
return `${styledName}${chalk_1.default.gray(`@${version}`)}`;
|
|
17
|
+
}
|
|
18
|
+
function peerHashSuffix(pkg, multiPeerPkgs) {
|
|
19
|
+
if (!pkg.peersSuffixHash)
|
|
20
|
+
return '';
|
|
21
|
+
const key = `${pkg.name}@${pkg.version}`;
|
|
22
|
+
const variantCount = multiPeerPkgs.get(key);
|
|
23
|
+
if (variantCount == null)
|
|
24
|
+
return '';
|
|
25
|
+
return chalk_1.default.red(` peer#${pkg.peersSuffixHash} (${variantCount} variation${variantCount === 1 ? '' : 's'})`);
|
|
26
|
+
}
|
|
27
|
+
exports.DEDUPED_LABEL = chalk_1.default.dim(' [deduped]');
|
|
28
|
+
function collectHashes(hashesPerPkg, pkg) {
|
|
29
|
+
if (!pkg.peersSuffixHash)
|
|
30
|
+
return;
|
|
31
|
+
const key = `${pkg.name}@${pkg.version}`;
|
|
32
|
+
let hashes = hashesPerPkg.get(key);
|
|
33
|
+
if (hashes == null) {
|
|
34
|
+
hashes = new Set();
|
|
35
|
+
hashesPerPkg.set(key, hashes);
|
|
36
|
+
}
|
|
37
|
+
hashes.add(pkg.peersSuffixHash);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Given a map of `name@version` → Set of distinct peer hashes,
|
|
41
|
+
* returns only those entries with more than one variant.
|
|
42
|
+
*/
|
|
43
|
+
function filterMultiPeerEntries(hashesPerPkg) {
|
|
44
|
+
const result = new Map();
|
|
45
|
+
for (const [key, hashes] of hashesPerPkg) {
|
|
46
|
+
if (hashes.size > 1) {
|
|
47
|
+
result.set(key, hashes.size);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=peerVariants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peerVariants.js","sourceRoot":"","sources":["../src/peerVariants.ts"],"names":[],"mappings":";;;;;;AAEA,sCAIC;AAED,wCAUC;AAID,sCAaC;AAMD,wDAQC;AAjDD,kDAAyB;AAEzB,SAAgB,aAAa,CAAE,IAAY,EAAE,OAAe,EAAE,SAAiC;IAC7F,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACvD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACrD,OAAO,GAAG,UAAU,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,CAAA;AACpD,CAAC;AAED,SAAgB,cAAc,CAAE,GAI/B,EAAE,aAAkC;IACnC,IAAI,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,EAAE,CAAA;IACnC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA;IACxC,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,YAAY,IAAI,IAAI;QAAE,OAAO,EAAE,CAAA;IACnC,OAAO,eAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,eAAe,KAAK,YAAY,aAAa,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;AAC9G,CAAC;AAEY,QAAA,aAAa,GAAG,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AAEpD,SAAgB,aAAa,CAAE,YAAsC,EAAE,GAItE;IACC,IAAI,CAAC,GAAG,CAAC,eAAe;QAAE,OAAM;IAChC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA;IACxC,IAAI,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,GAAG,IAAI,GAAG,EAAE,CAAA;QAClB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC/B,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AACjC,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAE,YAAsC;IAC5E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type DependentsTree } from '@pnpm/reviewing.dependencies-hierarchy';
|
|
2
|
+
export declare function renderDependentsTree(trees: DependentsTree[], opts: {
|
|
3
|
+
long: boolean;
|
|
4
|
+
depth?: number;
|
|
5
|
+
}): Promise<string>;
|
|
6
|
+
export declare function renderDependentsJson(trees: DependentsTree[], opts: {
|
|
7
|
+
long: boolean;
|
|
8
|
+
depth?: number;
|
|
9
|
+
}): Promise<string>;
|
|
10
|
+
export declare function renderDependentsParseable(trees: DependentsTree[], opts: {
|
|
11
|
+
long: boolean;
|
|
12
|
+
depth?: number;
|
|
13
|
+
}): string;
|
|
@@ -0,0 +1,171 @@
|
|
|
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.renderDependentsTree = renderDependentsTree;
|
|
7
|
+
exports.renderDependentsJson = renderDependentsJson;
|
|
8
|
+
exports.renderDependentsParseable = renderDependentsParseable;
|
|
9
|
+
const text_tree_renderer_1 = require("@pnpm/text.tree-renderer");
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const peerVariants_js_1 = require("./peerVariants.js");
|
|
12
|
+
const getPkgInfo_js_1 = require("./getPkgInfo.js");
|
|
13
|
+
async function renderDependentsTree(trees, opts) {
|
|
14
|
+
if (trees.length === 0)
|
|
15
|
+
return '';
|
|
16
|
+
const multiPeerPkgs = findMultiPeerPackages(trees);
|
|
17
|
+
const output = (await Promise.all(trees.map(async (result) => {
|
|
18
|
+
const rootLabelParts = [chalk_1.default.bold((0, peerVariants_js_1.nameAtVersion)(result.displayName ?? result.name, result.version)) +
|
|
19
|
+
(0, peerVariants_js_1.peerHashSuffix)(result, multiPeerPkgs)];
|
|
20
|
+
if (result.searchMessage) {
|
|
21
|
+
rootLabelParts.push(result.searchMessage);
|
|
22
|
+
}
|
|
23
|
+
if (opts.long && result.path) {
|
|
24
|
+
const pkg = await (0, getPkgInfo_js_1.getPkgInfo)({ name: result.name, version: result.version, path: result.path, alias: undefined });
|
|
25
|
+
if (pkg.description) {
|
|
26
|
+
rootLabelParts.push(pkg.description);
|
|
27
|
+
}
|
|
28
|
+
if (pkg.repository) {
|
|
29
|
+
rootLabelParts.push(pkg.repository);
|
|
30
|
+
}
|
|
31
|
+
if (pkg.homepage) {
|
|
32
|
+
rootLabelParts.push(pkg.homepage);
|
|
33
|
+
}
|
|
34
|
+
rootLabelParts.push(pkg.path);
|
|
35
|
+
}
|
|
36
|
+
const rootLabel = rootLabelParts.join('\n');
|
|
37
|
+
if (result.dependents.length === 0) {
|
|
38
|
+
return rootLabel;
|
|
39
|
+
}
|
|
40
|
+
const childNodes = dependentsToTreeNodes(result.dependents, multiPeerPkgs, 0, opts.depth);
|
|
41
|
+
const tree = { label: rootLabel, nodes: childNodes };
|
|
42
|
+
return (0, text_tree_renderer_1.renderTree)(tree, { treeChars: chalk_1.default.dim }).replace(/\n+$/, '');
|
|
43
|
+
}))).join('\n\n');
|
|
44
|
+
const summary = whySummary(trees);
|
|
45
|
+
return summary ? `${output}\n\n${summary}` : output;
|
|
46
|
+
}
|
|
47
|
+
function whySummary(trees) {
|
|
48
|
+
if (trees.length === 0)
|
|
49
|
+
return '';
|
|
50
|
+
const byName = new Map();
|
|
51
|
+
for (const tree of trees) {
|
|
52
|
+
const displayedName = tree.displayName ?? tree.name;
|
|
53
|
+
let entry = byName.get(displayedName);
|
|
54
|
+
if (entry == null) {
|
|
55
|
+
entry = { versions: new Set(), count: 0 };
|
|
56
|
+
byName.set(displayedName, entry);
|
|
57
|
+
}
|
|
58
|
+
entry.versions.add(tree.version);
|
|
59
|
+
entry.count++;
|
|
60
|
+
}
|
|
61
|
+
const lines = [];
|
|
62
|
+
for (const [name, info] of byName) {
|
|
63
|
+
const parts = [`${info.versions.size} version${info.versions.size === 1 ? '' : 's'}`];
|
|
64
|
+
if (info.count > info.versions.size) {
|
|
65
|
+
parts.push(`${info.count} instances`);
|
|
66
|
+
}
|
|
67
|
+
lines.push(`Found ${parts.join(', ')} of ${name}`);
|
|
68
|
+
}
|
|
69
|
+
return chalk_1.default.dim(lines.join('\n'));
|
|
70
|
+
}
|
|
71
|
+
function findMultiPeerPackages(trees) {
|
|
72
|
+
const hashesPerPkg = new Map();
|
|
73
|
+
function walkDependents(dependents) {
|
|
74
|
+
for (const dep of dependents) {
|
|
75
|
+
(0, peerVariants_js_1.collectHashes)(hashesPerPkg, dep);
|
|
76
|
+
if (dep.dependents) {
|
|
77
|
+
walkDependents(dep.dependents);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for (const tree of trees) {
|
|
82
|
+
(0, peerVariants_js_1.collectHashes)(hashesPerPkg, tree);
|
|
83
|
+
walkDependents(tree.dependents);
|
|
84
|
+
}
|
|
85
|
+
return (0, peerVariants_js_1.filterMultiPeerEntries)(hashesPerPkg);
|
|
86
|
+
}
|
|
87
|
+
function dependentsToTreeNodes(dependents, multiPeerPkgs, currentDepth, maxDepth) {
|
|
88
|
+
return dependents.map((dep) => {
|
|
89
|
+
let label;
|
|
90
|
+
const displayedName = dep.displayName ?? dep.name;
|
|
91
|
+
if (dep.depField != null) {
|
|
92
|
+
// This is an importer (leaf node)
|
|
93
|
+
label = chalk_1.default.bold((0, peerVariants_js_1.nameAtVersion)(displayedName, dep.version)) + ` ${chalk_1.default.dim(`(${dep.depField})`)}`;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
label = (0, peerVariants_js_1.nameAtVersion)(displayedName, dep.version);
|
|
97
|
+
label += (0, peerVariants_js_1.peerHashSuffix)(dep, multiPeerPkgs);
|
|
98
|
+
}
|
|
99
|
+
if (dep.circular) {
|
|
100
|
+
label += chalk_1.default.dim(' [circular]');
|
|
101
|
+
}
|
|
102
|
+
if (dep.deduped) {
|
|
103
|
+
label += peerVariants_js_1.DEDUPED_LABEL;
|
|
104
|
+
}
|
|
105
|
+
const atDepthLimit = maxDepth != null && currentDepth + 1 >= maxDepth;
|
|
106
|
+
const nodes = dep.dependents && !atDepthLimit
|
|
107
|
+
? dependentsToTreeNodes(dep.dependents, multiPeerPkgs, currentDepth + 1, maxDepth)
|
|
108
|
+
: [];
|
|
109
|
+
return { label, nodes };
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
async function renderDependentsJson(trees, opts) {
|
|
113
|
+
let data = trees;
|
|
114
|
+
if (opts.long) {
|
|
115
|
+
data = await Promise.all(trees.map(async (result) => {
|
|
116
|
+
if (!result.path)
|
|
117
|
+
return result;
|
|
118
|
+
const pkg = await (0, getPkgInfo_js_1.getPkgInfo)({ name: result.name, version: result.version, path: result.path, alias: undefined });
|
|
119
|
+
return {
|
|
120
|
+
...result,
|
|
121
|
+
description: pkg.description,
|
|
122
|
+
repository: pkg.repository,
|
|
123
|
+
homepage: pkg.homepage,
|
|
124
|
+
};
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
if (opts.depth != null) {
|
|
128
|
+
data = data.map((tree) => ({
|
|
129
|
+
...tree,
|
|
130
|
+
dependents: truncateDependents(tree.dependents, 0, opts.depth),
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
return JSON.stringify(data, null, 2);
|
|
134
|
+
}
|
|
135
|
+
function renderDependentsParseable(trees, opts) {
|
|
136
|
+
const lines = [];
|
|
137
|
+
for (const result of trees) {
|
|
138
|
+
const displayedName = result.displayName ?? result.name;
|
|
139
|
+
const rootSegment = opts.long && result.path
|
|
140
|
+
? `${result.path}:${plainNameAtVersion(displayedName, result.version)}`
|
|
141
|
+
: plainNameAtVersion(displayedName, result.version);
|
|
142
|
+
collectPaths(result.dependents, [rootSegment], lines, 0, opts.depth);
|
|
143
|
+
}
|
|
144
|
+
return lines.join('\n');
|
|
145
|
+
}
|
|
146
|
+
function collectPaths(dependents, currentPath, lines, currentDepth, maxDepth) {
|
|
147
|
+
for (const dep of dependents) {
|
|
148
|
+
const newPath = [...currentPath, plainNameAtVersion(dep.displayName ?? dep.name, dep.version)];
|
|
149
|
+
const atDepthLimit = maxDepth != null && currentDepth + 1 >= maxDepth;
|
|
150
|
+
if (dep.dependents && dep.dependents.length > 0 && !atDepthLimit) {
|
|
151
|
+
collectPaths(dep.dependents, newPath, lines, currentDepth + 1, maxDepth);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// Leaf node (importer or depth-limited) — reverse to show importer first
|
|
155
|
+
lines.push([...newPath].reverse().join(' > '));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function truncateDependents(dependents, currentDepth, maxDepth) {
|
|
160
|
+
return dependents.map((dep) => {
|
|
161
|
+
if (dep.dependents && currentDepth + 1 < maxDepth) {
|
|
162
|
+
return { ...dep, dependents: truncateDependents(dep.dependents, currentDepth + 1, maxDepth) };
|
|
163
|
+
}
|
|
164
|
+
const { dependents: _, ...rest } = dep;
|
|
165
|
+
return rest;
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function plainNameAtVersion(name, version) {
|
|
169
|
+
return version ? `${name}@${version}` : name;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=renderDependentsTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderDependentsTree.js","sourceRoot":"","sources":["../src/renderDependentsTree.ts"],"names":[],"mappings":"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"}
|
package/lib/renderJson.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type DependencyNode } from '@pnpm/reviewing.dependencies-hierarchy';
|
|
2
2
|
import { type PkgInfo } from './getPkgInfo.js';
|
|
3
3
|
import { type PackageDependencyHierarchy } from './types.js';
|
|
4
4
|
export declare function renderJson(pkgs: PackageDependencyHierarchy[], opts: {
|
|
@@ -6,10 +6,12 @@ export declare function renderJson(pkgs: PackageDependencyHierarchy[], opts: {
|
|
|
6
6
|
long: boolean;
|
|
7
7
|
search: boolean;
|
|
8
8
|
}): Promise<string>;
|
|
9
|
-
export declare function toJsonResult(entryNodes:
|
|
9
|
+
export declare function toJsonResult(entryNodes: DependencyNode[], opts: {
|
|
10
10
|
long: boolean;
|
|
11
11
|
}): Promise<Record<string, PackageJsonListItem>>;
|
|
12
12
|
interface PackageJsonListItem extends PkgInfo {
|
|
13
|
+
deduped?: true;
|
|
14
|
+
dedupedDependenciesCount?: number;
|
|
13
15
|
dependencies?: Record<string, PackageJsonListItem>;
|
|
14
16
|
}
|
|
15
17
|
export {};
|
package/lib/renderJson.js
CHANGED
|
@@ -44,6 +44,12 @@ async function toJsonResult(entryNodes, opts) {
|
|
|
44
44
|
if (Object.keys(subDependencies).length > 0) {
|
|
45
45
|
dep.dependencies = subDependencies;
|
|
46
46
|
}
|
|
47
|
+
if (node.deduped) {
|
|
48
|
+
dep.deduped = true;
|
|
49
|
+
if (node.dedupedDependenciesCount) {
|
|
50
|
+
dep.dedupedDependenciesCount = node.dedupedDependenciesCount;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
47
53
|
if (!dep.resolved) {
|
|
48
54
|
delete dep.resolved;
|
|
49
55
|
}
|
package/lib/renderJson.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderJson.js","sourceRoot":"","sources":["../src/renderJson.ts"],"names":[],"mappings":";;;;;AAmBA,gCAiCC;AAED,
|
|
1
|
+
{"version":3,"file":"renderJson.js","sourceRoot":"","sources":["../src/renderJson.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderParseable.js","sourceRoot":"","sources":["../src/renderParseable.ts"],"names":[],"mappings":";;;;;AAOA,0CAcC;AApBD,8DAAqC;AACrC,0DAAiC;AAGjC,MAAM,YAAY,GAAG,IAAA,gBAAM,EAAC,IAAA,cAAI,EAAC,MAAM,CAAC,CAAC,CAAA;AAElC,KAAK,UAAU,eAAe,CACnC,IAAkC,EAClC,IAKC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,OAAO,IAAI;SACR,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;SACzD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;SAC3B,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAqB,EACrB,IAKC,EACD,GAA+B;IAE/B,MAAM,IAAI,GAAG,YAAY,CACvB,OAAO,CACL,QAAQ,EACR;QACE,GAAG,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;KACnC,CACF,CACF,CAAA;IACD,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAA;IAClE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,SAAS,GAAG,GAAG,CAAC,IAAI,CAAA;QACxB,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,SAAS,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAA;YAC3B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,SAAS,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA;YAChC,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,SAAS,IAAI,UAAU,CAAA;YACzB,CAAC;QACH,CAAC;QACD,OAAO;YACL,SAAS;YACT,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"renderParseable.js","sourceRoot":"","sources":["../src/renderParseable.ts"],"names":[],"mappings":"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"}
|
package/lib/renderTree.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import
|
|
1
|
+
import { type DependencyNode } from '@pnpm/reviewing.dependencies-hierarchy';
|
|
2
|
+
import { type TreeNode } from '@pnpm/text.tree-renderer';
|
|
3
3
|
import { type PackageDependencyHierarchy } from './types.js';
|
|
4
4
|
export interface RenderTreeOptions {
|
|
5
5
|
alwaysPrintRootPackage: boolean;
|
|
@@ -7,11 +7,13 @@ export interface RenderTreeOptions {
|
|
|
7
7
|
long: boolean;
|
|
8
8
|
search: boolean;
|
|
9
9
|
showExtraneous: boolean;
|
|
10
|
+
showSummary?: boolean;
|
|
10
11
|
}
|
|
11
12
|
export declare function renderTree(packages: PackageDependencyHierarchy[], opts: RenderTreeOptions): Promise<string>;
|
|
12
|
-
type GetPkgColor = (node:
|
|
13
|
-
export declare function toArchyTree(getPkgColor: GetPkgColor, entryNodes:
|
|
13
|
+
type GetPkgColor = (node: DependencyNode) => (s: string) => string;
|
|
14
|
+
export declare function toArchyTree(getPkgColor: GetPkgColor, entryNodes: DependencyNode[], opts: {
|
|
14
15
|
long: boolean;
|
|
15
16
|
modules: string;
|
|
16
|
-
|
|
17
|
+
multiPeerPkgs?: Map<string, number>;
|
|
18
|
+
}): Promise<TreeNode[]>;
|
|
17
19
|
export {};
|
package/lib/renderTree.js
CHANGED
|
@@ -6,26 +6,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.renderTree = renderTree;
|
|
7
7
|
exports.toArchyTree = toArchyTree;
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const text_tree_renderer_1 = require("@pnpm/text.tree-renderer");
|
|
9
10
|
const types_1 = require("@pnpm/types");
|
|
10
|
-
const
|
|
11
|
+
const util_lex_comparator_1 = require("@pnpm/util.lex-comparator");
|
|
11
12
|
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
-
const cli_columns_1 = __importDefault(require("cli-columns"));
|
|
13
|
-
const sortBy_1 = __importDefault(require("ramda/src/sortBy"));
|
|
14
|
-
const path_2 = __importDefault(require("ramda/src/path"));
|
|
15
13
|
const getPkgInfo_js_1 = require("./getPkgInfo.js");
|
|
16
|
-
const
|
|
14
|
+
const peerVariants_js_1 = require("./peerVariants.js");
|
|
17
15
|
const DEV_DEP_ONLY_CLR = chalk_1.default.yellow;
|
|
18
16
|
const PROD_DEP_CLR = (s) => s; // just use the default color
|
|
19
17
|
const OPTIONAL_DEP_CLR = chalk_1.default.blue;
|
|
20
18
|
const NOT_SAVED_DEP_CLR = chalk_1.default.red;
|
|
21
19
|
const LEGEND = `Legend: ${PROD_DEP_CLR('production dependency')}, ${OPTIONAL_DEP_CLR('optional only')}, ${DEV_DEP_ONLY_CLR('dev only')}\n\n`;
|
|
22
20
|
async function renderTree(packages, opts) {
|
|
23
|
-
const
|
|
21
|
+
const multiPeerPkgs = findMultiPeerPackages(packages);
|
|
22
|
+
const output = (await Promise.all(packages.map(async (pkg) => renderTreeForPackage(pkg, opts, multiPeerPkgs))))
|
|
24
23
|
.filter(Boolean)
|
|
25
24
|
.join('\n\n');
|
|
26
|
-
|
|
25
|
+
const legend = opts.depth > -1 && output ? LEGEND : '';
|
|
26
|
+
const summary = opts.showSummary && opts.depth > -1 && output ? `\n\n${listSummary(packages)}` : '';
|
|
27
|
+
return `${legend}${output}${summary}`;
|
|
27
28
|
}
|
|
28
|
-
async function renderTreeForPackage(pkg, opts) {
|
|
29
|
+
async function renderTreeForPackage(pkg, opts, multiPeerPkgs) {
|
|
29
30
|
if (!opts.alwaysPrintRootPackage &&
|
|
30
31
|
!pkg.dependencies?.length &&
|
|
31
32
|
!pkg.devDependencies?.length &&
|
|
@@ -34,53 +35,48 @@ async function renderTreeForPackage(pkg, opts) {
|
|
|
34
35
|
return '';
|
|
35
36
|
let label = '';
|
|
36
37
|
if (pkg.name) {
|
|
37
|
-
label += pkg.name;
|
|
38
|
-
if (pkg.version) {
|
|
39
|
-
label += `@${pkg.version}`;
|
|
40
|
-
}
|
|
38
|
+
label += (0, peerVariants_js_1.nameAtVersion)(pkg.name, pkg.version ?? '');
|
|
41
39
|
label += ' ';
|
|
42
40
|
}
|
|
43
|
-
label += pkg.path;
|
|
41
|
+
label += chalk_1.default.dim(pkg.path);
|
|
44
42
|
if (pkg.private) {
|
|
45
|
-
label += ' (PRIVATE)';
|
|
43
|
+
label += chalk_1.default.dim(' (PRIVATE)');
|
|
46
44
|
}
|
|
47
|
-
const useColumns = opts.depth === 0 && !opts.long && !opts.search;
|
|
48
45
|
const dependenciesFields = [
|
|
49
46
|
...types_1.DEPENDENCIES_FIELDS.sort(),
|
|
50
47
|
];
|
|
51
48
|
if (opts.showExtraneous) {
|
|
52
49
|
dependenciesFields.push('unsavedDependencies');
|
|
53
50
|
}
|
|
54
|
-
const
|
|
55
|
-
if (pkg[dependenciesField]?.length)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return null;
|
|
75
|
-
}))).filter(Boolean).join('\n');
|
|
76
|
-
// eslint-disable-next-line regexp/no-unused-capturing-group
|
|
77
|
-
return `${chalk_1.default.bold.underline(label)}\n\n${output}`.replace(/(\n)+$/, '');
|
|
51
|
+
const childNodes = (await Promise.all(dependenciesFields.map(async (dependenciesField) => {
|
|
52
|
+
if (!pkg[dependenciesField]?.length)
|
|
53
|
+
return null;
|
|
54
|
+
const depsLabel = chalk_1.default.cyanBright(dependenciesField !== 'unsavedDependencies'
|
|
55
|
+
? `${dependenciesField}:`
|
|
56
|
+
: 'not saved (you should add these dependencies to package.json if you need them):');
|
|
57
|
+
const gPkgColor = dependenciesField === 'unsavedDependencies' ? () => NOT_SAVED_DEP_CLR : getPkgColor;
|
|
58
|
+
const depNodes = await toArchyTree(gPkgColor, pkg[dependenciesField], {
|
|
59
|
+
long: opts.long,
|
|
60
|
+
modules: path_1.default.join(pkg.path, 'node_modules'),
|
|
61
|
+
multiPeerPkgs,
|
|
62
|
+
});
|
|
63
|
+
return { group: depsLabel, nodes: depNodes };
|
|
64
|
+
}))).filter((n) => n != null);
|
|
65
|
+
const rootLabel = chalk_1.default.bold(label);
|
|
66
|
+
if (childNodes.length === 0) {
|
|
67
|
+
return rootLabel;
|
|
68
|
+
}
|
|
69
|
+
const tree = { label: rootLabel, nodes: childNodes };
|
|
70
|
+
return (0, text_tree_renderer_1.renderTree)(tree, { treeChars: chalk_1.default.dim }).trimEnd();
|
|
78
71
|
}
|
|
79
72
|
async function toArchyTree(getPkgColor, entryNodes, opts) {
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
const sorted = [...entryNodes].sort((a, b) => (0, util_lex_comparator_1.lexCompare)(a.name, b.name));
|
|
74
|
+
return Promise.all(sorted.map(async (node) => {
|
|
75
|
+
const nodes = node.deduped
|
|
76
|
+
? []
|
|
77
|
+
: await toArchyTree(getPkgColor, node.dependencies ?? [], opts);
|
|
82
78
|
const labelLines = [
|
|
83
|
-
printLabel(getPkgColor, node),
|
|
79
|
+
printLabel(getPkgColor, opts.multiPeerPkgs, node),
|
|
84
80
|
];
|
|
85
81
|
if (node.searchMessage) {
|
|
86
82
|
labelLines.push(node.searchMessage);
|
|
@@ -106,21 +102,21 @@ async function toArchyTree(getPkgColor, entryNodes, opts) {
|
|
|
106
102
|
};
|
|
107
103
|
}));
|
|
108
104
|
}
|
|
109
|
-
function printLabel(getPkgColor, node) {
|
|
105
|
+
function printLabel(getPkgColor, multiPeerPkgs, node) {
|
|
110
106
|
const color = getPkgColor(node);
|
|
111
107
|
let txt;
|
|
112
108
|
if (node.alias !== node.name) {
|
|
113
|
-
// When using npm: protocol alias, display as "alias
|
|
109
|
+
// When using npm: protocol alias, display as "alias@npm:name@version"
|
|
114
110
|
// Only add npm: prefix if version doesn't already contain @ (to avoid file:, link:, etc.)
|
|
115
111
|
if (!node.version.includes('@')) {
|
|
116
|
-
txt = `${color(node.alias)}
|
|
112
|
+
txt = `${color(node.alias)}${chalk_1.default.gray(`@npm:${node.name}@${node.version}`)}`;
|
|
117
113
|
}
|
|
118
114
|
else {
|
|
119
|
-
txt = `${color(node.alias)}
|
|
115
|
+
txt = `${color(node.alias)}${chalk_1.default.gray(`@${node.version}`)}`;
|
|
120
116
|
}
|
|
121
117
|
}
|
|
122
118
|
else {
|
|
123
|
-
txt =
|
|
119
|
+
txt = (0, peerVariants_js_1.nameAtVersion)(node.name, node.version, color);
|
|
124
120
|
}
|
|
125
121
|
if (node.isPeer) {
|
|
126
122
|
txt += ' peer';
|
|
@@ -128,6 +124,12 @@ function printLabel(getPkgColor, node) {
|
|
|
128
124
|
if (node.isSkipped) {
|
|
129
125
|
txt += ' skipped';
|
|
130
126
|
}
|
|
127
|
+
if (multiPeerPkgs) {
|
|
128
|
+
txt += (0, peerVariants_js_1.peerHashSuffix)(node, multiPeerPkgs);
|
|
129
|
+
}
|
|
130
|
+
if (node.deduped) {
|
|
131
|
+
txt += peerVariants_js_1.DEDUPED_LABEL;
|
|
132
|
+
}
|
|
131
133
|
return node.searched ? chalk_1.default.bold(txt) : txt;
|
|
132
134
|
}
|
|
133
135
|
function getPkgColor(node) {
|
|
@@ -137,4 +139,50 @@ function getPkgColor(node) {
|
|
|
137
139
|
return OPTIONAL_DEP_CLR;
|
|
138
140
|
return PROD_DEP_CLR;
|
|
139
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Walks all package trees and returns the set of `name@version` strings
|
|
144
|
+
* that appear with more than one distinct `peersSuffixHash`.
|
|
145
|
+
*/
|
|
146
|
+
function findMultiPeerPackages(packages) {
|
|
147
|
+
const hashesPerPkg = new Map();
|
|
148
|
+
function walk(nodes) {
|
|
149
|
+
for (const node of nodes) {
|
|
150
|
+
(0, peerVariants_js_1.collectHashes)(hashesPerPkg, node);
|
|
151
|
+
if (node.dependencies) {
|
|
152
|
+
walk(node.dependencies);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
for (const pkg of packages) {
|
|
157
|
+
for (const field of types_1.DEPENDENCIES_FIELDS) {
|
|
158
|
+
if (pkg[field]) {
|
|
159
|
+
walk(pkg[field]);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return (0, peerVariants_js_1.filterMultiPeerEntries)(hashesPerPkg);
|
|
164
|
+
}
|
|
165
|
+
function listSummary(packages) {
|
|
166
|
+
let total = 0;
|
|
167
|
+
function walk(nodes) {
|
|
168
|
+
for (const node of nodes) {
|
|
169
|
+
total++;
|
|
170
|
+
if (node.dependencies) {
|
|
171
|
+
walk(node.dependencies);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
for (const pkg of packages) {
|
|
176
|
+
for (const field of types_1.DEPENDENCIES_FIELDS) {
|
|
177
|
+
if (pkg[field]) {
|
|
178
|
+
walk(pkg[field]);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
const parts = [`${total} package${total === 1 ? '' : 's'}`];
|
|
183
|
+
if (packages.length > 1) {
|
|
184
|
+
parts.push(`${packages.length} projects`);
|
|
185
|
+
}
|
|
186
|
+
return chalk_1.default.dim(parts.join(' in '));
|
|
187
|
+
}
|
|
140
188
|
//# sourceMappingURL=renderTree.js.map
|
package/lib/renderTree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderTree.js","sourceRoot":"","sources":["../src/renderTree.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"renderTree.js","sourceRoot":"","sources":["../src/renderTree.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export interface PackageDependencyHierarchy extends
|
|
1
|
+
import { type DependenciesTree } from '@pnpm/reviewing.dependencies-hierarchy';
|
|
2
|
+
export interface PackageDependencyHierarchy extends DependenciesTree {
|
|
3
3
|
name?: string;
|
|
4
4
|
version?: string;
|
|
5
5
|
path: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnpm/list",
|
|
3
|
-
"version": "1000.
|
|
3
|
+
"version": "1000.3.0",
|
|
4
4
|
"description": "List installed packages in a symlinked `node_modules`",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pnpm",
|
|
@@ -26,21 +26,21 @@
|
|
|
26
26
|
"!*.map"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"
|
|
29
|
+
"@pnpm/util.lex-comparator": "^3.0.2",
|
|
30
30
|
"chalk": "^4.1.2",
|
|
31
|
-
"cli-columns": "^4.0.0",
|
|
32
31
|
"p-limit": "^3.1.0",
|
|
33
32
|
"ramda": "npm:@pnpm/ramda@0.28.1",
|
|
34
33
|
"@pnpm/crypto.polyfill": "1000.1.0",
|
|
35
|
-
"@pnpm/
|
|
34
|
+
"@pnpm/lockfile.fs": "1001.1.29",
|
|
36
35
|
"@pnpm/read-project-manifest": "1001.2.4",
|
|
37
|
-
"@pnpm/reviewing.dependencies-hierarchy": "1001.
|
|
38
|
-
"@pnpm/types": "1001.3.0"
|
|
36
|
+
"@pnpm/reviewing.dependencies-hierarchy": "1001.3.0",
|
|
37
|
+
"@pnpm/types": "1001.3.0",
|
|
38
|
+
"@pnpm/text.tree-renderer": "1000.0.0",
|
|
39
|
+
"@pnpm/read-package-json": "1000.1.7"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
|
-
"@types/archy": "0.0.33",
|
|
42
42
|
"@types/ramda": "0.29.12",
|
|
43
|
-
"@pnpm/list": "1000.
|
|
43
|
+
"@pnpm/list": "1000.3.0",
|
|
44
44
|
"@pnpm/test-fixtures": "1000.0.0"
|
|
45
45
|
},
|
|
46
46
|
"engines": {
|
package/lib/pruneTree.d.ts
DELETED
package/lib/pruneTree.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.pruneDependenciesTrees = pruneDependenciesTrees;
|
|
27
|
-
const crypto = __importStar(require("@pnpm/crypto.polyfill"));
|
|
28
|
-
function pruneDependenciesTrees(trees, limit) {
|
|
29
|
-
if (trees === null) {
|
|
30
|
-
return [];
|
|
31
|
-
}
|
|
32
|
-
return trees.map((tree) => {
|
|
33
|
-
const endLeafPaths = [];
|
|
34
|
-
const visitedNodes = new Set();
|
|
35
|
-
function findEndLeaves(node, path) {
|
|
36
|
-
if (node.circular) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
const nodeId = `${node.name}@${node.version}`;
|
|
40
|
-
if (visitedNodes.has(nodeId)) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
visitedNodes.add(nodeId);
|
|
44
|
-
const newPath = [...path, node];
|
|
45
|
-
if (!node.dependencies || node.dependencies.length === 0) {
|
|
46
|
-
endLeafPaths.push(newPath);
|
|
47
|
-
if (endLeafPaths.length >= limit) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
for (const child of node.dependencies ?? []) {
|
|
52
|
-
findEndLeaves(child, newPath);
|
|
53
|
-
if (endLeafPaths.length >= limit) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
visitedNodes.delete(nodeId);
|
|
58
|
-
}
|
|
59
|
-
if (tree.dependencies) {
|
|
60
|
-
for (const node of tree.dependencies) {
|
|
61
|
-
findEndLeaves(node, []);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
const firstNPaths = endLeafPaths.slice(0, limit);
|
|
65
|
-
const map = new Map();
|
|
66
|
-
const newTree = { dependencies: [] };
|
|
67
|
-
for (const path of firstNPaths) {
|
|
68
|
-
let currentDependencies = newTree.dependencies;
|
|
69
|
-
let pathSoFar = '';
|
|
70
|
-
for (const node of path) {
|
|
71
|
-
pathSoFar += `${node.name}@${node.version},`;
|
|
72
|
-
const id = crypto.hash('sha256', pathSoFar, 'hex');
|
|
73
|
-
let existingNode = map.get(id);
|
|
74
|
-
if (!existingNode) {
|
|
75
|
-
existingNode = { ...node, dependencies: [] };
|
|
76
|
-
currentDependencies.push(existingNode);
|
|
77
|
-
map.set(id, existingNode);
|
|
78
|
-
}
|
|
79
|
-
currentDependencies = existingNode.dependencies;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return {
|
|
83
|
-
...tree,
|
|
84
|
-
dependencies: newTree.dependencies,
|
|
85
|
-
};
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=pruneTree.js.map
|
package/lib/pruneTree.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pruneTree.js","sourceRoot":"","sources":["../src/pruneTree.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wDAyEC;AA7ED,8DAA+C;AAI/C,SAAgB,sBAAsB,CAAE,KAA0C,EAAE,KAAa;IAC/F,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,YAAY,GAAoB,EAAE,CAAA;QACxC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;QAEtC,SAAS,aAAa,CAAE,IAAiB,EAAE,IAAmB;YAC5D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAM;YACR,CAAC;YAED,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAA;YAC7C,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,OAAM;YACR,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACxB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAA;YAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC1B,IAAI,YAAY,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;oBACjC,OAAM;gBACR,CAAC;YACH,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;gBAC5C,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;gBAC7B,IAAI,YAAY,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;oBACjC,OAAM;gBACR,CAAC;YACH,CAAC;YAED,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QAChD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC1C,MAAM,OAAO,GAA0B,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;QAE3D,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,mBAAmB,GAAkB,OAAO,CAAC,YAAa,CAAA;YAC9D,IAAI,SAAS,GAAG,EAAE,CAAA;YAElB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,SAAS,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,GAAG,CAAA;gBAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;gBAClD,IAAI,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAE9B,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,YAAY,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;oBAC5C,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;oBACtC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;gBAC3B,CAAC;gBAED,mBAAmB,GAAG,YAAY,CAAC,YAAa,CAAA;YAClD,CAAC;QACH,CAAC;QAED,OAAO;YACL,GAAG,IAAI;YACP,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|