@vercel/build-utils 14.2.0 → 14.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2024,11 +2024,11 @@ var require_stream_readable = __commonJS({
2024
2024
  var require_stream_transform = __commonJS({
2025
2025
  "../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_transform.js"(exports, module2) {
2026
2026
  "use strict";
2027
- module2.exports = Transform;
2027
+ module2.exports = Transform2;
2028
2028
  var Duplex = require_stream_duplex();
2029
2029
  var util = Object.create(require_util());
2030
2030
  util.inherits = require_inherits();
2031
- util.inherits(Transform, Duplex);
2031
+ util.inherits(Transform2, Duplex);
2032
2032
  function afterTransform(er, data) {
2033
2033
  var ts = this._transformState;
2034
2034
  ts.transforming = false;
@@ -2047,9 +2047,9 @@ var require_stream_transform = __commonJS({
2047
2047
  this._read(rs.highWaterMark);
2048
2048
  }
2049
2049
  }
2050
- function Transform(options) {
2051
- if (!(this instanceof Transform))
2052
- return new Transform(options);
2050
+ function Transform2(options) {
2051
+ if (!(this instanceof Transform2))
2052
+ return new Transform2(options);
2053
2053
  Duplex.call(this, options);
2054
2054
  this._transformState = {
2055
2055
  afterTransform: afterTransform.bind(this),
@@ -2079,14 +2079,14 @@ var require_stream_transform = __commonJS({
2079
2079
  done(this, null, null);
2080
2080
  }
2081
2081
  }
2082
- Transform.prototype.push = function(chunk, encoding) {
2082
+ Transform2.prototype.push = function(chunk, encoding) {
2083
2083
  this._transformState.needTransform = false;
2084
2084
  return Duplex.prototype.push.call(this, chunk, encoding);
2085
2085
  };
2086
- Transform.prototype._transform = function(chunk, encoding, cb) {
2086
+ Transform2.prototype._transform = function(chunk, encoding, cb) {
2087
2087
  throw new Error("_transform() is not implemented");
2088
2088
  };
2089
- Transform.prototype._write = function(chunk, encoding, cb) {
2089
+ Transform2.prototype._write = function(chunk, encoding, cb) {
2090
2090
  var ts = this._transformState;
2091
2091
  ts.writecb = cb;
2092
2092
  ts.writechunk = chunk;
@@ -2097,7 +2097,7 @@ var require_stream_transform = __commonJS({
2097
2097
  this._read(rs.highWaterMark);
2098
2098
  }
2099
2099
  };
2100
- Transform.prototype._read = function(n) {
2100
+ Transform2.prototype._read = function(n) {
2101
2101
  var ts = this._transformState;
2102
2102
  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
2103
2103
  ts.transforming = true;
@@ -2106,7 +2106,7 @@ var require_stream_transform = __commonJS({
2106
2106
  ts.needTransform = true;
2107
2107
  }
2108
2108
  };
2109
- Transform.prototype._destroy = function(err, cb) {
2109
+ Transform2.prototype._destroy = function(err, cb) {
2110
2110
  var _this2 = this;
2111
2111
  Duplex.prototype._destroy.call(this, err, function(err2) {
2112
2112
  cb(err2);
@@ -2132,14 +2132,14 @@ var require_stream_passthrough = __commonJS({
2132
2132
  "../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_passthrough.js"(exports, module2) {
2133
2133
  "use strict";
2134
2134
  module2.exports = PassThrough;
2135
- var Transform = require_stream_transform();
2135
+ var Transform2 = require_stream_transform();
2136
2136
  var util = Object.create(require_util());
2137
2137
  util.inherits = require_inherits();
2138
- util.inherits(PassThrough, Transform);
2138
+ util.inherits(PassThrough, Transform2);
2139
2139
  function PassThrough(options) {
2140
2140
  if (!(this instanceof PassThrough))
2141
2141
  return new PassThrough(options);
2142
- Transform.call(this, options);
2142
+ Transform2.call(this, options);
2143
2143
  }
2144
2144
  PassThrough.prototype._transform = function(chunk, encoding, cb) {
2145
2145
  cb(null, chunk);
@@ -6016,7 +6016,7 @@ var require_buffer_crc32 = __commonJS({
6016
6016
  var require_yazl = __commonJS({
6017
6017
  "../../node_modules/.pnpm/yazl@2.5.1/node_modules/yazl/index.js"(exports) {
6018
6018
  var fs11 = require("fs");
6019
- var Transform = require("stream").Transform;
6019
+ var Transform2 = require("stream").Transform;
6020
6020
  var PassThrough = require("stream").PassThrough;
6021
6021
  var zlib = require("zlib");
6022
6022
  var util = require("util");
@@ -6540,18 +6540,18 @@ var require_yazl = __commonJS({
6540
6540
  buffer.writeUInt32LE(low, offset);
6541
6541
  buffer.writeUInt32LE(high, offset + 4);
6542
6542
  }
6543
- util.inherits(ByteCounter, Transform);
6543
+ util.inherits(ByteCounter, Transform2);
6544
6544
  function ByteCounter(options) {
6545
- Transform.call(this, options);
6545
+ Transform2.call(this, options);
6546
6546
  this.byteCount = 0;
6547
6547
  }
6548
6548
  ByteCounter.prototype._transform = function(chunk, encoding, cb) {
6549
6549
  this.byteCount += chunk.length;
6550
6550
  cb(null, chunk);
6551
6551
  };
6552
- util.inherits(Crc32Watcher, Transform);
6552
+ util.inherits(Crc32Watcher, Transform2);
6553
6553
  function Crc32Watcher(options) {
6554
- Transform.call(this, options);
6554
+ Transform2.call(this, options);
6555
6555
  this.crc32 = 0;
6556
6556
  }
6557
6557
  Crc32Watcher.prototype._transform = function(chunk, encoding, cb) {
@@ -34375,6 +34375,8 @@ __export(src_exports, {
34375
34375
  getInternalServiceCronPath: () => getInternalServiceCronPath,
34376
34376
  getInternalServiceCronPathPrefix: () => getInternalServiceCronPathPrefix,
34377
34377
  getInternalServiceFunctionPath: () => getInternalServiceFunctionPath,
34378
+ getInternalServiceWorkerPath: () => getInternalServiceWorkerPath,
34379
+ getInternalServiceWorkerPathPrefix: () => getInternalServiceWorkerPathPrefix,
34378
34380
  getLambdaByOutputPath: () => getLambdaByOutputPath,
34379
34381
  getLambdaEnvironment: () => getLambdaEnvironment,
34380
34382
  getLambdaOptionsFromFunction: () => getLambdaOptionsFromFunction,
@@ -35660,6 +35662,7 @@ var import_path6 = __toESM(require("path"));
35660
35662
  var import_async_sema4 = __toESM(require_async_sema());
35661
35663
  var import_cross_spawn = __toESM(require_cross_spawn());
35662
35664
  var import_semver2 = __toESM(require_semver2());
35665
+ var import_stream2 = require("stream");
35663
35666
  var import_util6 = require("util");
35664
35667
 
35665
35668
  // src/fs/node-version.ts
@@ -36953,7 +36956,8 @@ async function scanParentDirs(destPath, readPackageJson2 = false, base = "/") {
36953
36956
  bunLockBinPath,
36954
36957
  vltLockPath
36955
36958
  ],
36956
- packageJsonPackageManager
36959
+ packageJsonPackageManager,
36960
+ packageJsonDevEngines
36957
36961
  } = await walkParentDirsMulti({
36958
36962
  base,
36959
36963
  start: destPath,
@@ -37020,6 +37024,7 @@ async function scanParentDirs(destPath, readPackageJson2 = false, base = "/") {
37020
37024
  cliType,
37021
37025
  packageJson,
37022
37026
  packageJsonPackageManager,
37027
+ packageJsonDevEngines,
37023
37028
  lockfilePath,
37024
37029
  lockfileVersion,
37025
37030
  packageJsonPath,
@@ -37135,6 +37140,7 @@ async function walkParentDirsMulti({
37135
37140
  filenames
37136
37141
  }) {
37137
37142
  let packageManager;
37143
+ let devEngines;
37138
37144
  for (const dir of traverseUpDirectories({ start, base })) {
37139
37145
  const fullPaths = filenames.map((f) => import_path6.default.join(dir, f));
37140
37146
  const existResults = await Promise.all(
@@ -37146,14 +37152,22 @@ async function walkParentDirsMulti({
37146
37152
  if (packageJson?.packageManager) {
37147
37153
  packageManager = packageJson.packageManager;
37148
37154
  }
37155
+ if (packageJson?.devEngines) {
37156
+ devEngines = packageJson.devEngines;
37157
+ }
37149
37158
  if (foundOneOrMore) {
37150
37159
  return {
37151
37160
  paths: fullPaths.map((f, i) => existResults[i] ? f : void 0),
37152
- packageJsonPackageManager: packageManager
37161
+ packageJsonPackageManager: packageManager,
37162
+ packageJsonDevEngines: devEngines
37153
37163
  };
37154
37164
  }
37155
37165
  }
37156
- return { paths: [], packageJsonPackageManager: packageManager };
37166
+ return {
37167
+ paths: [],
37168
+ packageJsonPackageManager: packageManager,
37169
+ packageJsonDevEngines: devEngines
37170
+ };
37157
37171
  }
37158
37172
  function isSet(v) {
37159
37173
  return v?.constructor?.name === "Set";
@@ -37190,6 +37204,29 @@ function getInstallCommandForPackageManager(packageManager, args) {
37190
37204
  };
37191
37205
  }
37192
37206
  }
37207
+ function stripPnpmVersionFooter(line) {
37208
+ return line.replace(/ using pnpm v\d+\.\d+\.\d+(?=\r?$)/, "");
37209
+ }
37210
+ function createPnpmOutputFilter(destination) {
37211
+ let incompleteLine = "";
37212
+ return new import_stream2.Transform({
37213
+ transform(chunk, _encoding, callback) {
37214
+ const lines = `${incompleteLine}${chunk.toString()}`.split("\n");
37215
+ incompleteLine = lines.pop() ?? "";
37216
+ for (const line of lines) {
37217
+ destination.write(`${stripPnpmVersionFooter(line)}
37218
+ `);
37219
+ }
37220
+ callback();
37221
+ },
37222
+ flush(callback) {
37223
+ if (incompleteLine) {
37224
+ destination.write(stripPnpmVersionFooter(incompleteLine));
37225
+ }
37226
+ callback();
37227
+ }
37228
+ });
37229
+ }
37193
37230
  async function runInstallCommand({
37194
37231
  packageManager,
37195
37232
  args,
@@ -37201,8 +37238,9 @@ async function runInstallCommand({
37201
37238
  if (process.env.NPM_ONLY_PRODUCTION) {
37202
37239
  commandArguments.push("--production");
37203
37240
  }
37204
- opts.outputStream = output?.stdout;
37205
- opts.errorStream = output?.stderr;
37241
+ const shouldFilterPnpmOutput = packageManager === "pnpm";
37242
+ opts.outputStream = shouldFilterPnpmOutput ? createPnpmOutputFilter(output?.stdout ?? process.stdout) : output?.stdout;
37243
+ opts.errorStream = shouldFilterPnpmOutput ? output?.stderr ?? process.stderr : output?.stderr;
37206
37244
  await spawnAsync(packageManager, commandArguments, opts);
37207
37245
  }
37208
37246
  function initializeSet(set) {
@@ -37246,6 +37284,7 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, projectCreate
37246
37284
  packageJson,
37247
37285
  lockfileVersion,
37248
37286
  packageJsonPackageManager,
37287
+ packageJsonDevEngines,
37249
37288
  turboSupportsCorepackHome
37250
37289
  } = await scanParentDirs(destPath, true);
37251
37290
  if (!packageJsonPath) {
@@ -37284,12 +37323,6 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, projectCreate
37284
37323
  }
37285
37324
  }
37286
37325
  const installTime = Date.now();
37287
- if (output?.stdout) {
37288
- output.stdout.write("Installing dependencies...\n");
37289
- } else {
37290
- console.log("Installing dependencies...");
37291
- }
37292
- debug(`Installing to ${destPath}`);
37293
37326
  const opts = { cwd: destPath, ...spawnOpts };
37294
37327
  const env = cloneEnv(opts.env || process.env);
37295
37328
  delete env.NODE_ENV;
@@ -37297,11 +37330,26 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, projectCreate
37297
37330
  cliType,
37298
37331
  lockfileVersion,
37299
37332
  packageJsonPackageManager,
37333
+ packageJsonDevEngines,
37300
37334
  env,
37301
37335
  packageJsonEngines: packageJson?.engines,
37302
37336
  turboSupportsCorepackHome,
37303
37337
  projectCreatedAt
37304
37338
  });
37339
+ const packageManager = getPackageManagerDisplayName({
37340
+ cliType,
37341
+ lockfileVersion,
37342
+ packageJsonPackageManager,
37343
+ env: opts.env
37344
+ });
37345
+ const installMessage = `Installing dependencies with ${packageManager}`;
37346
+ if (output?.stdout) {
37347
+ output.stdout.write(`${installMessage}
37348
+ `);
37349
+ } else {
37350
+ console.log(installMessage);
37351
+ }
37352
+ debug(`Installing to ${destPath}`);
37305
37353
  const maySeeDynamicRequireYarnBug = process.env?.ENABLE_EXPERIMENTAL_COREPACK && packageJson?.packageManager?.startsWith("yarn") && packageJson?.type === "module";
37306
37354
  if (maySeeDynamicRequireYarnBug) {
37307
37355
  console.warn(
@@ -37320,10 +37368,42 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, projectCreate
37320
37368
  runNpmInstallSema.release();
37321
37369
  }
37322
37370
  }
37371
+ function getPackageManagerDisplayName({
37372
+ cliType,
37373
+ lockfileVersion,
37374
+ packageJsonPackageManager,
37375
+ env
37376
+ }) {
37377
+ const versionResult = import_cross_spawn.default.sync(cliType, ["--version"], {
37378
+ env,
37379
+ encoding: "utf8"
37380
+ });
37381
+ const version = versionResult.status === 0 ? versionResult.stdout.trim() : "";
37382
+ if (version) {
37383
+ return `${cliType} ${version}`;
37384
+ }
37385
+ if (packageJsonPackageManager && env.ENABLE_EXPERIMENTAL_COREPACK) {
37386
+ return packageJsonPackageManager.replace("@", " ");
37387
+ }
37388
+ if (cliType === "pnpm") {
37389
+ const selectedPath = env.PATH?.split(import_path6.default.delimiter).find(
37390
+ (segment) => /^\/pnpm\d+\/node_modules\/\.bin$/.test(segment)
37391
+ );
37392
+ const major = selectedPath?.match(/^\/pnpm(\d+)\//)?.[1];
37393
+ if (major) {
37394
+ return `pnpm ${major}`;
37395
+ }
37396
+ }
37397
+ if (cliType === "yarn") {
37398
+ return detectYarnVersion(lockfileVersion).replace("@", " ").replace(/\.x$/, "");
37399
+ }
37400
+ return cliType;
37401
+ }
37323
37402
  function getEnvForPackageManager({
37324
37403
  cliType,
37325
37404
  lockfileVersion,
37326
37405
  packageJsonPackageManager,
37406
+ packageJsonDevEngines,
37327
37407
  nodeVersion,
37328
37408
  env,
37329
37409
  packageJsonEngines,
@@ -37343,6 +37423,7 @@ function getEnvForPackageManager({
37343
37423
  cliType,
37344
37424
  lockfileVersion,
37345
37425
  corepackPackageManager: packageJsonPackageManager,
37426
+ packageJsonDevEngines,
37346
37427
  corepackEnabled,
37347
37428
  nodeVersion,
37348
37429
  packageJsonEngines,
@@ -37376,28 +37457,6 @@ function getEnvForPackageManager({
37376
37457
  if (pathsToPrepend.length > 0) {
37377
37458
  const oldPath = env.PATH + "";
37378
37459
  newEnv.PATH = `${pathsToPrepend.join(import_path6.default.delimiter)}${oldPath ? import_path6.default.delimiter : ""}${oldPath}`;
37379
- if (newPath && pathsToPrepend.includes(newPath) && detectedLockfile && detectedPackageManager) {
37380
- const detectedV9PnpmLockfile = detectedLockfile === "pnpm-lock.yaml" && lockfileVersion === 9;
37381
- const pnpm10UsingPackageJsonPackageManager = detectedPackageManager === "pnpm@10.x" && packageJsonPackageManager;
37382
- if (pnpm10UsingPackageJsonPackageManager) {
37383
- const versionString = cliType === "pnpm" ? `version ${lockfileVersion} ` : "";
37384
- console.log(
37385
- `Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager} with package.json#packageManager ${packageJsonPackageManager}`
37386
- );
37387
- } else if (detectedV9PnpmLockfile) {
37388
- const otherVersion = detectedPackageManager === "pnpm@10.x" ? `pnpm@9.x` : `pnpm@10.x`;
37389
- console.log(
37390
- `Detected \`${detectedLockfile}\` ${lockfileVersion} which may be generated by pnpm@9.x or pnpm@10.x
37391
- Using ${detectedPackageManager} based on project creation date
37392
- To use ${otherVersion}, manually opt in using corepack (https://vercel.com/docs/deployments/configure-a-build#corepack)`
37393
- );
37394
- } else {
37395
- const versionString = cliType === "pnpm" ? `version ${lockfileVersion} ` : "";
37396
- console.log(
37397
- `Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager}`
37398
- );
37399
- }
37400
- }
37401
37460
  }
37402
37461
  if (cliType === "yarn" && !env.YARN_NODE_LINKER) {
37403
37462
  newEnv.YARN_NODE_LINKER = "node-modules";
@@ -37405,7 +37464,29 @@ To use ${otherVersion}, manually opt in using corepack (https://vercel.com/docs/
37405
37464
  return newEnv;
37406
37465
  }
37407
37466
  var PNPM_10_PREFERRED_AT = /* @__PURE__ */ new Date("2025-02-27T20:00:00Z");
37408
- function detectPnpmVersion(lockfileVersion, projectCreatedAt) {
37467
+ var PNPM_11_PREFERRED_AT = /* @__PURE__ */ new Date("2026-08-19T20:00:00Z");
37468
+ var INSTALLED_PNPM_MAJORS = [11, 10, 9, 8, 7, 6];
37469
+ function pnpmPathOverride(major) {
37470
+ return {
37471
+ path: `/pnpm${major}/node_modules/.bin`,
37472
+ detectedLockfile: "pnpm-lock.yaml",
37473
+ detectedPackageManager: `pnpm@${major}.x`,
37474
+ pnpmVersionRange: `${major}.x`
37475
+ };
37476
+ }
37477
+ function isPnpmMajorAvailable(major) {
37478
+ if (major <= 10) {
37479
+ return true;
37480
+ }
37481
+ return import_fs_extra7.default.existsSync(`/pnpm${major}`);
37482
+ }
37483
+ function nodeSupportsPnpm11Default(nodeVersion) {
37484
+ if (!nodeVersion || isBunVersion(nodeVersion)) {
37485
+ return true;
37486
+ }
37487
+ return nodeVersion.major >= 22;
37488
+ }
37489
+ function detectPnpmVersion(lockfileVersion, projectCreatedAt, nodeVersion) {
37409
37490
  switch (true) {
37410
37491
  case lockfileVersion === void 0:
37411
37492
  return "not found";
@@ -37418,8 +37499,13 @@ function detectPnpmVersion(lockfileVersion, projectCreatedAt) {
37418
37499
  case lockfileVersion === 7:
37419
37500
  return "pnpm 9";
37420
37501
  case lockfileVersion === 9: {
37421
- const projectPrefersPnpm10 = projectCreatedAt && projectCreatedAt >= PNPM_10_PREFERRED_AT.getTime();
37422
- return projectPrefersPnpm10 ? "pnpm 10" : "pnpm 9";
37502
+ if (projectCreatedAt && projectCreatedAt >= PNPM_11_PREFERRED_AT.getTime() && nodeSupportsPnpm11Default(nodeVersion) && isPnpmMajorAvailable(11)) {
37503
+ return "pnpm 11";
37504
+ }
37505
+ if (projectCreatedAt && projectCreatedAt >= PNPM_10_PREFERRED_AT.getTime()) {
37506
+ return "pnpm 10";
37507
+ }
37508
+ return "pnpm 9";
37423
37509
  }
37424
37510
  default:
37425
37511
  return "not found";
@@ -37449,6 +37535,7 @@ function validLockfileForPackageManager(cliType, lockfileVersion, packageManager
37449
37535
  return true;
37450
37536
  case "pnpm":
37451
37537
  switch (packageManagerMajorVersion) {
37538
+ case 11:
37452
37539
  case 10:
37453
37540
  return lockfileVersion === 9;
37454
37541
  case 9:
@@ -37467,10 +37554,75 @@ function validLockfileForPackageManager(cliType, lockfileVersion, packageManager
37467
37554
  }
37468
37555
  }
37469
37556
  }
37557
+ function lockfileCompatibleWithPnpm(lockfileVersion, packageManagerVersion) {
37558
+ if (lockfileVersion === void 0) {
37559
+ return true;
37560
+ }
37561
+ return validLockfileForPackageManager(
37562
+ "pnpm",
37563
+ lockfileVersion,
37564
+ packageManagerVersion
37565
+ );
37566
+ }
37567
+ function highestInstalledPnpmMajor(versionRange, lockfileVersion) {
37568
+ if (!(0, import_semver2.validRange)(versionRange)) {
37569
+ return void 0;
37570
+ }
37571
+ for (const major of INSTALLED_PNPM_MAJORS) {
37572
+ if (!isPnpmMajorAvailable(major)) {
37573
+ continue;
37574
+ }
37575
+ if (!(0, import_semver2.intersects)(`${major}.x`, versionRange)) {
37576
+ continue;
37577
+ }
37578
+ const versionForLockfile = (0, import_semver2.parse)(major === 9 ? "9.0.1" : `${major}.0.0`);
37579
+ if (!versionForLockfile || !lockfileCompatibleWithPnpm(lockfileVersion, versionForLockfile)) {
37580
+ continue;
37581
+ }
37582
+ return major;
37583
+ }
37584
+ return void 0;
37585
+ }
37586
+ function resolveDevEnginesPnpmRange(devEngines) {
37587
+ if (!devEngines?.packageManager) {
37588
+ return void 0;
37589
+ }
37590
+ const entries = Array.isArray(devEngines.packageManager) ? devEngines.packageManager : [devEngines.packageManager];
37591
+ const pnpm = entries.find((entry) => entry.name === "pnpm" && entry.version);
37592
+ return pnpm?.version;
37593
+ }
37594
+ function resolveCompatiblePnpmPin({
37595
+ cliType,
37596
+ lockfileVersion,
37597
+ packageJsonDevEngines,
37598
+ corepackPackageManager
37599
+ }) {
37600
+ if (cliType !== "pnpm") {
37601
+ return void 0;
37602
+ }
37603
+ const devEnginesRange = resolveDevEnginesPnpmRange(packageJsonDevEngines);
37604
+ if (devEnginesRange) {
37605
+ const major = highestInstalledPnpmMajor(devEnginesRange, lockfileVersion);
37606
+ if (major !== void 0) {
37607
+ return { override: pnpmPathOverride(major), source: "devEngines" };
37608
+ }
37609
+ }
37610
+ const parsed = validateVersionSpecifier(corepackPackageManager);
37611
+ if (parsed?.packageName === "pnpm") {
37612
+ if (lockfileCompatibleWithPnpm(lockfileVersion, parsed.packageVersion) && isPnpmMajorAvailable(parsed.packageVersion.major)) {
37613
+ return {
37614
+ override: pnpmPathOverride(parsed.packageVersion.major),
37615
+ source: "packageManager"
37616
+ };
37617
+ }
37618
+ }
37619
+ return void 0;
37620
+ }
37470
37621
  function getPathOverrideForPackageManager({
37471
37622
  cliType,
37472
37623
  lockfileVersion,
37473
37624
  corepackPackageManager,
37625
+ packageJsonDevEngines,
37474
37626
  corepackEnabled = true,
37475
37627
  nodeVersion,
37476
37628
  packageJsonEngines,
@@ -37479,7 +37631,8 @@ function getPathOverrideForPackageManager({
37479
37631
  const detectedPackageManger = detectPackageManager(
37480
37632
  cliType,
37481
37633
  lockfileVersion,
37482
- projectCreatedAt
37634
+ projectCreatedAt,
37635
+ nodeVersion
37483
37636
  );
37484
37637
  const usingCorepack2 = corepackPackageManager && corepackEnabled;
37485
37638
  if (usingCorepack2) {
@@ -37491,14 +37644,20 @@ function getPathOverrideForPackageManager({
37491
37644
  );
37492
37645
  return NO_OVERRIDE;
37493
37646
  }
37647
+ const pin = resolveCompatiblePnpmPin({
37648
+ cliType,
37649
+ lockfileVersion,
37650
+ packageJsonDevEngines,
37651
+ corepackPackageManager
37652
+ });
37653
+ let selected = pin?.override ?? detectedPackageManger;
37494
37654
  if (cliType === "pnpm" && packageJsonEngines?.pnpm) {
37495
- const usingDetected = detectedPackageManger?.pnpmVersionRange !== "10.x" || !corepackPackageManager;
37496
- if (usingDetected) {
37497
- checkEnginesPnpmAgainstDetected(
37498
- packageJsonEngines.pnpm,
37499
- detectedPackageManger
37500
- );
37501
- }
37655
+ selected = applyEnginesPnpm({
37656
+ enginesPnpm: packageJsonEngines.pnpm,
37657
+ selected,
37658
+ usedPin: Boolean(pin),
37659
+ lockfileVersion
37660
+ });
37502
37661
  }
37503
37662
  if (cliType === "bun" && detectedPackageManger && nodeVersion && isBunVersion(nodeVersion)) {
37504
37663
  const minor = nodeVersion.minor;
@@ -37508,20 +37667,53 @@ function getPathOverrideForPackageManager({
37508
37667
  detectedPackageManager: `bun@${nodeVersion.range}`
37509
37668
  };
37510
37669
  }
37511
- return detectedPackageManger ?? NO_OVERRIDE;
37670
+ return selected ?? NO_OVERRIDE;
37512
37671
  }
37513
- function checkEnginesPnpmAgainstDetected(enginesPnpm, detectedPackageManger) {
37514
- if (detectedPackageManger?.pnpmVersionRange && (0, import_semver2.validRange)(detectedPackageManger.pnpmVersionRange) && (0, import_semver2.validRange)(enginesPnpm)) {
37515
- if (!(0, import_semver2.intersects)(detectedPackageManger.pnpmVersionRange, enginesPnpm)) {
37516
- throw new Error(
37517
- `Detected pnpm "${detectedPackageManger.pnpmVersionRange}" is not compatible with the engines.pnpm "${enginesPnpm}" in your package.json. Either enable corepack with a valid package.json#packageManager value (https://vercel.com/docs/deployments/configure-a-build#corepack) or remove your package.json#engines.pnpm.`
37518
- );
37672
+ function applyEnginesPnpm({
37673
+ enginesPnpm,
37674
+ selected,
37675
+ usedPin,
37676
+ lockfileVersion
37677
+ }) {
37678
+ const selectedRange = selected && "pnpmVersionRange" in selected ? selected.pnpmVersionRange : void 0;
37679
+ if (selectedRange && (0, import_semver2.validRange)(selectedRange) && (0, import_semver2.validRange)(enginesPnpm)) {
37680
+ if ((0, import_semver2.intersects)(selectedRange, enginesPnpm)) {
37681
+ if (!usedPin) {
37682
+ warnEnginesPnpmWithoutPin();
37683
+ }
37684
+ return selected;
37685
+ }
37686
+ if (!usedPin) {
37687
+ const major = highestInstalledPnpmMajor(enginesPnpm, lockfileVersion);
37688
+ if (major !== void 0) {
37689
+ return pnpmPathOverride(major);
37690
+ }
37691
+ if (shouldDeferPnpm11UntilImageHasBinary(enginesPnpm, lockfileVersion)) {
37692
+ warnEnginesPnpmWithoutPin();
37693
+ return selected;
37694
+ }
37519
37695
  }
37696
+ throw new Error(
37697
+ `Detected pnpm "${selectedRange}" is not compatible with the engines.pnpm "${enginesPnpm}" in your package.json. Set package.json#packageManager or package.json#devEngines.packageManager to a compatible pnpm version, or remove package.json#engines.pnpm.`
37698
+ );
37520
37699
  }
37700
+ if (!usedPin) {
37701
+ warnEnginesPnpmWithoutPin();
37702
+ }
37703
+ return selected;
37704
+ }
37705
+ function warnEnginesPnpmWithoutPin() {
37521
37706
  console.warn(
37522
37707
  `Using package.json#engines.pnpm without corepack and package.json#packageManager could lead to failed builds with ERR_PNPM_UNSUPPORTED_ENGINE. Learn more: https://vercel.com/docs/errors/error-list#pnpm-engine-unsupported`
37523
37708
  );
37524
37709
  }
37710
+ function shouldDeferPnpm11UntilImageHasBinary(enginesPnpm, lockfileVersion) {
37711
+ if (isPnpmMajorAvailable(11) || !(0, import_semver2.intersects)("11.x", enginesPnpm)) {
37712
+ return false;
37713
+ }
37714
+ const pnpm11 = (0, import_semver2.parse)("11.0.0");
37715
+ return Boolean(pnpm11 && lockfileCompatibleWithPnpm(lockfileVersion, pnpm11));
37716
+ }
37525
37717
  function validateCorepackPackageManager(cliType, lockfileVersion, corepackPackageManager, enginesPnpmVersionRange) {
37526
37718
  const validatedCorepackPackageManager = validateVersionSpecifier(
37527
37719
  corepackPackageManager
@@ -37583,50 +37775,33 @@ function validateVersionSpecifier(version) {
37583
37775
  packageVersion
37584
37776
  };
37585
37777
  }
37586
- function detectPackageManager(cliType, lockfileVersion, projectCreatedAt) {
37778
+ function detectPackageManager(cliType, lockfileVersion, projectCreatedAt, nodeVersion) {
37587
37779
  switch (cliType) {
37588
37780
  case "npm":
37589
37781
  return void 0;
37590
- case "pnpm":
37591
- switch (detectPnpmVersion(lockfileVersion, projectCreatedAt)) {
37782
+ case "pnpm": {
37783
+ const detected = detectPnpmVersion(
37784
+ lockfileVersion,
37785
+ projectCreatedAt,
37786
+ nodeVersion
37787
+ );
37788
+ switch (detected) {
37789
+ case "pnpm 6":
37790
+ return pnpmPathOverride(6);
37592
37791
  case "pnpm 7":
37593
- return {
37594
- path: "/pnpm7/node_modules/.bin",
37595
- detectedLockfile: "pnpm-lock.yaml",
37596
- detectedPackageManager: "pnpm@7.x",
37597
- pnpmVersionRange: "7.x"
37598
- };
37792
+ return pnpmPathOverride(7);
37599
37793
  case "pnpm 8":
37600
- return {
37601
- path: "/pnpm8/node_modules/.bin",
37602
- detectedLockfile: "pnpm-lock.yaml",
37603
- detectedPackageManager: "pnpm@8.x",
37604
- pnpmVersionRange: "8.x"
37605
- };
37794
+ return pnpmPathOverride(8);
37606
37795
  case "pnpm 9":
37607
- return {
37608
- path: "/pnpm9/node_modules/.bin",
37609
- detectedLockfile: "pnpm-lock.yaml",
37610
- detectedPackageManager: "pnpm@9.x",
37611
- pnpmVersionRange: "9.x"
37612
- };
37796
+ return pnpmPathOverride(9);
37613
37797
  case "pnpm 10":
37614
- return {
37615
- path: "/pnpm10/node_modules/.bin",
37616
- detectedLockfile: "pnpm-lock.yaml",
37617
- detectedPackageManager: "pnpm@10.x",
37618
- pnpmVersionRange: "10.x"
37619
- };
37620
- case "pnpm 6":
37621
- return {
37622
- path: "/pnpm6/node_modules/.bin",
37623
- detectedLockfile: "pnpm-lock.yaml",
37624
- detectedPackageManager: "pnpm@6.x",
37625
- pnpmVersionRange: "6.x"
37626
- };
37798
+ return pnpmPathOverride(10);
37799
+ case "pnpm 11":
37800
+ return pnpmPathOverride(11);
37627
37801
  default:
37628
37802
  return void 0;
37629
37803
  }
37804
+ }
37630
37805
  case "bun":
37631
37806
  return {
37632
37807
  path: "/bun1",
@@ -37703,6 +37878,7 @@ async function runCustomInstallCommand({
37703
37878
  packageJson,
37704
37879
  packageJsonPath,
37705
37880
  packageJsonPackageManager,
37881
+ packageJsonDevEngines,
37706
37882
  turboSupportsCorepackHome
37707
37883
  } = await scanParentDirs(destPath, true);
37708
37884
  if (installCompletedCovers(packageJsonPath)) {
@@ -37716,6 +37892,7 @@ async function runCustomInstallCommand({
37716
37892
  cliType,
37717
37893
  lockfileVersion,
37718
37894
  packageJsonPackageManager,
37895
+ packageJsonDevEngines,
37719
37896
  env: spawnOpts?.env || {},
37720
37897
  packageJsonEngines: packageJson?.engines,
37721
37898
  turboSupportsCorepackHome,
@@ -37736,6 +37913,7 @@ async function runPackageJsonScript(destPath, scriptNames, spawnOpts, projectCre
37736
37913
  cliType,
37737
37914
  lockfileVersion,
37738
37915
  packageJsonPackageManager,
37916
+ packageJsonDevEngines,
37739
37917
  turboSupportsCorepackHome
37740
37918
  } = await scanParentDirs(destPath, true);
37741
37919
  const scriptName = getScriptName(
@@ -37753,6 +37931,7 @@ async function runPackageJsonScript(destPath, scriptNames, spawnOpts, projectCre
37753
37931
  cliType,
37754
37932
  lockfileVersion,
37755
37933
  packageJsonPackageManager,
37934
+ packageJsonDevEngines,
37756
37935
  env: cloneEnv(process.env, spawnOpts?.env),
37757
37936
  packageJsonEngines: packageJson?.engines,
37758
37937
  turboSupportsCorepackHome,
@@ -39690,6 +39869,13 @@ function getInternalServiceCronPath(serviceName, entrypoint, handler = "cron") {
39690
39869
  const normalizedEntrypoint = normalizeInternalServiceEntrypoint(entrypoint);
39691
39870
  return `${getInternalServiceCronPathPrefix(serviceName)}/${normalizedEntrypoint}/${handler}`;
39692
39871
  }
39872
+ function getInternalServiceWorkerPathPrefix(serviceName) {
39873
+ return `${INTERNAL_SERVICE_PREFIX}/${serviceName}/workers`;
39874
+ }
39875
+ function getInternalServiceWorkerPath(serviceName, entrypoint, handler = "worker") {
39876
+ const normalizedEntrypoint = normalizeInternalServiceEntrypoint(entrypoint);
39877
+ return `${getInternalServiceWorkerPathPrefix(serviceName)}/${normalizedEntrypoint}/${handler}`;
39878
+ }
39693
39879
 
39694
39880
  // src/process-serverless/get-encrypted-env-file.ts
39695
39881
  function getEncryptedEnv(envFilename, envContent) {
@@ -39999,11 +40185,11 @@ function getAndVerifyOutputLambdasOrEdgeFuncs(buildResponse) {
39999
40185
  }
40000
40186
 
40001
40187
  // src/collect-build-result/stream-with-extended-payload.ts
40002
- var import_stream2 = require("stream");
40188
+ var import_stream3 = require("stream");
40003
40189
  function streamWithExtendedPayload(stream, data) {
40004
40190
  return data ? new MultipartContentStream(stream, data) : stream;
40005
40191
  }
40006
- var MultipartContentStream = class extends import_stream2.Readable {
40192
+ var MultipartContentStream = class extends import_stream3.Readable {
40007
40193
  constructor(stream, data) {
40008
40194
  super();
40009
40195
  stream.on("error", (err) => {
@@ -40780,6 +40966,8 @@ function getExtendedPayload({
40780
40966
  getInternalServiceCronPath,
40781
40967
  getInternalServiceCronPathPrefix,
40782
40968
  getInternalServiceFunctionPath,
40969
+ getInternalServiceWorkerPath,
40970
+ getInternalServiceWorkerPathPrefix,
40783
40971
  getLambdaByOutputPath,
40784
40972
  getLambdaEnvironment,
40785
40973
  getLambdaOptionsFromFunction,