@vercel/build-utils 8.0.0 → 8.1.1
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 +13 -0
- package/dist/fs/run-user-scripts.d.ts +26 -0
- package/dist/fs/run-user-scripts.js +135 -57
- package/dist/index.js +133 -57
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# @vercel/build-utils
|
2
2
|
|
3
|
+
## 8.1.1
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- [build-utils] pnpm lockfile testing and fixing ([#11591](https://github.com/vercel/vercel/pull/11591))
|
8
|
+
|
9
|
+
## 8.1.0
|
10
|
+
|
11
|
+
### Minor Changes
|
12
|
+
|
13
|
+
- Update pnpm version detection logic ([#11445](https://github.com/vercel/vercel/pull/11445))
|
14
|
+
Add support for pnpm 9
|
15
|
+
|
3
16
|
## 8.0.0
|
4
17
|
|
5
18
|
### Major 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,152 @@ 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:
|
434
|
+
return "pnpm 6";
|
435
|
+
case lockfileVersion === 5.4:
|
436
|
+
return "pnpm 7";
|
437
|
+
case (lockfileVersion === 6 || lockfileVersion === 6.1):
|
438
|
+
return "pnpm 8";
|
439
|
+
case (lockfileVersion === 7 || lockfileVersion === 9):
|
440
|
+
return "pnpm 9";
|
441
|
+
default:
|
442
|
+
return "not found";
|
443
|
+
}
|
444
|
+
}
|
445
|
+
function shouldUseNpm7(lockfileVersion, nodeVersion) {
|
446
|
+
if (lockfileVersion === void 0)
|
447
|
+
return false;
|
448
|
+
return lockfileVersion >= 2 && (nodeVersion?.major || 0) < 16;
|
449
|
+
}
|
450
|
+
function getPathOverrideForPackageManager({
|
424
451
|
cliType,
|
425
452
|
lockfileVersion,
|
426
453
|
nodeVersion,
|
427
454
|
env
|
428
455
|
}) {
|
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";
|
456
|
+
const no_override = {
|
457
|
+
detectedLockfile: void 0,
|
458
|
+
detectedPackageManager: void 0,
|
459
|
+
path: void 0
|
460
|
+
};
|
438
461
|
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
|
-
|
462
|
+
switch (cliType) {
|
463
|
+
case "npm":
|
464
|
+
switch (true) {
|
465
|
+
case corepackEnabled:
|
466
|
+
return no_override;
|
467
|
+
case shouldUseNpm7(lockfileVersion, nodeVersion):
|
468
|
+
return {
|
469
|
+
path: "/node16/bin-npm7",
|
470
|
+
detectedLockfile: "package-lock.json",
|
471
|
+
detectedPackageManager: "npm 7+"
|
472
|
+
};
|
473
|
+
default:
|
474
|
+
return no_override;
|
475
|
+
}
|
476
|
+
case "pnpm":
|
477
|
+
switch (detectPnpmVersion(lockfileVersion, corepackEnabled)) {
|
478
|
+
case "corepack_enabled":
|
479
|
+
return no_override;
|
480
|
+
case "pnpm 7":
|
481
|
+
return {
|
482
|
+
path: "/pnpm7/node_modules/.bin",
|
483
|
+
detectedLockfile: "pnpm-lock.yaml",
|
484
|
+
detectedPackageManager: "pnpm 7"
|
485
|
+
};
|
486
|
+
case "pnpm 8":
|
487
|
+
return {
|
488
|
+
path: "/pnpm8/node_modules/.bin",
|
489
|
+
detectedLockfile: "pnpm-lock.yaml",
|
490
|
+
detectedPackageManager: "pnpm 8"
|
491
|
+
};
|
492
|
+
case "pnpm 9":
|
493
|
+
return {
|
494
|
+
path: "/pnpm9/node_modules/.bin",
|
495
|
+
detectedLockfile: "pnpm-lock.yaml",
|
496
|
+
detectedPackageManager: "pnpm 9"
|
497
|
+
};
|
498
|
+
case "pnpm 6":
|
499
|
+
default:
|
500
|
+
return no_override;
|
501
|
+
}
|
502
|
+
case "bun":
|
503
|
+
switch (true) {
|
504
|
+
case corepackEnabled:
|
505
|
+
return no_override;
|
506
|
+
default:
|
507
|
+
return {
|
508
|
+
path: "/bun1",
|
509
|
+
detectedLockfile: "bun.lockb",
|
510
|
+
detectedPackageManager: "Bun"
|
511
|
+
};
|
512
|
+
}
|
513
|
+
case "yarn":
|
514
|
+
return no_override;
|
465
515
|
}
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
516
|
+
}
|
517
|
+
function getPathForPackageManager({
|
518
|
+
cliType,
|
519
|
+
lockfileVersion,
|
520
|
+
nodeVersion,
|
521
|
+
env
|
522
|
+
}) {
|
523
|
+
const overrides = getPathOverrideForPackageManager({
|
524
|
+
cliType,
|
525
|
+
lockfileVersion,
|
526
|
+
nodeVersion,
|
527
|
+
env
|
528
|
+
});
|
529
|
+
(0, import_debug.default)(
|
530
|
+
`Detected ${overrides.detectedPackageManager} with lockfileVersion ${lockfileVersion} (${typeof lockfileVersion}): ${overrides.path}`
|
531
|
+
);
|
532
|
+
const alreadyInPath = (newPath) => {
|
533
|
+
const oldPath = env.PATH ?? "";
|
534
|
+
return oldPath.split(import_path.default.delimiter).includes(newPath);
|
471
535
|
};
|
536
|
+
switch (true) {
|
537
|
+
case (cliType === "yarn" && !env.YARN_NODE_LINKER):
|
538
|
+
return { ...overrides, yarnNodeLinker: "node-modules" };
|
539
|
+
case alreadyInPath(overrides.path ?? ""):
|
540
|
+
return {
|
541
|
+
detectedLockfile: void 0,
|
542
|
+
detectedPackageManager: void 0,
|
543
|
+
path: void 0,
|
544
|
+
yarnNodeLinker: void 0
|
545
|
+
};
|
546
|
+
default:
|
547
|
+
return { ...overrides, yarnNodeLinker: void 0 };
|
548
|
+
}
|
472
549
|
}
|
473
550
|
async function runCustomInstallCommand({
|
474
551
|
destPath,
|
@@ -573,6 +650,7 @@ const installDependencies = (0, import_util.deprecate)(
|
|
573
650
|
getNodeBinPaths,
|
574
651
|
getNodeVersion,
|
575
652
|
getPathForPackageManager,
|
653
|
+
getPathOverrideForPackageManager,
|
576
654
|
getScriptName,
|
577
655
|
getSpawnOptions,
|
578
656
|
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,152 @@ 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:
|
22156
|
+
return "pnpm 6";
|
22157
|
+
case lockfileVersion === 5.4:
|
22158
|
+
return "pnpm 7";
|
22159
|
+
case (lockfileVersion === 6 || lockfileVersion === 6.1):
|
22160
|
+
return "pnpm 8";
|
22161
|
+
case (lockfileVersion === 7 || lockfileVersion === 9):
|
22162
|
+
return "pnpm 9";
|
22163
|
+
default:
|
22164
|
+
return "not found";
|
22165
|
+
}
|
22166
|
+
}
|
22167
|
+
function shouldUseNpm7(lockfileVersion, nodeVersion) {
|
22168
|
+
if (lockfileVersion === void 0)
|
22169
|
+
return false;
|
22170
|
+
return lockfileVersion >= 2 && (nodeVersion?.major || 0) < 16;
|
22171
|
+
}
|
22172
|
+
function getPathOverrideForPackageManager({
|
22147
22173
|
cliType,
|
22148
22174
|
lockfileVersion,
|
22149
22175
|
nodeVersion,
|
22150
22176
|
env
|
22151
22177
|
}) {
|
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";
|
22178
|
+
const no_override = {
|
22179
|
+
detectedLockfile: void 0,
|
22180
|
+
detectedPackageManager: void 0,
|
22181
|
+
path: void 0
|
22182
|
+
};
|
22161
22183
|
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
|
-
|
22184
|
+
switch (cliType) {
|
22185
|
+
case "npm":
|
22186
|
+
switch (true) {
|
22187
|
+
case corepackEnabled:
|
22188
|
+
return no_override;
|
22189
|
+
case shouldUseNpm7(lockfileVersion, nodeVersion):
|
22190
|
+
return {
|
22191
|
+
path: "/node16/bin-npm7",
|
22192
|
+
detectedLockfile: "package-lock.json",
|
22193
|
+
detectedPackageManager: "npm 7+"
|
22194
|
+
};
|
22195
|
+
default:
|
22196
|
+
return no_override;
|
22197
|
+
}
|
22198
|
+
case "pnpm":
|
22199
|
+
switch (detectPnpmVersion(lockfileVersion, corepackEnabled)) {
|
22200
|
+
case "corepack_enabled":
|
22201
|
+
return no_override;
|
22202
|
+
case "pnpm 7":
|
22203
|
+
return {
|
22204
|
+
path: "/pnpm7/node_modules/.bin",
|
22205
|
+
detectedLockfile: "pnpm-lock.yaml",
|
22206
|
+
detectedPackageManager: "pnpm 7"
|
22207
|
+
};
|
22208
|
+
case "pnpm 8":
|
22209
|
+
return {
|
22210
|
+
path: "/pnpm8/node_modules/.bin",
|
22211
|
+
detectedLockfile: "pnpm-lock.yaml",
|
22212
|
+
detectedPackageManager: "pnpm 8"
|
22213
|
+
};
|
22214
|
+
case "pnpm 9":
|
22215
|
+
return {
|
22216
|
+
path: "/pnpm9/node_modules/.bin",
|
22217
|
+
detectedLockfile: "pnpm-lock.yaml",
|
22218
|
+
detectedPackageManager: "pnpm 9"
|
22219
|
+
};
|
22220
|
+
case "pnpm 6":
|
22221
|
+
default:
|
22222
|
+
return no_override;
|
22223
|
+
}
|
22224
|
+
case "bun":
|
22225
|
+
switch (true) {
|
22226
|
+
case corepackEnabled:
|
22227
|
+
return no_override;
|
22228
|
+
default:
|
22229
|
+
return {
|
22230
|
+
path: "/bun1",
|
22231
|
+
detectedLockfile: "bun.lockb",
|
22232
|
+
detectedPackageManager: "Bun"
|
22233
|
+
};
|
22234
|
+
}
|
22235
|
+
case "yarn":
|
22236
|
+
return no_override;
|
22188
22237
|
}
|
22189
|
-
|
22190
|
-
|
22191
|
-
|
22192
|
-
|
22193
|
-
|
22238
|
+
}
|
22239
|
+
function getPathForPackageManager({
|
22240
|
+
cliType,
|
22241
|
+
lockfileVersion,
|
22242
|
+
nodeVersion,
|
22243
|
+
env
|
22244
|
+
}) {
|
22245
|
+
const overrides = getPathOverrideForPackageManager({
|
22246
|
+
cliType,
|
22247
|
+
lockfileVersion,
|
22248
|
+
nodeVersion,
|
22249
|
+
env
|
22250
|
+
});
|
22251
|
+
debug(
|
22252
|
+
`Detected ${overrides.detectedPackageManager} with lockfileVersion ${lockfileVersion} (${typeof lockfileVersion}): ${overrides.path}`
|
22253
|
+
);
|
22254
|
+
const alreadyInPath = (newPath) => {
|
22255
|
+
const oldPath = env.PATH ?? "";
|
22256
|
+
return oldPath.split(import_path5.default.delimiter).includes(newPath);
|
22194
22257
|
};
|
22258
|
+
switch (true) {
|
22259
|
+
case (cliType === "yarn" && !env.YARN_NODE_LINKER):
|
22260
|
+
return { ...overrides, yarnNodeLinker: "node-modules" };
|
22261
|
+
case alreadyInPath(overrides.path ?? ""):
|
22262
|
+
return {
|
22263
|
+
detectedLockfile: void 0,
|
22264
|
+
detectedPackageManager: void 0,
|
22265
|
+
path: void 0,
|
22266
|
+
yarnNodeLinker: void 0
|
22267
|
+
};
|
22268
|
+
default:
|
22269
|
+
return { ...overrides, yarnNodeLinker: void 0 };
|
22270
|
+
}
|
22195
22271
|
}
|
22196
22272
|
async function runCustomInstallCommand({
|
22197
22273
|
destPath,
|