From 033a2561eb4934849a5d1c4454eca372162b95b6 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Tue, 2 Dec 2025 15:31:52 +0100 Subject: [PATCH] fix: dependencies that were added to onlyBuiltDependencies should be built on install (#10256) --- .changeset/yellow-beds-wear.md | 10 ++ .../src/reporterForClient/index.ts | 8 +- .../reporterForClient/reportIgnoredBuilds.ts | 34 +++++ .../src/reporterForClient/reportSummary.ts | 21 +--- exec/build-modules/src/index.ts | 3 +- .../src/implementation/index.ts | 7 +- pkg-manager/core/package.json | 2 + pkg-manager/core/src/install/index.ts | 42 ++++++- .../core/test/install/lifecycleScripts.ts | 29 +++++ pkg-manager/core/tsconfig.json | 6 + pkg-manager/headless/src/index.ts | 2 - pnpm-lock.yaml | 117 ++++++++++++++---- 12 files changed, 222 insertions(+), 59 deletions(-) create mode 100644 .changeset/yellow-beds-wear.md create mode 100644 cli/default-reporter/src/reporterForClient/reportIgnoredBuilds.ts diff --git a/.changeset/yellow-beds-wear.md b/.changeset/yellow-beds-wear.md new file mode 100644 index 0000000000..cd4a4d6ebb --- /dev/null +++ b/.changeset/yellow-beds-wear.md @@ -0,0 +1,10 @@ +--- +"@pnpm/plugin-commands-rebuild": patch +"@pnpm/default-reporter": patch +"@pnpm/headless": patch +"@pnpm/build-modules": patch +"@pnpm/core": patch +"pnpm": patch +--- + +`pnpm install` should build any dependencies that were added to `onlyBuiltDependencies` and were not built yet [#10256](https://github.com/pnpm/pnpm/pull/10256). diff --git a/cli/default-reporter/src/reporterForClient/index.ts b/cli/default-reporter/src/reporterForClient/index.ts index 8b8655df31..f06cf4943c 100644 --- a/cli/default-reporter/src/reporterForClient/index.ts +++ b/cli/default-reporter/src/reporterForClient/index.ts @@ -8,6 +8,7 @@ import { reportContext } from './reportContext.js' import { reportExecutionTime } from './reportExecutionTime.js' import { reportDeprecations } from './reportDeprecations.js' import { reportHooks } from './reportHooks.js' +import { reportIgnoredBuilds } from './reportIgnoredBuilds.js' import { reportInstallChecks } from './reportInstallChecks.js' import { reportInstallingConfigDeps } from './reportInstallingConfigDeps.js' import { reportLifecycleScripts } from './reportLifecycleScripts.js' @@ -156,9 +157,14 @@ export function reporterForClient ( env: opts.env, filterPkgsDiff: opts.filterPkgsDiff, pnpmConfig: opts.pnpmConfig, - approveBuildsInstructionText: opts.approveBuildsInstructionText, })) } + outputs.push( + reportIgnoredBuilds(log$, { + pnpmConfig: opts.pnpmConfig, + approveBuildsInstructionText: opts.approveBuildsInstructionText, + }) + ) } return outputs diff --git a/cli/default-reporter/src/reporterForClient/reportIgnoredBuilds.ts b/cli/default-reporter/src/reporterForClient/reportIgnoredBuilds.ts new file mode 100644 index 0000000000..e28c2f7ba3 --- /dev/null +++ b/cli/default-reporter/src/reporterForClient/reportIgnoredBuilds.ts @@ -0,0 +1,34 @@ +import { type Config } from '@pnpm/config' +import { type IgnoredScriptsLog } from '@pnpm/core-loggers' +import { lexCompare } from '@pnpm/util.lex-comparator' +import * as Rx from 'rxjs' +import { map } from 'rxjs/operators' +import boxen from 'boxen' + +export function reportIgnoredBuilds ( + log$: { + ignoredScripts: Rx.Observable + }, + opts: { + pnpmConfig?: Config + // This is used by Bit CLI + approveBuildsInstructionText?: string + } +): Rx.Observable> { + return log$.ignoredScripts.pipe( + map((ignoredScripts) => { + if (ignoredScripts.packageNames && ignoredScripts.packageNames.length > 0 && !opts.pnpmConfig?.strictDepBuilds) { + const msg = boxen(`Ignored build scripts: ${Array.from(ignoredScripts.packageNames).sort(lexCompare).join(', ')}. +${opts.approveBuildsInstructionText ?? `Run "pnpm approve-builds${opts.pnpmConfig?.cliOptions?.global ? ' -g' : ''}" to pick which dependencies should be allowed to run scripts.`}`, { + title: 'Warning', + padding: 1, + margin: 0, + borderStyle: 'round', + borderColor: 'yellow', + }) + return Rx.of({ msg }) + } + return Rx.NEVER + }) + ) +} diff --git a/cli/default-reporter/src/reporterForClient/reportSummary.ts b/cli/default-reporter/src/reporterForClient/reportSummary.ts index 4c828cf0d6..9f5351c8af 100644 --- a/cli/default-reporter/src/reporterForClient/reportSummary.ts +++ b/cli/default-reporter/src/reporterForClient/reportSummary.ts @@ -1,16 +1,13 @@ import path from 'path' import { - type IgnoredScriptsLog, type DeprecationLog, type PackageManifestLog, type RootLog, type SummaryLog, } from '@pnpm/core-loggers' import { type Config } from '@pnpm/config' -import { lexCompare } from '@pnpm/util.lex-comparator' import * as Rx from 'rxjs' import { map, take } from 'rxjs/operators' -import boxen from 'boxen' import chalk from 'chalk' import semver from 'semver' import { EOL } from '../constants.js' @@ -40,7 +37,6 @@ export function reportSummary ( summary: Rx.Observable root: Rx.Observable packageManifest: Rx.Observable - ignoredScripts: Rx.Observable }, opts: { cmd: string @@ -48,8 +44,6 @@ export function reportSummary ( env: NodeJS.ProcessEnv filterPkgsDiff?: FilterPkgsDiff pnpmConfig?: Config - // This is used by Bit CLI - approveBuildsInstructionText?: string } ): Rx.Observable> { const pkgsDiff$ = getPkgsDiff(log$, { prefix: opts.cwd }) @@ -59,12 +53,11 @@ export function reportSummary ( return Rx.combineLatest( pkgsDiff$, - log$.ignoredScripts.pipe(Rx.startWith({ packageNames: undefined })), summaryLog$ ) .pipe( take(1), - map(([pkgsDiff, ignoredScripts]) => { + map(([pkgsDiff]) => { let msg = '' for (const depType of ['prod', 'optional', 'peer', 'dev', 'nodeModulesOnly'] as const) { let diffs: PackageDiff[] = Object.values(pkgsDiff[depType as keyof typeof pkgsDiff]) @@ -89,18 +82,6 @@ export function reportSummary ( msg += EOL } } - if (ignoredScripts.packageNames && ignoredScripts.packageNames.length > 0 && !opts.pnpmConfig?.strictDepBuilds) { - msg += EOL - msg += boxen(`Ignored build scripts: ${Array.from(ignoredScripts.packageNames).sort(lexCompare).join(', ')}. -${opts.approveBuildsInstructionText ?? `Run "pnpm approve-builds${opts.pnpmConfig?.cliOptions?.global ? ' -g' : ''}" to pick which dependencies should be allowed to run scripts.`}`, { - title: 'Warning', - padding: 1, - margin: 0, - borderStyle: 'round', - borderColor: 'yellow', - }) - msg += EOL - } return Rx.of({ msg }) }) ) diff --git a/exec/build-modules/src/index.ts b/exec/build-modules/src/index.ts index 005bf0f09f..d9c36a3117 100644 --- a/exec/build-modules/src/index.ts +++ b/exec/build-modules/src/index.ts @@ -3,7 +3,7 @@ import path from 'path' import util from 'util' import { calcDepState, type DepsStateCache } from '@pnpm/calc-dep-state' import { getWorkspaceConcurrency } from '@pnpm/config' -import { skippedOptionalDependencyLogger, ignoredScriptsLogger } from '@pnpm/core-loggers' +import { skippedOptionalDependencyLogger } from '@pnpm/core-loggers' import { runPostinstallHooks } from '@pnpm/lifecycle' import { linkBins, linkBinsOfPackages } from '@pnpm/link-bins' import { logger } from '@pnpm/logger' @@ -97,7 +97,6 @@ export async function buildModules ( } } const packageNames = Array.from(ignoredPkgs) - ignoredScriptsLogger.debug({ packageNames }) return { ignoredBuilds: packageNames } } diff --git a/exec/plugin-commands-rebuild/src/implementation/index.ts b/exec/plugin-commands-rebuild/src/implementation/index.ts index 4cefcef467..c2043e1f47 100644 --- a/exec/plugin-commands-rebuild/src/implementation/index.ts +++ b/exec/plugin-commands-rebuild/src/implementation/index.ts @@ -92,7 +92,7 @@ export async function rebuildSelectedPkgs ( projects: Array<{ buildIndex: number, manifest: ProjectManifest, rootDir: ProjectRootDir }>, pkgSpecs: string[], maybeOpts: RebuildOptions -): Promise { +): Promise<{ ignoredBuilds?: string[] }> { const reporter = maybeOpts?.reporter if ((reporter != null) && typeof reporter === 'function') { streamParser.on('data', reporter) @@ -100,7 +100,7 @@ export async function rebuildSelectedPkgs ( const opts = await extendRebuildOptions(maybeOpts) const ctx = await getContext({ ...opts, allProjects: projects }) - if (ctx.currentLockfile?.packages == null) return + if (ctx.currentLockfile?.packages == null) return {} const packages = ctx.currentLockfile.packages const searched: PackageSelector[] = pkgSpecs.map((arg) => { @@ -149,6 +149,9 @@ export async function rebuildSelectedPkgs ( virtualStoreDir: ctx.virtualStoreDir, virtualStoreDirMaxLength: ctx.virtualStoreDirMaxLength, }) + return { + ignoredBuilds: ignoredPkgs, + } } export async function rebuildProjects ( diff --git a/pkg-manager/core/package.json b/pkg-manager/core/package.json index 968877a28d..746c4be3b5 100644 --- a/pkg-manager/core/package.json +++ b/pkg-manager/core/package.json @@ -62,6 +62,7 @@ "@pnpm/catalogs.protocol-parser": "workspace:*", "@pnpm/catalogs.resolver": "workspace:*", "@pnpm/catalogs.types": "workspace:*", + "@pnpm/config.version-policy": "workspace:*", "@pnpm/constants": "workspace:*", "@pnpm/core-loggers": "workspace:*", "@pnpm/crypto.hash": "workspace:*", @@ -96,6 +97,7 @@ "@pnpm/parse-wanted-dependency": "workspace:*", "@pnpm/patching.config": "workspace:*", "@pnpm/pkg-manager.direct-dep-linker": "workspace:*", + "@pnpm/plugin-commands-rebuild": "workspace:*", "@pnpm/read-modules-dir": "workspace:*", "@pnpm/read-project-manifest": "workspace:*", "@pnpm/remove-bins": "workspace:*", diff --git a/pkg-manager/core/src/install/index.ts b/pkg-manager/core/src/install/index.ts index f41d9d9c4e..a10e0738bd 100644 --- a/pkg-manager/core/src/install/index.ts +++ b/pkg-manager/core/src/install/index.ts @@ -4,6 +4,7 @@ import { createAllowBuildFunction } from '@pnpm/builder.policy' import { parseCatalogProtocol } from '@pnpm/catalogs.protocol-parser' import { resolveFromCatalog, matchCatalogResolveResult, type CatalogResultMatcher } from '@pnpm/catalogs.resolver' import { type Catalogs } from '@pnpm/catalogs.types' +import { createPackageVersionPolicy } from '@pnpm/config.version-policy' import { LAYOUT_VERSION, LOCKFILE_VERSION, @@ -48,6 +49,7 @@ import { logger, globalInfo, streamParser } from '@pnpm/logger' import { getAllDependenciesFromManifest, getAllUniqueSpecs } from '@pnpm/manifest-utils' import { writeModulesManifest } from '@pnpm/modules-yaml' import { type PatchGroupRecord, groupPatchedDependencies } from '@pnpm/patching.config' +import { rebuildSelectedPkgs } from '@pnpm/plugin-commands-rebuild' import { safeReadProjectManifestOnly } from '@pnpm/read-project-manifest' import { getWantedDependencies, @@ -342,20 +344,27 @@ export async function mutateModules ( // @ts-expect-error globalInfo(`The integrity of ${global['verifiedFileIntegrity']} files was checked. This might have caused installation to take longer.`) } - if ((reporter != null) && typeof reporter === 'function') { - streamParser.removeListener('data', reporter) - } if (opts.mergeGitBranchLockfiles) { await cleanGitBranchLockfiles(ctx.lockfileDir) } + let ignoredBuilds = result.ignoredBuilds + if (!opts.ignoreScripts && ignoredBuilds?.length) { + ignoredBuilds = await runUnignoredDependencyBuilds(opts, ignoredBuilds) + } + ignoredScriptsLogger.debug({ packageNames: ignoredBuilds }) + + if ((reporter != null) && typeof reporter === 'function') { + streamParser.removeListener('data', reporter) + } + return { updatedCatalogs: result.updatedCatalogs, updatedProjects: result.updatedProjects, stats: result.stats ?? { added: 0, removed: 0, linkedToRoot: 0 }, depsRequiringBuild: result.depsRequiringBuild, - ignoredBuilds: result.ignoredBuilds, + ignoredBuilds, } interface InnerInstallResult { @@ -853,6 +862,30 @@ Note that in CI environments, this setting is enabled by default.`, } } +async function runUnignoredDependencyBuilds (opts: StrictInstallOptions, previousIgnoredBuilds: string[]): Promise { + if (!opts.onlyBuiltDependencies?.length) { + return previousIgnoredBuilds + } + const onlyBuiltDeps = createPackageVersionPolicy(opts.onlyBuiltDependencies) + const pkgsToBuild = previousIgnoredBuilds.flatMap((ignoredPkg) => { + const matchResult = onlyBuiltDeps(ignoredPkg) + if (matchResult === true) { + return [ignoredPkg] + } else if (Array.isArray(matchResult)) { + return matchResult.map(version => `${ignoredPkg}@${version}`) + } + return [] + }) + if (pkgsToBuild.length) { + return (await rebuildSelectedPkgs(opts.allProjects, pkgsToBuild, { + ...opts, + reporter: undefined, // We don't want to attach the reporter again, it was already attached. + rootProjectManifestDir: opts.lockfileDir, + })).ignoredBuilds ?? previousIgnoredBuilds + } + return previousIgnoredBuilds +} + function cacheExpired (prunedAt: string, maxAgeInMinutes: number): boolean { return ((Date.now() - new Date(prunedAt).valueOf()) / (1000 * 60)) > maxAgeInMinutes } @@ -1340,7 +1373,6 @@ const _installInContext: InstallFunction = async (projects, ctx, opts) => { })).ignoredBuilds if (ignoredBuilds == null && ctx.modulesFile?.ignoredBuilds?.length) { ignoredBuilds = ctx.modulesFile.ignoredBuilds - ignoredScriptsLogger.debug({ packageNames: ignoredBuilds }) } } } diff --git a/pkg-manager/core/test/install/lifecycleScripts.ts b/pkg-manager/core/test/install/lifecycleScripts.ts index 4e7eef0db2..37c97ced37 100644 --- a/pkg-manager/core/test/install/lifecycleScripts.ts +++ b/pkg-manager/core/test/install/lifecycleScripts.ts @@ -763,3 +763,32 @@ test('run pre/postinstall scripts in a project that uses node-linker=hoisted. Sh message: `An error occurred while uploading ${path.resolve('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example')}`, })) }) + +test('build dependencies that were not previously built after onlyBuiltDependencies changes', async () => { + prepareEmpty() + const neverBuiltDependencies: string[] | undefined = undefined + const { updatedManifest: manifest } = await addDependenciesToPackage({}, + ['@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0', '@pnpm.e2e/install-script-example'], + testDefaults({ + fastUnpack: false, + onlyBuiltDependencies: ['@pnpm.e2e/install-script-example'], + neverBuiltDependencies, + }) + ) + + expect(fs.existsSync('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(fs.existsSync('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() + expect(fs.existsSync('node_modules/@pnpm.e2e/install-script-example/generated-by-install.js')).toBeTruthy() + + await install(manifest, testDefaults({ + fastUnpack: false, + frozenLockfile: true, + ignoredBuiltDependencies: [], + neverBuiltDependencies, + onlyBuiltDependencies: ['@pnpm.e2e/install-script-example', '@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'], + })) + + expect(fs.existsSync('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() + expect(fs.existsSync('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeTruthy() + expect(fs.existsSync('node_modules/@pnpm.e2e/install-script-example/generated-by-install.js')).toBeTruthy() +}) diff --git a/pkg-manager/core/tsconfig.json b/pkg-manager/core/tsconfig.json index f76c9b5210..ecc586019b 100644 --- a/pkg-manager/core/tsconfig.json +++ b/pkg-manager/core/tsconfig.json @@ -45,6 +45,9 @@ { "path": "../../config/parse-overrides" }, + { + "path": "../../config/version-policy" + }, { "path": "../../crypto/hash" }, @@ -60,6 +63,9 @@ { "path": "../../exec/lifecycle" }, + { + "path": "../../exec/plugin-commands-rebuild" + }, { "path": "../../fs/read-modules-dir" }, diff --git a/pkg-manager/headless/src/index.ts b/pkg-manager/headless/src/index.ts index 59bb5acd4d..43fb81c407 100644 --- a/pkg-manager/headless/src/index.ts +++ b/pkg-manager/headless/src/index.ts @@ -8,7 +8,6 @@ import { WANTED_LOCKFILE, } from '@pnpm/constants' import { - ignoredScriptsLogger, packageManifestLogger, progressLogger, stageLogger, @@ -565,7 +564,6 @@ export async function headlessInstall (opts: HeadlessOptions): Promise=1001.0.0 <1002.0.0' + '@pnpm/create-cafs-store@1000.0.24': + resolution: {integrity: sha512-5GnPramKi6/KrwbjkoLE63dSwSOrxDMgICJUrxGtZQb8LAYwCYxbGK+4Yotup2Y1I8FZwBc8O80FOp8H/c1oXA==} + engines: {node: '>=18.12'} + peerDependencies: + '@pnpm/logger': '>=1001.0.0 <1002.0.0' + '@pnpm/crypto.hash@1000.1.1': resolution: {integrity: sha512-lb5kwXaOXdIW/4bkLLmtM9HEVRvp2eIvp+TrdawcPoaptgA/5f0/sRG0P52BF8dFqeNDj+1tGdqH89WQEqJnxA==} engines: {node: '>=18.12'} @@ -10083,12 +10095,24 @@ packages: peerDependencies: '@pnpm/logger': '>=1001.0.0 <1002.0.0' + '@pnpm/fs.hard-link-dir@1000.0.5': + resolution: {integrity: sha512-MtEzlHc2tRvom2/fXFpjpLj3XMN2AzgIm+udEpkxm2VWaRKiY+7br5xBO8NT2h2fADg2chBSgE3W96VaDgLUag==} + engines: {node: '>=18.12'} + peerDependencies: + '@pnpm/logger': '>=1001.0.0 <1002.0.0' + '@pnpm/fs.indexed-pkg-importer@1000.1.17': resolution: {integrity: sha512-rData6UjMwHMK4oXKyqgr8YIAOAodD3YOA/dZVGJxb3vo7uycSocDDUHHdPl9RBh6LCE5+TBJnJ0Eq5OPMRICg==} engines: {node: '>=18.12'} peerDependencies: '@pnpm/logger': '>=1001.0.0 <1002.0.0' + '@pnpm/fs.indexed-pkg-importer@1000.1.18': + resolution: {integrity: sha512-RZmWjvPfwbd7SHE9Mg/frcEdg54k7oJ9yhM7za7vOBhn0oeF63YBsZj6W4IqbfUxyVOE/RhNye9elDxoKGTwZw==} + engines: {node: '>=18.12'} + peerDependencies: + '@pnpm/logger': '>=1001.0.0 <1002.0.0' + '@pnpm/fs.indexed-pkg-importer@1000.1.8': resolution: {integrity: sha512-VwsjBhAyW+5TQO6Ndon1y8kyvSLQJyyWzwNRENQN+UkbrybsjNXHX1vcMV4Li/+pQ0VBYFVxYl/cx+EkU8H9hQ==} engines: {node: '>=18.12'} @@ -10440,6 +10464,12 @@ packages: peerDependencies: '@pnpm/logger': '>=1001.0.0 <1002.0.0' + '@pnpm/worker@1000.4.0': + resolution: {integrity: sha512-y/dFfiEh5iWEomurikjsmCZ5DM9cefzE0vA+NHQKn6tM6PLaBS8QVVMqRzzTEdkw44LoCO/nRZ6OdSkq1AwJtw==} + engines: {node: '>=18.12'} + peerDependencies: + '@pnpm/logger': '>=1001.0.0 <1002.0.0' + '@pnpm/workspace.find-packages@1000.0.25': resolution: {integrity: sha512-dKXeM46nSXKOzIIvofAhrcZqivxeJIqG27MX2nQoYYtccdJw6IBWozPqDJIPw0V3WLt9DAEQOqooEasbBmB5wg==} engines: {node: '>=18.12'} @@ -17086,11 +17116,11 @@ snapshots: - supports-color - typanion - '@pnpm/cli-utils@1000.1.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': + '@pnpm/cli-utils@1000.1.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30)) + '@pnpm/config.deps-installer': 1000.0.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30)) '@pnpm/default-reporter': 1002.0.1(@pnpm/logger@1001.0.0) '@pnpm/error': 1000.0.2 '@pnpm/logger': 1001.0.0 @@ -17098,7 +17128,7 @@ snapshots: '@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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0) + '@pnpm/store-connection-manager': 1002.0.3(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0) '@pnpm/types': 1000.6.0 chalk: 4.1.2 load-json-file: 6.2.0 @@ -17127,16 +17157,16 @@ snapshots: - supports-color - typanion - '@pnpm/client@1000.0.19(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': + '@pnpm/client@1000.0.19(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0) + '@pnpm/git-fetcher': 1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0) + '@pnpm/tarball-fetcher': 1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0) '@pnpm/types': 1000.6.0 ramda: '@pnpm/ramda@0.28.1' transitivePeerDependencies: @@ -17179,7 +17209,7 @@ snapshots: - domexception - supports-color - '@pnpm/config.deps-installer@1000.0.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))': + '@pnpm/config.deps-installer@1000.0.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))': dependencies: '@pnpm/config.config-writer': 1000.0.5 '@pnpm/core-loggers': 1001.0.1(@pnpm/logger@1001.0.0) @@ -17188,7 +17218,7 @@ snapshots: '@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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30)) + '@pnpm/package-store': 1002.0.4(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30)) '@pnpm/parse-wanted-dependency': 1001.0.0 '@pnpm/pick-registry-for-package': 1000.0.8 '@pnpm/read-modules-dir': 1000.0.0 @@ -17275,6 +17305,18 @@ snapshots: path-temp: 2.1.0 ramda: '@pnpm/ramda@0.28.1' + '@pnpm/create-cafs-store@1000.0.24(@pnpm/logger@1001.0.0)': + dependencies: + '@pnpm/exec.pkg-requires-build': 1000.0.13 + '@pnpm/fetcher-base': 1001.0.5 + '@pnpm/fs.indexed-pkg-importer': 1000.1.18(@pnpm/logger@1001.0.0) + '@pnpm/logger': 1001.0.0 + '@pnpm/store-controller-types': 1004.3.1 + '@pnpm/store.cafs': 1000.0.22 + mem: 8.1.1 + path-temp: 2.1.0 + ramda: '@pnpm/ramda@0.28.1' + '@pnpm/crypto.hash@1000.1.1': dependencies: '@pnpm/crypto.polyfill': 1000.1.0 @@ -17426,6 +17468,13 @@ snapshots: path-temp: 2.1.0 rename-overwrite: 6.0.3 + '@pnpm/fs.hard-link-dir@1000.0.5(@pnpm/logger@1001.0.0)': + dependencies: + '@pnpm/graceful-fs': 1000.0.1 + '@pnpm/logger': 1001.0.0 + path-temp: 2.1.0 + rename-overwrite: 6.0.3 + '@pnpm/fs.indexed-pkg-importer@1000.1.17(@pnpm/logger@1001.0.0)': dependencies: '@pnpm/core-loggers': 1001.0.6(@pnpm/logger@1001.0.0) @@ -17441,6 +17490,21 @@ snapshots: rename-overwrite: 6.0.3 sanitize-filename: 1.6.3 + '@pnpm/fs.indexed-pkg-importer@1000.1.18(@pnpm/logger@1001.0.0)': + dependencies: + '@pnpm/core-loggers': 1001.0.6(@pnpm/logger@1001.0.0) + '@pnpm/graceful-fs': 1000.0.1 + '@pnpm/logger': 1001.0.0 + '@pnpm/store-controller-types': 1004.3.1 + '@reflink/reflink': 0.1.19 + '@zkochan/rimraf': 3.0.2 + fs-extra: 11.3.2 + make-empty-dir: 3.0.2 + p-limit: 3.1.0 + path-temp: 2.1.0 + rename-overwrite: 6.0.3 + sanitize-filename: 1.6.3 + '@pnpm/fs.indexed-pkg-importer@1000.1.8(@pnpm/logger@1001.0.0)': dependencies: '@pnpm/core-loggers': 1001.0.1(@pnpm/logger@1001.0.0) @@ -17477,13 +17541,13 @@ snapshots: - supports-color - typanion - '@pnpm/git-fetcher@1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': + '@pnpm/git-fetcher@1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30) + '@pnpm/worker': 1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30) '@zkochan/rimraf': 3.0.2 execa: safe-execa@0.1.2 transitivePeerDependencies: @@ -17806,7 +17870,7 @@ snapshots: semver: 7.7.2 ssri: 10.0.5 - '@pnpm/package-requester@1004.0.2(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))': + '@pnpm/package-requester@1004.0.2(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))': dependencies: '@pnpm/core-loggers': 1001.0.1(@pnpm/logger@1001.0.0) '@pnpm/dependency-path': 1000.0.9 @@ -17821,7 +17885,7 @@ snapshots: '@pnpm/store-controller-types': 1003.0.2 '@pnpm/store.cafs': 1000.0.13 '@pnpm/types': 1000.6.0 - '@pnpm/worker': 1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30) + '@pnpm/worker': 1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30) p-defer: 3.0.0 p-limit: 3.1.0 p-queue: 6.6.2 @@ -17846,17 +17910,17 @@ 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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))': + '@pnpm/package-store@1002.0.4(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))': 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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30)) + '@pnpm/package-requester': 1004.0.2(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30)) '@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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30) + '@pnpm/worker': 1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30) '@zkochan/rimraf': 3.0.2 load-json-file: 6.2.0 ramda: '@pnpm/ramda@0.28.1' @@ -18022,14 +18086,14 @@ snapshots: - supports-color - typanion - '@pnpm/store-connection-manager@1002.0.3(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': + '@pnpm/store-connection-manager@1002.0.3(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': dependencies: '@pnpm/cli-meta': 1000.0.8 - '@pnpm/client': 1000.0.19(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0) + '@pnpm/client': 1000.0.19(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30)) + '@pnpm/package-store': 1002.0.4(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30)) '@pnpm/server': 1001.0.4(@pnpm/logger@1001.0.0) '@pnpm/store-path': 1000.0.2 '@zkochan/diable': 1.0.2 @@ -18126,7 +18190,7 @@ snapshots: - supports-color - typanion - '@pnpm/tarball-fetcher@1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': + '@pnpm/tarball-fetcher@1001.0.8(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': dependencies: '@pnpm/core-loggers': 1001.0.1(@pnpm/logger@1001.0.0) '@pnpm/error': 1000.0.2 @@ -18136,7 +18200,7 @@ snapshots: '@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.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30) + '@pnpm/worker': 1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30) '@zkochan/retry': 0.2.0 lodash.throttle: 4.1.1 p-map-values: 1.0.0 @@ -18191,14 +18255,14 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30)': + '@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30)': dependencies: '@pnpm/cafs-types': 1000.0.0 - '@pnpm/create-cafs-store': 1000.0.23(@pnpm/logger@1001.0.0) + '@pnpm/create-cafs-store': 1000.0.24(@pnpm/logger@1001.0.0) '@pnpm/crypto.polyfill': 1000.1.0 '@pnpm/error': 1000.0.5 '@pnpm/exec.pkg-requires-build': 1000.0.13 - '@pnpm/fs.hard-link-dir': 1000.0.4(@pnpm/logger@1001.0.0) + '@pnpm/fs.hard-link-dir': 1000.0.5(@pnpm/logger@1001.0.0) '@pnpm/graceful-fs': 1000.0.1 '@pnpm/logger': 1001.0.0 '@pnpm/store.cafs': 1000.0.22 @@ -18207,7 +18271,6 @@ snapshots: is-windows: 1.0.2 load-json-file: 6.2.0 p-limit: 3.1.0 - shlex: 2.1.2 transitivePeerDependencies: - '@types/node' @@ -18225,9 +18288,9 @@ snapshots: - supports-color - typanion - '@pnpm/workspace.find-packages@1000.0.25(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': + '@pnpm/workspace.find-packages@1000.0.25(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0)': dependencies: - '@pnpm/cli-utils': 1000.1.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.3.3(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0) + '@pnpm/cli-utils': 1000.1.5(@pnpm/logger@1001.0.0)(@pnpm/worker@1000.4.0(@pnpm/logger@1001.0.0)(@types/node@22.15.30))(typanion@3.14.0) '@pnpm/constants': 1001.1.0 '@pnpm/fs.find-packages': 1000.0.11 '@pnpm/logger': 1001.0.0