feat(install): add loaded linker with GVS exclusions (#16482)

Add an opt-in CAS installer and synchronous Node.js module loader.
Generate package-instance manifests and embed the runtime in the Rust CLI.
Load compatible package files directly from verified store blobs while retaining
ordinary complete GVS installations for explicitly materialized dependency trees.

Reuse the existing fetch, graph hashing, linking, build approval, and command shim
pipelines. Preserve loader references during store pruning and preload the loader
for normal script and command execution. Keep application filesystem APIs intact.

Document the install mode; keep compatibility experiment results in the implementation task.
Related to https://github.com/pnpm/tasks/issues/64. Future linker-specific settings and nested hoisting configuration are tracked separately in https://github.com/pnpm/tasks/issues/72. Only the loaded-linker object form is included here.
This commit is contained in:
Zoltan Kochan authored and GitHub committed 2026-10-05 13:22:21 +02:00
1 parent 20e77aa3a2
commit 8aec5067cc
129 files changed
+4059 -203

No files matched your search

+1 -1
View File
@@ -8,7 +8,7 @@ import { prepareDocsSync } from './prepare-docs-sync.mjs'
function fixture (t, tag = 'v12.8.2') {
const repo = mkdtempSync(path.join(os.tmpdir(), 'pnpm-docs-release-'))
t.after(() => rmSync(repo, { recursive: true, force: true }))
t.after(() => rmSync(repo, { recursive: true, force: true, maxRetries: 3 }))
const git = (...args) => execFileSync('git', args, { cwd: repo, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim()
const version = tag.startsWith('pnpr@') ? tag.slice(5) : tag.slice(1)
for (const [product, current] of [['pnpm/npm/pnpm', '12.8.2'], ['pnpm11/pnpm', '11.28.2'], ['pnpr/npm/pnpr', '0.1.0-alpha.14']]) {
+5
View File
@@ -1,9 +1,11 @@
#!/usr/bin/env node
import { spawn, spawnSync } from 'node:child_process'
import console from 'node:console'
import { readFileSync } from 'node:fs'
import { mkdir, readdir, stat, writeFile } from 'node:fs/promises'
import path from 'node:path'
import { performance } from 'node:perf_hooks'
import process from 'node:process'
import { readTestDurations, selectChunk, taskWeight } from './ts-test-chunks.mjs'
@@ -179,6 +181,9 @@ async function runScriptTask (pkg) {
await runCommand('node', ['--test', 'test/test.js', 'test/e2e.test.js'], { cwd: pkg.path })
} else if (pkg.manifest.name === '@pnpm/eslint-config') {
await runCommand('node', ['--test', 'test/perfectionist.test.js'], { cwd: pkg.path })
} else if (pkg.manifest.name === '@pnpm/esm-loader') {
await runCommand('node', ['--test', 'test/loader.test.mjs', 'scripts/test-unrs-resolver.mjs'], { cwd: pkg.path })
await runCommand('node', ['scripts/bundle-runtime.mjs', '--check'], { cwd: pkg.path })
} else {
throw new Error(`Unsupported non-Jest .test script in ${relDir}: ${pkg.manifest.scripts['.test']}`)
}