@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 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
@@ -46,7 +46,7 @@ const NODE_VERSIONS = [
46
46
  major: 16,
47
47
  range: "16.x",
48
48
  runtime: "nodejs16.x",
49
- discontinueDate: /* @__PURE__ */ new Date("2025-02-28")
49
+ discontinueDate: /* @__PURE__ */ new Date("2025-01-31")
50
50
  },
51
51
  {
52
52
  major: 14,
@@ -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 corepackFlagged = env.ENABLE_EXPERIMENTAL_COREPACK === "1";
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-02-28")
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 corepackFlagged = env.ENABLE_EXPERIMENTAL_COREPACK === "1";
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
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/build-utils",
3
- "version": "8.2.1",
3
+ "version": "8.3.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.js",