@pnpm/lockfile.fs 1.0.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.
Files changed (48) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +58 -0
  3. package/lib/errors/LockfileBreakingChangeError.d.ts +5 -0
  4. package/lib/errors/LockfileBreakingChangeError.js +12 -0
  5. package/lib/errors/LockfileBreakingChangeError.js.map +1 -0
  6. package/lib/errors/index.d.ts +1 -0
  7. package/lib/errors/index.js +6 -0
  8. package/lib/errors/index.js.map +1 -0
  9. package/lib/existsWantedLockfile.d.ts +6 -0
  10. package/lib/existsWantedLockfile.js +30 -0
  11. package/lib/existsWantedLockfile.js.map +1 -0
  12. package/lib/experiments/InlineSpecifiersLockfile.d.ts +33 -0
  13. package/lib/experiments/InlineSpecifiersLockfile.js +5 -0
  14. package/lib/experiments/InlineSpecifiersLockfile.js.map +1 -0
  15. package/lib/experiments/inlineSpecifiersLockfileConverters.d.ts +7 -0
  16. package/lib/experiments/inlineSpecifiersLockfileConverters.js +237 -0
  17. package/lib/experiments/inlineSpecifiersLockfileConverters.js.map +1 -0
  18. package/lib/getLockfileImporterId.d.ts +2 -0
  19. package/lib/getLockfileImporterId.js +13 -0
  20. package/lib/getLockfileImporterId.js.map +1 -0
  21. package/lib/gitBranchLockfile.d.ts +2 -0
  22. package/lib/gitBranchLockfile.js +23 -0
  23. package/lib/gitBranchLockfile.js.map +1 -0
  24. package/lib/gitMergeFile.d.ts +3 -0
  25. package/lib/gitMergeFile.js +55 -0
  26. package/lib/gitMergeFile.js.map +1 -0
  27. package/lib/index.d.ts +6 -0
  28. package/lib/index.js +31 -0
  29. package/lib/index.js.map +1 -0
  30. package/lib/lockfileFormatConverters.d.ts +7 -0
  31. package/lib/lockfileFormatConverters.js +356 -0
  32. package/lib/lockfileFormatConverters.js.map +1 -0
  33. package/lib/lockfileName.d.ts +5 -0
  34. package/lib/lockfileName.js +23 -0
  35. package/lib/lockfileName.js.map +1 -0
  36. package/lib/logger.d.ts +1 -0
  37. package/lib/logger.js +6 -0
  38. package/lib/logger.js.map +1 -0
  39. package/lib/read.d.ts +27 -0
  40. package/lib/read.js +158 -0
  41. package/lib/read.js.map +1 -0
  42. package/lib/sortLockfileKeys.d.ts +2 -0
  43. package/lib/sortLockfileKeys.js +104 -0
  44. package/lib/sortLockfileKeys.js.map +1 -0
  45. package/lib/write.d.ts +15 -0
  46. package/lib/write.js +110 -0
  47. package/lib/write.js.map +1 -0
  48. package/package.json +72 -0
