@vercel/build-utils 14.1.1 → 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.
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var run_user_scripts_exports = {};
30
30
  __export(run_user_scripts_exports, {
31
31
  PNPM_10_PREFERRED_AT: () => PNPM_10_PREFERRED_AT,
32
+ PNPM_11_PREFERRED_AT: () => PNPM_11_PREFERRED_AT,
32
33
  detectPackageManager: () => detectPackageManager,
33
34
  execCommand: () => execCommand,
34
35
  findPackageJson: () => findPackageJson,
@@ -51,6 +52,7 @@ __export(run_user_scripts_exports, {
51
52
  scanParentDirs: () => scanParentDirs,
52
53
  spawnAsync: () => spawnAsync,
53
54
  spawnCommand: () => spawnCommand,
55
+ stripPnpmVersionFooter: () => stripPnpmVersionFooter,
54
56
  traverseUpDirectories: () => traverseUpDirectories,
55
57
  turboVersionSpecifierSupportsCorepack: () => turboVersionSpecifierSupportsCorepack,
56
58
  usingCorepack: () => usingCorepack,
@@ -63,6 +65,7 @@ var import_path = __toESM(require("path"));
63
65
  var import_async_sema = __toESM(require("async-sema"));
64
66
  var import_cross_spawn = __toESM(require("cross-spawn"));
65
67
  var import_semver = require("semver");
68
+ var import_stream = require("stream");
66
69
  var import_util = require("util");
67
70
  var import_debug = __toESM(require("../debug"));
68
71
  var import_errors = require("../errors");
@@ -327,7 +330,8 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
327
330
  bunLockBinPath,
328
331
  vltLockPath
329
332
  ],
330
- packageJsonPackageManager
333
+ packageJsonPackageManager,
334
+ packageJsonDevEngines
331
335
  } = await walkParentDirsMulti({
332
336
  base,
333
337
  start: destPath,
@@ -394,6 +398,7 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
394
398
  cliType,
395
399
  packageJson,
396
400
  packageJsonPackageManager,
401
+ packageJsonDevEngines,
397
402
  lockfilePath,
398
403
  lockfileVersion,
399
404
  packageJsonPath,
@@ -509,6 +514,7 @@ async function walkParentDirsMulti({
509
514
  filenames
510
515
  }) {
511
516
  let packageManager;
517
+ let devEngines;
512
518
  for (const dir of traverseUpDirectories({ start, base })) {
513
519
  const fullPaths = filenames.map((f) => import_path.default.join(dir, f));
514
520
  const existResults = await Promise.all(
@@ -520,14 +526,22 @@ async function walkParentDirsMulti({
520
526
  if (packageJson?.packageManager) {
521
527
  packageManager = packageJson.packageManager;
522
528
  }
529
+ if (packageJson?.devEngines) {
530
+ devEngines = packageJson.devEngines;
531
+ }
523
532
  if (foundOneOrMore) {
524
533
  return {
525
534
  paths: fullPaths.map((f, i) => existResults[i] ? f : void 0),
526
- packageJsonPackageManager: packageManager
535
+ packageJsonPackageManager: packageManager,
536
+ packageJsonDevEngines: devEngines
527
537
  };
528
538
  }
529
539
  }
530
- return { paths: [], packageJsonPackageManager: packageManager };
540
+ return {
541
+ paths: [],
542
+ packageJsonPackageManager: packageManager,
543
+ packageJsonDevEngines: devEngines
544
+ };
531
545
  }
532
546
  function isSet(v) {
533
547
  return v?.constructor?.name === "Set";
@@ -564,6 +578,29 @@ function getInstallCommandForPackageManager(packageManager, args) {
564
578
  };
565
579
  }
566
580
  }
581
+ function stripPnpmVersionFooter(line) {
582
+ return line.replace(/ using pnpm v\d+\.\d+\.\d+(?=\r?$)/, "");
583
+ }
584
+ function createPnpmOutputFilter(destination) {
585
+ let incompleteLine = "";
586
+ return new import_stream.Transform({
587
+ transform(chunk, _encoding, callback) {
588
+ const lines = `${incompleteLine}${chunk.toString()}`.split("\n");
589
+ incompleteLine = lines.pop() ?? "";
590
+ for (const line of lines) {
591
+ destination.write(`${stripPnpmVersionFooter(line)}
592
+ `);
593
+ }
594
+ callback();
595
+ },
596
+ flush(callback) {
597
+ if (incompleteLine) {
598
+ destination.write(stripPnpmVersionFooter(incompleteLine));
599
+ }
600
+ callback();
601
+ }
602
+ });
603
+ }
567
604
  async function runInstallCommand({
568
605
  packageManager,
569
606
  args,
@@ -575,8 +612,9 @@ async function runInstallCommand({
575
612
  if (process.env.NPM_ONLY_PRODUCTION) {
576
613
  commandArguments.push("--production");
577
614
  }
578
- opts.outputStream = output?.stdout;
579
- opts.errorStream = output?.stderr;
615
+ const shouldFilterPnpmOutput = packageManager === "pnpm";
616
+ opts.outputStream = shouldFilterPnpmOutput ? createPnpmOutputFilter(output?.stdout ?? process.stdout) : output?.stdout;
617
+ opts.errorStream = shouldFilterPnpmOutput ? output?.stderr ?? process.stderr : output?.stderr;
580
618
  await spawnAsync(packageManager, commandArguments, opts);
581
619
  }
582
620
  function initializeSet(set) {
@@ -620,6 +658,7 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, projectCreate
620
658
  packageJson,
621
659
  lockfileVersion,
622
660
  packageJsonPackageManager,
661
+ packageJsonDevEngines,
623
662
  turboSupportsCorepackHome
624
663
  } = await scanParentDirs(destPath, true);
625
664
  if (!packageJsonPath) {
@@ -658,12 +697,6 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, projectCreate
658
697
  }
659
698
  }
660
699
  const installTime = Date.now();
661
- if (output?.stdout) {
662
- output.stdout.write("Installing dependencies...\n");
663
- } else {
664
- console.log("Installing dependencies...");
665
- }
666
- (0, import_debug.default)(`Installing to ${destPath}`);
667
700
  const opts = { cwd: destPath, ...spawnOpts };
668
701
  const env = (0, import_clone_env.cloneEnv)(opts.env || process.env);
669
702
  delete env.NODE_ENV;
@@ -671,11 +704,26 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, projectCreate
671
704
  cliType,
672
705
  lockfileVersion,
673
706
  packageJsonPackageManager,
707
+ packageJsonDevEngines,
674
708
  env,
675
709
  packageJsonEngines: packageJson?.engines,
676
710
  turboSupportsCorepackHome,
677
711
  projectCreatedAt
678
712
  });
713
+ const packageManager = getPackageManagerDisplayName({
714
+ cliType,
715
+ lockfileVersion,
716
+ packageJsonPackageManager,
717
+ env: opts.env
718
+ });
719
+ const installMessage = `Installing dependencies with ${packageManager}`;
720
+ if (output?.stdout) {
721
+ output.stdout.write(`${installMessage}
722
+ `);
723
+ } else {
724
+ console.log(installMessage);
725
+ }
726
+ (0, import_debug.default)(`Installing to ${destPath}`);
679
727
  const maySeeDynamicRequireYarnBug = process.env?.ENABLE_EXPERIMENTAL_COREPACK && packageJson?.packageManager?.startsWith("yarn") && packageJson?.type === "module";
680
728
  if (maySeeDynamicRequireYarnBug) {
681
729
  console.warn(
@@ -694,10 +742,42 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, projectCreate
694
742
  runNpmInstallSema.release();
695
743
  }
696
744
  }
745
+ function getPackageManagerDisplayName({
746
+ cliType,
747
+ lockfileVersion,
748
+ packageJsonPackageManager,
749
+ env
750
+ }) {
751
+ const versionResult = import_cross_spawn.default.sync(cliType, ["--version"], {
752
+ env,
753
+ encoding: "utf8"
754
+ });
755
+ const version = versionResult.status === 0 ? versionResult.stdout.trim() : "";
756
+ if (version) {
757
+ return `${cliType} ${version}`;
758
+ }
759
+ if (packageJsonPackageManager && env.ENABLE_EXPERIMENTAL_COREPACK) {
760
+ return packageJsonPackageManager.replace("@", " ");
761
+ }
762
+ if (cliType === "pnpm") {
763
+ const selectedPath = env.PATH?.split(import_path.default.delimiter).find(
764
+ (segment) => /^\/pnpm\d+\/node_modules\/\.bin$/.test(segment)
765
+ );
766
+ const major = selectedPath?.match(/^\/pnpm(\d+)\//)?.[1];
767
+ if (major) {
768
+ return `pnpm ${major}`;
769
+ }
770
+ }
771
+ if (cliType === "yarn") {
772
+ return detectYarnVersion(lockfileVersion).replace("@", " ").replace(/\.x$/, "");
773
+ }
774
+ return cliType;
775
+ }
697
776
  function getEnvForPackageManager({
698
777
  cliType,
699
778
  lockfileVersion,
700
779
  packageJsonPackageManager,
780
+ packageJsonDevEngines,
701
781
  nodeVersion,
702
782
  env,
703
783
  packageJsonEngines,
@@ -717,6 +797,7 @@ function getEnvForPackageManager({
717
797
  cliType,
718
798
  lockfileVersion,
719
799
  corepackPackageManager: packageJsonPackageManager,
800
+ packageJsonDevEngines,
720
801
  corepackEnabled,
721
802
  nodeVersion,
722
803
  packageJsonEngines,
@@ -750,28 +831,6 @@ function getEnvForPackageManager({
750
831
  if (pathsToPrepend.length > 0) {
751
832
  const oldPath = env.PATH + "";
752
833
  newEnv.PATH = `${pathsToPrepend.join(import_path.default.delimiter)}${oldPath ? import_path.default.delimiter : ""}${oldPath}`;
753
- if (newPath && pathsToPrepend.includes(newPath) && detectedLockfile && detectedPackageManager) {
754
- const detectedV9PnpmLockfile = detectedLockfile === "pnpm-lock.yaml" && lockfileVersion === 9;
755
- const pnpm10UsingPackageJsonPackageManager = detectedPackageManager === "pnpm@10.x" && packageJsonPackageManager;
756
- if (pnpm10UsingPackageJsonPackageManager) {
757
- const versionString = cliType === "pnpm" ? `version ${lockfileVersion} ` : "";
758
- console.log(
759
- `Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager} with package.json#packageManager ${packageJsonPackageManager}`
760
- );
761
- } else if (detectedV9PnpmLockfile) {
762
- const otherVersion = detectedPackageManager === "pnpm@10.x" ? `pnpm@9.x` : `pnpm@10.x`;
763
- console.log(
764
- `Detected \`${detectedLockfile}\` ${lockfileVersion} which may be generated by pnpm@9.x or pnpm@10.x
765
- Using ${detectedPackageManager} based on project creation date
766
- To use ${otherVersion}, manually opt in using corepack (https://vercel.com/docs/deployments/configure-a-build#corepack)`
767
- );
768
- } else {
769
- const versionString = cliType === "pnpm" ? `version ${lockfileVersion} ` : "";
770
- console.log(
771
- `Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager}`
772
- );
773
- }
774
- }
775
834
  }
776
835
  if (cliType === "yarn" && !env.YARN_NODE_LINKER) {
777
836
  newEnv.YARN_NODE_LINKER = "node-modules";
@@ -779,7 +838,29 @@ To use ${otherVersion}, manually opt in using corepack (https://vercel.com/docs/
779
838
  return newEnv;
780
839
  }
781
840
  const PNPM_10_PREFERRED_AT = /* @__PURE__ */ new Date("2025-02-27T20:00:00Z");
782
- function detectPnpmVersion(lockfileVersion, projectCreatedAt) {
841
+ const PNPM_11_PREFERRED_AT = /* @__PURE__ */ new Date("2026-08-19T20:00:00Z");
842
+ const INSTALLED_PNPM_MAJORS = [11, 10, 9, 8, 7, 6];
843
+ function pnpmPathOverride(major) {
844
+ return {
845
+ path: `/pnpm${major}/node_modules/.bin`,
846
+ detectedLockfile: "pnpm-lock.yaml",
847
+ detectedPackageManager: `pnpm@${major}.x`,
848
+ pnpmVersionRange: `${major}.x`
849
+ };
850
+ }
851
+ function isPnpmMajorAvailable(major) {
852
+ if (major <= 10) {
853
+ return true;
854
+ }
855
+ return import_fs_extra.default.existsSync(`/pnpm${major}`);
856
+ }
857
+ function nodeSupportsPnpm11Default(nodeVersion) {
858
+ if (!nodeVersion || (0, import_node_version.isBunVersion)(nodeVersion)) {
859
+ return true;
860
+ }
861
+ return nodeVersion.major >= 22;
862
+ }
863
+ function detectPnpmVersion(lockfileVersion, projectCreatedAt, nodeVersion) {
783
864
  switch (true) {
784
865
  case lockfileVersion === void 0:
785
866
  return "not found";
@@ -792,8 +873,13 @@ function detectPnpmVersion(lockfileVersion, projectCreatedAt) {
792
873
  case lockfileVersion === 7:
793
874
  return "pnpm 9";
794
875
  case lockfileVersion === 9: {
795
- const projectPrefersPnpm10 = projectCreatedAt && projectCreatedAt >= PNPM_10_PREFERRED_AT.getTime();
796
- return projectPrefersPnpm10 ? "pnpm 10" : "pnpm 9";
876
+ if (projectCreatedAt && projectCreatedAt >= PNPM_11_PREFERRED_AT.getTime() && nodeSupportsPnpm11Default(nodeVersion) && isPnpmMajorAvailable(11)) {
877
+ return "pnpm 11";
878
+ }
879
+ if (projectCreatedAt && projectCreatedAt >= PNPM_10_PREFERRED_AT.getTime()) {
880
+ return "pnpm 10";
881
+ }
882
+ return "pnpm 9";
797
883
  }
798
884
  default:
799
885
  return "not found";
@@ -823,6 +909,7 @@ function validLockfileForPackageManager(cliType, lockfileVersion, packageManager
823
909
  return true;
824
910
  case "pnpm":
825
911
  switch (packageManagerMajorVersion) {
912
+ case 11:
826
913
  case 10:
827
914
  return lockfileVersion === 9;
828
915
  case 9:
@@ -841,10 +928,75 @@ function validLockfileForPackageManager(cliType, lockfileVersion, packageManager
841
928
  }
842
929
  }
843
930
  }
931
+ function lockfileCompatibleWithPnpm(lockfileVersion, packageManagerVersion) {
932
+ if (lockfileVersion === void 0) {
933
+ return true;
934
+ }
935
+ return validLockfileForPackageManager(
936
+ "pnpm",
937
+ lockfileVersion,
938
+ packageManagerVersion
939
+ );
940
+ }
941
+ function highestInstalledPnpmMajor(versionRange, lockfileVersion) {
942
+ if (!(0, import_semver.validRange)(versionRange)) {
943
+ return void 0;
944
+ }
945
+ for (const major of INSTALLED_PNPM_MAJORS) {
946
+ if (!isPnpmMajorAvailable(major)) {
947
+ continue;
948
+ }
949
+ if (!(0, import_semver.intersects)(`${major}.x`, versionRange)) {
950
+ continue;
951
+ }
952
+ const versionForLockfile = (0, import_semver.parse)(major === 9 ? "9.0.1" : `${major}.0.0`);
953
+ if (!versionForLockfile || !lockfileCompatibleWithPnpm(lockfileVersion, versionForLockfile)) {
954
+ continue;
955
+ }
956
+ return major;
957
+ }
958
+ return void 0;
959
+ }
960
+ function resolveDevEnginesPnpmRange(devEngines) {
961
+ if (!devEngines?.packageManager) {
962
+ return void 0;
963
+ }
964
+ const entries = Array.isArray(devEngines.packageManager) ? devEngines.packageManager : [devEngines.packageManager];
965
+ const pnpm = entries.find((entry) => entry.name === "pnpm" && entry.version);
966
+ return pnpm?.version;
967
+ }
968
+ function resolveCompatiblePnpmPin({
969
+ cliType,
970
+ lockfileVersion,
971
+ packageJsonDevEngines,
972
+ corepackPackageManager
973
+ }) {
974
+ if (cliType !== "pnpm") {
975
+ return void 0;
976
+ }
977
+ const devEnginesRange = resolveDevEnginesPnpmRange(packageJsonDevEngines);
978
+ if (devEnginesRange) {
979
+ const major = highestInstalledPnpmMajor(devEnginesRange, lockfileVersion);
980
+ if (major !== void 0) {
981
+ return { override: pnpmPathOverride(major), source: "devEngines" };
982
+ }
983
+ }
984
+ const parsed = validateVersionSpecifier(corepackPackageManager);
985
+ if (parsed?.packageName === "pnpm") {
986
+ if (lockfileCompatibleWithPnpm(lockfileVersion, parsed.packageVersion) && isPnpmMajorAvailable(parsed.packageVersion.major)) {
987
+ return {
988
+ override: pnpmPathOverride(parsed.packageVersion.major),
989
+ source: "packageManager"
990
+ };
991
+ }
992
+ }
993
+ return void 0;
994
+ }
844
995
  function getPathOverrideForPackageManager({
845
996
  cliType,
846
997
  lockfileVersion,
847
998
  corepackPackageManager,
999
+ packageJsonDevEngines,
848
1000
  corepackEnabled = true,
849
1001
  nodeVersion,
850
1002
  packageJsonEngines,
@@ -853,7 +1005,8 @@ function getPathOverrideForPackageManager({
853
1005
  const detectedPackageManger = detectPackageManager(
854
1006
  cliType,
855
1007
  lockfileVersion,
856
- projectCreatedAt
1008
+ projectCreatedAt,
1009
+ nodeVersion
857
1010
  );
858
1011
  const usingCorepack2 = corepackPackageManager && corepackEnabled;
859
1012
  if (usingCorepack2) {
@@ -865,14 +1018,20 @@ function getPathOverrideForPackageManager({
865
1018
  );
866
1019
  return NO_OVERRIDE;
867
1020
  }
1021
+ const pin = resolveCompatiblePnpmPin({
1022
+ cliType,
1023
+ lockfileVersion,
1024
+ packageJsonDevEngines,
1025
+ corepackPackageManager
1026
+ });
1027
+ let selected = pin?.override ?? detectedPackageManger;
868
1028
  if (cliType === "pnpm" && packageJsonEngines?.pnpm) {
869
- const usingDetected = detectedPackageManger?.pnpmVersionRange !== "10.x" || !corepackPackageManager;
870
- if (usingDetected) {
871
- checkEnginesPnpmAgainstDetected(
872
- packageJsonEngines.pnpm,
873
- detectedPackageManger
874
- );
875
- }
1029
+ selected = applyEnginesPnpm({
1030
+ enginesPnpm: packageJsonEngines.pnpm,
1031
+ selected,
1032
+ usedPin: Boolean(pin),
1033
+ lockfileVersion
1034
+ });
876
1035
  }
877
1036
  if (cliType === "bun" && detectedPackageManger && nodeVersion && (0, import_node_version.isBunVersion)(nodeVersion)) {
878
1037
  const minor = nodeVersion.minor;
@@ -882,20 +1041,53 @@ function getPathOverrideForPackageManager({
882
1041
  detectedPackageManager: `bun@${nodeVersion.range}`
883
1042
  };
884
1043
  }
885
- return detectedPackageManger ?? NO_OVERRIDE;
1044
+ return selected ?? NO_OVERRIDE;
886
1045
  }
887
- function checkEnginesPnpmAgainstDetected(enginesPnpm, detectedPackageManger) {
888
- if (detectedPackageManger?.pnpmVersionRange && (0, import_semver.validRange)(detectedPackageManger.pnpmVersionRange) && (0, import_semver.validRange)(enginesPnpm)) {
889
- if (!(0, import_semver.intersects)(detectedPackageManger.pnpmVersionRange, enginesPnpm)) {
890
- throw new Error(
891
- `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.`
892
- );
1046
+ function applyEnginesPnpm({
1047
+ enginesPnpm,
1048
+ selected,
1049
+ usedPin,
1050
+ lockfileVersion
1051
+ }) {
1052
+ const selectedRange = selected && "pnpmVersionRange" in selected ? selected.pnpmVersionRange : void 0;
1053
+ if (selectedRange && (0, import_semver.validRange)(selectedRange) && (0, import_semver.validRange)(enginesPnpm)) {
1054
+ if ((0, import_semver.intersects)(selectedRange, enginesPnpm)) {
1055
+ if (!usedPin) {
1056
+ warnEnginesPnpmWithoutPin();
1057
+ }
1058
+ return selected;
893
1059
  }
1060
+ if (!usedPin) {
1061
+ const major = highestInstalledPnpmMajor(enginesPnpm, lockfileVersion);
1062
+ if (major !== void 0) {
1063
+ return pnpmPathOverride(major);
1064
+ }
1065
+ if (shouldDeferPnpm11UntilImageHasBinary(enginesPnpm, lockfileVersion)) {
1066
+ warnEnginesPnpmWithoutPin();
1067
+ return selected;
1068
+ }
1069
+ }
1070
+ throw new Error(
1071
+ `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.`
1072
+ );
1073
+ }
1074
+ if (!usedPin) {
1075
+ warnEnginesPnpmWithoutPin();
894
1076
  }
1077
+ return selected;
1078
+ }
1079
+ function warnEnginesPnpmWithoutPin() {
895
1080
  console.warn(
896
1081
  `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`
897
1082
  );
898
1083
  }
1084
+ function shouldDeferPnpm11UntilImageHasBinary(enginesPnpm, lockfileVersion) {
1085
+ if (isPnpmMajorAvailable(11) || !(0, import_semver.intersects)("11.x", enginesPnpm)) {
1086
+ return false;
1087
+ }
1088
+ const pnpm11 = (0, import_semver.parse)("11.0.0");
1089
+ return Boolean(pnpm11 && lockfileCompatibleWithPnpm(lockfileVersion, pnpm11));
1090
+ }
899
1091
  function validateCorepackPackageManager(cliType, lockfileVersion, corepackPackageManager, enginesPnpmVersionRange) {
900
1092
  const validatedCorepackPackageManager = validateVersionSpecifier(
901
1093
  corepackPackageManager
@@ -957,50 +1149,33 @@ function validateVersionSpecifier(version) {
957
1149
  packageVersion
958
1150
  };
959
1151
  }
960
- function detectPackageManager(cliType, lockfileVersion, projectCreatedAt) {
1152
+ function detectPackageManager(cliType, lockfileVersion, projectCreatedAt, nodeVersion) {
961
1153
  switch (cliType) {
962
1154
  case "npm":
963
1155
  return void 0;
964
- case "pnpm":
965
- switch (detectPnpmVersion(lockfileVersion, projectCreatedAt)) {
1156
+ case "pnpm": {
1157
+ const detected = detectPnpmVersion(
1158
+ lockfileVersion,
1159
+ projectCreatedAt,
1160
+ nodeVersion
1161
+ );
1162
+ switch (detected) {
1163
+ case "pnpm 6":
1164
+ return pnpmPathOverride(6);
966
1165
  case "pnpm 7":
967
- return {
968
- path: "/pnpm7/node_modules/.bin",
969
- detectedLockfile: "pnpm-lock.yaml",
970
- detectedPackageManager: "pnpm@7.x",
971
- pnpmVersionRange: "7.x"
972
- };
1166
+ return pnpmPathOverride(7);
973
1167
  case "pnpm 8":
974
- return {
975
- path: "/pnpm8/node_modules/.bin",
976
- detectedLockfile: "pnpm-lock.yaml",
977
- detectedPackageManager: "pnpm@8.x",
978
- pnpmVersionRange: "8.x"
979
- };
1168
+ return pnpmPathOverride(8);
980
1169
  case "pnpm 9":
981
- return {
982
- path: "/pnpm9/node_modules/.bin",
983
- detectedLockfile: "pnpm-lock.yaml",
984
- detectedPackageManager: "pnpm@9.x",
985
- pnpmVersionRange: "9.x"
986
- };
1170
+ return pnpmPathOverride(9);
987
1171
  case "pnpm 10":
988
- return {
989
- path: "/pnpm10/node_modules/.bin",
990
- detectedLockfile: "pnpm-lock.yaml",
991
- detectedPackageManager: "pnpm@10.x",
992
- pnpmVersionRange: "10.x"
993
- };
994
- case "pnpm 6":
995
- return {
996
- path: "/pnpm6/node_modules/.bin",
997
- detectedLockfile: "pnpm-lock.yaml",
998
- detectedPackageManager: "pnpm@6.x",
999
- pnpmVersionRange: "6.x"
1000
- };
1172
+ return pnpmPathOverride(10);
1173
+ case "pnpm 11":
1174
+ return pnpmPathOverride(11);
1001
1175
  default:
1002
1176
  return void 0;
1003
1177
  }
1178
+ }
1004
1179
  case "bun":
1005
1180
  return {
1006
1181
  path: "/bun1",
@@ -1077,6 +1252,7 @@ async function runCustomInstallCommand({
1077
1252
  packageJson,
1078
1253
  packageJsonPath,
1079
1254
  packageJsonPackageManager,
1255
+ packageJsonDevEngines,
1080
1256
  turboSupportsCorepackHome
1081
1257
  } = await scanParentDirs(destPath, true);
1082
1258
  if (installCompletedCovers(packageJsonPath)) {
@@ -1090,6 +1266,7 @@ async function runCustomInstallCommand({
1090
1266
  cliType,
1091
1267
  lockfileVersion,
1092
1268
  packageJsonPackageManager,
1269
+ packageJsonDevEngines,
1093
1270
  env: spawnOpts?.env || {},
1094
1271
  packageJsonEngines: packageJson?.engines,
1095
1272
  turboSupportsCorepackHome,
@@ -1110,6 +1287,7 @@ async function runPackageJsonScript(destPath, scriptNames, spawnOpts, projectCre
1110
1287
  cliType,
1111
1288
  lockfileVersion,
1112
1289
  packageJsonPackageManager,
1290
+ packageJsonDevEngines,
1113
1291
  turboSupportsCorepackHome
1114
1292
  } = await scanParentDirs(destPath, true);
1115
1293
  const scriptName = getScriptName(
@@ -1127,6 +1305,7 @@ async function runPackageJsonScript(destPath, scriptNames, spawnOpts, projectCre
1127
1305
  cliType,
1128
1306
  lockfileVersion,
1129
1307
  packageJsonPackageManager,
1308
+ packageJsonDevEngines,
1130
1309
  env: (0, import_clone_env.cloneEnv)(process.env, spawnOpts?.env),
1131
1310
  packageJsonEngines: packageJson?.engines,
1132
1311
  turboSupportsCorepackHome,
@@ -1194,6 +1373,7 @@ const installDependencies = (0, import_util.deprecate)(
1194
1373
  // Annotate the CommonJS export names for ESM import in node:
1195
1374
  0 && (module.exports = {
1196
1375
  PNPM_10_PREFERRED_AT,
1376
+ PNPM_11_PREFERRED_AT,
1197
1377
  detectPackageManager,
1198
1378
  execCommand,
1199
1379
  findPackageJson,
@@ -1216,6 +1396,7 @@ const installDependencies = (0, import_util.deprecate)(
1216
1396
  scanParentDirs,
1217
1397
  spawnAsync,
1218
1398
  spawnCommand,
1399
+ stripPnpmVersionFooter,
1219
1400
  traverseUpDirectories,
1220
1401
  turboVersionSpecifierSupportsCorepack,
1221
1402
  usingCorepack,
package/dist/index.d.ts CHANGED
@@ -45,7 +45,6 @@ export { defaultCachePathGlob } from './default-cache-path-glob';
45
45
  export { generateNodeBuilderFunctions } from './generate-node-builder-functions';
46
46
  export { getRegExpFromMatchers, resolveMiddlewareMatcher, } from './middleware-matcher';
47
47
  export { BACKEND_FRAMEWORKS, BACKEND_BUILDERS, UNIFIED_BACKEND_BUILDER, BackendFramework, isBackendFramework, isNodeBackendFramework, isBackendBuilder, isExperimentalBackendsEnabled, isExperimentalBackendsWithoutIntrospectionEnabled, shouldUseExperimentalBackends, PYTHON_FRAMEWORKS, PythonFramework, isPythonFramework, } from './framework-helpers';
48
- export * from './python';
49
48
  export * from './node-entrypoint';
50
49
  export * from './service-path-utils';
51
50
  export { getEncryptedEnv, type EncryptedEnvFile, } from './process-serverless/get-encrypted-env-file';