From d89d7a07866a0f8ebfb750f58b4ea4a0497dae49 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sun, 5 Feb 2023 12:35:05 +0200 Subject: [PATCH] fix(dependency-path): parsing a local dep --- .changeset/itchy-baboons-know.md | 5 +++++ packages/dependency-path/src/index.ts | 4 ++++ packages/dependency-path/test/index.ts | 5 +++++ 3 files changed, 14 insertions(+) create mode 100644 .changeset/itchy-baboons-know.md diff --git a/.changeset/itchy-baboons-know.md b/.changeset/itchy-baboons-know.md new file mode 100644 index 0000000000..4377a3bbf2 --- /dev/null +++ b/.changeset/itchy-baboons-know.md @@ -0,0 +1,5 @@ +--- +"@pnpm/dependency-path": patch +--- + +`parse()` should not fail on dependency path pointing to a local dependency. diff --git a/packages/dependency-path/src/index.ts b/packages/dependency-path/src/index.ts index ad1a9c55d1..775921b08a 100644 --- a/packages/dependency-path/src/index.ts +++ b/packages/dependency-path/src/index.ts @@ -105,6 +105,10 @@ export function parse (dependencyPath: string) { const parts = dependencyPath.split('/') if (!_isAbsolute) parts.shift() const host = _isAbsolute ? parts.shift() : undefined + if (parts.length === 0) return { + host, + isAbsolute: _isAbsolute, + } const name = parts[0].startsWith('@') ? `${parts.shift()}/${parts.shift()}` // eslint-disable-line @typescript-eslint/restrict-template-expressions : parts.shift() diff --git a/packages/dependency-path/test/index.ts b/packages/dependency-path/test/index.ts index d7aa74d620..da575f8c69 100644 --- a/packages/dependency-path/test/index.ts +++ b/packages/dependency-path/test/index.ts @@ -99,6 +99,11 @@ test('parse()', () => { }) expect(() => parse('/foo/bar')).toThrow(/\/foo\/bar is an invalid relative dependency path/) + + expect(parse('file:project(foo@1.0.0)')).toStrictEqual({ + host: 'file:project(foo@1.0.0)', + isAbsolute: true, + }) }) test('refToAbsolute()', () => {