cli: improve v2 lockfile parsing to split out ranges

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2022-09-04 23:17:24 +02:00
parent 2ee25a47c5
commit d66b398840
2 changed files with 13 additions and 4 deletions
@@ -170,7 +170,7 @@ a@^1:
integrity: sha512-xyz
resolved: "https://my-registry/a-1.0.01.tgz#abc123"
b@2.0.x:
"b@2.0.x, b@^2.0.1":
version: 2.0.1
b@^2:
@@ -185,7 +185,7 @@ a@^1:
integrity: sha512-xyz
resolved: "https://my-registry/a-1.0.01.tgz#abc123"
b@2.0.x:
"b@2.0.x, b@^2.0.1":
version: 2.0.1
b@^2:
@@ -206,6 +206,7 @@ describe('New Lockfile', () => {
expect(lockfile.get('a')).toEqual([{ range: '^1', version: '1.0.1' }]);
expect(lockfile.get('b')).toEqual([
{ range: '2.0.x', version: '2.0.1' },
{ range: '^2.0.1', version: '2.0.1' },
{ range: '^2', version: '2.0.0' },
]);
expect(lockfile.toString()).toBe(mockANew);
+10 -2
View File
@@ -122,7 +122,7 @@ export class Lockfile {
for (const [key, value] of Object.entries(data)) {
if (SPECIAL_OBJECT_KEYS.includes(key)) continue;
const [, name, range] = ENTRY_PATTERN.exec(key) ?? [];
const [, name, ranges] = ENTRY_PATTERN.exec(key) ?? [];
if (!name) {
throw new Error(`Failed to parse yarn.lock entry '${key}'`);
}
@@ -132,7 +132,15 @@ export class Lockfile {
queries = [];
packages.set(name, queries);
}
queries.push({ range, version: value.version });
for (let range of ranges.split(/\s*,\s*/)) {
if (range.startsWith(`${name}@`)) {
range = range.slice(`${name}@`.length);
}
if (range.startsWith('npm:')) {
range = range.slice('npm:'.length);
}
queries.push({ range, version: value.version });
}
}
return new Lockfile(path, packages, data, legacy);