pnpm-dedup 2.1.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/LICENSE +21 -0
- package/README.md +218 -0
- package/dist/applyClusterFixes.js +252 -0
- package/dist/applyClusterFixes.js.map +1 -0
- package/dist/applyClusterFixes.test.js +474 -0
- package/dist/applyClusterFixes.test.js.map +1 -0
- package/dist/bin/pnpm-dedupe.js +35 -0
- package/dist/bin/pnpm-dedupe.js.map +1 -0
- package/dist/bin/pnpm-why-duplicate.js +23 -0
- package/dist/bin/pnpm-why-duplicate.js.map +1 -0
- package/dist/bin/pnpm-why-duplicate.test.js +57 -0
- package/dist/bin/pnpm-why-duplicate.test.js.map +1 -0
- package/dist/dedupe.js +86 -0
- package/dist/dedupe.js.map +1 -0
- package/dist/dedupeCheckConsistency.test.js +149 -0
- package/dist/dedupeCheckConsistency.test.js.map +1 -0
- package/dist/dedupeEndToEnd.test.js +121 -0
- package/dist/dedupeEndToEnd.test.js.map +1 -0
- package/dist/dedupePeers.test.js +105 -0
- package/dist/dedupePeers.test.js.map +1 -0
- package/dist/definitions/applyClusterFixes.d.ts +24 -0
- package/dist/definitions/applyClusterFixes.d.ts.map +1 -0
- package/dist/definitions/applyClusterFixes.test.d.ts +2 -0
- package/dist/definitions/applyClusterFixes.test.d.ts.map +1 -0
- package/dist/definitions/bin/pnpm-dedupe.d.ts +3 -0
- package/dist/definitions/bin/pnpm-dedupe.d.ts.map +1 -0
- package/dist/definitions/bin/pnpm-why-duplicate.d.ts +3 -0
- package/dist/definitions/bin/pnpm-why-duplicate.d.ts.map +1 -0
- package/dist/definitions/bin/pnpm-why-duplicate.test.d.ts +2 -0
- package/dist/definitions/bin/pnpm-why-duplicate.test.d.ts.map +1 -0
- package/dist/definitions/dedupe.d.ts +15 -0
- package/dist/definitions/dedupe.d.ts.map +1 -0
- package/dist/definitions/dedupeCheckConsistency.test.d.ts +2 -0
- package/dist/definitions/dedupeCheckConsistency.test.d.ts.map +1 -0
- package/dist/definitions/dedupeEndToEnd.test.d.ts +2 -0
- package/dist/definitions/dedupeEndToEnd.test.d.ts.map +1 -0
- package/dist/definitions/dedupePeers.test.d.ts +2 -0
- package/dist/definitions/dedupePeers.test.d.ts.map +1 -0
- package/dist/definitions/displayMany.d.ts +16 -0
- package/dist/definitions/displayMany.d.ts.map +1 -0
- package/dist/definitions/displayMany.test.d.ts +2 -0
- package/dist/definitions/displayMany.test.d.ts.map +1 -0
- package/dist/definitions/helpers/buildIdentifiedFixesMap.test.d.ts +2 -0
- package/dist/definitions/helpers/buildIdentifiedFixesMap.test.d.ts.map +1 -0
- package/dist/definitions/helpers/buildPnpmPackagesMap.d.ts +13 -0
- package/dist/definitions/helpers/buildPnpmPackagesMap.d.ts.map +1 -0
- package/dist/definitions/helpers/buildPnpmPackagesMap.test.d.ts +2 -0
- package/dist/definitions/helpers/buildPnpmPackagesMap.test.d.ts.map +1 -0
- package/dist/definitions/helpers/collectDependentRanges.d.ts +22 -0
- package/dist/definitions/helpers/collectDependentRanges.d.ts.map +1 -0
- package/dist/definitions/helpers/collectDependentRanges.test.d.ts +2 -0
- package/dist/definitions/helpers/collectDependentRanges.test.d.ts.map +1 -0
- package/dist/definitions/helpers/collectPnpmDependents.d.ts +8 -0
- package/dist/definitions/helpers/collectPnpmDependents.d.ts.map +1 -0
- package/dist/definitions/helpers/collectPnpmDependents.test.d.ts +2 -0
- package/dist/definitions/helpers/collectPnpmDependents.test.d.ts.map +1 -0
- package/dist/definitions/helpers/duplicateSnapshot.d.ts +3 -0
- package/dist/definitions/helpers/duplicateSnapshot.d.ts.map +1 -0
- package/dist/definitions/helpers/parsePnpmLockPackages.d.ts +44 -0
- package/dist/definitions/helpers/parsePnpmLockPackages.d.ts.map +1 -0
- package/dist/definitions/helpers/parsePnpmLockPackages.test.d.ts +2 -0
- package/dist/definitions/helpers/parsePnpmLockPackages.test.d.ts.map +1 -0
- package/dist/definitions/helpers/pnpmProtocol.d.ts +2 -0
- package/dist/definitions/helpers/pnpmProtocol.d.ts.map +1 -0
- package/dist/definitions/helpers/pnpmVersion.d.ts +11 -0
- package/dist/definitions/helpers/pnpmVersion.d.ts.map +1 -0
- package/dist/definitions/helpers/pnpmWorkspaceYaml.d.ts +23 -0
- package/dist/definitions/helpers/pnpmWorkspaceYaml.d.ts.map +1 -0
- package/dist/definitions/helpers/pnpmWorkspaceYaml.test.d.ts +2 -0
- package/dist/definitions/helpers/pnpmWorkspaceYaml.test.d.ts.map +1 -0
- package/dist/definitions/helpers/projectDir.d.ts +3 -0
- package/dist/definitions/helpers/projectDir.d.ts.map +1 -0
- package/dist/definitions/helpers/readInstalledManifest.d.ts +32 -0
- package/dist/definitions/helpers/readInstalledManifest.d.ts.map +1 -0
- package/dist/definitions/helpers/readInstalledManifest.test.d.ts +2 -0
- package/dist/definitions/helpers/readInstalledManifest.test.d.ts.map +1 -0
- package/dist/definitions/helpers/runPnpm.d.ts +11 -0
- package/dist/definitions/helpers/runPnpm.d.ts.map +1 -0
- package/dist/definitions/helpers/tempProjects.d.ts +8 -0
- package/dist/definitions/helpers/tempProjects.d.ts.map +1 -0
- package/dist/definitions/helpers/toLockstepGraph.d.ts +12 -0
- package/dist/definitions/helpers/toLockstepGraph.d.ts.map +1 -0
- package/dist/definitions/helpers/toLockstepGraph.test.d.ts +2 -0
- package/dist/definitions/helpers/toLockstepGraph.test.d.ts.map +1 -0
- package/dist/definitions/helpers/versionsSnapshot.d.ts +3 -0
- package/dist/definitions/helpers/versionsSnapshot.d.ts.map +1 -0
- package/dist/definitions/identifyClusterFixes.d.ts +7 -0
- package/dist/definitions/identifyClusterFixes.d.ts.map +1 -0
- package/dist/definitions/identifyClusterFixes.test.d.ts +2 -0
- package/dist/definitions/identifyClusterFixes.test.d.ts.map +1 -0
- package/dist/definitions/identifyResolutionFixes.test.d.ts +2 -0
- package/dist/definitions/identifyResolutionFixes.test.d.ts.map +1 -0
- package/dist/definitions/index.d.ts +25 -0
- package/dist/definitions/index.d.ts.map +1 -0
- package/dist/definitions/pnpmLockTypes.d.ts +42 -0
- package/dist/definitions/pnpmLockTypes.d.ts.map +1 -0
- package/dist/definitions/readPnpmLock.d.ts +3 -0
- package/dist/definitions/readPnpmLock.d.ts.map +1 -0
- package/dist/displayMany.js +56 -0
- package/dist/displayMany.js.map +1 -0
- package/dist/displayMany.test.js +146 -0
- package/dist/displayMany.test.js.map +1 -0
- package/dist/helpers/buildIdentifiedFixesMap.test.js +27 -0
- package/dist/helpers/buildIdentifiedFixesMap.test.js.map +1 -0
- package/dist/helpers/buildPnpmPackagesMap.js +23 -0
- package/dist/helpers/buildPnpmPackagesMap.js.map +1 -0
- package/dist/helpers/buildPnpmPackagesMap.test.js +68 -0
- package/dist/helpers/buildPnpmPackagesMap.test.js.map +1 -0
- package/dist/helpers/collectDependentRanges.js +118 -0
- package/dist/helpers/collectDependentRanges.js.map +1 -0
- package/dist/helpers/collectDependentRanges.test.js +211 -0
- package/dist/helpers/collectDependentRanges.test.js.map +1 -0
- package/dist/helpers/collectPnpmDependents.js +55 -0
- package/dist/helpers/collectPnpmDependents.js.map +1 -0
- package/dist/helpers/collectPnpmDependents.test.js +78 -0
- package/dist/helpers/collectPnpmDependents.test.js.map +1 -0
- package/dist/helpers/duplicateSnapshot.js +5 -0
- package/dist/helpers/duplicateSnapshot.js.map +1 -0
- package/dist/helpers/parsePnpmLockPackages.js +62 -0
- package/dist/helpers/parsePnpmLockPackages.js.map +1 -0
- package/dist/helpers/parsePnpmLockPackages.test.js +62 -0
- package/dist/helpers/parsePnpmLockPackages.test.js.map +1 -0
- package/dist/helpers/pnpmProtocol.js +2 -0
- package/dist/helpers/pnpmProtocol.js.map +1 -0
- package/dist/helpers/pnpmVersion.js +23 -0
- package/dist/helpers/pnpmVersion.js.map +1 -0
- package/dist/helpers/pnpmWorkspaceYaml.js +48 -0
- package/dist/helpers/pnpmWorkspaceYaml.js.map +1 -0
- package/dist/helpers/pnpmWorkspaceYaml.test.js +91 -0
- package/dist/helpers/pnpmWorkspaceYaml.test.js.map +1 -0
- package/dist/helpers/projectDir.js +10 -0
- package/dist/helpers/projectDir.js.map +1 -0
- package/dist/helpers/readInstalledManifest.js +139 -0
- package/dist/helpers/readInstalledManifest.js.map +1 -0
- package/dist/helpers/readInstalledManifest.test.js +83 -0
- package/dist/helpers/readInstalledManifest.test.js.map +1 -0
- package/dist/helpers/runPnpm.js +16 -0
- package/dist/helpers/runPnpm.js.map +1 -0
- package/dist/helpers/tempProjects.js +85 -0
- package/dist/helpers/tempProjects.js.map +1 -0
- package/dist/helpers/toLockstepGraph.js +34 -0
- package/dist/helpers/toLockstepGraph.js.map +1 -0
- package/dist/helpers/toLockstepGraph.test.js +81 -0
- package/dist/helpers/toLockstepGraph.test.js.map +1 -0
- package/dist/helpers/versionsSnapshot.js +5 -0
- package/dist/helpers/versionsSnapshot.js.map +1 -0
- package/dist/identifyClusterFixes.js +53 -0
- package/dist/identifyClusterFixes.js.map +1 -0
- package/dist/identifyClusterFixes.test.js +307 -0
- package/dist/identifyClusterFixes.test.js.map +1 -0
- package/dist/identifyResolutionFixes.test.js +49 -0
- package/dist/identifyResolutionFixes.test.js.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/pnpmLockTypes.js +7 -0
- package/dist/pnpmLockTypes.js.map +1 -0
- package/dist/readPnpmLock.js +6 -0
- package/dist/readPnpmLock.js.map +1 -0
- package/package.json +71 -0
- package/src/applyClusterFixes.test.ts +560 -0
- package/src/applyClusterFixes.ts +466 -0
- package/src/bin/pnpm-dedupe.ts +44 -0
- package/src/bin/pnpm-why-duplicate.test.ts +79 -0
- package/src/bin/pnpm-why-duplicate.ts +34 -0
- package/src/dedupe.ts +124 -0
- package/src/dedupeCheckConsistency.test.ts +218 -0
- package/src/dedupeEndToEnd.test.ts +168 -0
- package/src/dedupePeers.test.ts +175 -0
- package/src/displayMany.test.ts +208 -0
- package/src/displayMany.ts +104 -0
- package/src/helpers/buildIdentifiedFixesMap.test.ts +33 -0
- package/src/helpers/buildPnpmPackagesMap.test.ts +119 -0
- package/src/helpers/buildPnpmPackagesMap.ts +53 -0
- package/src/helpers/collectDependentRanges.test.ts +311 -0
- package/src/helpers/collectDependentRanges.ts +185 -0
- package/src/helpers/collectPnpmDependents.test.ts +112 -0
- package/src/helpers/collectPnpmDependents.ts +79 -0
- package/src/helpers/duplicateSnapshot.ts +18 -0
- package/src/helpers/parsePnpmLockPackages.test.ts +93 -0
- package/src/helpers/parsePnpmLockPackages.ts +99 -0
- package/src/helpers/pnpmProtocol.ts +12 -0
- package/src/helpers/pnpmVersion.ts +28 -0
- package/src/helpers/pnpmWorkspaceYaml.test.ts +140 -0
- package/src/helpers/pnpmWorkspaceYaml.ts +77 -0
- package/src/helpers/projectDir.ts +14 -0
- package/src/helpers/readInstalledManifest.test.ts +124 -0
- package/src/helpers/readInstalledManifest.ts +202 -0
- package/src/helpers/runPnpm.ts +34 -0
- package/src/helpers/tempProjects.ts +94 -0
- package/src/helpers/toLockstepGraph.test.ts +98 -0
- package/src/helpers/toLockstepGraph.ts +52 -0
- package/src/helpers/versionsSnapshot.ts +9 -0
- package/src/identifyClusterFixes.test.ts +430 -0
- package/src/identifyClusterFixes.ts +114 -0
- package/src/identifyResolutionFixes.test.ts +82 -0
- package/src/index.ts +159 -0
- package/src/pnpmLockTypes.ts +44 -0
- package/src/readPnpmLock.ts +7 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createPackageFilter,
|
|
3
|
+
selectExplainedPackages,
|
|
4
|
+
selectPackages,
|
|
5
|
+
} from "pm-dedup-core";
|
|
6
|
+
import type { PackageFilterOptions } from "pm-dedup-core";
|
|
7
|
+
import { displayMany } from "./displayMany.ts";
|
|
8
|
+
import {
|
|
9
|
+
buildPnpmPackagesMap,
|
|
10
|
+
filterDuplicatesPnpmPackagesMap,
|
|
11
|
+
} from "./helpers/buildPnpmPackagesMap.ts";
|
|
12
|
+
import type { PackagesMap } from "./helpers/buildPnpmPackagesMap.ts";
|
|
13
|
+
import { collectDependentRanges } from "./helpers/collectDependentRanges.ts";
|
|
14
|
+
import type { DependentRangesMap } from "./helpers/collectDependentRanges.ts";
|
|
15
|
+
import { parsePnpmLockPackages } from "./helpers/parsePnpmLockPackages.ts";
|
|
16
|
+
import { lockPathOf, resolvePnpmProjectDir } from "./helpers/projectDir.ts";
|
|
17
|
+
import type {
|
|
18
|
+
ManifestReader,
|
|
19
|
+
ManifestReaderStats,
|
|
20
|
+
} from "./helpers/readInstalledManifest.ts";
|
|
21
|
+
import { createManifestReaderWithStats } from "./helpers/readInstalledManifest.ts";
|
|
22
|
+
import { identifyClusterFixes } from "./identifyClusterFixes.ts";
|
|
23
|
+
import type { PnpmLockFile } from "./pnpmLockTypes.ts";
|
|
24
|
+
import { readPnpmLock } from "./readPnpmLock.ts";
|
|
25
|
+
|
|
26
|
+
export { dedupe } from "./dedupe.ts";
|
|
27
|
+
export { applyClusterFixes } from "./applyClusterFixes.ts";
|
|
28
|
+
export { identifyClusterFixes } from "./identifyClusterFixes.ts";
|
|
29
|
+
export { toLockstepGraph } from "./helpers/toLockstepGraph.ts";
|
|
30
|
+
export { displayMany } from "./displayMany.ts";
|
|
31
|
+
export { readPnpmLock } from "./readPnpmLock.ts";
|
|
32
|
+
export { parsePnpmLockPackages } from "./helpers/parsePnpmLockPackages.ts";
|
|
33
|
+
export {
|
|
34
|
+
buildPnpmPackagesMap,
|
|
35
|
+
filterDuplicatesPnpmPackagesMap,
|
|
36
|
+
} from "./helpers/buildPnpmPackagesMap.ts";
|
|
37
|
+
export { collectPnpmDependents } from "./helpers/collectPnpmDependents.ts";
|
|
38
|
+
export { collectDependentRanges } from "./helpers/collectDependentRanges.ts";
|
|
39
|
+
export { readVersionsSnapshot } from "./helpers/versionsSnapshot.ts";
|
|
40
|
+
export {
|
|
41
|
+
createManifestReader,
|
|
42
|
+
createManifestReaderWithStats,
|
|
43
|
+
} from "./helpers/readInstalledManifest.ts";
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Every declared range of a transitive dependent is read from its installed
|
|
47
|
+
* manifest; the lockfile only stores resolved versions. When nothing is
|
|
48
|
+
* readable, each range degrades to an exact version and the reported fixes are
|
|
49
|
+
* not merely fewer but wrong — so say so instead of printing a confident answer.
|
|
50
|
+
*/
|
|
51
|
+
function warnWhenNoManifests(stats: ManifestReaderStats): void {
|
|
52
|
+
if (stats.found > 0 || stats.missed === 0) return;
|
|
53
|
+
console.log();
|
|
54
|
+
console.log(
|
|
55
|
+
"Warning: no installed manifest could be read under node_modules, so every dependent's range fell back to its resolved version and the fixes above are unreliable. Run `pnpm install` first.",
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// The report and the fixes must agree on what every requester asked for, so
|
|
60
|
+
// both read the declared ranges the lockfile does not store.
|
|
61
|
+
function collectRanges(
|
|
62
|
+
lock: PnpmLockFile,
|
|
63
|
+
packagesMap: PackagesMap,
|
|
64
|
+
readManifest: ManifestReader,
|
|
65
|
+
): DependentRangesMap {
|
|
66
|
+
return collectDependentRanges(
|
|
67
|
+
lock,
|
|
68
|
+
new Set(Object.keys(packagesMap)),
|
|
69
|
+
readManifest,
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface WhyDuplicateOptions {
|
|
74
|
+
filter?: PackageFilterOptions;
|
|
75
|
+
// keeps packages the lockfile resolves only once, which a listing drops
|
|
76
|
+
all?: boolean;
|
|
77
|
+
// every dependent of every version, instead of one line per package
|
|
78
|
+
details?: boolean;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function whyDuplicate({
|
|
82
|
+
filter: filterOptions,
|
|
83
|
+
all = false,
|
|
84
|
+
details = false,
|
|
85
|
+
}: WhyDuplicateOptions): void {
|
|
86
|
+
const filter = createPackageFilter(filterOptions);
|
|
87
|
+
|
|
88
|
+
const projectDir = resolvePnpmProjectDir();
|
|
89
|
+
if (projectDir === null) return;
|
|
90
|
+
const lock = readPnpmLock(lockPathOf(projectDir));
|
|
91
|
+
const parsed = parsePnpmLockPackages(lock);
|
|
92
|
+
const packagesMap = buildPnpmPackagesMap(parsed);
|
|
93
|
+
|
|
94
|
+
const {
|
|
95
|
+
packages: filteredPackages,
|
|
96
|
+
title,
|
|
97
|
+
notice,
|
|
98
|
+
} = selectExplainedPackages({ packagesMap, filter, all });
|
|
99
|
+
|
|
100
|
+
const { readManifest, stats } = createManifestReaderWithStats(projectDir);
|
|
101
|
+
|
|
102
|
+
// A duplicate is often only explainable by its family: show the cluster fixes
|
|
103
|
+
// covering the matched packages, not just their own dependents.
|
|
104
|
+
const matchedClusterFixes = identifyClusterFixes(
|
|
105
|
+
lock,
|
|
106
|
+
packagesMap,
|
|
107
|
+
readManifest,
|
|
108
|
+
).filter((fix) => fix.members.some(filter.selects));
|
|
109
|
+
|
|
110
|
+
displayMany({
|
|
111
|
+
title,
|
|
112
|
+
notice,
|
|
113
|
+
duplicatesPackagesMap: filteredPackages,
|
|
114
|
+
dependents: collectRanges(lock, filteredPackages, readManifest),
|
|
115
|
+
// the whole lockfile, so the count means the same whatever the filter
|
|
116
|
+
totalDependencies: Object.keys(packagesMap).length,
|
|
117
|
+
clusterFixes: matchedClusterFixes,
|
|
118
|
+
details,
|
|
119
|
+
});
|
|
120
|
+
warnWhenNoManifests(stats());
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface ListDuplicatesOptions {
|
|
124
|
+
filter?: PackageFilterOptions;
|
|
125
|
+
details?: boolean;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function listDuplicates({
|
|
129
|
+
filter: filterOptions,
|
|
130
|
+
details = false,
|
|
131
|
+
}: ListDuplicatesOptions = {}): void {
|
|
132
|
+
const filter = createPackageFilter(filterOptions);
|
|
133
|
+
|
|
134
|
+
const projectDir = resolvePnpmProjectDir();
|
|
135
|
+
if (projectDir === null) return;
|
|
136
|
+
const lock = readPnpmLock(lockPathOf(projectDir));
|
|
137
|
+
const parsed = parsePnpmLockPackages(lock);
|
|
138
|
+
const packagesMap = buildPnpmPackagesMap(parsed);
|
|
139
|
+
const duplicatesPackagesMap = selectPackages(
|
|
140
|
+
filterDuplicatesPnpmPackagesMap(packagesMap),
|
|
141
|
+
filter,
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
const { readManifest, stats } = createManifestReaderWithStats(projectDir);
|
|
145
|
+
|
|
146
|
+
displayMany({
|
|
147
|
+
title: "duplicates",
|
|
148
|
+
duplicatesPackagesMap,
|
|
149
|
+
dependents: collectRanges(lock, duplicatesPackagesMap, readManifest),
|
|
150
|
+
totalDependencies: Object.keys(packagesMap).length,
|
|
151
|
+
// as in `whyDuplicate`: a family is shown whole as soon as it holds a
|
|
152
|
+
// selected member, because that is what explains the duplicate
|
|
153
|
+
clusterFixes: identifyClusterFixes(lock, packagesMap, readManifest).filter(
|
|
154
|
+
(fix) => fix.members.some(filter.selects),
|
|
155
|
+
),
|
|
156
|
+
details,
|
|
157
|
+
});
|
|
158
|
+
warnWhenNoManifests(stats());
|
|
159
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal subset of the pnpm lockfile v9 structure consumed by this package.
|
|
3
|
+
*
|
|
4
|
+
* @see https://github.com/pnpm/spec/blob/master/lockfile/9.0.md
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface PnpmImporterDependency {
|
|
8
|
+
specifier: string;
|
|
9
|
+
version: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface ProjectSnapshot {
|
|
13
|
+
dependencies?: Record<string, PnpmImporterDependency>;
|
|
14
|
+
devDependencies?: Record<string, PnpmImporterDependency>;
|
|
15
|
+
optionalDependencies?: Record<string, PnpmImporterDependency>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface PackageMeta {
|
|
19
|
+
resolution?: { integrity?: string; tarball?: string };
|
|
20
|
+
engines?: Record<string, string>;
|
|
21
|
+
peerDependencies?: Record<string, string>;
|
|
22
|
+
hasBin?: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface PackageSnapshot {
|
|
26
|
+
dependencies?: Record<string, string>;
|
|
27
|
+
optionalDependencies?: Record<string, string>;
|
|
28
|
+
transitivePeerDependencies?: string[];
|
|
29
|
+
optional?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface PnpmLockSettings {
|
|
33
|
+
autoInstallPeers?: boolean;
|
|
34
|
+
dedupePeers?: boolean;
|
|
35
|
+
excludeLinksFromLockfile?: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface PnpmLockFile {
|
|
39
|
+
lockfileVersion: string;
|
|
40
|
+
settings?: PnpmLockSettings;
|
|
41
|
+
importers?: Record<string, ProjectSnapshot>;
|
|
42
|
+
packages?: Record<string, PackageMeta>;
|
|
43
|
+
snapshots?: Record<string, PackageSnapshot>;
|
|
44
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { parse } from "yaml";
|
|
3
|
+
import type { PnpmLockFile } from "./pnpmLockTypes.ts";
|
|
4
|
+
|
|
5
|
+
export const readPnpmLock = (filepath: string): PnpmLockFile => {
|
|
6
|
+
return parse(readFileSync(filepath, "utf8")) as PnpmLockFile;
|
|
7
|
+
};
|