diff --git a/.github/scripts/verify-packed-package-payload.mjs b/.github/scripts/verify-packed-package-payload.mjs deleted file mode 100755 index 15f0435afa..0000000000 --- a/.github/scripts/verify-packed-package-payload.mjs +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/env node -// Verifies that packed tarballs contain every payload file the manifest -// declares (`files`, `main`, `module`, `types`, `exports`, `browser`, -// `bin`, `publishConfig.executableFiles`), so a packing regression fails -// the release before the first immutable npm publish -// (https://github.com/pnpm/pnpm/issues/13164). -// -// Release mode consumes the output of `pnpm pack --dry-run --json` -// (an entry per project with the tarball's file list), so no tarball is -// ever written or read. The single-package mode reads one real tarball's -// listing for debugging, e.g. against a downloaded npm artifact. -import { lstatSync, readFileSync, readdirSync } from 'node:fs' -import { basename, isAbsolute, posix, relative, resolve } from 'node:path' -import { spawnSync } from 'node:child_process' - -const args = parseArgs(process.argv.slice(2)) - -if (args.projects) { - verifyPackedProjects(args) -} else if (args.packageDir && args.tarball) { - verifyPackage(args.packageDir, readTarballListing(args.tarball), args.tarball) -} else { - usage('expected either --projects/--pack-json or --package-dir/--tarball') -} - -function verifyPackedProjects ({ projects, packJsons }) { - if (packJsons.length === 0) usage('missing --pack-json') - - const packedById = new Map() - for (const packJson of packJsons) { - for (const packedPackage of normalizeArray(readJson(packJson))) { - if (!Array.isArray(packedPackage.files)) { - throw new Error(`Packed entry for ${packedPackage.name}@${packedPackage.version} carries no file list; pass the output of \`pnpm pack --dry-run --json\``) - } - packedById.set( - `${packedPackage.name}@${packedPackage.version}`, - new Set(packedPackage.files.map((file) => file.path)) - ) - } - } - - const publishable = readJson(projects).filter( - (project) => !project.private && project.name && project.version && project.path - ) - if (publishable.length === 0) { - throw new Error(`No publishable projects listed in ${projects}`) - } - - const failures = [] - const unpacked = publishable.filter((project) => !packedById.has(`${project.name}@${project.version}`)) - if (unpacked.length > 0) { - failures.push(`Publishable projects missing from the pack result: ${unpacked.map((project) => project.name).join(', ')}`) - } - - for (const project of publishable) { - const packedFiles = packedById.get(`${project.name}@${project.version}`) - if (!packedFiles) continue - try { - verifyPackage(project.path, packedFiles, 'pack result') - } catch (error) { - failures.push(error.message) - } - } - if (failures.length > 0) { - throw new Error(`Payload verification failed:\n\n${failures.join('\n\n')}`) - } - console.log(`Verified payloads of ${publishable.length} packages`) -} - -function verifyPackage (packageDir, packedFiles, packedSource) { - const packageRoot = resolve(packageDir) - const manifest = readJson(resolve(packageRoot, 'package.json')) - const expectedFiles = collectExpectedFiles(packageRoot, manifest) - if (expectedFiles.size === 0) { - console.log(`No literal package payload files declared by ${manifest.name ?? packageDir}`) - return - } - - const missing = [...expectedFiles].filter((file) => !packedFiles.has(file)).sort() - if (missing.length > 0) { - throw new Error(`Payload files of ${manifest.name ?? packageDir} missing from ${packedSource}:\n ${missing.join('\n ')}`) - } - - console.log(`Verified ${expectedFiles.size} payload files for ${manifest.name ?? packageDir}`) -} - -function collectExpectedFiles (packageDir, manifest) { - const files = new Set() - const excluded = (manifest.files ?? []) - .filter((file) => typeof file === 'string' && file.startsWith('!')) - .map((file) => globMatcher(file.slice(1))) - - const add = (file) => { - if (typeof file !== 'string' || file.length === 0) return - if (file === 'package.json' || file === './package.json') return - if (!file.startsWith('./') && file.startsWith('.') && !file.startsWith('..')) return - const relative = normalizeRelative(file) - if (relative === 'package.json') return - if (isExcluded(relative, excluded)) return - - const source = resolvePayloadPath(packageDir, relative) - const stat = lstatSync(source, { throwIfNoEntry: false }) - if (stat?.isSymbolicLink()) { - throw new Error(`Payload file cannot be a symlink: ${source}`) - } - if (stat?.isFile()) { - files.add(relative) - return - } - if (!stat?.isDirectory()) { - throw new Error(`Missing payload file ${source}`) - } - for (const entry of readdirSync(source, { withFileTypes: true })) { - add(posix.join(relative, entry.name)) - } - } - - for (const file of manifest.files ?? []) { - if (typeof file === 'string' && !file.startsWith('!') && !/[?*[]/.test(file)) add(file) - } - add(manifest.main) - add(manifest.module) - add(manifest.types) - add(manifest.typings) - addExportTargets(manifest.exports, add) - addExportTargets(manifest.browser, add) - for (const file of Object.values(typeof manifest.bin === 'string' ? { default: manifest.bin } : manifest.bin ?? {})) add(file) - for (const file of manifest.publishConfig?.executableFiles ?? []) add(file) - - return files -} - -function addExportTargets (value, add) { - if (typeof value === 'string') { - if (value.startsWith('./')) add(value) - return - } - if (Array.isArray(value)) { - for (const item of value) addExportTargets(item, add) - return - } - if (value && typeof value === 'object') { - for (const item of Object.values(value)) addExportTargets(item, add) - } -} - -function readTarballListing (tarball) { - const result = spawnSync('tar', ['-tf', tarball], { - encoding: 'utf8', - maxBuffer: 1024 * 1024 * 64, - }) - if (result.error) { - throw new Error(`Failed to list ${tarball}: ${result.error.message}`) - } - if (result.status !== 0) { - throw new Error(`Failed to list ${tarball}${result.stderr ? `\n${result.stderr}` : ''}`) - } - return new Set( - result.stdout - .split('\n') - .filter((entry) => entry.startsWith('package/')) - .map((entry) => entry.slice('package/'.length)) - ) -} - -function globMatcher (pattern) { - const normalized = normalizeRelative(pattern) - const regexp = globToRegExp(normalized) - const basenameRegexp = normalized.includes('/') ? null : globToRegExp(normalized) - return (file) => regexp.test(file) || (basenameRegexp?.test(basename(file)) ?? false) -} - -function isExcluded (file, excluded) { - return excluded.some((matcher) => matcher(file)) -} - -function globToRegExp (pattern) { - return new RegExp( - '^' + - pattern - .replace(/[.$+^{}()|[\]\\]/g, '\\$&') - .replace(/\*\*\//g, '\x00') - .replace(/\*\*/g, '\x01') - .replace(/\*/g, '[^/]*') - .replace(/\?/g, '[^/]') - .replace(/\x00/g, '(?:.*/)?') - .replace(/\x01/g, '.*') + - '$' - ) -} - -function normalizeRelative (file) { - const normalizedInput = file.replace(/\\/g, '/') - if (normalizedInput.startsWith('/') || /^[A-Za-z]:\//.test(normalizedInput)) { - throw new Error(`Payload file path must be relative: ${file}`) - } - const normalized = posix.normalize(normalizedInput.replace(/^\.\//, '')) - if (normalized === '.' || normalized === '..' || normalized.startsWith('../') || normalized.split('/').includes('..')) { - throw new Error(`Payload file path escapes package directory: ${file}`) - } - return normalized -} - -function resolvePayloadPath (packageDir, file) { - const source = resolve(packageDir, file) - const relativeSource = relative(packageDir, source) - if (relativeSource === '' || relativeSource.startsWith('..') || isAbsolute(relativeSource)) { - throw new Error(`Payload file path escapes package directory: ${file}`) - } - return source -} - -function readJson (file) { - return JSON.parse(readFileSync(file, 'utf8')) -} - -function normalizeArray (value) { - return Array.isArray(value) ? value : [value] -} - -function parseArgs (rawArgs) { - const args = { packJsons: [] } - for (let i = 0; i < rawArgs.length; i++) { - const arg = rawArgs[i] - if (arg === '--projects') { - args.projects = rawArgs[++i] - } else if (arg === '--pack-json') { - args.packJsons.push(rawArgs[++i]) - } else if (arg === '--package-dir') { - args.packageDir = rawArgs[++i] - } else if (arg === '--tarball') { - args.tarball = rawArgs[++i] - } else { - usage(`unknown argument: ${arg}`) - } - } - return args -} - -function usage (message) { - console.error(message) - console.error(`Usage: - verify-packed-package-payload.mjs --projects --pack-json [--pack-json ...] - verify-packed-package-payload.mjs --package-dir --tarball `) - process.exit(1) -} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ab0460df8b..2bfa387bde 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -204,19 +204,6 @@ jobs: uses: pnpm/setup@77cf06832101b3ac8c65caaf76a21643936d07a4 with: runtime: node@26.5.0 - - name: Override workspace ignores for the TypeScript pnpm package - run: ': > pnpm11/pnpm/.npmignore' - - name: Shadow the root .gitignore for packing (TEMPORARY) - # The pinned pacquet (12.0.0-alpha.13 and later, until the fix from - # https://github.com/pnpm/pnpm/pull/13231 ships) lets workspace-root - # ignore rules exclude files matched by a package's `files` allowlist, - # so every lib package published with it shipped nearly empty: - # https://github.com/pnpm/pnpm/issues/13164. The packlist prefers a - # root .npmignore over the root .gitignore, so shadow the .gitignore - # with only its junk rules (crucially not `lib`/`dist`, the compiled - # payload of every lib package). Remove this step once - # `packageManager` pins a pacquet release that carries the fix. - run: printf '*.tsbuildinfo\n*.log\n' > .npmignore - name: Build TypeScript executable artifacts run: pn --filter=@pnpm/exe run build-artifacts @@ -371,19 +358,6 @@ jobs: uses: pnpm/setup@77cf06832101b3ac8c65caaf76a21643936d07a4 with: runtime: node@26.5.0 - - name: Override workspace ignores for the TypeScript pnpm package - run: ': > pnpm11/pnpm/.npmignore' - - name: Shadow the root .gitignore for packing (TEMPORARY) - # The pinned pacquet (12.0.0-alpha.13 and later, until the fix from - # https://github.com/pnpm/pnpm/pull/13231 ships) lets workspace-root - # ignore rules exclude files matched by a package's `files` allowlist, - # so every lib package published with it shipped nearly empty: - # https://github.com/pnpm/pnpm/issues/13164. The packlist prefers a - # root .npmignore over the root .gitignore, so shadow the .gitignore - # with only its junk rules (crucially not `lib`/`dist`, the compiled - # payload of every lib package). Remove this step once - # `packageManager` pins a pacquet release that carries the fix. - run: printf '*.tsbuildinfo\n*.log\n' > .npmignore # The publish phase is split into three sequential steps to control which packages # use trusted publishing (OIDC) vs. a static token. `pnpm publish` currently bails # out of OIDC as soon as a static `_authToken` is configured, so the only way to @@ -392,58 +366,6 @@ jobs: # for the longer-term fix that lets OIDC override a configured token. - name: Build TypeScript executable artifacts run: pn --filter=@pnpm/exe run build-artifacts - - - name: Verify internal workspace package payloads - # A dry-run recursive pack runs the exact packing code the publish - # steps below will use and reports every tarball's file list, so a - # packing regression fails here, before the first immutable npm - # publish. `pnpm pack` does not run `prepublishOnly`, so the - # publishable projects' src tsconfigs are built first — only those: - # the typecheck-everything graph also drags in test tsconfigs, - # whose devDependencies this runner's install does not provide - # (mostly warm after the build-artifacts step above anyway). The - # publishable projects are selected by explicit name filters: - # unlike recursive publish, recursive pack does not skip private - # packages, and packing the private workspace root would walk the - # whole repository. - run: | - set -euo pipefail - verify_dir=$(mktemp -d) - pn list --filter=!pnpm --filter=!@pnpm/exe --depth=-1 --json > "$verify_dir/projects.json" - filters=() - tsconfig_dirs=() - while IFS=$'\t' read -r name dir; do - filters+=("--filter=$name") - if [ -n "$dir" ]; then - tsconfig_dirs+=("$dir") - fi - done < <(node -e ' - const { existsSync } = require("node:fs") - const { join } = require("node:path") - const projects = JSON.parse(require("node:fs").readFileSync(process.argv[1], "utf8")) - for (const project of projects) { - if (!project.private && project.name && project.version && project.path) { - const dir = existsSync(join(project.path, "tsconfig.json")) ? project.path : "" - console.log(`${project.name}\t${dir}`) - } - } - ' "$verify_dir/projects.json") - pn exec tsgo --build "${tsconfig_dirs[@]}" - # Recursive pack runs one project at a time, so pack in four - # concurrent chunks; dry-run packing only reads the tree. - chunk_size=$(( (${#filters[@]} + 3) / 4 )) - pack_pids=() - verify_args=(--projects "$verify_dir/projects.json") - for start in $(seq 0 "$chunk_size" $(( ${#filters[@]} - 1 ))); do - pn pack --dry-run --json "${filters[@]:start:chunk_size}" > "$verify_dir/pack-$start.json" & - pack_pids+=($!) - verify_args+=(--pack-json "$verify_dir/pack-$start.json") - done - for pid in "${pack_pids[@]}"; do - wait "$pid" - done - node .github/scripts/verify-packed-package-payload.mjs "${verify_args[@]}" - - name: Publish @pnpm/exe (trusted publishing) # No NPM_TOKEN: pnpm has no static token to short-circuit on, so it will perform # the OIDC token exchange against npm's trusted-publishing config for `@pnpm/exe`. diff --git a/package.json b/package.json index 9f148675e4..e5c97af6ee 100644 --- a/package.json +++ b/package.json @@ -59,11 +59,11 @@ "shx": "catalog:", "typescript": "catalog:" }, - "packageManager": "pnpm@12.0.0-alpha.18", + "packageManager": "pnpm@12.0.0-alpha.19", "devEngines": { "packageManager": { "name": "pnpm", - "version": "12.0.0-alpha.18", + "version": "12.0.0-alpha.19", "onFail": "download" }, "runtime": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63450765d0..2eac9f0e77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,115 +7,115 @@ importers: configDependencies: {} packageManagerDependencies: '@pnpm/exe': - specifier: 12.0.0-alpha.18 - version: 12.0.0-alpha.18 + specifier: 12.0.0-alpha.19 + version: 12.0.0-alpha.19 pnpm: - specifier: 12.0.0-alpha.18 - version: 12.0.0-alpha.18 + specifier: 12.0.0-alpha.19 + version: 12.0.0-alpha.19 packages: - '@pnpm/exe.darwin-arm64@12.0.0-alpha.18': - resolution: {integrity: sha512-/cm02lfYwloOm6IUps/0mkCdrd+5XSb/9ZVULmJhmk98cGaRWkMLACr5KI2UQFlXn1MfV9UZtBisrdmgJEJUQw==} + '@pnpm/exe.darwin-arm64@12.0.0-alpha.19': + resolution: {integrity: sha512-R0A9WtrD8w1iug7cxxkWjFCI1lB/gURBUcXLhSa3toIC9PNhonyuVTwNpIgUvm7WCShiIRUMQRtuaBBHbW21vQ==} cpu: [arm64] os: [darwin] - '@pnpm/exe.darwin-x64@12.0.0-alpha.18': - resolution: {integrity: sha512-Ps+UBJELsd+MWGiiQJblYcHTAfKbzq+dnWNyu0N3nNSK5OKdYUZbtRuqhTToFAVlZgtylwWrrhqmntpJzCLt+g==} + '@pnpm/exe.darwin-x64@12.0.0-alpha.19': + resolution: {integrity: sha512-jiKscL8jcKoeSf7qwVWpLzOqXK0ZNnlDbr5kFkwP9k18T3pLVhzk5iFL3WZEmYgo2rwDDdNyAIy+ZG11Fy90Tw==} cpu: [x64] os: [darwin] - '@pnpm/exe.linux-arm64-musl@12.0.0-alpha.18': - resolution: {integrity: sha512-uiCEuHjWQ1ss2DqRx/h8bX9qvmCjYsXMdpARVwZWVIHGOWEaVQQG3Aaj91tyv0HB4XlzXnVQsWf+3BPRInkNTw==} + '@pnpm/exe.linux-arm64-musl@12.0.0-alpha.19': + resolution: {integrity: sha512-xYncJzTYV+yudKycfe/7SZ7TP/hppLtJFlvLKL5uYt1SNjVds/IMQqV8TaNDnmDUlqlld0Xrtx1KJXa4EfOXyA==} cpu: [arm64] os: [linux] libc: [musl] - '@pnpm/exe.linux-arm64@12.0.0-alpha.18': - resolution: {integrity: sha512-rhkide4Mkl59gDH/tv5eggKrpBgiuLzo0Ehy5fpYhpAEyCB9KuNJ6cYYTL35A6JY8eUXGTgnsSOAxdekWjgnBw==} + '@pnpm/exe.linux-arm64@12.0.0-alpha.19': + resolution: {integrity: sha512-V4SvOnxjpRYXxoNxrIkTbZc24fAGri9lm2cqfD9GgWoARDA6amAymP64mcFL1JQ8D19PtZkNVV7FvVUhjnRsew==} cpu: [arm64] os: [linux] libc: [glibc] - '@pnpm/exe.linux-x64-musl@12.0.0-alpha.18': - resolution: {integrity: sha512-IjvHT7TcqVvuOAWV/ukHUcOTn9HmDsyuyKSGI9crX93bKBrsE3cyT1CVSo95sxzJHPcaqGDQjQDR13nmJXao7A==} + '@pnpm/exe.linux-x64-musl@12.0.0-alpha.19': + resolution: {integrity: sha512-/K+Sute5ag6oGLeff5kdAdvl6Pok3+w6WZWuDxprgU4Ds3pdRCJ0uaK6Pga4W5A+/gUKIc5CbMj5vWJcZkiRUg==} cpu: [x64] os: [linux] libc: [musl] - '@pnpm/exe.linux-x64@12.0.0-alpha.18': - resolution: {integrity: sha512-Ja+M9K31+K+l6MtOlfKUROtaXPP4JYjAj6eMUU4lMk+ffvsgda8v0NLOSLHygNk2Z4NVW3MsNwtUKvVr6K7arQ==} + '@pnpm/exe.linux-x64@12.0.0-alpha.19': + resolution: {integrity: sha512-lA5+IkSmDGftckmYEkW9jcluKPHi0DqiCffL/jguJOzsdR6hUb6APERE9V45udKgOpQP+GR3mnWGzkD9LRmkXQ==} cpu: [x64] os: [linux] libc: [glibc] - '@pnpm/exe.win32-arm64@12.0.0-alpha.18': - resolution: {integrity: sha512-aAn7it8hAevDJCeo3Qch5zs2+OU/P5mQ7CabtsZDIQG0SWnMCDolYF6XuAyqIagxBdfD3EpWb9CsJO8Hlo+vXA==} + '@pnpm/exe.win32-arm64@12.0.0-alpha.19': + resolution: {integrity: sha512-1d+yO16rY3JqWzO7hen7bjzdCUGX9kpUsR4FZqcJQWIWdOpLlBodp/8whOj5m7pg9ZkUUipY7Jhj56ojuPRF1g==} cpu: [arm64] os: [win32] - '@pnpm/exe.win32-x64@12.0.0-alpha.18': - resolution: {integrity: sha512-PhnRvniJ4kZoGeNbfgok3j2niFgICOVpitealSAB4ehhm848+ozPrXXKkeN6uOTjxsJ+NqaceiAezdr+lRbNpg==} + '@pnpm/exe.win32-x64@12.0.0-alpha.19': + resolution: {integrity: sha512-8WXhSxRs63O5p6IGwAC81CQy5yiliULQeXA6KrLtF+YyVzxI9FTTmLFVwTCwFoigkiosc2SC7Qkr/00G/cfOIQ==} cpu: [x64] os: [win32] - '@pnpm/exe@12.0.0-alpha.18': - resolution: {integrity: sha512-Ub4IG/78ZQl+SVP9U6/HWmvsG5g2hD7cRkvc3TYIckxxwMUFjOP3b6RwJELWR+27pjqY8mLGZH9X2BuXJTICsQ==} + '@pnpm/exe@12.0.0-alpha.19': + resolution: {integrity: sha512-Qb3nAS1ydU7rwJy1BNjpMDQ5BLGAQ4+oUzRPCO8D8cuVq04WtXfu7sIjwQ29pGX1PvUYTovU18asvzaytadDgg==} engines: {node: '>=18.*'} hasBin: true - pnpm@12.0.0-alpha.18: - resolution: {integrity: sha512-Re4kTj/DXeoRIh2wzoRuBQR/BtImPDnXDLRhOuJ2rSw2mHz9fMYGNgebvt7cqhfe1Qgvw4x3P/SBLmN/G7Z3hQ==} + pnpm@12.0.0-alpha.19: + resolution: {integrity: sha512-bgTK3SxlO+IlEbFpQocu3XJ6VWggkbE5WVdYr2psgozP6qXUHzjlqMOHznsIxkqHq6sCKpzKYanEg+iA8nf0zg==} engines: {node: '>=18.*'} hasBin: true snapshots: - '@pnpm/exe.darwin-arm64@12.0.0-alpha.18': + '@pnpm/exe.darwin-arm64@12.0.0-alpha.19': optional: true - '@pnpm/exe.darwin-x64@12.0.0-alpha.18': + '@pnpm/exe.darwin-x64@12.0.0-alpha.19': optional: true - '@pnpm/exe.linux-arm64-musl@12.0.0-alpha.18': + '@pnpm/exe.linux-arm64-musl@12.0.0-alpha.19': optional: true - '@pnpm/exe.linux-arm64@12.0.0-alpha.18': + '@pnpm/exe.linux-arm64@12.0.0-alpha.19': optional: true - '@pnpm/exe.linux-x64-musl@12.0.0-alpha.18': + '@pnpm/exe.linux-x64-musl@12.0.0-alpha.19': optional: true - '@pnpm/exe.linux-x64@12.0.0-alpha.18': + '@pnpm/exe.linux-x64@12.0.0-alpha.19': optional: true - '@pnpm/exe.win32-arm64@12.0.0-alpha.18': + '@pnpm/exe.win32-arm64@12.0.0-alpha.19': optional: true - '@pnpm/exe.win32-x64@12.0.0-alpha.18': + '@pnpm/exe.win32-x64@12.0.0-alpha.19': optional: true - '@pnpm/exe@12.0.0-alpha.18': + '@pnpm/exe@12.0.0-alpha.19': optionalDependencies: - '@pnpm/exe.darwin-arm64': 12.0.0-alpha.18 - '@pnpm/exe.darwin-x64': 12.0.0-alpha.18 - '@pnpm/exe.linux-arm64': 12.0.0-alpha.18 - '@pnpm/exe.linux-arm64-musl': 12.0.0-alpha.18 - '@pnpm/exe.linux-x64': 12.0.0-alpha.18 - '@pnpm/exe.linux-x64-musl': 12.0.0-alpha.18 - '@pnpm/exe.win32-arm64': 12.0.0-alpha.18 - '@pnpm/exe.win32-x64': 12.0.0-alpha.18 + '@pnpm/exe.darwin-arm64': 12.0.0-alpha.19 + '@pnpm/exe.darwin-x64': 12.0.0-alpha.19 + '@pnpm/exe.linux-arm64': 12.0.0-alpha.19 + '@pnpm/exe.linux-arm64-musl': 12.0.0-alpha.19 + '@pnpm/exe.linux-x64': 12.0.0-alpha.19 + '@pnpm/exe.linux-x64-musl': 12.0.0-alpha.19 + '@pnpm/exe.win32-arm64': 12.0.0-alpha.19 + '@pnpm/exe.win32-x64': 12.0.0-alpha.19 - pnpm@12.0.0-alpha.18: + pnpm@12.0.0-alpha.19: optionalDependencies: - '@pnpm/exe.darwin-arm64': 12.0.0-alpha.18 - '@pnpm/exe.darwin-x64': 12.0.0-alpha.18 - '@pnpm/exe.linux-arm64': 12.0.0-alpha.18 - '@pnpm/exe.linux-arm64-musl': 12.0.0-alpha.18 - '@pnpm/exe.linux-x64': 12.0.0-alpha.18 - '@pnpm/exe.linux-x64-musl': 12.0.0-alpha.18 - '@pnpm/exe.win32-arm64': 12.0.0-alpha.18 - '@pnpm/exe.win32-x64': 12.0.0-alpha.18 + '@pnpm/exe.darwin-arm64': 12.0.0-alpha.19 + '@pnpm/exe.darwin-x64': 12.0.0-alpha.19 + '@pnpm/exe.linux-arm64': 12.0.0-alpha.19 + '@pnpm/exe.linux-arm64-musl': 12.0.0-alpha.19 + '@pnpm/exe.linux-x64': 12.0.0-alpha.19 + '@pnpm/exe.linux-x64-musl': 12.0.0-alpha.19 + '@pnpm/exe.win32-arm64': 12.0.0-alpha.19 + '@pnpm/exe.win32-x64': 12.0.0-alpha.19 --- lockfileVersion: '9.0' diff --git a/pnpm11/__utils__/prepare-temp-dir/package.json b/pnpm11/__utils__/prepare-temp-dir/package.json index 4557936a23..98dbc8d84e 100644 --- a/pnpm11/__utils__/prepare-temp-dir/package.json +++ b/pnpm11/__utils__/prepare-temp-dir/package.json @@ -4,6 +4,9 @@ "main": "lib/index.js", "type": "module", "types": "lib/index.d.ts", + "files": [ + "lib/" + ], "devDependencies": { "@pnpm/prepare-temp-dir": "workspace:*", "@types/node": "catalog:" diff --git a/pnpm11/__utils__/prepare/package.json b/pnpm11/__utils__/prepare/package.json index 4a91228ebc..20facd21d5 100644 --- a/pnpm11/__utils__/prepare/package.json +++ b/pnpm11/__utils__/prepare/package.json @@ -4,6 +4,9 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "type": "module", + "files": [ + "lib/" + ], "dependencies": { "@pnpm/assert-project": "workspace:*", "@pnpm/prepare-temp-dir": "workspace:*",