@@ -0,0 +1,7 @@
1
+ import { type Lockfile, type LockfileFile, type LockfileFileV9 } from '@pnpm/lockfile.types';
2
+ export interface NormalizeLockfileOpts {
3
+ forceSharedFormat: boolean;
4
+ }
5
+ export declare function convertToLockfileFile(lockfile: Lockfile, opts: NormalizeLockfileOpts): LockfileFile;
6
+ export declare function convertToLockfileObject(lockfile: LockfileFile | LockfileFileV9): Lockfile;
7
+ export declare function convertLockfileV9ToLockfileObject(lockfile: LockfileFileV9): Lockfile;
@@ -0,0 +1,356 @@
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.convertLockfileV9ToLockfileObject = exports.convertToLockfileObject = exports.convertToLockfileFile = void 0;
7
+ const dependency_path_1 = require("@pnpm/dependency-path");
8
+ const git_resolver_1 = require("@pnpm/git-resolver");
9
+ const types_1 = require("@pnpm/types");
10
+ const equals_1 = __importDefault(require("ramda/src/equals"));
11
+ const isEmpty_1 = __importDefault(require("ramda/src/isEmpty"));
12
+ const map_1 = __importDefault(require("ramda/src/map"));
13
+ const omit_1 = __importDefault(require("ramda/src/omit"));
14
+ const pickBy_1 = __importDefault(require("ramda/src/pickBy"));
15
+ const pick_1 = __importDefault(require("ramda/src/pick"));
16
+ const constants_1 = require("@pnpm/constants");
17
+ function convertToLockfileFile(lockfile, opts) {
18
+ const packages = {};
19
+ const snapshots = {};
20
+ for (const [depPath, pkg] of Object.entries(lockfile.packages ?? {})) {
21
+ snapshots[depPath] = (0, pick_1.default)([
22
+ 'dependencies',
23
+ 'optionalDependencies',
24
+ 'transitivePeerDependencies',
25
+ 'optional',
26
+ 'id',
27
+ ], pkg);
28
+ const pkgId = (0, dependency_path_1.removeSuffix)(depPath);
29
+ if (!packages[pkgId]) {
30
+ packages[pkgId] = (0, pick_1.default)([
31
+ 'bundledDependencies',
32
+ 'cpu',
33
+ 'deprecated',
34
+ 'engines',
35
+ 'hasBin',
36
+ 'libc',
37
+ 'name',
38
+ 'os',
39
+ 'peerDependencies',
40
+ 'peerDependenciesMeta',
41
+ 'resolution',
42
+ 'version',
43
+ ], pkg);
44
+ }
45
+ }
46
+ const newLockfile = {
47
+ ...lockfile,
48
+ snapshots,
49
+ packages,
50
+ lockfileVersion: constants_1.LOCKFILE_VERSION,
51
+ importers: mapValues(lockfile.importers, convertProjectSnapshotToInlineSpecifiersFormat),
52
+ };
53
+ if (newLockfile.settings?.peersSuffixMaxLength === 1000) {
54
+ newLockfile.settings = (0, omit_1.default)(['peersSuffixMaxLength'], newLockfile.settings);
55
+ }
56
+ return normalizeLockfile(newLockfile, opts);
57
+ }
58
+ exports.convertToLockfileFile = convertToLockfileFile;
59
+ function normalizeLockfile(lockfile, opts) {
60
+ let lockfileToSave;
61
+ if (!opts.forceSharedFormat && (0, equals_1.default)(Object.keys(lockfile.importers ?? {}), ['.'])) {
62
+ lockfileToSave = {
63
+ ...lockfile,
64
+ ...lockfile.importers?.['.'],
65
+ };
66
+ delete lockfileToSave.importers;
67
+ for (const depType of types_1.DEPENDENCIES_FIELDS) {
68
+ if ((0, isEmpty_1.default)(lockfileToSave[depType])) {
69
+ delete lockfileToSave[depType];
70
+ }
71
+ }
72
+ if ((0, isEmpty_1.default)(lockfileToSave.packages) || (lockfileToSave.packages == null)) {
73
+ delete lockfileToSave.packages;
74
+ }
75
+ if ((0, isEmpty_1.default)(lockfileToSave.snapshots) || (lockfileToSave.snapshots == null)) {
76
+ delete lockfileToSave.snapshots;
77
+ }
78
+ }
79
+ else {
80
+ lockfileToSave = {
81
+ ...lockfile,
82
+ importers: (0, map_1.default)((importer) => {
83
+ const normalizedImporter = {};
84
+ if (importer.dependenciesMeta != null && !(0, isEmpty_1.default)(importer.dependenciesMeta)) {
85
+ normalizedImporter.dependenciesMeta = importer.dependenciesMeta;
86
+ }
87
+ for (const depType of types_1.DEPENDENCIES_FIELDS) {
88
+ if (!(0, isEmpty_1.default)(importer[depType] ?? {})) {
89
+ normalizedImporter[depType] = importer[depType];
90
+ }
91
+ }
92
+ if (importer.publishDirectory) {
93
+ normalizedImporter.publishDirectory = importer.publishDirectory;
94
+ }
95
+ return normalizedImporter;
96
+ }, lockfile.importers ?? {}),
97
+ };
98
+ if ((0, isEmpty_1.default)(lockfileToSave.packages) || (lockfileToSave.packages == null)) {
99
+ delete lockfileToSave.packages;
100
+ }
101
+ if ((0, isEmpty_1.default)(lockfileToSave.snapshots) || (lockfileToSave.snapshots == null)) {
102
+ delete lockfileToSave.snapshots;
103
+ }
104
+ }
105
+ if (lockfileToSave.time) {
106
+ lockfileToSave.time = pruneTimeInLockfileV6(lockfileToSave.time, lockfile.importers ?? {});
107
+ }
108
+ if ((lockfileToSave.catalogs != null) && (0, isEmpty_1.default)(lockfileToSave.catalogs)) {
109
+ delete lockfileToSave.catalogs;
110
+ }
111
+ if ((lockfileToSave.overrides != null) && (0, isEmpty_1.default)(lockfileToSave.overrides)) {
112
+ delete lockfileToSave.overrides;
113
+ }
114
+ if ((lockfileToSave.patchedDependencies != null) && (0, isEmpty_1.default)(lockfileToSave.patchedDependencies)) {
115
+ delete lockfileToSave.patchedDependencies;
116
+ }
117
+ if (!lockfileToSave.packageExtensionsChecksum) {
118
+ delete lockfileToSave.packageExtensionsChecksum;
119
+ }
120
+ if (!lockfileToSave.ignoredOptionalDependencies?.length) {
121
+ delete lockfileToSave.ignoredOptionalDependencies;
122
+ }
123
+ if (!lockfileToSave.pnpmfileChecksum) {
124
+ delete lockfileToSave.pnpmfileChecksum;
125
+ }
126
+ return lockfileToSave;
127
+ }
128
+ function pruneTimeInLockfileV6(time, importers) {
129
+ const rootDepPaths = new Set();
130
+ for (const importer of Object.values(importers)) {
131
+ for (const depType of types_1.DEPENDENCIES_FIELDS) {
132
+ for (const [depName, ref] of Object.entries(importer[depType] ?? {})) {
133
+ const suffixStart = ref.version.indexOf('(');
134
+ const refWithoutPeerSuffix = suffixStart === -1 ? ref.version : ref.version.slice(0, suffixStart);
135
+ const depPath = refToRelative(refWithoutPeerSuffix, depName);
136
+ if (!depPath)
137
+ continue;
138
+ rootDepPaths.add(depPath);
139
+ }
140
+ }
141
+ }
142
+ return (0, pickBy_1.default)((_, depPath) => rootDepPaths.has(depPath), time);
143
+ }
144
+ function refToRelative(reference, pkgName) {
145
+ if (reference.startsWith('link:')) {
146
+ return null;
147
+ }
148
+ if (reference.startsWith('file:')) {
149
+ return reference;
150
+ }
151
+ if (!reference.includes('/') || !reference.replace(/(\([^)]+\))+$/, '').includes('/')) {
152
+ return `/${pkgName}@${reference}`;
153
+ }
154
+ return reference;
155
+ }
156
+ /**
157
+ * Reverts changes from the "forceSharedFormat" write option if necessary.
158
+ */
159
+ function convertFromLockfileFileMutable(lockfileFile) {
160
+ if (typeof lockfileFile?.['importers'] === 'undefined') {
161
+ lockfileFile.importers = {
162
+ '.': {
163
+ dependenciesMeta: lockfileFile['dependenciesMeta'],
164
+ publishDirectory: lockfileFile['publishDirectory'],
165
+ },
166
+ };
167
+ for (const depType of types_1.DEPENDENCIES_FIELDS) {
168
+ if (lockfileFile[depType] != null) {
169
+ lockfileFile.importers['.'][depType] = lockfileFile[depType];
170
+ delete lockfileFile[depType];
171
+ }
172
+ }
173
+ }
174
+ return lockfileFile;
175
+ }
176
+ function convertToLockfileObject(lockfile) {
177
+ if (lockfile.snapshots) {
178
+ return convertLockfileV9ToLockfileObject(lockfile);
179
+ }
180
+ convertPkgIds(lockfile);
181
+ const { importers, ...rest } = convertFromLockfileFileMutable(lockfile);
182
+ const newLockfile = {
183
+ ...rest,
184
+ importers: mapValues(importers ?? {}, revertProjectSnapshot),
185
+ };
186
+ return newLockfile;
187
+ }
188
+ exports.convertToLockfileObject = convertToLockfileObject;
189
+ function convertPkgIds(lockfile) {
190
+ const oldIdToNewId = {};
191
+ if (lockfile.packages == null || (0, isEmpty_1.default)(lockfile.packages))
192
+ return;
193
+ for (const [pkgId, pkg] of Object.entries(lockfile.packages ?? {})) {
194
+ if (pkg.name) {
195
+ const { id, peersSuffix } = (0, dependency_path_1.parseDepPath)(pkgId);
196
+ let newId = `${pkg.name}@`;
197
+ if ('tarball' in pkg.resolution) {
198
+ newId += pkg.resolution.tarball;
199
+ if (pkg.resolution.path) {
200
+ newId += `#path:${pkg.resolution.path}`;
201
+ }
202
+ }
203
+ else if ('repo' in pkg.resolution) {
204
+ newId += (0, git_resolver_1.createGitHostedPkgId)(pkg.resolution);
205
+ }
206
+ else if ('directory' in pkg.resolution) {
207
+ newId += id;
208
+ }
209
+ else {
210
+ continue;
211
+ }
212
+ oldIdToNewId[pkgId] = `${newId}${peersSuffix}`;
213
+ if (id !== pkgId) {
214
+ oldIdToNewId[id] = newId;
215
+ }
216
+ }
217
+ else {
218
+ const { id, peersSuffix } = (0, dependency_path_1.parseDepPath)(pkgId);
219
+ const newId = id.substring(1);
220
+ oldIdToNewId[pkgId] = `${newId}${peersSuffix}`;
221
+ if (id !== pkgId) {
222
+ oldIdToNewId[id] = newId;
223
+ }
224
+ }
225
+ }
226
+ const newLockfilePackages = {};
227
+ for (const [pkgId, pkg] of Object.entries(lockfile.packages ?? {})) {
228
+ if (oldIdToNewId[pkgId]) {
229
+ if (pkg.id) {
230
+ pkg.id = oldIdToNewId[pkg.id];
231
+ }
232
+ newLockfilePackages[oldIdToNewId[pkgId]] = pkg;
233
+ }
234
+ else {
235
+ newLockfilePackages[pkgId] = pkg;
236
+ }
237
+ for (const depType of ['dependencies', 'optionalDependencies']) {
238
+ for (const [alias, depPath] of Object.entries(pkg[depType] ?? {})) {
239
+ if (oldIdToNewId[depPath]) {
240
+ if (oldIdToNewId[depPath].startsWith(`${alias}@`)) {
241
+ pkg[depType][alias] = oldIdToNewId[depPath].substring(alias.length + 1);
242
+ }
243
+ else {
244
+ pkg[depType][alias] = oldIdToNewId[depPath];
245
+ }
246
+ }
247
+ }
248
+ }
249
+ }
250
+ lockfile.packages = newLockfilePackages;
251
+ if ((lockfile.dependencies != null || lockfile.devDependencies != null || lockfile.optionalDependencies != null) && !lockfile.importers?.['.']) {
252
+ lockfile.importers = lockfile.importers ?? {};
253
+ lockfile.importers['.'] = {
254
+ dependencies: lockfile.dependencies,
255
+ devDependencies: lockfile.devDependencies,
256
+ optionalDependencies: lockfile.optionalDependencies,
257
+ };
258
+ delete lockfile.dependencies;
259
+ delete lockfile.devDependencies;
260
+ delete lockfile.optionalDependencies;
261
+ }
262
+ for (const importer of Object.values(lockfile.importers ?? {})) {
263
+ for (const depType of ['dependencies', 'optionalDependencies', 'devDependencies']) {
264
+ for (const [alias, { version }] of Object.entries(importer[depType] ?? {})) {
265
+ if (oldIdToNewId[version]) {
266
+ if (oldIdToNewId[version].startsWith(`${alias}@`)) {
267
+ importer[depType][alias].version = oldIdToNewId[version].substring(alias.length + 1);
268
+ }
269
+ else {
270
+ importer[depType][alias].version = oldIdToNewId[version];
271
+ }
272
+ }
273
+ }
274
+ }
275
+ }
276
+ for (const depType of ['dependencies', 'optionalDependencies', 'devDependencies']) {
277
+ for (const [alias, { version }] of Object.entries(lockfile[depType] ?? {})) {
278
+ if (oldIdToNewId[version]) {
279
+ lockfile[depType][alias].version = oldIdToNewId[version];
280
+ }
281
+ }
282
+ }
283
+ }
284
+ function convertLockfileV9ToLockfileObject(lockfile) {
285
+ const { importers, ...rest } = convertFromLockfileFileMutable(lockfile);
286
+ const packages = {};
287
+ for (const [depPath, pkg] of Object.entries(lockfile.snapshots ?? {})) {
288
+ const pkgId = (0, dependency_path_1.removeSuffix)(depPath);
289
+ packages[depPath] = Object.assign(pkg, lockfile.packages?.[pkgId]);
290
+ }
291
+ return {
292
+ ...(0, omit_1.default)(['snapshots'], rest),
293
+ packages,
294
+ importers: mapValues(importers ?? {}, revertProjectSnapshot),
295
+ };
296
+ }
297
+ exports.convertLockfileV9ToLockfileObject = convertLockfileV9ToLockfileObject;
298
+ function convertProjectSnapshotToInlineSpecifiersFormat(projectSnapshot) {
299
+ const { specifiers, ...rest } = projectSnapshot;
300
+ if (specifiers == null)
301
+ return projectSnapshot;
302
+ const convertBlock = (block) => block != null
303
+ ? convertResolvedDependenciesToInlineSpecifiersFormat(block, { specifiers })
304
+ : block;
305
+ return {
306
+ ...rest,
307
+ dependencies: convertBlock(projectSnapshot.dependencies ?? {}),
308
+ optionalDependencies: convertBlock(projectSnapshot.optionalDependencies ?? {}),
309
+ devDependencies: convertBlock(projectSnapshot.devDependencies ?? {}),
310
+ };
311
+ }
312
+ function convertResolvedDependenciesToInlineSpecifiersFormat(resolvedDependencies, { specifiers }) {
313
+ return mapValues(resolvedDependencies, (version, depName) => ({
314
+ specifier: specifiers[depName],
315
+ version,
316
+ }));
317
+ }
318
+ function revertProjectSnapshot(from) {
319
+ const specifiers = {};
320
+ function moveSpecifiers(from) {
321
+ const resolvedDependencies = {};
322
+ for (const [depName, { specifier, version }] of Object.entries(from)) {
323
+ const existingValue = specifiers[depName];
324
+ if (existingValue != null && existingValue !== specifier) {
325
+ throw new Error(`Project snapshot lists the same dependency more than once with conflicting versions: ${depName}`);
326
+ }
327
+ specifiers[depName] = specifier;
328
+ resolvedDependencies[depName] = version;
329
+ }
330
+ return resolvedDependencies;
331
+ }
332
+ const dependencies = from.dependencies == null
333
+ ? from.dependencies
334
+ : moveSpecifiers(from.dependencies);
335
+ const devDependencies = from.devDependencies == null
336
+ ? from.devDependencies
337
+ : moveSpecifiers(from.devDependencies);
338
+ const optionalDependencies = from.optionalDependencies == null
339
+ ? from.optionalDependencies
340
+ : moveSpecifiers(from.optionalDependencies);
341
+ return {
342
+ ...from,
343
+ specifiers,
344
+ dependencies,
345
+ devDependencies,
346
+ optionalDependencies,
347
+ };
348
+ }
349
+ function mapValues(obj, mapper) {
350
+ const result = {};
351
+ for (const [key, value] of Object.entries(obj)) {
352
+ result[key] = mapper(value, key);
353
+ }
354
+ return result;
355
+ }
356
+ //# sourceMappingURL=lockfileFormatConverters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfileFormatConverters.js","sourceRoot":"","sources":["../src/lockfileFormatConverters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface GetWantedLockfileNameOptions {
2
+ useGitBranchLockfile?: boolean;
3
+ mergeGitBranchLockfiles?: boolean;
4
+ }
5
+ export declare function getWantedLockfileName(opts?: GetWantedLockfileNameOptions): Promise<string>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWantedLockfileName = void 0;
4
+ const constants_1 = require("@pnpm/constants");
5
+ const git_utils_1 = require("@pnpm/git-utils");
6
+ async function getWantedLockfileName(opts = { useGitBranchLockfile: false, mergeGitBranchLockfiles: false }) {
7
+ if (opts.useGitBranchLockfile && !opts.mergeGitBranchLockfiles) {
8
+ const currentBranchName = await (0, git_utils_1.getCurrentBranch)();
9
+ if (currentBranchName) {
10
+ return constants_1.WANTED_LOCKFILE.replace('.yaml', `.${stringifyBranchName(currentBranchName)}.yaml`);
11
+ }
12
+ }
13
+ return constants_1.WANTED_LOCKFILE;
14
+ }
15
+ exports.getWantedLockfileName = getWantedLockfileName;
16
+ /**
17
+ * 1. Git branch name may contains slashes, which is not allowed in filenames
18
+ * 2. Filesystem may be case-insensitive, so we need to convert branch name to lowercase
19
+ */
20
+ function stringifyBranchName(branchName = '') {
21
+ return branchName.replace(/[^a-zA-Z0-9-_.]/g, '!').toLowerCase();
22
+ }
23
+ //# sourceMappingURL=lockfileName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfileName.js","sourceRoot":"","sources":["../src/lockfileName.ts"],"names":[],"mappings":";;;AAAA,+CAAiD;AACjD,+CAAkD;AAO3C,KAAK,UAAU,qBAAqB,CAAE,OAAqC,EAAE,oBAAoB,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE;IAC/I,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/D,MAAM,iBAAiB,GAAG,MAAM,IAAA,4BAAgB,GAAE,CAAA;QAClD,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,2BAAe,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IACD,OAAO,2BAAe,CAAA;AACxB,CAAC;AARD,sDAQC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAE,aAAqB,EAAE;IACnD,OAAO,UAAU,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;AAClE,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const lockfileLogger: import("@pnpm/logger").Logger<unknown>;
package/lib/logger.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lockfileLogger = void 0;
4
+ const logger_1 = require("@pnpm/logger");
5
+ exports.lockfileLogger = (0, logger_1.logger)('lockfile');
6
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAExB,QAAA,cAAc,GAAG,IAAA,eAAM,EAAC,UAAU,CAAC,CAAA"}
package/lib/read.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ import { type Lockfile } from '@pnpm/lockfile.types';
2
+ import { type ProjectId } from '@pnpm/types';
3
+ export declare function readCurrentLockfile(virtualStoreDir: string, opts: {
4
+ wantedVersions?: string[];
5
+ ignoreIncompatible: boolean;
6
+ }): Promise<Lockfile | null>;
7
+ export declare function readWantedLockfileAndAutofixConflicts(pkgPath: string, opts: {
8
+ wantedVersions?: string[];
9
+ ignoreIncompatible: boolean;
10
+ useGitBranchLockfile?: boolean;
11
+ mergeGitBranchLockfiles?: boolean;
12
+ }): Promise<{
13
+ lockfile: Lockfile | null;
14
+ hadConflicts: boolean;
15
+ }>;
16
+ export declare function readWantedLockfile(pkgPath: string, opts: {
17
+ wantedVersions?: string[];
18
+ ignoreIncompatible: boolean;
19
+ useGitBranchLockfile?: boolean;
20
+ mergeGitBranchLockfiles?: boolean;
21
+ }): Promise<Lockfile | null>;
22
+ export declare function createLockfileObject(importerIds: ProjectId[], opts: {
23
+ lockfileVersion: string;
24
+ autoInstallPeers: boolean;
25
+ excludeLinksFromLockfile: boolean;
26
+ peersSuffixMaxLength: number;
27
+ }): Lockfile;
package/lib/read.js ADDED
@@ -0,0 +1,158 @@
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.createLockfileObject = exports.readWantedLockfile = exports.readWantedLockfileAndAutofixConflicts = exports.readCurrentLockfile = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
9
+ const util_1 = __importDefault(require("util"));
10
+ const constants_1 = require("@pnpm/constants");
11
+ const error_1 = require("@pnpm/error");
12
+ const lockfile_merger_1 = require("@pnpm/lockfile.merger");
13
+ const comver_to_semver_1 = __importDefault(require("comver-to-semver"));
14
+ const js_yaml_1 = __importDefault(require("js-yaml"));
15
+ const semver_1 = __importDefault(require("semver"));
16
+ const strip_bom_1 = __importDefault(require("strip-bom"));
17
+ const errors_1 = require("./errors");
18
+ const gitMergeFile_1 = require("./gitMergeFile");
19
+ const logger_1 = require("./logger");
20
+ const lockfileName_1 = require("./lockfileName");
21
+ const gitBranchLockfile_1 = require("./gitBranchLockfile");
22
+ const lockfileFormatConverters_1 = require("./lockfileFormatConverters");
23
+ async function readCurrentLockfile(virtualStoreDir, opts) {
24
+ const lockfilePath = path_1.default.join(virtualStoreDir, 'lock.yaml');
25
+ return (await _read(lockfilePath, virtualStoreDir, opts)).lockfile;
26
+ }
27
+ exports.readCurrentLockfile = readCurrentLockfile;
28
+ async function readWantedLockfileAndAutofixConflicts(pkgPath, opts) {
29
+ return _readWantedLockfile(pkgPath, {
30
+ ...opts,
31
+ autofixMergeConflicts: true,
32
+ });
33
+ }
34
+ exports.readWantedLockfileAndAutofixConflicts = readWantedLockfileAndAutofixConflicts;
35
+ async function readWantedLockfile(pkgPath, opts) {
36
+ return (await _readWantedLockfile(pkgPath, opts)).lockfile;
37
+ }
38
+ exports.readWantedLockfile = readWantedLockfile;
39
+ async function _read(lockfilePath, prefix, // only for logging
40
+ opts) {
41
+ let lockfileRawContent;
42
+ try {
43
+ lockfileRawContent = (0, strip_bom_1.default)(await fs_1.promises.readFile(lockfilePath, 'utf8'));
44
+ }
45
+ catch (err) {
46
+ if (!(util_1.default.types.isNativeError(err) && 'code' in err && err.code === 'ENOENT')) {
47
+ throw err;
48
+ }
49
+ return {
50
+ lockfile: null,
51
+ hadConflicts: false,
52
+ };
53
+ }
54
+ let lockfile;
55
+ let hadConflicts;
56
+ try {
57
+ lockfile = (0, lockfileFormatConverters_1.convertToLockfileObject)(js_yaml_1.default.load(lockfileRawContent)); // eslint-disable-line
58
+ hadConflicts = false;
59
+ }
60
+ catch (err) {
61
+ if (!opts.autofixMergeConflicts || !(0, gitMergeFile_1.isDiff)(lockfileRawContent)) {
62
+ throw new error_1.PnpmError('BROKEN_LOCKFILE', `The lockfile at "${lockfilePath}" is broken: ${err.message}`);
63
+ }
64
+ hadConflicts = true;
65
+ lockfile = (0, gitMergeFile_1.autofixMergeConflicts)(lockfileRawContent);
66
+ logger_1.lockfileLogger.info({
67
+ message: `Merge conflict detected in ${constants_1.WANTED_LOCKFILE} and successfully merged`,
68
+ prefix,
69
+ });
70
+ }
71
+ if (lockfile) {
72
+ const lockfileSemver = (0, comver_to_semver_1.default)((lockfile.lockfileVersion ?? 0).toString());
73
+ if (!opts.wantedVersions ||
74
+ opts.wantedVersions.length === 0 ||
75
+ opts.wantedVersions.some((wantedVersion) => {
76
+ if (semver_1.default.major(lockfileSemver) !== semver_1.default.major((0, comver_to_semver_1.default)(wantedVersion)))
77
+ return false;
78
+ if (lockfile.lockfileVersion !== '6.1' && semver_1.default.gt(lockfileSemver, (0, comver_to_semver_1.default)(wantedVersion))) {
79
+ logger_1.lockfileLogger.warn({
80
+ message: `Your ${constants_1.WANTED_LOCKFILE} was generated by a newer version of pnpm. ` +
81
+ `It is a compatible version but it might get downgraded to version ${wantedVersion}`,
82
+ prefix,
83
+ });
84
+ }
85
+ return true;
86
+ })) {
87
+ return { lockfile, hadConflicts };
88
+ }
89
+ }
90
+ if (opts.ignoreIncompatible) {
91
+ logger_1.lockfileLogger.warn({
92
+ message: `Ignoring not compatible lockfile at ${lockfilePath}`,
93
+ prefix,
94
+ });
95
+ return { lockfile: null, hadConflicts: false };
96
+ }
97
+ throw new errors_1.LockfileBreakingChangeError(lockfilePath);
98
+ }
99
+ function createLockfileObject(importerIds, opts) {
100
+ const importers = importerIds.reduce((acc, importerId) => {
101
+ acc[importerId] = {
102
+ dependencies: {},
103
+ specifiers: {},
104
+ };
105
+ return acc;
106
+ }, {});
107
+ return {
108
+ importers,
109
+ lockfileVersion: opts.lockfileVersion || constants_1.LOCKFILE_VERSION,
110
+ settings: {
111
+ autoInstallPeers: opts.autoInstallPeers,
112
+ excludeLinksFromLockfile: opts.excludeLinksFromLockfile,
113
+ peersSuffixMaxLength: opts.peersSuffixMaxLength,
114
+ },
115
+ };
116
+ }
117
+ exports.createLockfileObject = createLockfileObject;
118
+ async function _readWantedLockfile(pkgPath, opts) {
119
+ const lockfileNames = [constants_1.WANTED_LOCKFILE];
120
+ if (opts.useGitBranchLockfile) {
121
+ const gitBranchLockfileName = await (0, lockfileName_1.getWantedLockfileName)(opts);
122
+ if (gitBranchLockfileName !== constants_1.WANTED_LOCKFILE) {
123
+ lockfileNames.unshift(gitBranchLockfileName);
124
+ }
125
+ }
126
+ let result = { lockfile: null, hadConflicts: false };
127
+ /* eslint-disable no-await-in-loop */
128
+ for (const lockfileName of lockfileNames) {
129
+ result = await _read(path_1.default.join(pkgPath, lockfileName), pkgPath, { ...opts, autofixMergeConflicts: true });
130
+ if (result.lockfile) {
131
+ if (opts.mergeGitBranchLockfiles) {
132
+ result.lockfile = await _mergeGitBranchLockfiles(result.lockfile, pkgPath, pkgPath, opts);
133
+ }
134
+ break;
135
+ }
136
+ }
137
+ /* eslint-enable no-await-in-loop */
138
+ return result;
139
+ }
140
+ async function _mergeGitBranchLockfiles(lockfile, lockfileDir, prefix, opts) {
141
+ if (!lockfile) {
142
+ return lockfile;
143
+ }
144
+ const gitBranchLockfiles = (await _readGitBranchLockfiles(lockfileDir, prefix, opts)).map(({ lockfile }) => lockfile);
145
+ let mergedLockfile = lockfile;
146
+ for (const gitBranchLockfile of gitBranchLockfiles) {
147
+ if (!gitBranchLockfile) {
148
+ continue;
149
+ }
150
+ mergedLockfile = (0, lockfile_merger_1.mergeLockfileChanges)(mergedLockfile, gitBranchLockfile);
151
+ }
152
+ return mergedLockfile;
153
+ }
154
+ async function _readGitBranchLockfiles(lockfileDir, prefix, opts) {
155
+ const files = await (0, gitBranchLockfile_1.getGitBranchLockfileNames)(lockfileDir);
156
+ return Promise.all(files.map((file) => _read(path_1.default.join(lockfileDir, file), prefix, opts)));
157
+ }
158
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type LockfileFileV9 } from '@pnpm/lockfile.types';
2
+ export declare function sortLockfileKeys(lockfile: LockfileFileV9): LockfileFileV9;