feat: loading pnpmfiles automatically from plugins (#9729)

This commit is contained in:
Zoltan Kochan
2025-07-08 22:00:37 +02:00
committed by GitHub
parent a0e1517d3b
commit e2253105d0
9 changed files with 84 additions and 254 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/pnpmfile": major
---
Always expects an array of pnpmfiles.

View File

@@ -0,0 +1,8 @@
---
"@pnpm/cli-utils": minor
"pnpm": minor
---
pnpm will now automatically load the `pnpmfile.cjs` file from any [config dependency](https://pnpm.io/config-dependencies) named `@pnpm/plugin-*` or `pnpm-plugin-*` [#9729](https://github.com/pnpm/pnpm/pull/9729).
The order in which config dependencies are initialized should not matter — they are initialized in alphabetical order. If a specific order is needed, the paths to the `pnpmfile.cjs` files in the config dependencies can be explicitly listed using the `pnpmfile` setting in `pnpm-workspace.yaml`.

View File

@@ -41,6 +41,7 @@
"@pnpm/read-project-manifest": "workspace:*",
"@pnpm/store-connection-manager": "workspace:*",
"@pnpm/types": "workspace:*",
"@pnpm/util.lex-comparator": "catalog:",
"chalk": "catalog:",
"load-json-file": "catalog:"
},

View File

@@ -1,9 +1,11 @@
import path from 'path'
import { packageManager } from '@pnpm/cli-meta'
import { getConfig as _getConfig, type CliOptions, type Config } from '@pnpm/config'
import { formatWarn } from '@pnpm/default-reporter'
import { createOrConnectStoreController } from '@pnpm/store-connection-manager'
import { installConfigDeps } from '@pnpm/config.deps-installer'
import { requireHooks } from '@pnpm/pnpmfile'
import { lexCompare } from '@pnpm/util.lex-comparator'
export async function getConfig (
cliOptions: CliOptions,
@@ -35,7 +37,15 @@ export async function getConfig (
})
}
if (!config.ignorePnpmfile) {
const { hooks, resolvedPnpmfilePaths } = requireHooks(config.lockfileDir ?? config.dir, config)
const pnpmfiles = config.pnpmfile == null ? [] : Array.isArray(config.pnpmfile) ? config.pnpmfile : [config.pnpmfile]
if (config.configDependencies) {
const configModulesDir = path.join(config.lockfileDir ?? config.rootProjectManifestDir, 'node_modules/.pnpm-config')
pnpmfiles.push(...calcPnpmfilePathsOfPluginDeps(configModulesDir, config.configDependencies))
}
const { hooks, resolvedPnpmfilePaths } = requireHooks(config.lockfileDir ?? config.dir, {
globalPnpmfile: config.globalPnpmfile,
pnpmfiles,
})
config.hooks = hooks
config.pnpmfile = resolvedPnpmfilePaths
if (config.hooks?.updateConfig) {
@@ -56,3 +66,11 @@ export async function getConfig (
return config
}
function * calcPnpmfilePathsOfPluginDeps (configModulesDir: string, configDependencies: Record<string, string>): Generator<string> {
for (const configDepName of Object.keys(configDependencies).sort(lexCompare)) {
if (configDepName.startsWith('@pnpm/plugin-') || configDepName.startsWith('pnpm-plugin-')) {
yield path.join(configModulesDir, configDepName, 'pnpmfile.cjs')
}
}
}

View File

@@ -47,7 +47,7 @@ export function requireHooks (
prefix: string,
opts: {
globalPnpmfile?: string
pnpmfile?: string[] | string
pnpmfiles?: string[]
}
): RequireHooksResult {
const pnpmfiles: PnpmfileEntry[] = []
@@ -62,17 +62,10 @@ export function requireHooks (
includeInChecksum: true,
optional: true,
})
if (opts.pnpmfile) {
if (Array.isArray(opts.pnpmfile)) {
for (const pnpmfile of opts.pnpmfile) {
pnpmfiles.push({
path: pnpmfile,
includeInChecksum: true,
})
}
} else {
if (opts.pnpmfiles) {
for (const pnpmfile of opts.pnpmfiles) {
pnpmfiles.push({
path: opts.pnpmfile,
path: pnpmfile,
includeInChecksum: true,
})
}

View File

@@ -30,7 +30,7 @@ test('readPackage hook run fails when returned dependencies is not an object ',
test('filterLog hook combines with the global hook', () => {
const globalPnpmfile = path.join(__dirname, '__fixtures__/globalFilterLog.js')
const pnpmfile = path.join(__dirname, '__fixtures__/filterLog.js')
const { hooks } = requireHooks(__dirname, { globalPnpmfile, pnpmfile: [pnpmfile] })
const { hooks } = requireHooks(__dirname, { globalPnpmfile, pnpmfiles: [pnpmfile] })
expect(hooks.filterLog).toBeDefined()
expect(hooks.filterLog!.length).toBe(2)
@@ -54,22 +54,22 @@ test('calculatePnpmfileChecksum is undefined when pnpmfile does not exist', asyn
test('calculatePnpmfileChecksum resolves to hash string for existing pnpmfile', async () => {
const pnpmfile = path.join(__dirname, '__fixtures__/readPackageNoObject.js')
const { hooks } = requireHooks(__dirname, { pnpmfile: [pnpmfile] })
const { hooks } = requireHooks(__dirname, { pnpmfiles: [pnpmfile] })
expect(typeof await hooks.calculatePnpmfileChecksum?.()).toBe('string')
})
test('calculatePnpmfileChecksum is undefined if pnpmfile even when it exports undefined', async () => {
const pnpmfile = path.join(__dirname, '__fixtures__/undefined.js')
const { hooks } = requireHooks(__dirname, { pnpmfile: [pnpmfile] })
const { hooks } = requireHooks(__dirname, { pnpmfiles: [pnpmfile] })
expect(hooks.calculatePnpmfileChecksum).toBeUndefined()
})
test('updateConfig throws an error if it returns undefined', async () => {
const pnpmfile = path.join(__dirname, '__fixtures__/updateConfigReturnsUndefined.js')
const { hooks } = requireHooks(__dirname, { pnpmfile: [pnpmfile] })
const { hooks } = requireHooks(__dirname, { pnpmfiles: [pnpmfile] })
expect(() => hooks.updateConfig![0]!({})).toThrow('The updateConfig hook returned undefined')
})
test('requireHooks throw an error if one of the specified pnpmfiles does not exist', async () => {
expect(() => requireHooks(__dirname, { pnpmfile: ['does-not-exist.cjs'] })).toThrow('is not found')
expect(() => requireHooks(__dirname, { pnpmfiles: ['does-not-exist.cjs'] })).toThrow('is not found')
})

266
pnpm-lock.yaml generated
View File

@@ -61,8 +61,8 @@ catalogs:
specifier: 0.0.1
version: 0.0.1
'@pnpm/registry-mock':
specifier: 4.5.0
version: 4.5.0
specifier: 4.6.0
version: 4.6.0
'@pnpm/semver-diff':
specifier: ^1.1.0
version: 1.1.0
@@ -801,7 +801,7 @@ importers:
version: link:../packages/logger
'@pnpm/meta-updater':
specifier: 'catalog:'
version: 2.0.6(@types/node@22.15.29)(typanion@3.14.0)
version: 2.0.6(@types/node@18.19.34)(typanion@3.14.0)
'@pnpm/object.key-sorting':
specifier: workspace:*
version: link:../object/key-sorting
@@ -865,7 +865,7 @@ importers:
version: link:../../pkg-manager/modules-yaml
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/types':
specifier: workspace:*
version: link:../../packages/types
@@ -899,7 +899,7 @@ importers:
dependencies:
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/store.cafs':
specifier: workspace:*
version: link:../../store/cafs
@@ -974,7 +974,7 @@ importers:
dependencies:
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/worker':
specifier: workspace:*
version: link:../../worker
@@ -1160,7 +1160,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@types/ramda':
specifier: 'catalog:'
version: 0.29.12
@@ -1263,6 +1263,9 @@ importers:
'@pnpm/types':
specifier: workspace:*
version: link:../../packages/types
'@pnpm/util.lex-comparator':
specifier: 'catalog:'
version: 3.0.2
chalk:
specifier: 'catalog:'
version: 4.1.2
@@ -1648,7 +1651,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/testing.temp-store':
specifier: workspace:*
version: link:../../testing/temp-store
@@ -2284,7 +2287,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/types':
specifier: workspace:*
version: link:../../packages/types
@@ -2570,7 +2573,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -2718,7 +2721,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-ipc-server':
specifier: workspace:*
version: link:../../__utils__/test-ipc-server
@@ -4404,7 +4407,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -4691,7 +4694,7 @@ importers:
version: link:../../pkg-manifest/read-package-json
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/store-path':
specifier: workspace:*
version: link:../../store/store-path
@@ -4964,7 +4967,7 @@ importers:
version: link:../read-projects-context
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/store-path':
specifier: workspace:*
version: link:../../store/store-path
@@ -5315,7 +5318,7 @@ importers:
version: 'link:'
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -5541,7 +5544,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -6145,7 +6148,7 @@ importers:
version: link:../pkg-manifest/read-project-manifest
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/run-npm':
specifier: workspace:*
version: link:../exec/run-npm
@@ -6458,7 +6461,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -6585,7 +6588,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-ipc-server':
specifier: workspace:*
version: link:../../__utils__/test-ipc-server
@@ -7194,7 +7197,7 @@ importers:
version: link:../../pkg-manifest/read-package-json
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -7258,7 +7261,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/workspace.filter-packages-from-dir':
specifier: workspace:*
version: link:../../workspace/filter-packages-from-dir
@@ -7343,7 +7346,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -7697,7 +7700,7 @@ importers:
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@types/archy':
specifier: 'catalog:'
version: 0.0.33
@@ -7951,7 +7954,7 @@ importers:
version: link:../../store/package-store
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 4.5.0(encoding@0.1.13)(typanion@3.14.0)
version: 4.6.0(encoding@0.1.13)(typanion@3.14.0)
'@pnpm/store-controller-types':
specifier: workspace:*
version: link:../../store/store-controller-types
@@ -9797,8 +9800,8 @@ packages:
resolution: {integrity: sha512-UY5ZFl8jTgWpPMp3qwVt1z455gDLGh4aAna7ufqsJP9qhI6lr9scFpnEamjpA51Y3MJMBtnML8KATmH6RY+NHQ==}
engines: {node: '>=18.12'}
'@pnpm/registry-mock@4.5.0':
resolution: {integrity: sha512-xLruwgulp1Q950TJeQmbDyXzH5wIEVM5Wdm2rFHplRLlBbM+9JGaJZpcU0LiqivizD60Ow6cSIZbQ9qxOi9tnQ==}
'@pnpm/registry-mock@4.6.0':
resolution: {integrity: sha512-VX2paPLc1wmv3mDNZiWVF+xqs47M7iLdemKkkvD50eG1kxjXyTjQMy6sfQjPCn/iFrxea1hpyi6FJ5AtROE7sw==}
engines: {node: '>=18.12'}
hasBin: true
@@ -16617,28 +16620,6 @@ snapshots:
- supports-color
- typanion
'@pnpm/cli-utils@1000.1.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)':
dependencies:
'@pnpm/cli-meta': 1000.0.8
'@pnpm/config': 1003.1.1(@pnpm/logger@1001.0.0)
'@pnpm/config.deps-installer': 1000.0.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))
'@pnpm/default-reporter': 1002.0.1(@pnpm/logger@1001.0.0)
'@pnpm/error': 1000.0.2
'@pnpm/logger': 1001.0.0
'@pnpm/manifest-utils': 1001.0.1(@pnpm/logger@1001.0.0)
'@pnpm/package-is-installable': 1000.0.10(@pnpm/logger@1001.0.0)
'@pnpm/pnpmfile': 1001.2.2(@pnpm/logger@1001.0.0)
'@pnpm/read-project-manifest': 1000.0.11
'@pnpm/store-connection-manager': 1002.0.3(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)
'@pnpm/types': 1000.6.0
chalk: 4.1.2
load-json-file: 6.2.0
transitivePeerDependencies:
- '@pnpm/worker'
- domexception
- supports-color
- typanion
'@pnpm/client@1000.0.19(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@18.19.34))(typanion@3.14.0)':
dependencies:
'@pnpm/default-resolver': 1002.0.2(@pnpm/logger@1001.0.0)
@@ -16658,25 +16639,6 @@ snapshots:
- supports-color
- typanion
'@pnpm/client@1000.0.19(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)':
dependencies:
'@pnpm/default-resolver': 1002.0.2(@pnpm/logger@1001.0.0)
'@pnpm/directory-fetcher': 1000.1.7(@pnpm/logger@1001.0.0)
'@pnpm/fetch': 1000.2.2(@pnpm/logger@1001.0.0)
'@pnpm/fetching-types': 1000.1.0
'@pnpm/git-fetcher': 1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)
'@pnpm/network.auth-header': 1000.0.3
'@pnpm/resolver-base': 1003.0.1
'@pnpm/tarball-fetcher': 1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)
'@pnpm/types': 1000.6.0
ramda: '@pnpm/ramda@0.28.1'
transitivePeerDependencies:
- '@pnpm/logger'
- '@pnpm/worker'
- domexception
- supports-color
- typanion
'@pnpm/colorize-semver-diff@1.0.1':
dependencies:
chalk: 4.1.2
@@ -16710,28 +16672,6 @@ snapshots:
- domexception
- supports-color
'@pnpm/config.deps-installer@1000.0.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))':
dependencies:
'@pnpm/config.config-writer': 1000.0.5
'@pnpm/core-loggers': 1001.0.1(@pnpm/logger@1001.0.0)
'@pnpm/error': 1000.0.2
'@pnpm/fetch': 1000.2.2(@pnpm/logger@1001.0.0)
'@pnpm/logger': 1001.0.0
'@pnpm/network.auth-header': 1000.0.3
'@pnpm/npm-resolver': 1004.0.1(@pnpm/logger@1001.0.0)
'@pnpm/package-store': 1002.0.4(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))
'@pnpm/parse-wanted-dependency': 1001.0.0
'@pnpm/pick-registry-for-package': 1000.0.8
'@pnpm/read-modules-dir': 1000.0.0
'@pnpm/read-package-json': 1000.0.9
'@pnpm/types': 1000.6.0
'@zkochan/rimraf': 3.0.2
get-npm-tarball-url: 2.1.0
transitivePeerDependencies:
- '@pnpm/worker'
- domexception
- supports-color
'@pnpm/config.env-replace@1.1.0': {}
'@pnpm/config.env-replace@3.0.1': {}
@@ -17041,19 +16981,6 @@ snapshots:
- supports-color
- typanion
'@pnpm/git-fetcher@1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)':
dependencies:
'@pnpm/fetcher-base': 1000.0.11
'@pnpm/fs.packlist': 2.0.0
'@pnpm/logger': 1001.0.0
'@pnpm/prepare-package': 1000.0.16(@pnpm/logger@1001.0.0)(typanion@3.14.0)
'@pnpm/worker': 1000.1.7(@pnpm/logger@packages+logger)(@types/node@22.15.29)
'@zkochan/rimraf': 3.0.2
execa: safe-execa@0.1.2
transitivePeerDependencies:
- supports-color
- typanion
'@pnpm/git-resolver@1001.0.2(@pnpm/logger@1001.0.0)':
dependencies:
'@pnpm/fetch': 1000.2.2(@pnpm/logger@1001.0.0)
@@ -17200,24 +17127,6 @@ snapshots:
- supports-color
- typanion
'@pnpm/meta-updater@2.0.6(@types/node@22.15.29)(typanion@3.14.0)':
dependencies:
'@pnpm/find-workspace-dir': 1000.1.0
'@pnpm/logger': 1001.0.0
'@pnpm/types': 1000.6.0
'@pnpm/worker': 1000.1.7(@pnpm/logger@packages+logger)(@types/node@22.15.29)
'@pnpm/workspace.find-packages': 1000.0.25(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)
'@pnpm/workspace.read-manifest': 1000.1.5
load-json-file: 7.0.1
meow: 11.0.0
print-diff: 2.0.0
write-json-file: 5.0.0
transitivePeerDependencies:
- '@types/node'
- domexception
- supports-color
- typanion
'@pnpm/network.agent@2.0.3':
dependencies:
'@pnpm/network.config': 2.1.0
@@ -17398,30 +17307,6 @@ snapshots:
semver: 7.7.2
ssri: 10.0.5
'@pnpm/package-requester@1004.0.2(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))':
dependencies:
'@pnpm/core-loggers': 1001.0.1(@pnpm/logger@1001.0.0)
'@pnpm/dependency-path': 1000.0.9
'@pnpm/error': 1000.0.2
'@pnpm/fetcher-base': 1000.0.11
'@pnpm/graceful-fs': 1000.0.0
'@pnpm/logger': 1001.0.0
'@pnpm/package-is-installable': 1000.0.10(@pnpm/logger@1001.0.0)
'@pnpm/pick-fetcher': 1000.0.0
'@pnpm/read-package-json': 1000.0.9
'@pnpm/resolver-base': 1003.0.1
'@pnpm/store-controller-types': 1003.0.2
'@pnpm/store.cafs': 1000.0.13
'@pnpm/types': 1000.6.0
'@pnpm/worker': 1000.1.7(@pnpm/logger@packages+logger)(@types/node@22.15.29)
p-defer: 3.0.0
p-limit: 3.1.0
p-queue: 6.6.2
promise-share: 1.0.0
ramda: '@pnpm/ramda@0.28.1'
semver: 7.7.2
ssri: 10.0.5
'@pnpm/package-store@1002.0.4(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@18.19.34))':
dependencies:
'@pnpm/create-cafs-store': 1000.0.14(@pnpm/logger@1001.0.0)
@@ -17438,22 +17323,6 @@ snapshots:
ramda: '@pnpm/ramda@0.28.1'
ssri: 10.0.5
'@pnpm/package-store@1002.0.4(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))':
dependencies:
'@pnpm/create-cafs-store': 1000.0.14(@pnpm/logger@1001.0.0)
'@pnpm/fetcher-base': 1000.0.11
'@pnpm/logger': 1001.0.0
'@pnpm/package-requester': 1004.0.2(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))
'@pnpm/resolver-base': 1003.0.1
'@pnpm/store-controller-types': 1003.0.2
'@pnpm/store.cafs': 1000.0.13
'@pnpm/types': 1000.6.0
'@pnpm/worker': 1000.1.7(@pnpm/logger@packages+logger)(@types/node@22.15.29)
'@zkochan/rimraf': 3.0.2
load-json-file: 6.2.0
ramda: '@pnpm/ramda@0.28.1'
ssri: 10.0.5
'@pnpm/parse-overrides@1000.0.2':
dependencies:
'@pnpm/catalogs.resolver': 1000.0.2
@@ -17580,7 +17449,7 @@ snapshots:
read-yaml-file: 2.1.0
strip-bom: 4.0.0
'@pnpm/registry-mock@4.5.0(encoding@0.1.13)(typanion@3.14.0)':
'@pnpm/registry-mock@4.6.0(encoding@0.1.13)(typanion@3.14.0)':
dependencies:
anonymous-npm-registry-client: 0.3.2
execa: 5.1.1
@@ -17670,25 +17539,6 @@ snapshots:
- supports-color
- typanion
'@pnpm/store-connection-manager@1002.0.3(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)':
dependencies:
'@pnpm/cli-meta': 1000.0.8
'@pnpm/client': 1000.0.19(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)
'@pnpm/config': 1003.1.1(@pnpm/logger@1001.0.0)
'@pnpm/error': 1000.0.2
'@pnpm/logger': 1001.0.0
'@pnpm/package-store': 1002.0.4(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))
'@pnpm/server': 1001.0.4(@pnpm/logger@1001.0.0)
'@pnpm/store-path': 1000.0.2
'@zkochan/diable': 1.0.2
delay: 5.0.0
dir-is-case-sensitive: 2.0.0
transitivePeerDependencies:
- '@pnpm/worker'
- domexception
- supports-color
- typanion
'@pnpm/store-controller-types@1001.0.3':
dependencies:
'@pnpm/fetcher-base': 1000.0.5
@@ -17762,28 +17612,6 @@ snapshots:
- supports-color
- typanion
'@pnpm/tarball-fetcher@1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)':
dependencies:
'@pnpm/core-loggers': 1001.0.1(@pnpm/logger@1001.0.0)
'@pnpm/error': 1000.0.2
'@pnpm/fetcher-base': 1000.0.11
'@pnpm/fetching-types': 1000.1.0
'@pnpm/fs.packlist': 2.0.0
'@pnpm/graceful-fs': 1000.0.0
'@pnpm/logger': 1001.0.0
'@pnpm/prepare-package': 1000.0.16(@pnpm/logger@1001.0.0)(typanion@3.14.0)
'@pnpm/worker': 1000.1.7(@pnpm/logger@packages+logger)(@types/node@22.15.29)
'@zkochan/retry': 0.2.0
lodash.throttle: 4.1.1
p-map-values: 1.0.0
path-temp: 2.1.0
ramda: '@pnpm/ramda@0.28.1'
rename-overwrite: 6.0.3
transitivePeerDependencies:
- domexception
- supports-color
- typanion
'@pnpm/tarball-resolver@1002.0.2':
dependencies:
'@pnpm/fetching-types': 1000.1.0
@@ -17831,26 +17659,6 @@ snapshots:
transitivePeerDependencies:
- '@types/node'
'@pnpm/worker@1000.1.7(@pnpm/logger@packages+logger)(@types/node@22.15.29)':
dependencies:
'@pnpm/cafs-types': 1000.0.0
'@pnpm/create-cafs-store': 1000.0.14(@pnpm/logger@1001.0.0)
'@pnpm/crypto.polyfill': 1000.1.0
'@pnpm/error': 1000.0.2
'@pnpm/exec.pkg-requires-build': 1000.0.8
'@pnpm/fs.hard-link-dir': 1000.0.1(@pnpm/logger@1001.0.0)
'@pnpm/graceful-fs': 1000.0.0
'@pnpm/logger': link:packages/logger
'@pnpm/store.cafs': 1000.0.13
'@pnpm/symlink-dependency': 1000.0.9(@pnpm/logger@1001.0.0)
'@rushstack/worker-pool': 0.4.9(@types/node@22.15.29)
is-windows: 1.0.2
load-json-file: 6.2.0
p-limit: 3.1.0
shell-quote: 1.8.3
transitivePeerDependencies:
- '@types/node'
'@pnpm/workspace.find-packages@1000.0.15(@pnpm/logger@1000.0.0)':
dependencies:
'@pnpm/cli-utils': 1000.0.15(@pnpm/logger@1000.0.0)
@@ -17874,20 +17682,6 @@ snapshots:
- supports-color
- typanion
'@pnpm/workspace.find-packages@1000.0.25(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)':
dependencies:
'@pnpm/cli-utils': 1000.1.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.1.7(@pnpm/logger@1001.0.0)(@types/node@22.15.29))(typanion@3.14.0)
'@pnpm/constants': 1001.1.0
'@pnpm/fs.find-packages': 1000.0.11
'@pnpm/logger': 1001.0.0
'@pnpm/types': 1000.6.0
'@pnpm/util.lex-comparator': 3.0.2
transitivePeerDependencies:
- '@pnpm/worker'
- domexception
- supports-color
- typanion
'@pnpm/workspace.manifest-writer@1000.1.4':
dependencies:
'@pnpm/constants': 1001.1.0

View File

@@ -61,7 +61,7 @@ catalog:
'@pnpm/npm-package-arg': ^1.0.0
'@pnpm/os.env.path-extender': ^2.0.3
'@pnpm/patch-package': 0.0.1
'@pnpm/registry-mock': 4.5.0
'@pnpm/registry-mock': 4.6.0
'@pnpm/semver-diff': ^1.1.0
'@pnpm/tabtab': ^0.5.4
'@pnpm/util.lex-comparator': ^3.0.2

View File

@@ -367,3 +367,14 @@ module.exports = {
expect(nodeModulesFiles).toContain('is-number')
expect(nodeModulesFiles).toContain('is-even')
})
test('automatically loading pnpmfile from a config dependency that has a name that starts with "@pnpm/plugin-"', async () => {
prepare()
await execPnpm(['add', '--config', '@pnpm/plugin-pnpmfile'])
await execPnpm(['add', 'is-odd@1.0.0'])
const nodeModulesFiles = fs.readdirSync('node_modules')
expect(nodeModulesFiles).toContain('kind-of')
expect(nodeModulesFiles).toContain('is-number')
})