diff --git a/.changeset/strong-poets-juggle.md b/.changeset/strong-poets-juggle.md new file mode 100644 index 0000000000..1f78857bdd --- /dev/null +++ b/.changeset/strong-poets-juggle.md @@ -0,0 +1,6 @@ +--- +"@pnpm/dependency-path": patch +"pnpm": patch +--- + +Directories inside the virtual store should not contain the ( or ) chars. This is to fix issues with storybook and the new v6 `pnpm-lock.yaml` lockfile format [#5976](https://github.com/pnpm/pnpm/issues/5976). diff --git a/packages/dependency-path/src/index.ts b/packages/dependency-path/src/index.ts index a777a52cbd..ad1a9c55d1 100644 --- a/packages/dependency-path/src/index.ts +++ b/packages/dependency-path/src/index.ts @@ -143,7 +143,12 @@ export function parse (dependencyPath: string) { } export function depPathToFilename (depPath: string) { - const filename = depPathToFilenameUnescaped(depPath).replace(/[\\/:*?"<>|]/g, '+') + let filename = depPathToFilenameUnescaped(depPath).replace(/[\\/:*?"<>|]/g, '+') + if (filename.includes('(')) { + filename = filename + .replace(/(\)\()|\(/g, '_') + .replace(/\)$/, '') + } if (filename.length > 120 || filename !== filename.toLowerCase() && !filename.startsWith('file+')) { return `${filename.substring(0, 50)}_${createBase32Hash(filename)}` } diff --git a/packages/dependency-path/test/index.ts b/packages/dependency-path/test/index.ts index 94554798d5..d7aa74d620 100644 --- a/packages/dependency-path/test/index.ts +++ b/packages/dependency-path/test/index.ts @@ -154,6 +154,7 @@ test('depPathToFilename()', () => { expect(depPathToFilename('/@foo/bar/1.0.0')).toBe('@foo+bar@1.0.0') expect(depPathToFilename('github.com/something/foo/0000?v=1')).toBe('github.com+something+foo@0000+v=1') expect(depPathToFilename('\\//:*?"<>|')).toBe('++@+++++++') + expect(depPathToFilename('/foo/1.0.0(react@16.0.0)(react-dom@16.0.0)')).toBe('foo@1.0.0_react@16.0.0_react-dom@16.0.0') const filename = depPathToFilename('file:test/foo-1.0.0.tgz_foo@2.0.0') expect(filename).toBe('file+test+foo-1.0.0.tgz_foo@2.0.0')