@vercel/build-utils 8.2.1 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/fs/node-version.js +1 -1
- package/dist/fs/run-user-scripts.js +51 -4
- package/dist/index.js +52 -5
- package/dist/types.d.ts +3 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# @vercel/build-utils
|
2
2
|
|
3
|
+
## 8.3.0
|
4
|
+
|
5
|
+
### Minor Changes
|
6
|
+
|
7
|
+
- Adds the ability for builders to define a `diagnostics` step that is called after the build operation is done. ([#11653](https://github.com/vercel/vercel/pull/11653))
|
8
|
+
Implements the diagnostics step in the `next` builder.
|
9
|
+
|
10
|
+
### Patch Changes
|
11
|
+
|
12
|
+
- Add resolved node version range to warning message ([#11742](https://github.com/vercel/vercel/pull/11742))
|
13
|
+
|
14
|
+
## 8.2.2
|
15
|
+
|
16
|
+
### Patch Changes
|
17
|
+
|
18
|
+
- Change node 16.x EOL for Vercel ([#11704](https://github.com/vercel/vercel/pull/11704))
|
19
|
+
|
20
|
+
- Improve error message and refactor ([#11706](https://github.com/vercel/vercel/pull/11706))
|
21
|
+
|
22
|
+
- [built-utils] Handle case of not having lockfile when corepack is enabled ([#11697](https://github.com/vercel/vercel/pull/11697))
|
23
|
+
|
3
24
|
## 8.2.1
|
4
25
|
|
5
26
|
### Patch Changes
|
package/dist/fs/node-version.js
CHANGED
@@ -190,7 +190,7 @@ async function getNodeVersion(destPath, fallbackVersion = process.env.VERCEL_PRO
|
|
190
190
|
const { node } = packageJson.engines;
|
191
191
|
if (configuredVersion && !(0, import_semver.intersects)(configuredVersion, supportedNodeVersion.range)) {
|
192
192
|
console.warn(
|
193
|
-
`Warning: Due to "engines": { "node": "${node}" } in your \`package.json\` file, the Node.js Version defined in your Project Settings ("${configuredVersion}") will not apply. Learn More: http://vercel.link/node-version`
|
193
|
+
`Warning: Due to "engines": { "node": "${node}" } in your \`package.json\` file, the Node.js Version defined in your Project Settings ("${configuredVersion}") will not apply, Node.js Version "${supportedNodeVersion.range}" will be used instead. Learn More: http://vercel.link/node-version`
|
194
194
|
);
|
195
195
|
}
|
196
196
|
if ((0, import_semver.coerce)(node)?.raw === node) {
|
@@ -252,7 +252,7 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
|
|
252
252
|
lockfilePath = bunLockPath;
|
253
253
|
lockfileVersion = 0;
|
254
254
|
} else {
|
255
|
-
cliType = "npm";
|
255
|
+
cliType = packageJson ? detectPackageManagerNameWithoutLockfile(packageJson) : "npm";
|
256
256
|
}
|
257
257
|
const packageJsonPath = pkgJsonPath || void 0;
|
258
258
|
return {
|
@@ -263,6 +263,32 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
|
|
263
263
|
packageJsonPath
|
264
264
|
};
|
265
265
|
}
|
266
|
+
function detectPackageManagerNameWithoutLockfile(packageJson) {
|
267
|
+
const packageJsonPackageManager = packageJson.packageManager;
|
268
|
+
if (usingCorepack(process.env, packageJsonPackageManager)) {
|
269
|
+
const corepackPackageManager = validateVersionSpecifier(
|
270
|
+
packageJsonPackageManager
|
271
|
+
);
|
272
|
+
switch (corepackPackageManager?.packageName) {
|
273
|
+
case "npm":
|
274
|
+
case "pnpm":
|
275
|
+
case "yarn":
|
276
|
+
case "bun":
|
277
|
+
return corepackPackageManager.packageName;
|
278
|
+
case void 0:
|
279
|
+
return "npm";
|
280
|
+
default:
|
281
|
+
throw new Error(
|
282
|
+
`Unknown package manager "${corepackPackageManager?.packageName}". Change your package.json "packageManager" field to a known package manager: npm, pnpm, yarn, bun.`
|
283
|
+
);
|
284
|
+
}
|
285
|
+
}
|
286
|
+
return "npm";
|
287
|
+
}
|
288
|
+
function usingCorepack(env, packageJsonPackageManager) {
|
289
|
+
const corepackFlagged = env.ENABLE_EXPERIMENTAL_COREPACK === "1";
|
290
|
+
return corepackFlagged && Boolean(packageJsonPackageManager);
|
291
|
+
}
|
266
292
|
async function walkParentDirs({
|
267
293
|
base,
|
268
294
|
start,
|
@@ -391,8 +417,7 @@ function getEnvForPackageManager({
|
|
391
417
|
nodeVersion,
|
392
418
|
env
|
393
419
|
}) {
|
394
|
-
const
|
395
|
-
const corepackEnabled = corepackFlagged && Boolean(packageJsonPackageManager);
|
420
|
+
const corepackEnabled = usingCorepack(env, packageJsonPackageManager);
|
396
421
|
const {
|
397
422
|
detectedLockfile,
|
398
423
|
detectedPackageManager,
|
@@ -528,6 +553,28 @@ function getPathOverrideForPackageManager({
|
|
528
553
|
return no_override;
|
529
554
|
}
|
530
555
|
}
|
556
|
+
function validateVersionSpecifier(version) {
|
557
|
+
if (!version) {
|
558
|
+
return void 0;
|
559
|
+
}
|
560
|
+
const [before, after, ...extra] = version.split("@");
|
561
|
+
if (extra.length) {
|
562
|
+
return void 0;
|
563
|
+
}
|
564
|
+
if (!before) {
|
565
|
+
return void 0;
|
566
|
+
}
|
567
|
+
if (!after) {
|
568
|
+
return void 0;
|
569
|
+
}
|
570
|
+
if (!(0, import_semver.validRange)(after)) {
|
571
|
+
return void 0;
|
572
|
+
}
|
573
|
+
return {
|
574
|
+
packageName: before,
|
575
|
+
packageVersionRange: after
|
576
|
+
};
|
577
|
+
}
|
531
578
|
function getPathForPackageManager({
|
532
579
|
cliType,
|
533
580
|
lockfileVersion,
|
package/dist/index.js
CHANGED
@@ -21620,7 +21620,7 @@ var NODE_VERSIONS = [
|
|
21620
21620
|
major: 16,
|
21621
21621
|
range: "16.x",
|
21622
21622
|
runtime: "nodejs16.x",
|
21623
|
-
discontinueDate: /* @__PURE__ */ new Date("2025-
|
21623
|
+
discontinueDate: /* @__PURE__ */ new Date("2025-01-31")
|
21624
21624
|
},
|
21625
21625
|
{
|
21626
21626
|
major: 14,
|
@@ -21912,7 +21912,7 @@ async function getNodeVersion(destPath, fallbackVersion = process.env.VERCEL_PRO
|
|
21912
21912
|
const { node } = packageJson.engines;
|
21913
21913
|
if (configuredVersion && !(0, import_semver2.intersects)(configuredVersion, supportedNodeVersion.range)) {
|
21914
21914
|
console.warn(
|
21915
|
-
`Warning: Due to "engines": { "node": "${node}" } in your \`package.json\` file, the Node.js Version defined in your Project Settings ("${configuredVersion}") will not apply. Learn More: http://vercel.link/node-version`
|
21915
|
+
`Warning: Due to "engines": { "node": "${node}" } in your \`package.json\` file, the Node.js Version defined in your Project Settings ("${configuredVersion}") will not apply, Node.js Version "${supportedNodeVersion.range}" will be used instead. Learn More: http://vercel.link/node-version`
|
21916
21916
|
);
|
21917
21917
|
}
|
21918
21918
|
if ((0, import_semver2.coerce)(node)?.raw === node) {
|
@@ -21974,7 +21974,7 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
|
|
21974
21974
|
lockfilePath = bunLockPath;
|
21975
21975
|
lockfileVersion = 0;
|
21976
21976
|
} else {
|
21977
|
-
cliType = "npm";
|
21977
|
+
cliType = packageJson ? detectPackageManagerNameWithoutLockfile(packageJson) : "npm";
|
21978
21978
|
}
|
21979
21979
|
const packageJsonPath = pkgJsonPath || void 0;
|
21980
21980
|
return {
|
@@ -21985,6 +21985,32 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
|
|
21985
21985
|
packageJsonPath
|
21986
21986
|
};
|
21987
21987
|
}
|
21988
|
+
function detectPackageManagerNameWithoutLockfile(packageJson) {
|
21989
|
+
const packageJsonPackageManager = packageJson.packageManager;
|
21990
|
+
if (usingCorepack(process.env, packageJsonPackageManager)) {
|
21991
|
+
const corepackPackageManager = validateVersionSpecifier(
|
21992
|
+
packageJsonPackageManager
|
21993
|
+
);
|
21994
|
+
switch (corepackPackageManager?.packageName) {
|
21995
|
+
case "npm":
|
21996
|
+
case "pnpm":
|
21997
|
+
case "yarn":
|
21998
|
+
case "bun":
|
21999
|
+
return corepackPackageManager.packageName;
|
22000
|
+
case void 0:
|
22001
|
+
return "npm";
|
22002
|
+
default:
|
22003
|
+
throw new Error(
|
22004
|
+
`Unknown package manager "${corepackPackageManager?.packageName}". Change your package.json "packageManager" field to a known package manager: npm, pnpm, yarn, bun.`
|
22005
|
+
);
|
22006
|
+
}
|
22007
|
+
}
|
22008
|
+
return "npm";
|
22009
|
+
}
|
22010
|
+
function usingCorepack(env, packageJsonPackageManager) {
|
22011
|
+
const corepackFlagged = env.ENABLE_EXPERIMENTAL_COREPACK === "1";
|
22012
|
+
return corepackFlagged && Boolean(packageJsonPackageManager);
|
22013
|
+
}
|
21988
22014
|
async function walkParentDirs({
|
21989
22015
|
base,
|
21990
22016
|
start,
|
@@ -22113,8 +22139,7 @@ function getEnvForPackageManager({
|
|
22113
22139
|
nodeVersion,
|
22114
22140
|
env
|
22115
22141
|
}) {
|
22116
|
-
const
|
22117
|
-
const corepackEnabled = corepackFlagged && Boolean(packageJsonPackageManager);
|
22142
|
+
const corepackEnabled = usingCorepack(env, packageJsonPackageManager);
|
22118
22143
|
const {
|
22119
22144
|
detectedLockfile,
|
22120
22145
|
detectedPackageManager,
|
@@ -22250,6 +22275,28 @@ function getPathOverrideForPackageManager({
|
|
22250
22275
|
return no_override;
|
22251
22276
|
}
|
22252
22277
|
}
|
22278
|
+
function validateVersionSpecifier(version) {
|
22279
|
+
if (!version) {
|
22280
|
+
return void 0;
|
22281
|
+
}
|
22282
|
+
const [before, after, ...extra] = version.split("@");
|
22283
|
+
if (extra.length) {
|
22284
|
+
return void 0;
|
22285
|
+
}
|
22286
|
+
if (!before) {
|
22287
|
+
return void 0;
|
22288
|
+
}
|
22289
|
+
if (!after) {
|
22290
|
+
return void 0;
|
22291
|
+
}
|
22292
|
+
if (!(0, import_semver2.validRange)(after)) {
|
22293
|
+
return void 0;
|
22294
|
+
}
|
22295
|
+
return {
|
22296
|
+
packageName: before,
|
22297
|
+
packageVersionRange: after
|
22298
|
+
};
|
22299
|
+
}
|
22253
22300
|
function getPathForPackageManager({
|
22254
22301
|
cliType,
|
22255
22302
|
lockfileVersion,
|
package/dist/types.d.ts
CHANGED
@@ -318,12 +318,14 @@ export interface ProjectSettings {
|
|
318
318
|
export interface BuilderV2 {
|
319
319
|
version: 2;
|
320
320
|
build: BuildV2;
|
321
|
+
diagnostics?: Diagnostics;
|
321
322
|
prepareCache?: PrepareCache;
|
322
323
|
shouldServe?: ShouldServe;
|
323
324
|
}
|
324
325
|
export interface BuilderV3 {
|
325
326
|
version: 3;
|
326
327
|
build: BuildV3;
|
328
|
+
diagnostics?: Diagnostics;
|
327
329
|
prepareCache?: PrepareCache;
|
328
330
|
shouldServe?: ShouldServe;
|
329
331
|
startDevServer?: StartDevServer;
|
@@ -418,6 +420,7 @@ export interface BuildResultV3 {
|
|
418
420
|
export type BuildV2 = (options: BuildOptions) => Promise<BuildResultV2>;
|
419
421
|
export type BuildV3 = (options: BuildOptions) => Promise<BuildResultV3>;
|
420
422
|
export type PrepareCache = (options: PrepareCacheOptions) => Promise<Files>;
|
423
|
+
export type Diagnostics = (options: BuildOptions) => Promise<Files>;
|
421
424
|
export type ShouldServe = (options: ShouldServeOptions) => boolean | Promise<boolean>;
|
422
425
|
export type StartDevServer = (options: StartDevServerOptions) => Promise<StartDevServerResult>;
|
423
426
|
/**
|