From 786eb28c608386b6eaa5f46eb13ed577402ba135 Mon Sep 17 00:00:00 2001 From: Dieter Funk Date: Wed, 2 Oct 2024 15:12:40 +0200 Subject: [PATCH] Add support for single char packages in yarn berry --- src/parseYarnDescriptor.js | 5 +++-- test/parse-yarn-descriptor.spec.js | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/parseYarnDescriptor.js b/src/parseYarnDescriptor.js index bcd542d..ddf850e 100644 --- a/src/parseYarnDescriptor.js +++ b/src/parseYarnDescriptor.js @@ -1,7 +1,7 @@ /** * A regular expression for parsing a yarn berry descriptor. */ -const PARSE_REGEX = /(^@?[^/]+?\/?[^@/]+?)@(?:.*:)*(.+)/; +const PARSE_REGEX = /(?(^@?[^/]+?\/)?[^@/]+?)@(?:.*:)*(?.+)/; /** * @typedef {Object} ParsedDescriptor @@ -39,7 +39,8 @@ function parseYarnDescriptor(descriptor) { if (!result) { throw new Error(`Unable to parse descriptor: ${descriptor}`); } - const [, packageName, version] = result; + + const { packageName, version } = result.groups; return { packageName, version }; } diff --git a/test/parse-yarn-descriptor.spec.js b/test/parse-yarn-descriptor.spec.js index 470b9b0..24b65cf 100644 --- a/test/parse-yarn-descriptor.spec.js +++ b/test/parse-yarn-descriptor.spec.js @@ -29,6 +29,13 @@ describe('parse-yarn-descriptor', () => { }); }); + it('should parse a single char yarn berry descriptor with protocol', () => { + expect(parseYarnDescriptor('q@npm:1.0.0')).toEqual({ + packageName: 'q', + version: '1.0.0', + }); + }); + it('should throw an error if the descriptor is invalid', () => { expect(() => parseYarnDescriptor('invalid')).toThrow(); });