From 0e26acb0fb9612eba51d044fa58e88937ac7cd8a Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Fri, 24 Mar 2023 15:11:23 +0200 Subject: [PATCH] refactor: dependency-path --- .changeset/new-eyes-fail.md | 5 +++++ packages/dependency-path/src/index.ts | 17 +---------------- .../core/test/install/autoInstallPeers.ts | 2 +- .../test/install/defaultPeerDependencies.ts | 2 +- .../core/test/install/multipleImporters.ts | 2 +- .../core/test/install/peerDependencies.ts | 10 +++++----- .../resolve-dependencies/src/resolvePeers.ts | 4 ++-- pnpm/test/install/hooks.ts | 2 +- pnpm/test/monorepo/dedupePeers.test.ts | 6 +++--- 9 files changed, 20 insertions(+), 30 deletions(-) create mode 100644 .changeset/new-eyes-fail.md diff --git a/.changeset/new-eyes-fail.md b/.changeset/new-eyes-fail.md new file mode 100644 index 0000000000..0223cd5429 --- /dev/null +++ b/.changeset/new-eyes-fail.md @@ -0,0 +1,5 @@ +--- +"@pnpm/dependency-path": major +--- + +Rename createPeersFolderSuffixNewFormat to createPeersFolderSuffix. diff --git a/packages/dependency-path/src/index.ts b/packages/dependency-path/src/index.ts index 9399f91d0f..0e24dc134e 100644 --- a/packages/dependency-path/src/index.ts +++ b/packages/dependency-path/src/index.ts @@ -172,22 +172,7 @@ function depPathToFilenameUnescaped (depPath: string) { return depPath.replace(':', '+') } -export function createPeersFolderSuffixNewFormat (peers: Array<{ name: string, version: string }>): string { +export function createPeersFolderSuffix (peers: Array<{ name: string, version: string }>): string { const folderName = peers.map(({ name, version }) => `${name}@${version}`).sort().join(')(') return `(${folderName})` } - -export function createPeersFolderSuffix (peers: Array<{ name: string, version: string }>): string { - const folderName = peers.map(({ name, version }) => `${name.replace('/', '+')}@${version}`).sort().join('+') - - // We don't want the folder name to get too long. - // Otherwise, an ENAMETOOLONG error might happen. - // see: https://github.com/pnpm/pnpm/issues/977 - // - // A bigger limit might be fine but the base32 encoded md5 hash will be 26 symbols, - // so for consistency's sake, we go with 26. - if (folderName.length > 26) { - return `_${createBase32Hash(folderName)}` - } - return `_${folderName}` -} diff --git a/pkg-manager/core/test/install/autoInstallPeers.ts b/pkg-manager/core/test/install/autoInstallPeers.ts index e23380d46f..7e6881973e 100644 --- a/pkg-manager/core/test/install/autoInstallPeers.ts +++ b/pkg-manager/core/test/install/autoInstallPeers.ts @@ -4,7 +4,7 @@ import { addDependenciesToPackage, install, mutateModules, mutateModulesInSingle import { prepareEmpty, preparePackages } from '@pnpm/prepare' import { addDistTag, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock' import rimraf from '@zkochan/rimraf' -import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix } from '@pnpm/dependency-path' +import { createPeersFolderSuffix } from '@pnpm/dependency-path' import { testDefaults } from '../utils' test('auto install non-optional peer dependencies', async () => { diff --git a/pkg-manager/core/test/install/defaultPeerDependencies.ts b/pkg-manager/core/test/install/defaultPeerDependencies.ts index aa164a66ea..85cbd2c7c3 100644 --- a/pkg-manager/core/test/install/defaultPeerDependencies.ts +++ b/pkg-manager/core/test/install/defaultPeerDependencies.ts @@ -3,7 +3,7 @@ import { prepareEmpty } from '@pnpm/prepare' import { addDistTag } from '@pnpm/registry-mock' import { addDependenciesToPackage } from '@pnpm/core' import deepRequireCwd from 'deep-require-cwd' -import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix } from '@pnpm/dependency-path' +import { createPeersFolderSuffix } from '@pnpm/dependency-path' import exists from 'path-exists' import { testDefaults } from '../utils' diff --git a/pkg-manager/core/test/install/multipleImporters.ts b/pkg-manager/core/test/install/multipleImporters.ts index 9724709ece..82e1940034 100644 --- a/pkg-manager/core/test/install/multipleImporters.ts +++ b/pkg-manager/core/test/install/multipleImporters.ts @@ -12,7 +12,7 @@ import { mutateModulesInSingleProject, } from '@pnpm/core' import rimraf from '@zkochan/rimraf' -import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix } from '@pnpm/dependency-path' +import { createPeersFolderSuffix } from '@pnpm/dependency-path' import loadJsonFile from 'load-json-file' import exists from 'path-exists' import pick from 'ramda/src/pick' diff --git a/pkg-manager/core/test/install/peerDependencies.ts b/pkg-manager/core/test/install/peerDependencies.ts index 42a71b8b7d..12504ed01b 100644 --- a/pkg-manager/core/test/install/peerDependencies.ts +++ b/pkg-manager/core/test/install/peerDependencies.ts @@ -19,7 +19,7 @@ import rimraf from '@zkochan/rimraf' import exists from 'path-exists' import sinon from 'sinon' import deepRequireCwd from 'deep-require-cwd' -import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix, depPathToFilename } from '@pnpm/dependency-path' +import { createPeersFolderSuffix, depPathToFilename } from '@pnpm/dependency-path' import { testDefaults } from '../utils' const f = fixtures(__dirname) @@ -551,7 +551,7 @@ test('peer dependencies are linked when running one named installation', async ( const pkgVariation1 = path.join( 'node_modules/.pnpm', - depPathToFilename('/@pnpm.e2e/abc/1.0.0' + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])), + depPathToFilename(`/@pnpm.e2e/abc/1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`), 'node_modules' ) await okFile(path.join(pkgVariation1, '@pnpm.e2e/abc')) @@ -562,7 +562,7 @@ test('peer dependencies are linked when running one named installation', async ( const pkgVariation2 = path.join( 'node_modules/.pnpm', - depPathToFilename('/@pnpm.e2e/abc/1.0.0' + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])), + depPathToFilename(`/@pnpm.e2e/abc/1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`), 'node_modules' ) await okFile(path.join(pkgVariation2, '@pnpm.e2e/abc')) @@ -590,7 +590,7 @@ test('peer dependencies are linked when running two separate named installations const pkgVariation1 = path.join( 'node_modules/.pnpm', - depPathToFilename('/@pnpm.e2e/abc/1.0.0' + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])), + depPathToFilename(`/@pnpm.e2e/abc/1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`), 'node_modules' ) await okFile(path.join(pkgVariation1, '@pnpm.e2e/abc')) @@ -601,7 +601,7 @@ test('peer dependencies are linked when running two separate named installations const pkgVariation2 = path.join( 'node_modules/.pnpm', - depPathToFilename('/@pnpm.e2e/abc/1.0.0' + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '2.0.0' }])), + depPathToFilename(`/@pnpm.e2e/abc/1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '2.0.0' }])}`), 'node_modules' ) await okFile(path.join(pkgVariation2, '@pnpm.e2e/abc')) diff --git a/pkg-manager/resolve-dependencies/src/resolvePeers.ts b/pkg-manager/resolve-dependencies/src/resolvePeers.ts index 527b0cae9f..94e5143308 100644 --- a/pkg-manager/resolve-dependencies/src/resolvePeers.ts +++ b/pkg-manager/resolve-dependencies/src/resolvePeers.ts @@ -7,7 +7,7 @@ import type { PeerDependencyIssues, PeerDependencyIssuesByProjects, } from '@pnpm/types' -import { depPathToFilename, createPeersFolderSuffixNewFormat } from '@pnpm/dependency-path' +import { depPathToFilename, createPeersFolderSuffix } from '@pnpm/dependency-path' import isEmpty from 'ramda/src/isEmpty' import mapValues from 'ramda/src/map' import pick from 'ramda/src/pick' @@ -320,7 +320,7 @@ function resolvePeersOfNode ( if (isEmpty(allResolvedPeers)) { depPath = resolvedPackage.depPath } else { - const peersFolderSuffix = createPeersFolderSuffixNewFormat( + const peersFolderSuffix = createPeersFolderSuffix( Object.entries(allResolvedPeers) .map(([alias, nodeId]) => { if (nodeId.startsWith('link:')) { diff --git a/pnpm/test/install/hooks.ts b/pnpm/test/install/hooks.ts index 6b0aef4923..5fc81722b3 100644 --- a/pnpm/test/install/hooks.ts +++ b/pnpm/test/install/hooks.ts @@ -2,7 +2,7 @@ import { promises as fs } from 'fs' import path from 'path' import { type Lockfile } from '@pnpm/lockfile-types' import { prepare, preparePackages } from '@pnpm/prepare' -import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix } from '@pnpm/dependency-path' +import { createPeersFolderSuffix } from '@pnpm/dependency-path' import readYamlFile from 'read-yaml-file' import loadJsonFile from 'load-json-file' import writeYamlFile from 'write-yaml-file' diff --git a/pnpm/test/monorepo/dedupePeers.test.ts b/pnpm/test/monorepo/dedupePeers.test.ts index dd40a1faf9..5bd5b291fd 100644 --- a/pnpm/test/monorepo/dedupePeers.test.ts +++ b/pnpm/test/monorepo/dedupePeers.test.ts @@ -5,7 +5,7 @@ import { type Lockfile } from '@pnpm/lockfile-types' import { preparePackages } from '@pnpm/prepare' import { addDistTag } from '@pnpm/registry-mock' import { sync as readYamlFile } from 'read-yaml-file' -import { createPeersFolderSuffixNewFormat } from '@pnpm/dependency-path' +import { createPeersFolderSuffix } from '@pnpm/dependency-path' import { sync as loadJsonFile } from 'load-json-file' import { sync as writeYamlFile } from 'write-yaml-file' import { execPnpm } from '../utils' @@ -44,8 +44,8 @@ auto-install-peers=false`, 'utf8') const lockfile = readYamlFile(path.resolve(WANTED_LOCKFILE)) const depPaths = Object.keys(lockfile.packages ?? {}) expect(depPaths.length).toBe(8) - expect(depPaths).toContain(`/@pnpm.e2e/abc@1.0.0${createPeersFolderSuffixNewFormat([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`) - expect(depPaths).toContain(`/@pnpm.e2e/abc-parent-with-ab@1.0.0${createPeersFolderSuffixNewFormat([{ name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`) + expect(depPaths).toContain(`/@pnpm.e2e/abc@1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`) + expect(depPaths).toContain(`/@pnpm.e2e/abc-parent-with-ab@1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`) }) test('partial update in a workspace should work with dedupe-peer-dependents is true', async () => {