@vercel/build-utils 10.5.1 → 10.6.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 CHANGED
@@ -1,5 +1,23 @@
1
1
  # @vercel/build-utils
2
2
 
3
+ ## 10.6.1
4
+
5
+ ### Patch Changes
6
+
7
+ - next package uses @vercel/routing-utils HasField rather than redefining & stricter validation. ([#13409](https://github.com/vercel/vercel/pull/13409))
8
+
9
+ - Make architecture a defined property on Lambda classes to apply when creating ([#13398](https://github.com/vercel/vercel/pull/13398))
10
+
11
+ - [env-vars] expose VERCEL_PROJECT_ID as NEXT_PUBLIC_VERCEL_PROJECT_ID ([#13431](https://github.com/vercel/vercel/pull/13431))
12
+
13
+ ## 10.6.0
14
+
15
+ ### Minor Changes
16
+
17
+ - provide a more verbose error when package.json is not valid ([#13346](https://github.com/vercel/vercel/pull/13346))
18
+
19
+ - Allow configuring functions `architecture` via the `vercel.json` configuration ([#13344](https://github.com/vercel/vercel/pull/13344))
20
+
3
21
  ## 10.5.1
4
22
 
5
23
  ### Patch Changes
@@ -239,7 +239,16 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
239
239
  start: destPath,
240
240
  filename: "package.json"
241
241
  });
242
- const packageJson = readPackageJson && pkgJsonPath ? JSON.parse(await import_fs_extra.default.readFile(pkgJsonPath, "utf8")) : void 0;
242
+ let packageJson;
243
+ if (readPackageJson && pkgJsonPath) {
244
+ try {
245
+ packageJson = JSON.parse(await import_fs_extra.default.readFile(pkgJsonPath, "utf8"));
246
+ } catch (err) {
247
+ throw new Error(
248
+ `Could not read ${pkgJsonPath}: ${err.message}.`
249
+ );
250
+ }
251
+ }
243
252
  const {
244
253
  paths: [
245
254
  yarnLockPath,
@@ -33,7 +33,8 @@ function getPrefixedEnvVars({
33
33
  "VERCEL_REGION",
34
34
  "VERCEL_BRANCH_URL",
35
35
  "VERCEL_PROJECT_PRODUCTION_URL",
36
- "VERCEL_DEPLOYMENT_ID"
36
+ "VERCEL_DEPLOYMENT_ID",
37
+ "VERCEL_PROJECT_ID"
37
38
  ];
38
39
  const newEnvs = {};
39
40
  if (envPrefix && envs.VERCEL_URL) {
package/dist/index.js CHANGED
@@ -10825,9 +10825,9 @@ var require_fs2 = __commonJS({
10825
10825
  }
10826
10826
  });
10827
10827
 
10828
- // ../../node_modules/.pnpm/minimatch@5.1.6/node_modules/minimatch/lib/path.js
10828
+ // ../../node_modules/.pnpm/minimatch@5.0.1/node_modules/minimatch/lib/path.js
10829
10829
  var require_path = __commonJS({
10830
- "../../node_modules/.pnpm/minimatch@5.1.6/node_modules/minimatch/lib/path.js"(exports2, module2) {
10830
+ "../../node_modules/.pnpm/minimatch@5.0.1/node_modules/minimatch/lib/path.js"(exports2, module2) {
10831
10831
  var isWindows = typeof process === "object" && process && process.platform === "win32";
10832
10832
  module2.exports = isWindows ? { sep: "\\" } : { sep: "/" };
10833
10833
  }
@@ -10984,9 +10984,9 @@ var require_brace_expansion2 = __commonJS({
10984
10984
  }
10985
10985
  });
10986
10986
 
10987
- // ../../node_modules/.pnpm/minimatch@5.1.6/node_modules/minimatch/minimatch.js
10987
+ // ../../node_modules/.pnpm/minimatch@5.0.1/node_modules/minimatch/minimatch.js
10988
10988
  var require_minimatch2 = __commonJS({
10989
- "../../node_modules/.pnpm/minimatch@5.1.6/node_modules/minimatch/minimatch.js"(exports2, module2) {
10989
+ "../../node_modules/.pnpm/minimatch@5.0.1/node_modules/minimatch/minimatch.js"(exports2, module2) {
10990
10990
  var minimatch2 = module2.exports = (p, pattern, options = {}) => {
10991
10991
  assertValidPattern(pattern);
10992
10992
  if (!options.nocomment && pattern.charAt(0) === "#") {
@@ -11072,9 +11072,7 @@ var require_minimatch2 = __commonJS({
11072
11072
  return list;
11073
11073
  };
11074
11074
  var globUnescape = (s) => s.replace(/\\(.)/g, "$1");
11075
- var charUnescape = (s) => s.replace(/\\([^-\]])/g, "$1");
11076
11075
  var regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
11077
- var braExpEscape = (s) => s.replace(/[[\]\\]/g, "\\$&");
11078
11076
  var Minimatch = class {
11079
11077
  constructor(pattern, options) {
11080
11078
  assertValidPattern(pattern);
@@ -11083,10 +11081,6 @@ var require_minimatch2 = __commonJS({
11083
11081
  this.options = options;
11084
11082
  this.set = [];
11085
11083
  this.pattern = pattern;
11086
- this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;
11087
- if (this.windowsPathsNoEscape) {
11088
- this.pattern = this.pattern.replace(/\\/g, "/");
11089
- }
11090
11084
  this.regexp = null;
11091
11085
  this.negate = false;
11092
11086
  this.comment = false;
@@ -11131,7 +11125,7 @@ var require_minimatch2 = __commonJS({
11131
11125
  negateOffset++;
11132
11126
  }
11133
11127
  if (negateOffset)
11134
- this.pattern = pattern.slice(negateOffset);
11128
+ this.pattern = pattern.substr(negateOffset);
11135
11129
  this.negate = negate;
11136
11130
  }
11137
11131
  // set partial to true to test if, for example,
@@ -11222,7 +11216,7 @@ var require_minimatch2 = __commonJS({
11222
11216
  if (pattern === "")
11223
11217
  return "";
11224
11218
  let re = "";
11225
- let hasMagic = false;
11219
+ let hasMagic = !!options.nocase;
11226
11220
  let escaping = false;
11227
11221
  const patternListStack = [];
11228
11222
  const negativeLists = [];
@@ -11233,10 +11227,7 @@ var require_minimatch2 = __commonJS({
11233
11227
  let cs;
11234
11228
  let pl;
11235
11229
  let sp;
11236
- let dotTravAllowed = pattern.charAt(0) === ".";
11237
- let dotFileAllowed = options.dot || dotTravAllowed;
11238
- const patternStart = () => dotTravAllowed ? "" : dotFileAllowed ? "(?!(?:^|\\/)\\.{1,2}(?:$|\\/))" : "(?!\\.)";
11239
- const subPatternStart = (p) => p.charAt(0) === "." ? "" : options.dot ? "(?!(?:^|\\/)\\.{1,2}(?:$|\\/))" : "(?!\\.)";
11230
+ const patternStart = pattern.charAt(0) === "." ? "" : options.dot ? "(?!(?:^|\\/)\\.{1,2}(?:$|\\/))" : "(?!\\.)";
11240
11231
  const clearStateChar = () => {
11241
11232
  if (stateChar) {
11242
11233
  switch (stateChar) {
@@ -11274,10 +11265,6 @@ var require_minimatch2 = __commonJS({
11274
11265
  return false;
11275
11266
  }
11276
11267
  case "\\":
11277
- if (inClass && pattern.charAt(i + 1) === "-") {
11278
- re += c;
11279
- continue;
11280
- }
11281
11268
  clearStateChar();
11282
11269
  escaping = true;
11283
11270
  continue;
@@ -11300,7 +11287,7 @@ var require_minimatch2 = __commonJS({
11300
11287
  if (options.noext)
11301
11288
  clearStateChar();
11302
11289
  continue;
11303
- case "(": {
11290
+ case "(":
11304
11291
  if (inClass) {
11305
11292
  re += "(";
11306
11293
  continue;
@@ -11309,54 +11296,39 @@ var require_minimatch2 = __commonJS({
11309
11296
  re += "\\(";
11310
11297
  continue;
11311
11298
  }
11312
- const plEntry = {
11299
+ patternListStack.push({
11313
11300
  type: stateChar,
11314
11301
  start: i - 1,
11315
11302
  reStart: re.length,
11316
11303
  open: plTypes[stateChar].open,
11317
11304
  close: plTypes[stateChar].close
11318
- };
11319
- this.debug(this.pattern, " ", plEntry);
11320
- patternListStack.push(plEntry);
11321
- re += plEntry.open;
11322
- if (plEntry.start === 0 && plEntry.type !== "!") {
11323
- dotTravAllowed = true;
11324
- re += subPatternStart(pattern.slice(i + 1));
11325
- }
11305
+ });
11306
+ re += stateChar === "!" ? "(?:(?!(?:" : "(?:";
11326
11307
  this.debug("plType %j %j", stateChar, re);
11327
11308
  stateChar = false;
11328
11309
  continue;
11329
- }
11330
- case ")": {
11331
- const plEntry = patternListStack[patternListStack.length - 1];
11332
- if (inClass || !plEntry) {
11310
+ case ")":
11311
+ if (inClass || !patternListStack.length) {
11333
11312
  re += "\\)";
11334
11313
  continue;
11335
11314
  }
11336
- patternListStack.pop();
11337
11315
  clearStateChar();
11338
11316
  hasMagic = true;
11339
- pl = plEntry;
11317
+ pl = patternListStack.pop();
11340
11318
  re += pl.close;
11341
11319
  if (pl.type === "!") {
11342
- negativeLists.push(Object.assign(pl, { reEnd: re.length }));
11320
+ negativeLists.push(pl);
11343
11321
  }
11322
+ pl.reEnd = re.length;
11344
11323
  continue;
11345
- }
11346
- case "|": {
11347
- const plEntry = patternListStack[patternListStack.length - 1];
11348
- if (inClass || !plEntry) {
11324
+ case "|":
11325
+ if (inClass || !patternListStack.length) {
11349
11326
  re += "\\|";
11350
11327
  continue;
11351
11328
  }
11352
11329
  clearStateChar();
11353
11330
  re += "|";
11354
- if (plEntry.start === 0 && plEntry.type !== "!") {
11355
- dotTravAllowed = true;
11356
- re += subPatternStart(pattern.slice(i + 1));
11357
- }
11358
11331
  continue;
11359
- }
11360
11332
  case "[":
11361
11333
  clearStateChar();
11362
11334
  if (inClass) {
@@ -11375,13 +11347,17 @@ var require_minimatch2 = __commonJS({
11375
11347
  }
11376
11348
  cs = pattern.substring(classStart + 1, i);
11377
11349
  try {
11378
- RegExp("[" + braExpEscape(charUnescape(cs)) + "]");
11379
- re += c;
11350
+ RegExp("[" + cs + "]");
11380
11351
  } catch (er) {
11381
- re = re.substring(0, reClassStart) + "(?:$.)";
11352
+ sp = this.parse(cs, SUBPARSE);
11353
+ re = re.substr(0, reClassStart) + "\\[" + sp[0] + "\\]";
11354
+ hasMagic = hasMagic || sp[1];
11355
+ inClass = false;
11356
+ continue;
11382
11357
  }
11383
11358
  hasMagic = true;
11384
11359
  inClass = false;
11360
+ re += c;
11385
11361
  continue;
11386
11362
  default:
11387
11363
  clearStateChar();
@@ -11393,9 +11369,9 @@ var require_minimatch2 = __commonJS({
11393
11369
  }
11394
11370
  }
11395
11371
  if (inClass) {
11396
- cs = pattern.slice(classStart + 1);
11372
+ cs = pattern.substr(classStart + 1);
11397
11373
  sp = this.parse(cs, SUBPARSE);
11398
- re = re.substring(0, reClassStart) + "\\[" + sp[0];
11374
+ re = re.substr(0, reClassStart) + "\\[" + sp[0];
11399
11375
  hasMagic = hasMagic || sp[1];
11400
11376
  }
11401
11377
  for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
@@ -11424,28 +11400,24 @@ var require_minimatch2 = __commonJS({
11424
11400
  const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);
11425
11401
  let nlAfter = re.slice(nl.reEnd);
11426
11402
  const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;
11427
- const closeParensBefore = nlBefore.split(")").length;
11428
- const openParensBefore = nlBefore.split("(").length - closeParensBefore;
11403
+ const openParensBefore = nlBefore.split("(").length - 1;
11429
11404
  let cleanAfter = nlAfter;
11430
11405
  for (let i = 0; i < openParensBefore; i++) {
11431
11406
  cleanAfter = cleanAfter.replace(/\)[+*?]?/, "");
11432
11407
  }
11433
11408
  nlAfter = cleanAfter;
11434
- const dollar = nlAfter === "" && isSub !== SUBPARSE ? "(?:$|\\/)" : "";
11409
+ const dollar = nlAfter === "" && isSub !== SUBPARSE ? "$" : "";
11435
11410
  re = nlBefore + nlFirst + nlAfter + dollar + nlLast;
11436
11411
  }
11437
11412
  if (re !== "" && hasMagic) {
11438
11413
  re = "(?=.)" + re;
11439
11414
  }
11440
11415
  if (addPatternStart) {
11441
- re = patternStart() + re;
11416
+ re = patternStart + re;
11442
11417
  }
11443
11418
  if (isSub === SUBPARSE) {
11444
11419
  return [re, hasMagic];
11445
11420
  }
11446
- if (options.nocase && !hasMagic) {
11447
- hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();
11448
- }
11449
11421
  if (!hasMagic) {
11450
11422
  return globUnescape(pattern);
11451
11423
  }
@@ -22400,6 +22372,20 @@ async function download(files, basePath, meta) {
22400
22372
  }
22401
22373
 
22402
22374
  // src/lambda.ts
22375
+ function getDefaultLambdaArchitecture(architecture) {
22376
+ if (architecture) {
22377
+ return architecture;
22378
+ }
22379
+ switch (process.arch) {
22380
+ case "arm":
22381
+ case "arm64": {
22382
+ return "arm64";
22383
+ }
22384
+ default: {
22385
+ return "x86_64";
22386
+ }
22387
+ }
22388
+ }
22403
22389
  var Lambda = class {
22404
22390
  constructor(opts) {
22405
22391
  const {
@@ -22489,7 +22475,7 @@ var Lambda = class {
22489
22475
  this.files = "files" in opts ? opts.files : void 0;
22490
22476
  this.handler = handler;
22491
22477
  this.runtime = runtime;
22492
- this.architecture = architecture;
22478
+ this.architecture = getDefaultLambdaArchitecture(architecture);
22493
22479
  this.memory = memory;
22494
22480
  this.maxDuration = maxDuration;
22495
22481
  this.environment = environment;
@@ -22573,6 +22559,7 @@ async function getLambdaOptionsFromFunction({
22573
22559
  for (const [pattern, fn] of Object.entries(config.functions)) {
22574
22560
  if (sourceFile === pattern || (0, import_minimatch.default)(sourceFile, pattern)) {
22575
22561
  return {
22562
+ architecture: fn.architecture,
22576
22563
  memory: fn.memory,
22577
22564
  maxDuration: fn.maxDuration
22578
22565
  };
@@ -22656,8 +22643,7 @@ var Prerender = class {
22656
22643
  }
22657
22644
  if (experimentalBypassFor !== void 0) {
22658
22645
  if (!Array.isArray(experimentalBypassFor) || experimentalBypassFor.some(
22659
- (field) => typeof field !== "object" || // host doesn't need a key
22660
- field.type !== "host" && typeof field.key !== "string" || typeof field.type !== "string" || field.value !== void 0 && typeof field.value !== "string"
22646
+ (field) => typeof field !== "object" || typeof field.type !== "string" || field.type === "host" && "key" in field || field.type !== "host" && typeof field.key !== "string" || field.value !== void 0 && typeof field.value !== "string" && (typeof field.value !== "object" || field.value === null || Array.isArray(field.value))
22661
22647
  )) {
22662
22648
  throw new Error(
22663
22649
  "The `experimentalBypassFor` argument for `Prerender` must be Array of objects with fields `type`, `key` and optionally `value`."
@@ -23253,7 +23239,16 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
23253
23239
  start: destPath,
23254
23240
  filename: "package.json"
23255
23241
  });
23256
- const packageJson = readPackageJson && pkgJsonPath ? JSON.parse(await import_fs_extra7.default.readFile(pkgJsonPath, "utf8")) : void 0;
23242
+ let packageJson;
23243
+ if (readPackageJson && pkgJsonPath) {
23244
+ try {
23245
+ packageJson = JSON.parse(await import_fs_extra7.default.readFile(pkgJsonPath, "utf8"));
23246
+ } catch (err) {
23247
+ throw new Error(
23248
+ `Could not read ${pkgJsonPath}: ${err.message}.`
23249
+ );
23250
+ }
23251
+ }
23257
23252
  const {
23258
23253
  paths: [
23259
23254
  yarnLockPath,
@@ -24105,7 +24100,8 @@ function getPrefixedEnvVars({
24105
24100
  "VERCEL_REGION",
24106
24101
  "VERCEL_BRANCH_URL",
24107
24102
  "VERCEL_PROJECT_PRODUCTION_URL",
24108
- "VERCEL_DEPLOYMENT_ID"
24103
+ "VERCEL_DEPLOYMENT_ID",
24104
+ "VERCEL_PROJECT_ID"
24109
24105
  ];
24110
24106
  const newEnvs = {};
24111
24107
  if (envPrefix && envs.VERCEL_URL) {
@@ -24286,6 +24282,10 @@ var functionsSchema = {
24286
24282
  type: "object",
24287
24283
  additionalProperties: false,
24288
24284
  properties: {
24285
+ architecture: {
24286
+ type: "string",
24287
+ enum: ["x86_64", "arm64"]
24288
+ },
24289
24289
  runtime: {
24290
24290
  type: "string",
24291
24291
  maxLength: 256
package/dist/lambda.d.ts CHANGED
@@ -49,7 +49,7 @@ export declare class Lambda {
49
49
  files?: Files;
50
50
  handler: string;
51
51
  runtime: string;
52
- architecture?: LambdaArchitecture;
52
+ architecture: LambdaArchitecture;
53
53
  memory?: number;
54
54
  maxDuration?: number;
55
55
  environment: Env;
@@ -77,5 +77,5 @@ export declare class Lambda {
77
77
  */
78
78
  export declare function createLambda(opts: LambdaOptions): Promise<Lambda>;
79
79
  export declare function createZip(files: Files): Promise<Buffer>;
80
- export declare function getLambdaOptionsFromFunction({ sourceFile, config, }: GetLambdaOptionsFromFunctionOptions): Promise<Pick<LambdaOptions, 'memory' | 'maxDuration'>>;
80
+ export declare function getLambdaOptionsFromFunction({ sourceFile, config, }: GetLambdaOptionsFromFunctionOptions): Promise<Pick<LambdaOptions, 'architecture' | 'memory' | 'maxDuration'>>;
81
81
  export {};
package/dist/lambda.js CHANGED
@@ -41,6 +41,20 @@ var import_minimatch = __toESM(require("minimatch"));
41
41
  var import_fs_extra = require("fs-extra");
42
42
  var import_download = require("./fs/download");
43
43
  var import_stream_to_buffer = __toESM(require("./fs/stream-to-buffer"));
44
+ function getDefaultLambdaArchitecture(architecture) {
45
+ if (architecture) {
46
+ return architecture;
47
+ }
48
+ switch (process.arch) {
49
+ case "arm":
50
+ case "arm64": {
51
+ return "arm64";
52
+ }
53
+ default: {
54
+ return "x86_64";
55
+ }
56
+ }
57
+ }
44
58
  class Lambda {
45
59
  constructor(opts) {
46
60
  const {
@@ -130,7 +144,7 @@ class Lambda {
130
144
  this.files = "files" in opts ? opts.files : void 0;
131
145
  this.handler = handler;
132
146
  this.runtime = runtime;
133
- this.architecture = architecture;
147
+ this.architecture = getDefaultLambdaArchitecture(architecture);
134
148
  this.memory = memory;
135
149
  this.maxDuration = maxDuration;
136
150
  this.environment = environment;
@@ -214,6 +228,7 @@ async function getLambdaOptionsFromFunction({
214
228
  for (const [pattern, fn] of Object.entries(config.functions)) {
215
229
  if (sourceFile === pattern || (0, import_minimatch.default)(sourceFile, pattern)) {
216
230
  return {
231
+ architecture: fn.architecture,
217
232
  memory: fn.memory,
218
233
  maxDuration: fn.maxDuration
219
234
  };
package/dist/prerender.js CHANGED
@@ -76,8 +76,7 @@ class Prerender {
76
76
  }
77
77
  if (experimentalBypassFor !== void 0) {
78
78
  if (!Array.isArray(experimentalBypassFor) || experimentalBypassFor.some(
79
- (field) => typeof field !== "object" || // host doesn't need a key
80
- field.type !== "host" && typeof field.key !== "string" || typeof field.type !== "string" || field.value !== void 0 && typeof field.value !== "string"
79
+ (field) => typeof field !== "object" || typeof field.type !== "string" || field.type === "host" && "key" in field || field.type !== "host" && typeof field.key !== "string" || field.value !== void 0 && typeof field.value !== "string" && (typeof field.value !== "object" || field.value === null || Array.isArray(field.value))
81
80
  )) {
82
81
  throw new Error(
83
82
  "The `experimentalBypassFor` argument for `Prerender` must be Array of objects with fields `type`, `key` and optionally `value`."
package/dist/schemas.d.ts CHANGED
@@ -8,6 +8,10 @@ export declare const functionsSchema: {
8
8
  type: string;
9
9
  additionalProperties: boolean;
10
10
  properties: {
11
+ architecture: {
12
+ type: string;
13
+ enum: string[];
14
+ };
11
15
  runtime: {
12
16
  type: string;
13
17
  maxLength: number;
package/dist/schemas.js CHANGED
@@ -32,6 +32,10 @@ const functionsSchema = {
32
32
  type: "object",
33
33
  additionalProperties: false,
34
34
  properties: {
35
+ architecture: {
36
+ type: "string",
37
+ enum: ["x86_64", "arm64"]
38
+ },
35
39
  runtime: {
36
40
  type: "string",
37
41
  maxLength: 256
package/dist/types.d.ts CHANGED
@@ -2,10 +2,11 @@
2
2
  import type FileRef from './file-ref';
3
3
  import type FileFsRef from './file-fs-ref';
4
4
  import type FileBlob from './file-blob';
5
- import type { Lambda } from './lambda';
5
+ import type { Lambda, LambdaArchitecture } from './lambda';
6
6
  import type { Prerender } from './prerender';
7
7
  import type { EdgeFunction } from './edge-function';
8
8
  import type { Span } from './trace';
9
+ import type { HasField } from '@vercel/routing-utils';
9
10
  export interface Env {
10
11
  [name: string]: string | undefined;
11
12
  }
@@ -44,14 +45,7 @@ export interface Config {
44
45
  middleware?: boolean;
45
46
  [key: string]: unknown;
46
47
  }
47
- export type HasField = Array<{
48
- type: 'host';
49
- value: string;
50
- } | {
51
- type: 'header' | 'cookie' | 'query';
52
- key: string;
53
- value?: string;
54
- }>;
48
+ export type { HasField };
55
49
  export interface Meta {
56
50
  isDev?: boolean;
57
51
  devCacheDir?: string;
@@ -322,6 +316,7 @@ export interface Builder {
322
316
  }
323
317
  export interface BuilderFunctions {
324
318
  [key: string]: {
319
+ architecture?: LambdaArchitecture;
325
320
  memory?: number;
326
321
  maxDuration?: number;
327
322
  runtime?: string;
@@ -501,4 +496,3 @@ export interface Chain {
501
496
  */
502
497
  headers: Record<string, string>;
503
498
  }
504
- export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/build-utils",
3
- "version": "10.5.1",
3
+ "version": "10.6.1",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.js",
@@ -27,6 +27,7 @@
27
27
  "@types/semver": "6.0.0",
28
28
  "@types/yazl": "2.4.2",
29
29
  "@vercel/error-utils": "2.0.3",
30
+ "@vercel/routing-utils": "5.0.6",
30
31
  "aggregate-error": "3.0.1",
31
32
  "async-retry": "1.2.3",
32
33
  "async-sema": "2.1.4",