diff --git a/.changeset/hot-kiwis-chew.md b/.changeset/hot-kiwis-chew.md new file mode 100644 index 0000000000..f794a57fe4 --- /dev/null +++ b/.changeset/hot-kiwis-chew.md @@ -0,0 +1,5 @@ +--- +"@pnpm/dependency-path": major +--- + +Change the way depPathToFilename is making paths shorter. diff --git a/packages/dependency-path/src/index.ts b/packages/dependency-path/src/index.ts index 775921b08a..19938a5124 100644 --- a/packages/dependency-path/src/index.ts +++ b/packages/dependency-path/src/index.ts @@ -146,6 +146,8 @@ export function parse (dependencyPath: string) { } } +const MAX_LENGTH_WITHOUT_HASH = 120 - 26 - 1 + export function depPathToFilename (depPath: string) { let filename = depPathToFilenameUnescaped(depPath).replace(/[\\/:*?"<>|]/g, '+') if (filename.includes('(')) { @@ -154,7 +156,7 @@ export function depPathToFilename (depPath: string) { .replace(/\)$/, '') } if (filename.length > 120 || filename !== filename.toLowerCase() && !filename.startsWith('file+')) { - return `${filename.substring(0, 50)}_${createBase32Hash(filename)}` + return `${filename.substring(0, MAX_LENGTH_WITHOUT_HASH)}_${createBase32Hash(filename)}` } return filename } diff --git a/packages/dependency-path/test/index.ts b/packages/dependency-path/test/index.ts index da575f8c69..ef1aa3de68 100644 --- a/packages/dependency-path/test/index.ts +++ b/packages/dependency-path/test/index.ts @@ -165,7 +165,7 @@ test('depPathToFilename()', () => { expect(filename).toBe('file+test+foo-1.0.0.tgz_foo@2.0.0') expect(filename).not.toContain(':') - expect(depPathToFilename('abcd/'.repeat(200))).toBe('abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+_e5jega7r3xmarw3h6f277a3any') + expect(depPathToFilename('abcd/'.repeat(200))).toBe('abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abcd+abc_e5jega7r3xmarw3h6f277a3any') expect(depPathToFilename('/JSONSteam/1.0.0')).toBe('JSONSteam@1.0.0_jmswpk4sf667aelr6wp2xd3p54') })