@vercel/build-utils 7.12.0 → 8.1.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 +17 -0
- package/dist/fs/run-user-scripts.d.ts +26 -0
- package/dist/fs/run-user-scripts.js +129 -57
- package/dist/get-prefixed-env-vars.js +2 -1
- package/dist/index.js +129 -58
- package/dist/types.d.ts +0 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
# @vercel/build-utils
|
2
2
|
|
3
|
+
## 8.1.0
|
4
|
+
|
5
|
+
### Minor Changes
|
6
|
+
|
7
|
+
- Update pnpm version detection logic ([#11445](https://github.com/vercel/vercel/pull/11445))
|
8
|
+
Add support for pnpm 9
|
9
|
+
|
10
|
+
## 8.0.0
|
11
|
+
|
12
|
+
### Major Changes
|
13
|
+
|
14
|
+
- Remove legacy `avoidTopLevelInstall` logic ([#11513](https://github.com/vercel/vercel/pull/11513))
|
15
|
+
|
16
|
+
### Patch Changes
|
17
|
+
|
18
|
+
- [build-utils] Add `VERCEL_PROJECT_PRODUCTION_URL` framework env var prefix ([#11506](https://github.com/vercel/vercel/pull/11506))
|
19
|
+
|
3
20
|
## 7.12.0
|
4
21
|
|
5
22
|
### Minor Changes
|
@@ -92,6 +92,32 @@ export declare function getEnvForPackageManager({ cliType, lockfileVersion, node
|
|
92
92
|
}): {
|
93
93
|
[x: string]: string | undefined;
|
94
94
|
};
|
95
|
+
/**
|
96
|
+
* Helper to get the binary paths that link to the used package manager.
|
97
|
+
* Note: Make sure it doesn't contain any `console.log` calls.
|
98
|
+
*/
|
99
|
+
export declare function getPathOverrideForPackageManager({ cliType, lockfileVersion, nodeVersion, env, }: {
|
100
|
+
cliType: CliType;
|
101
|
+
lockfileVersion: number | undefined;
|
102
|
+
nodeVersion: NodeVersion | undefined;
|
103
|
+
env: {
|
104
|
+
[x: string]: string | undefined;
|
105
|
+
};
|
106
|
+
}): {
|
107
|
+
/**
|
108
|
+
* Which lockfile was detected.
|
109
|
+
*/
|
110
|
+
detectedLockfile: string | undefined;
|
111
|
+
/**
|
112
|
+
* Detected package manager that generated the found lockfile.
|
113
|
+
*/
|
114
|
+
detectedPackageManager: string | undefined;
|
115
|
+
/**
|
116
|
+
* Value of $PATH that includes the binaries for the detected package manager.
|
117
|
+
* Undefined if no $PATH are necessary.
|
118
|
+
*/
|
119
|
+
path: string | undefined;
|
120
|
+
};
|
95
121
|
/**
|
96
122
|
* Helper to get the binary paths that link to the used package manager.
|
97
123
|
* Note: Make sure it doesn't contain any `console.log` calls.
|
@@ -34,6 +34,7 @@ __export(run_user_scripts_exports, {
|
|
34
34
|
getNodeBinPaths: () => getNodeBinPaths,
|
35
35
|
getNodeVersion: () => getNodeVersion,
|
36
36
|
getPathForPackageManager: () => getPathForPackageManager,
|
37
|
+
getPathOverrideForPackageManager: () => getPathOverrideForPackageManager,
|
37
38
|
getScriptName: () => getScriptName,
|
38
39
|
getSpawnOptions: () => getSpawnOptions,
|
39
40
|
installDependencies: () => installDependencies,
|
@@ -389,9 +390,8 @@ function getEnvForPackageManager({
|
|
389
390
|
const {
|
390
391
|
detectedLockfile,
|
391
392
|
detectedPackageManager,
|
392
|
-
path: newPath
|
393
|
-
|
394
|
-
} = getPathForPackageManager({
|
393
|
+
path: newPath
|
394
|
+
} = getPathOverrideForPackageManager({
|
395
395
|
cliType,
|
396
396
|
lockfileVersion,
|
397
397
|
nodeVersion,
|
@@ -400,75 +400,146 @@ function getEnvForPackageManager({
|
|
400
400
|
const newEnv = {
|
401
401
|
...env
|
402
402
|
};
|
403
|
-
|
403
|
+
const alreadyInPath = (newPath2) => {
|
404
|
+
const oldPath = env.PATH ?? "";
|
405
|
+
return oldPath.split(import_path.default.delimiter).includes(newPath2);
|
406
|
+
};
|
407
|
+
if (newPath && !alreadyInPath(newPath)) {
|
404
408
|
const oldPath = env.PATH + "";
|
405
409
|
newEnv.PATH = `${newPath}${import_path.default.delimiter}${oldPath}`;
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
if (detectedLockfile && detectedPackageManager) {
|
411
|
-
const versionString = cliType === "pnpm" ? `version ${lockfileVersion} ` : "";
|
412
|
-
console.log(
|
413
|
-
`Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager}`
|
414
|
-
);
|
415
|
-
if (cliType === "bun") {
|
416
|
-
console.warn(
|
417
|
-
"Warning: Bun is used as a package manager at build time only, not at runtime with Functions"
|
410
|
+
if (detectedLockfile && detectedPackageManager) {
|
411
|
+
const versionString = cliType === "pnpm" ? `version ${lockfileVersion} ` : "";
|
412
|
+
console.log(
|
413
|
+
`Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager}`
|
418
414
|
);
|
415
|
+
if (cliType === "bun") {
|
416
|
+
console.warn(
|
417
|
+
"Warning: Bun is used as a package manager at build time only, not at runtime with Functions"
|
418
|
+
);
|
419
|
+
}
|
419
420
|
}
|
420
421
|
}
|
422
|
+
if (cliType === "yarn" && !env.YARN_NODE_LINKER) {
|
423
|
+
newEnv.YARN_NODE_LINKER = "node-modules";
|
424
|
+
}
|
421
425
|
return newEnv;
|
422
426
|
}
|
423
|
-
function
|
427
|
+
function detectPnpmVersion(lockfileVersion, corepackEnabled) {
|
428
|
+
switch (true) {
|
429
|
+
case corepackEnabled:
|
430
|
+
return "corepack_enabled";
|
431
|
+
case lockfileVersion === void 0:
|
432
|
+
return "not found";
|
433
|
+
case (lockfileVersion === 5.3 || lockfileVersion === 5.4):
|
434
|
+
return "pnpm 7";
|
435
|
+
case (lockfileVersion === 6 || lockfileVersion === 6.1):
|
436
|
+
return "pnpm 8";
|
437
|
+
case (lockfileVersion === 7 || lockfileVersion === 9):
|
438
|
+
return "pnpm 9";
|
439
|
+
default:
|
440
|
+
return "not found";
|
441
|
+
}
|
442
|
+
}
|
443
|
+
function shouldUseNpm7(lockfileVersion, nodeVersion) {
|
444
|
+
if (lockfileVersion === void 0)
|
445
|
+
return false;
|
446
|
+
return lockfileVersion >= 2 && (nodeVersion?.major || 0) < 16;
|
447
|
+
}
|
448
|
+
function getPathOverrideForPackageManager({
|
424
449
|
cliType,
|
425
450
|
lockfileVersion,
|
426
451
|
nodeVersion,
|
427
452
|
env
|
428
453
|
}) {
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
const npm7 = "/node16/bin-npm7";
|
435
|
-
const pnpm7 = "/pnpm7/node_modules/.bin";
|
436
|
-
const pnpm8 = "/pnpm8/node_modules/.bin";
|
437
|
-
const bun1 = "/bun1";
|
454
|
+
const no_override = {
|
455
|
+
detectedLockfile: void 0,
|
456
|
+
detectedPackageManager: void 0,
|
457
|
+
path: void 0
|
458
|
+
};
|
438
459
|
const corepackEnabled = env.ENABLE_EXPERIMENTAL_COREPACK === "1";
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
460
|
+
switch (cliType) {
|
461
|
+
case "npm":
|
462
|
+
switch (true) {
|
463
|
+
case corepackEnabled:
|
464
|
+
return no_override;
|
465
|
+
case shouldUseNpm7(lockfileVersion, nodeVersion):
|
466
|
+
return {
|
467
|
+
path: "/node16/bin-npm7",
|
468
|
+
detectedLockfile: "package-lock.json",
|
469
|
+
detectedPackageManager: "npm 7+"
|
470
|
+
};
|
471
|
+
default:
|
472
|
+
return no_override;
|
473
|
+
}
|
474
|
+
case "pnpm":
|
475
|
+
switch (detectPnpmVersion(lockfileVersion, corepackEnabled)) {
|
476
|
+
case "corepack_enabled":
|
477
|
+
return no_override;
|
478
|
+
case "pnpm 7":
|
479
|
+
return {
|
480
|
+
path: "/pnpm7/node_modules/.bin",
|
481
|
+
detectedLockfile: "pnpm-lock.yaml",
|
482
|
+
detectedPackageManager: "pnpm 7"
|
483
|
+
};
|
484
|
+
case "pnpm 8":
|
485
|
+
return {
|
486
|
+
path: "/pnpm8/node_modules/.bin",
|
487
|
+
detectedLockfile: "pnpm-lock.yaml",
|
488
|
+
detectedPackageManager: "pnpm 8"
|
489
|
+
};
|
490
|
+
case "pnpm 9":
|
491
|
+
return {
|
492
|
+
path: "/pnpm9/node_modules/.bin",
|
493
|
+
detectedLockfile: "pnpm-lock.yaml",
|
494
|
+
detectedPackageManager: "pnpm 9"
|
495
|
+
};
|
496
|
+
default:
|
497
|
+
return no_override;
|
498
|
+
}
|
499
|
+
case "bun":
|
500
|
+
switch (true) {
|
501
|
+
case corepackEnabled:
|
502
|
+
return no_override;
|
503
|
+
default:
|
504
|
+
return {
|
505
|
+
path: "/bun1",
|
506
|
+
detectedLockfile: "bun.lockb",
|
507
|
+
detectedPackageManager: "Bun"
|
508
|
+
};
|
509
|
+
}
|
510
|
+
case "yarn":
|
511
|
+
return no_override;
|
465
512
|
}
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
513
|
+
}
|
514
|
+
function getPathForPackageManager({
|
515
|
+
cliType,
|
516
|
+
lockfileVersion,
|
517
|
+
nodeVersion,
|
518
|
+
env
|
519
|
+
}) {
|
520
|
+
const overrides = getPathOverrideForPackageManager({
|
521
|
+
cliType,
|
522
|
+
lockfileVersion,
|
523
|
+
nodeVersion,
|
524
|
+
env
|
525
|
+
});
|
526
|
+
const alreadyInPath = (newPath) => {
|
527
|
+
const oldPath = env.PATH ?? "";
|
528
|
+
return oldPath.split(import_path.default.delimiter).includes(newPath);
|
471
529
|
};
|
530
|
+
switch (true) {
|
531
|
+
case (cliType === "yarn" && !env.YARN_NODE_LINKER):
|
532
|
+
return { ...overrides, yarnNodeLinker: "node-modules" };
|
533
|
+
case alreadyInPath(overrides.path ?? ""):
|
534
|
+
return {
|
535
|
+
detectedLockfile: void 0,
|
536
|
+
detectedPackageManager: void 0,
|
537
|
+
path: void 0,
|
538
|
+
yarnNodeLinker: void 0
|
539
|
+
};
|
540
|
+
default:
|
541
|
+
return { ...overrides, yarnNodeLinker: void 0 };
|
542
|
+
}
|
472
543
|
}
|
473
544
|
async function runCustomInstallCommand({
|
474
545
|
destPath,
|
@@ -573,6 +644,7 @@ const installDependencies = (0, import_util.deprecate)(
|
|
573
644
|
getNodeBinPaths,
|
574
645
|
getNodeVersion,
|
575
646
|
getPathForPackageManager,
|
647
|
+
getPathOverrideForPackageManager,
|
576
648
|
getScriptName,
|
577
649
|
getSpawnOptions,
|
578
650
|
installDependencies,
|
package/dist/index.js
CHANGED
@@ -22112,9 +22112,8 @@ function getEnvForPackageManager({
|
|
22112
22112
|
const {
|
22113
22113
|
detectedLockfile,
|
22114
22114
|
detectedPackageManager,
|
22115
|
-
path: newPath
|
22116
|
-
|
22117
|
-
} = getPathForPackageManager({
|
22115
|
+
path: newPath
|
22116
|
+
} = getPathOverrideForPackageManager({
|
22118
22117
|
cliType,
|
22119
22118
|
lockfileVersion,
|
22120
22119
|
nodeVersion,
|
@@ -22123,75 +22122,146 @@ function getEnvForPackageManager({
|
|
22123
22122
|
const newEnv = {
|
22124
22123
|
...env
|
22125
22124
|
};
|
22126
|
-
|
22125
|
+
const alreadyInPath = (newPath2) => {
|
22126
|
+
const oldPath = env.PATH ?? "";
|
22127
|
+
return oldPath.split(import_path5.default.delimiter).includes(newPath2);
|
22128
|
+
};
|
22129
|
+
if (newPath && !alreadyInPath(newPath)) {
|
22127
22130
|
const oldPath = env.PATH + "";
|
22128
22131
|
newEnv.PATH = `${newPath}${import_path5.default.delimiter}${oldPath}`;
|
22129
|
-
|
22130
|
-
|
22131
|
-
|
22132
|
-
|
22133
|
-
if (detectedLockfile && detectedPackageManager) {
|
22134
|
-
const versionString = cliType === "pnpm" ? `version ${lockfileVersion} ` : "";
|
22135
|
-
console.log(
|
22136
|
-
`Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager}`
|
22137
|
-
);
|
22138
|
-
if (cliType === "bun") {
|
22139
|
-
console.warn(
|
22140
|
-
"Warning: Bun is used as a package manager at build time only, not at runtime with Functions"
|
22132
|
+
if (detectedLockfile && detectedPackageManager) {
|
22133
|
+
const versionString = cliType === "pnpm" ? `version ${lockfileVersion} ` : "";
|
22134
|
+
console.log(
|
22135
|
+
`Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager}`
|
22141
22136
|
);
|
22137
|
+
if (cliType === "bun") {
|
22138
|
+
console.warn(
|
22139
|
+
"Warning: Bun is used as a package manager at build time only, not at runtime with Functions"
|
22140
|
+
);
|
22141
|
+
}
|
22142
22142
|
}
|
22143
22143
|
}
|
22144
|
+
if (cliType === "yarn" && !env.YARN_NODE_LINKER) {
|
22145
|
+
newEnv.YARN_NODE_LINKER = "node-modules";
|
22146
|
+
}
|
22144
22147
|
return newEnv;
|
22145
22148
|
}
|
22146
|
-
function
|
22149
|
+
function detectPnpmVersion(lockfileVersion, corepackEnabled) {
|
22150
|
+
switch (true) {
|
22151
|
+
case corepackEnabled:
|
22152
|
+
return "corepack_enabled";
|
22153
|
+
case lockfileVersion === void 0:
|
22154
|
+
return "not found";
|
22155
|
+
case (lockfileVersion === 5.3 || lockfileVersion === 5.4):
|
22156
|
+
return "pnpm 7";
|
22157
|
+
case (lockfileVersion === 6 || lockfileVersion === 6.1):
|
22158
|
+
return "pnpm 8";
|
22159
|
+
case (lockfileVersion === 7 || lockfileVersion === 9):
|
22160
|
+
return "pnpm 9";
|
22161
|
+
default:
|
22162
|
+
return "not found";
|
22163
|
+
}
|
22164
|
+
}
|
22165
|
+
function shouldUseNpm7(lockfileVersion, nodeVersion) {
|
22166
|
+
if (lockfileVersion === void 0)
|
22167
|
+
return false;
|
22168
|
+
return lockfileVersion >= 2 && (nodeVersion?.major || 0) < 16;
|
22169
|
+
}
|
22170
|
+
function getPathOverrideForPackageManager({
|
22147
22171
|
cliType,
|
22148
22172
|
lockfileVersion,
|
22149
22173
|
nodeVersion,
|
22150
22174
|
env
|
22151
22175
|
}) {
|
22152
|
-
|
22153
|
-
|
22154
|
-
|
22155
|
-
|
22156
|
-
|
22157
|
-
const npm7 = "/node16/bin-npm7";
|
22158
|
-
const pnpm7 = "/pnpm7/node_modules/.bin";
|
22159
|
-
const pnpm8 = "/pnpm8/node_modules/.bin";
|
22160
|
-
const bun1 = "/bun1";
|
22176
|
+
const no_override = {
|
22177
|
+
detectedLockfile: void 0,
|
22178
|
+
detectedPackageManager: void 0,
|
22179
|
+
path: void 0
|
22180
|
+
};
|
22161
22181
|
const corepackEnabled = env.ENABLE_EXPERIMENTAL_COREPACK === "1";
|
22162
|
-
|
22163
|
-
|
22164
|
-
|
22165
|
-
|
22166
|
-
|
22167
|
-
|
22168
|
-
|
22169
|
-
|
22170
|
-
|
22171
|
-
|
22172
|
-
|
22173
|
-
|
22174
|
-
|
22175
|
-
|
22176
|
-
|
22177
|
-
|
22178
|
-
|
22179
|
-
|
22180
|
-
|
22181
|
-
|
22182
|
-
|
22183
|
-
|
22184
|
-
|
22185
|
-
|
22186
|
-
|
22187
|
-
|
22182
|
+
switch (cliType) {
|
22183
|
+
case "npm":
|
22184
|
+
switch (true) {
|
22185
|
+
case corepackEnabled:
|
22186
|
+
return no_override;
|
22187
|
+
case shouldUseNpm7(lockfileVersion, nodeVersion):
|
22188
|
+
return {
|
22189
|
+
path: "/node16/bin-npm7",
|
22190
|
+
detectedLockfile: "package-lock.json",
|
22191
|
+
detectedPackageManager: "npm 7+"
|
22192
|
+
};
|
22193
|
+
default:
|
22194
|
+
return no_override;
|
22195
|
+
}
|
22196
|
+
case "pnpm":
|
22197
|
+
switch (detectPnpmVersion(lockfileVersion, corepackEnabled)) {
|
22198
|
+
case "corepack_enabled":
|
22199
|
+
return no_override;
|
22200
|
+
case "pnpm 7":
|
22201
|
+
return {
|
22202
|
+
path: "/pnpm7/node_modules/.bin",
|
22203
|
+
detectedLockfile: "pnpm-lock.yaml",
|
22204
|
+
detectedPackageManager: "pnpm 7"
|
22205
|
+
};
|
22206
|
+
case "pnpm 8":
|
22207
|
+
return {
|
22208
|
+
path: "/pnpm8/node_modules/.bin",
|
22209
|
+
detectedLockfile: "pnpm-lock.yaml",
|
22210
|
+
detectedPackageManager: "pnpm 8"
|
22211
|
+
};
|
22212
|
+
case "pnpm 9":
|
22213
|
+
return {
|
22214
|
+
path: "/pnpm9/node_modules/.bin",
|
22215
|
+
detectedLockfile: "pnpm-lock.yaml",
|
22216
|
+
detectedPackageManager: "pnpm 9"
|
22217
|
+
};
|
22218
|
+
default:
|
22219
|
+
return no_override;
|
22220
|
+
}
|
22221
|
+
case "bun":
|
22222
|
+
switch (true) {
|
22223
|
+
case corepackEnabled:
|
22224
|
+
return no_override;
|
22225
|
+
default:
|
22226
|
+
return {
|
22227
|
+
path: "/bun1",
|
22228
|
+
detectedLockfile: "bun.lockb",
|
22229
|
+
detectedPackageManager: "Bun"
|
22230
|
+
};
|
22231
|
+
}
|
22232
|
+
case "yarn":
|
22233
|
+
return no_override;
|
22188
22234
|
}
|
22189
|
-
|
22190
|
-
|
22191
|
-
|
22192
|
-
|
22193
|
-
|
22235
|
+
}
|
22236
|
+
function getPathForPackageManager({
|
22237
|
+
cliType,
|
22238
|
+
lockfileVersion,
|
22239
|
+
nodeVersion,
|
22240
|
+
env
|
22241
|
+
}) {
|
22242
|
+
const overrides = getPathOverrideForPackageManager({
|
22243
|
+
cliType,
|
22244
|
+
lockfileVersion,
|
22245
|
+
nodeVersion,
|
22246
|
+
env
|
22247
|
+
});
|
22248
|
+
const alreadyInPath = (newPath) => {
|
22249
|
+
const oldPath = env.PATH ?? "";
|
22250
|
+
return oldPath.split(import_path5.default.delimiter).includes(newPath);
|
22194
22251
|
};
|
22252
|
+
switch (true) {
|
22253
|
+
case (cliType === "yarn" && !env.YARN_NODE_LINKER):
|
22254
|
+
return { ...overrides, yarnNodeLinker: "node-modules" };
|
22255
|
+
case alreadyInPath(overrides.path ?? ""):
|
22256
|
+
return {
|
22257
|
+
detectedLockfile: void 0,
|
22258
|
+
detectedPackageManager: void 0,
|
22259
|
+
path: void 0,
|
22260
|
+
yarnNodeLinker: void 0
|
22261
|
+
};
|
22262
|
+
default:
|
22263
|
+
return { ...overrides, yarnNodeLinker: void 0 };
|
22264
|
+
}
|
22195
22265
|
}
|
22196
22266
|
async function runCustomInstallCommand({
|
22197
22267
|
destPath,
|
@@ -22358,7 +22428,8 @@ function getPrefixedEnvVars({
|
|
22358
22428
|
"VERCEL_URL",
|
22359
22429
|
"VERCEL_ENV",
|
22360
22430
|
"VERCEL_REGION",
|
22361
|
-
"VERCEL_BRANCH_URL"
|
22431
|
+
"VERCEL_BRANCH_URL",
|
22432
|
+
"VERCEL_PROJECT_PRODUCTION_URL"
|
22362
22433
|
];
|
22363
22434
|
const newEnvs = {};
|
22364
22435
|
if (envPrefix && envs.VERCEL_URL) {
|
package/dist/types.d.ts
CHANGED