@vercel/build-utils 14.2.0 → 14.4.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/CHANGELOG.md +43 -0
- package/dist/fs/run-user-scripts.d.ts +19 -10
- package/dist/fs/run-user-scripts.js +266 -85
- package/dist/index.d.ts +2 -2
- package/dist/index.js +295 -107
- package/dist/prerender.d.ts +24 -15
- package/dist/prerender.js +2 -2
- package/dist/service-path-utils.d.ts +2 -0
- package/dist/service-path-utils.js +13 -2
- package/dist/types.d.ts +9 -0
- package/package.json +3 -3
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 =
|
|
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(
|
|
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
|
|
2051
|
-
if (!(this instanceof
|
|
2052
|
-
return new
|
|
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
|
-
|
|
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
|
-
|
|
2086
|
+
Transform2.prototype._transform = function(chunk, encoding, cb) {
|
|
2087
2087
|
throw new Error("_transform() is not implemented");
|
|
2088
2088
|
};
|
|
2089
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
2135
|
+
var Transform2 = require_stream_transform();
|
|
2136
2136
|
var util = Object.create(require_util());
|
|
2137
2137
|
util.inherits = require_inherits();
|
|
2138
|
-
util.inherits(PassThrough,
|
|
2138
|
+
util.inherits(PassThrough, Transform2);
|
|
2139
2139
|
function PassThrough(options) {
|
|
2140
2140
|
if (!(this instanceof PassThrough))
|
|
2141
2141
|
return new PassThrough(options);
|
|
2142
|
-
|
|
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
|
|
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,
|
|
6543
|
+
util.inherits(ByteCounter, Transform2);
|
|
6544
6544
|
function ByteCounter(options) {
|
|
6545
|
-
|
|
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,
|
|
6552
|
+
util.inherits(Crc32Watcher, Transform2);
|
|
6553
6553
|
function Crc32Watcher(options) {
|
|
6554
|
-
|
|
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,
|
|
@@ -35404,13 +35406,13 @@ var Prerender = class {
|
|
|
35404
35406
|
chain,
|
|
35405
35407
|
exposeErrBody,
|
|
35406
35408
|
partialFallback,
|
|
35407
|
-
|
|
35409
|
+
initialMetadata
|
|
35408
35410
|
}) {
|
|
35409
35411
|
this.type = "Prerender";
|
|
35410
35412
|
this.expiration = expiration;
|
|
35411
35413
|
this.staleExpiration = staleExpiration;
|
|
35412
35414
|
this.sourcePath = sourcePath;
|
|
35413
|
-
this.
|
|
35415
|
+
this.initialMetadata = initialMetadata;
|
|
35414
35416
|
this.lambda = lambda;
|
|
35415
35417
|
if (this.lambda) {
|
|
35416
35418
|
this.lambda.operationType = this.lambda.operationType || "ISR";
|
|
@@ -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 {
|
|
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
|
-
|
|
37205
|
-
opts.
|
|
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
|
-
|
|
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
|
-
|
|
37422
|
-
|
|
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
|
-
|
|
37496
|
-
|
|
37497
|
-
|
|
37498
|
-
|
|
37499
|
-
|
|
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
|
|
37670
|
+
return selected ?? NO_OVERRIDE;
|
|
37512
37671
|
}
|
|
37513
|
-
function
|
|
37514
|
-
|
|
37515
|
-
|
|
37516
|
-
|
|
37517
|
-
|
|
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
|
-
|
|
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
|
-
|
|
37616
|
-
|
|
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
|
|
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
|
|
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,
|