vercel 25.1.1-canary.9 → 25.2.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.
Files changed (2) hide show
  1. package/dist/index.js +301 -184
  2. package/package.json +13 -13
package/dist/index.js CHANGED
@@ -28433,116 +28433,6 @@ function tryAutoDetect(){
28433
28433
  }
28434
28434
 
28435
28435
 
28436
- /***/ }),
28437
-
28438
- /***/ 52056:
28439
- /***/ ((module, exports, __webpack_require__) => {
28440
-
28441
- "use strict";
28442
-
28443
-
28444
- Object.defineProperty(exports, "__esModule", ({ value: true }));
28445
-
28446
- const picomatch = __webpack_require__(9138);
28447
- const normalizePath = __webpack_require__(34458);
28448
-
28449
- /**
28450
- * @typedef {(testString: string) => boolean} AnymatchFn
28451
- * @typedef {string|RegExp|AnymatchFn} AnymatchPattern
28452
- * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher
28453
- */
28454
- const BANG = '!';
28455
- const DEFAULT_OPTIONS = {returnIndex: false};
28456
- const arrify = (item) => Array.isArray(item) ? item : [item];
28457
-
28458
- /**
28459
- * @param {AnymatchPattern} matcher
28460
- * @param {object} options
28461
- * @returns {AnymatchFn}
28462
- */
28463
- const createPattern = (matcher, options) => {
28464
- if (typeof matcher === 'function') {
28465
- return matcher;
28466
- }
28467
- if (typeof matcher === 'string') {
28468
- const glob = picomatch(matcher, options);
28469
- return (string) => matcher === string || glob(string);
28470
- }
28471
- if (matcher instanceof RegExp) {
28472
- return (string) => matcher.test(string);
28473
- }
28474
- return (string) => false;
28475
- };
28476
-
28477
- /**
28478
- * @param {Array<Function>} patterns
28479
- * @param {Array<Function>} negPatterns
28480
- * @param {String|Array} args
28481
- * @param {Boolean} returnIndex
28482
- * @returns {boolean|number}
28483
- */
28484
- const matchPatterns = (patterns, negPatterns, args, returnIndex) => {
28485
- const isList = Array.isArray(args);
28486
- const _path = isList ? args[0] : args;
28487
- if (!isList && typeof _path !== 'string') {
28488
- throw new TypeError('anymatch: second argument must be a string: got ' +
28489
- Object.prototype.toString.call(_path))
28490
- }
28491
- const path = normalizePath(_path);
28492
-
28493
- for (let index = 0; index < negPatterns.length; index++) {
28494
- const nglob = negPatterns[index];
28495
- if (nglob(path)) {
28496
- return returnIndex ? -1 : false;
28497
- }
28498
- }
28499
-
28500
- const applied = isList && [path].concat(args.slice(1));
28501
- for (let index = 0; index < patterns.length; index++) {
28502
- const pattern = patterns[index];
28503
- if (isList ? pattern(...applied) : pattern(path)) {
28504
- return returnIndex ? index : true;
28505
- }
28506
- }
28507
-
28508
- return returnIndex ? -1 : false;
28509
- };
28510
-
28511
- /**
28512
- * @param {AnymatchMatcher} matchers
28513
- * @param {Array|string} testString
28514
- * @param {object} options
28515
- * @returns {boolean|number|Function}
28516
- */
28517
- const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {
28518
- if (matchers == null) {
28519
- throw new TypeError('anymatch: specify first argument');
28520
- }
28521
- const opts = typeof options === 'boolean' ? {returnIndex: options} : options;
28522
- const returnIndex = opts.returnIndex || false;
28523
-
28524
- // Early cache for matchers.
28525
- const mtchers = arrify(matchers);
28526
- const negatedGlobs = mtchers
28527
- .filter(item => typeof item === 'string' && item.charAt(0) === BANG)
28528
- .map(item => item.slice(1))
28529
- .map(item => picomatch(item, opts));
28530
- const patterns = mtchers.map(matcher => createPattern(matcher, opts));
28531
-
28532
- if (testString == null) {
28533
- return (testString, ri = false) => {
28534
- const returnIndex = typeof ri === 'boolean' ? ri : false;
28535
- return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
28536
- }
28537
- }
28538
-
28539
- return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
28540
- };
28541
-
28542
- anymatch.default = anymatch;
28543
- module.exports = anymatch;
28544
-
28545
-
28546
28436
  /***/ }),
28547
28437
 
28548
28438
  /***/ 57193:
@@ -41608,7 +41498,7 @@ const fs = __webpack_require__(35747);
41608
41498
  const sysPath = __webpack_require__(85622);
41609
41499
  const { promisify } = __webpack_require__(31669);
41610
41500
  const readdirp = __webpack_require__(85316);
41611
- const anymatch = __webpack_require__(52056).default;
41501
+ const anymatch = __webpack_require__(3140).default;
41612
41502
  const globParent = __webpack_require__(97507);
41613
41503
  const isGlob = __webpack_require__(24042);
41614
41504
  const braces = __webpack_require__(40538);
@@ -43776,6 +43666,116 @@ async _addToNodeFs(path, initialAdd, priorWh, depth, target) {
43776
43666
  module.exports = NodeFsHandler;
43777
43667
 
43778
43668
 
43669
+ /***/ }),
43670
+
43671
+ /***/ 3140:
43672
+ /***/ ((module, exports, __webpack_require__) => {
43673
+
43674
+ "use strict";
43675
+
43676
+
43677
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
43678
+
43679
+ const picomatch = __webpack_require__(9138);
43680
+ const normalizePath = __webpack_require__(34458);
43681
+
43682
+ /**
43683
+ * @typedef {(testString: string) => boolean} AnymatchFn
43684
+ * @typedef {string|RegExp|AnymatchFn} AnymatchPattern
43685
+ * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher
43686
+ */
43687
+ const BANG = '!';
43688
+ const DEFAULT_OPTIONS = {returnIndex: false};
43689
+ const arrify = (item) => Array.isArray(item) ? item : [item];
43690
+
43691
+ /**
43692
+ * @param {AnymatchPattern} matcher
43693
+ * @param {object} options
43694
+ * @returns {AnymatchFn}
43695
+ */
43696
+ const createPattern = (matcher, options) => {
43697
+ if (typeof matcher === 'function') {
43698
+ return matcher;
43699
+ }
43700
+ if (typeof matcher === 'string') {
43701
+ const glob = picomatch(matcher, options);
43702
+ return (string) => matcher === string || glob(string);
43703
+ }
43704
+ if (matcher instanceof RegExp) {
43705
+ return (string) => matcher.test(string);
43706
+ }
43707
+ return (string) => false;
43708
+ };
43709
+
43710
+ /**
43711
+ * @param {Array<Function>} patterns
43712
+ * @param {Array<Function>} negPatterns
43713
+ * @param {String|Array} args
43714
+ * @param {Boolean} returnIndex
43715
+ * @returns {boolean|number}
43716
+ */
43717
+ const matchPatterns = (patterns, negPatterns, args, returnIndex) => {
43718
+ const isList = Array.isArray(args);
43719
+ const _path = isList ? args[0] : args;
43720
+ if (!isList && typeof _path !== 'string') {
43721
+ throw new TypeError('anymatch: second argument must be a string: got ' +
43722
+ Object.prototype.toString.call(_path))
43723
+ }
43724
+ const path = normalizePath(_path);
43725
+
43726
+ for (let index = 0; index < negPatterns.length; index++) {
43727
+ const nglob = negPatterns[index];
43728
+ if (nglob(path)) {
43729
+ return returnIndex ? -1 : false;
43730
+ }
43731
+ }
43732
+
43733
+ const applied = isList && [path].concat(args.slice(1));
43734
+ for (let index = 0; index < patterns.length; index++) {
43735
+ const pattern = patterns[index];
43736
+ if (isList ? pattern(...applied) : pattern(path)) {
43737
+ return returnIndex ? index : true;
43738
+ }
43739
+ }
43740
+
43741
+ return returnIndex ? -1 : false;
43742
+ };
43743
+
43744
+ /**
43745
+ * @param {AnymatchMatcher} matchers
43746
+ * @param {Array|string} testString
43747
+ * @param {object} options
43748
+ * @returns {boolean|number|Function}
43749
+ */
43750
+ const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {
43751
+ if (matchers == null) {
43752
+ throw new TypeError('anymatch: specify first argument');
43753
+ }
43754
+ const opts = typeof options === 'boolean' ? {returnIndex: options} : options;
43755
+ const returnIndex = opts.returnIndex || false;
43756
+
43757
+ // Early cache for matchers.
43758
+ const mtchers = arrify(matchers);
43759
+ const negatedGlobs = mtchers
43760
+ .filter(item => typeof item === 'string' && item.charAt(0) === BANG)
43761
+ .map(item => item.slice(1))
43762
+ .map(item => picomatch(item, opts));
43763
+ const patterns = mtchers.map(matcher => createPattern(matcher, opts));
43764
+
43765
+ if (testString == null) {
43766
+ return (testString, ri = false) => {
43767
+ const returnIndex = typeof ri === 'boolean' ? ri : false;
43768
+ return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
43769
+ }
43770
+ }
43771
+
43772
+ return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
43773
+ };
43774
+
43775
+ anymatch.default = anymatch;
43776
+ module.exports = anymatch;
43777
+
43778
+
43779
43779
  /***/ }),
43780
43780
 
43781
43781
  /***/ 5952:
@@ -230788,6 +230788,7 @@ const link_1 = __importDefault(__webpack_require__(98472));
230788
230788
  const logo_1 = __importDefault(__webpack_require__(9829));
230789
230789
  const get_args_1 = __importDefault(__webpack_require__(87612));
230790
230790
  const pkg_name_1 = __webpack_require__(98106);
230791
+ const normalize_url_1 = __webpack_require__(37771);
230791
230792
  const pkgName = pkg_name_1.getPkgName();
230792
230793
  const help = () => {
230793
230794
  console.log(`
@@ -230846,9 +230847,7 @@ async function main(client) {
230846
230847
  if (run) {
230847
230848
  run = path_1.resolve(run);
230848
230849
  }
230849
- if (!bad.startsWith('https://')) {
230850
- bad = `https://${bad}`;
230851
- }
230850
+ bad = normalize_url_1.normalizeURL(bad);
230852
230851
  let parsed = url_1.parse(bad);
230853
230852
  if (!parsed.hostname) {
230854
230853
  output.error('Invalid input: no hostname provided');
@@ -230864,9 +230863,7 @@ async function main(client) {
230864
230863
  }
230865
230864
  }
230866
230865
  const badDeploymentPromise = getDeployment(client, bad).catch(err => err);
230867
- if (!good.startsWith('https://')) {
230868
- good = `https://${good}`;
230869
- }
230866
+ good = normalize_url_1.normalizeURL(good);
230870
230867
  parsed = url_1.parse(good);
230871
230868
  if (!parsed.hostname) {
230872
230869
  output.error('Invalid input: no hostname provided');
@@ -238697,6 +238694,24 @@ const ARG_COMMON = {
238697
238694
  exports.default = () => ARG_COMMON;
238698
238695
 
238699
238696
 
238697
+ /***/ }),
238698
+
238699
+ /***/ 37771:
238700
+ /***/ ((__unused_webpack_module, exports) => {
238701
+
238702
+ "use strict";
238703
+
238704
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
238705
+ exports.normalizeURL = void 0;
238706
+ function hasScheme(url) {
238707
+ return url.startsWith('http://') || url.startsWith('https://');
238708
+ }
238709
+ function normalizeURL(url) {
238710
+ return hasScheme(url) ? url : `https://${url}`;
238711
+ }
238712
+ exports.normalizeURL = normalizeURL;
238713
+
238714
+
238700
238715
  /***/ }),
238701
238716
 
238702
238717
  /***/ 90850:
@@ -241866,9 +241881,6 @@ async function getBuildMatches(vercelConfig, cwd, output, devServer, fileList) {
241866
241881
  mapToEntrypoint.set(extensionless, src);
241867
241882
  src = extensionless;
241868
241883
  }
241869
- // We need to escape brackets since `glob` will
241870
- // try to find a group otherwise
241871
- src = src.replace(/(\[|\])/g, '[$1]');
241872
241884
  const files = fileList
241873
241885
  .filter(name => name === src || minimatch_1.default(name, src, { dot: true }))
241874
241886
  .map(name => path_1.join(cwd, name));
@@ -242046,6 +242058,33 @@ function exposeSystemEnvs(projectEnvs, systemEnvValues, autoExposeSystemEnvs, ve
242046
242058
  exports.default = exposeSystemEnvs;
242047
242059
 
242048
242060
 
242061
+ /***/ }),
242062
+
242063
+ /***/ 17929:
242064
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
242065
+
242066
+ "use strict";
242067
+
242068
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
242069
+ exports.nodeHeadersToFetchHeaders = void 0;
242070
+ const node_fetch_1 = __webpack_require__(82197);
242071
+ function nodeHeadersToFetchHeaders(nodeHeaders) {
242072
+ const headers = new node_fetch_1.Headers();
242073
+ for (const [name, value] of Object.entries(nodeHeaders)) {
242074
+ if (Array.isArray(value)) {
242075
+ for (const val of value) {
242076
+ headers.append(name, val);
242077
+ }
242078
+ }
242079
+ else if (typeof value !== 'undefined') {
242080
+ headers.set(name, String(value));
242081
+ }
242082
+ }
242083
+ return headers;
242084
+ }
242085
+ exports.nodeHeadersToFetchHeaders = nodeHeadersToFetchHeaders;
242086
+
242087
+
242049
242088
  /***/ }),
242050
242089
 
242051
242090
  /***/ 4567:
@@ -242352,15 +242391,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
242352
242391
  return (mod && mod.__esModule) ? mod : { "default": mod };
242353
242392
  };
242354
242393
  Object.defineProperty(exports, "__esModule", ({ value: true }));
242394
+ const ms_1 = __importDefault(__webpack_require__(80040));
242355
242395
  const url_1 = __importStar(__webpack_require__(78835));
242356
242396
  const http_1 = __importDefault(__webpack_require__(98605));
242357
242397
  const fs_extra_1 = __importDefault(__webpack_require__(45392));
242358
242398
  const chalk_1 = __importDefault(__webpack_require__(961));
242399
+ const node_fetch_1 = __importDefault(__webpack_require__(82197));
242359
242400
  const pluralize_1 = __importDefault(__webpack_require__(31974));
242360
242401
  const raw_body_1 = __importDefault(__webpack_require__(26542));
242361
242402
  const async_listen_1 = __importDefault(__webpack_require__(15353));
242362
242403
  const minimatch_1 = __importDefault(__webpack_require__(99566));
242363
- const ms_1 = __importDefault(__webpack_require__(80040));
242364
242404
  const http_proxy_1 = __importDefault(__webpack_require__(91288));
242365
242405
  const crypto_1 = __webpack_require__(76417);
242366
242406
  const serve_handler_1 = __importDefault(__webpack_require__(73666));
@@ -242402,6 +242442,7 @@ const error_502_1 = __importDefault(__webpack_require__(73862));
242402
242442
  const redirect_1 = __importDefault(__webpack_require__(14050));
242403
242443
  const expose_system_envs_1 = __importDefault(__webpack_require__(40313));
242404
242444
  const tree_kill_1 = __webpack_require__(21780);
242445
+ const headers_1 = __webpack_require__(17929);
242405
242446
  const frontendRuntimeSet = new Set(frameworks_1.default.map(f => f.useRuntime?.use || '@vercel/static-build'));
242406
242447
  function sortBuilders(buildA, buildB) {
242407
242448
  if (buildA && buildA.use && build_utils_1.isOfficialRuntime('static-build', buildA.use)) {
@@ -242471,31 +242512,6 @@ class DevServer {
242471
242512
  }
242472
242513
  return false;
242473
242514
  };
242474
- /*
242475
- runDevMiddleware = async (
242476
- req: http.IncomingMessage,
242477
- res: http.ServerResponse
242478
- ) => {
242479
- const { devMiddlewarePlugins } = await loadCliPlugins(
242480
- this.cwd,
242481
- this.output
242482
- );
242483
- try {
242484
- for (let plugin of devMiddlewarePlugins) {
242485
- const result = await plugin.plugin.runDevMiddleware(req, res, this.cwd);
242486
- if (result.finished) {
242487
- return result;
242488
- }
242489
- }
242490
- return { finished: false };
242491
- } catch (e) {
242492
- return {
242493
- finished: true,
242494
- error: e,
242495
- };
242496
- }
242497
- };
242498
- */
242499
242515
  /**
242500
242516
  * Serve project directory as a v2 deployment.
242501
242517
  */
@@ -242547,37 +242563,128 @@ class DevServer {
242547
242563
  let statusCode;
242548
242564
  let prevUrl = req.url;
242549
242565
  let prevHeaders = {};
242550
- /*
242551
- const middlewareResult = await this.runDevMiddleware(req, res);
242552
-
242553
- if (middlewareResult) {
242554
- if (middlewareResult.error) {
242555
- this.sendError(
242556
- req,
242557
- res,
242558
- requestId,
242559
- 'EDGE_FUNCTION_INVOCATION_FAILED',
242560
- 500
242561
- );
242562
- return;
242563
- }
242564
- if (middlewareResult.finished) {
242565
- return;
242566
- }
242567
-
242568
- if (middlewareResult.pathname) {
242569
- const origUrl = url.parse(req.url || '/', true);
242570
- origUrl.pathname = middlewareResult.pathname;
242571
- prevUrl = url.format(origUrl);
242572
- }
242573
- if (middlewareResult.query && prevUrl) {
242574
- const origUrl = url.parse(req.url || '/', true);
242575
- delete origUrl.search;
242576
- Object.assign(origUrl.query, middlewareResult.query);
242577
- prevUrl = url.format(origUrl);
242578
- }
242566
+ let middlewarePid;
242567
+ // Run the middleware file, if present, and apply any
242568
+ // mutations to the incoming request based on the
242569
+ // result of the middleware invocation.
242570
+ const middleware = [...this.buildMatches.values()].find(m => m.config?.middleware === true);
242571
+ if (middleware) {
242572
+ let startMiddlewareResult;
242573
+ // TODO: can we add some caching to prevent (re-)starting
242574
+ // the middleware server for every HTTP request?
242575
+ const { envConfigs, files, devCacheDir, cwd: workPath } = this;
242576
+ try {
242577
+ startMiddlewareResult =
242578
+ await middleware.builderWithPkg.builder.startDevServer?.({
242579
+ files,
242580
+ entrypoint: middleware.entrypoint,
242581
+ workPath,
242582
+ repoRootPath: this.cwd,
242583
+ config: middleware.config || {},
242584
+ meta: {
242585
+ isDev: true,
242586
+ devCacheDir,
242587
+ requestUrl: req.url,
242588
+ env: { ...envConfigs.runEnv },
242589
+ buildEnv: { ...envConfigs.buildEnv },
242590
+ },
242591
+ });
242592
+ if (startMiddlewareResult) {
242593
+ const { port, pid } = startMiddlewareResult;
242594
+ middlewarePid = pid;
242595
+ this.devServerPids.add(pid);
242596
+ const middlewareReqHeaders = headers_1.nodeHeadersToFetchHeaders(req.headers);
242597
+ // Add the Vercel platform proxy request headers
242598
+ const proxyHeaders = this.getProxyHeaders(req, requestId, true);
242599
+ for (const [name, value] of headers_1.nodeHeadersToFetchHeaders(proxyHeaders)) {
242600
+ middlewareReqHeaders.set(name, value);
242601
+ }
242602
+ const middlewareRes = await node_fetch_1.default(`http://127.0.0.1:${port}${parsed.path}`, {
242603
+ headers: middlewareReqHeaders,
242604
+ method: req.method,
242605
+ redirect: 'manual',
242606
+ });
242607
+ if (middlewareRes.status === 500) {
242608
+ await this.sendError(req, res, requestId, 'EDGE_FUNCTION_INVOCATION_FAILED', 500);
242609
+ return;
242610
+ }
242611
+ // Apply status code from middleware invocation,
242612
+ // for i.e. redirects or a custom 404 page
242613
+ res.statusCode = middlewareRes.status;
242614
+ let rewritePath = '';
242615
+ let contentType = '';
242616
+ let shouldContinue = false;
242617
+ const skipMiddlewareHeaders = new Set([
242618
+ 'date',
242619
+ 'connection',
242620
+ 'content-length',
242621
+ 'transfer-encoding',
242622
+ ]);
242623
+ for (const [name, value] of middlewareRes.headers) {
242624
+ if (name === 'x-middleware-next') {
242625
+ shouldContinue = value === '1';
242626
+ }
242627
+ else if (name === 'x-middleware-rewrite') {
242628
+ rewritePath = value;
242629
+ shouldContinue = true;
242630
+ }
242631
+ else if (name === 'content-type') {
242632
+ contentType = value;
242633
+ }
242634
+ else if (!skipMiddlewareHeaders.has(name)) {
242635
+ // Any other kind of response header should be included
242636
+ // on both the incoming HTTP request (for when proxying
242637
+ // to another function) and the outgoing HTTP response.
242638
+ res.setHeader(name, value);
242639
+ req.headers[name] = value;
242640
+ }
242641
+ }
242642
+ if (!shouldContinue) {
242643
+ const middlewareBody = await middlewareRes.buffer();
242644
+ this.setResponseHeaders(res, requestId);
242645
+ if (middlewareBody.length > 0) {
242646
+ res.setHeader('content-length', middlewareBody.length);
242647
+ if (contentType) {
242648
+ res.setHeader('content-type', contentType);
242649
+ }
242650
+ res.end(middlewareBody);
242651
+ }
242652
+ else {
242653
+ res.end();
242654
+ }
242655
+ return;
242656
+ }
242657
+ if (rewritePath) {
242658
+ // TODO: add validation?
242659
+ debug(`Detected rewrite path from middleware: "${rewritePath}"`);
242660
+ prevUrl = rewritePath;
242661
+ // Retain orginal pathname, but override query parameters from the rewrite
242662
+ const beforeRewriteUrl = req.url || '/';
242663
+ const rewriteUrlParsed = url_1.default.parse(beforeRewriteUrl, true);
242664
+ delete rewriteUrlParsed.search;
242665
+ rewriteUrlParsed.query = url_1.default.parse(rewritePath, true).query;
242666
+ req.url = url_1.default.format(rewriteUrlParsed);
242667
+ debug(`Rewrote incoming HTTP URL from "${beforeRewriteUrl}" to "${req.url}"`);
242668
+ }
242669
+ }
242670
+ }
242671
+ catch (err) {
242672
+ // `startDevServer()` threw an error. Most likely this means the dev
242673
+ // server process exited before sending the port information message
242674
+ // (missing dependency at runtime, for example).
242675
+ if (err.code === 'ENOENT') {
242676
+ err.message = `Command not found: ${chalk_1.default.cyan(err.path, ...err.spawnargs)}\nPlease ensure that ${cmd_1.default(err.path)} is properly installed`;
242677
+ err.link = 'https://vercel.link/command-not-found';
242678
+ }
242679
+ await this.sendError(req, res, requestId, 'EDGE_FUNCTION_INVOCATION_FAILED', 500);
242680
+ return;
242681
+ }
242682
+ finally {
242683
+ if (middlewarePid) {
242684
+ this.killBuilderDevServer(middlewarePid);
242685
+ }
242686
+ }
242579
242687
  }
242580
- */
242581
242688
  for (const phase of phases) {
242582
242689
  statusCode = undefined;
242583
242690
  const phaseRoutes = handleMap.get(phase) || [];
@@ -242731,7 +242838,10 @@ class DevServer {
242731
242838
  isDev: true,
242732
242839
  requestPath,
242733
242840
  devCacheDir,
242734
- env: { ...envConfigs.runEnv },
242841
+ env: {
242842
+ ...envConfigs.runEnv,
242843
+ VERCEL_BUILDER_DEBUG: this.output.debugEnabled ? '1' : undefined,
242844
+ },
242735
242845
  buildEnv: { ...envConfigs.buildEnv },
242736
242846
  },
242737
242847
  });
@@ -243210,7 +243320,7 @@ class DevServer {
243210
243320
  this.output.error(errors[0].message);
243211
243321
  await this.exit();
243212
243322
  }
243213
- if (warnings && warnings.length > 0) {
243323
+ if (warnings?.length > 0) {
243214
243324
  warnings.forEach(warning => this.output.warn(warning.message, null, warning.link, warning.action));
243215
243325
  }
243216
243326
  if (builders) {
@@ -243617,6 +243727,7 @@ class DevServer {
243617
243727
  view = error_1.default({
243618
243728
  http_status_code: statusCode,
243619
243729
  http_status_description,
243730
+ error_code,
243620
243731
  request_id: requestId,
243621
243732
  });
243622
243733
  }
@@ -243896,7 +244007,7 @@ function proxyPass(req, res, dest, devServer, requestId, ignorePath = true) {
243896
244007
  return devServer.proxy.web(req, res, { target: dest, ignorePath }, (error) => {
243897
244008
  devServer.output.error(`Failed to complete request to ${req.url}: ${error}`);
243898
244009
  if (!res.headersSent) {
243899
- devServer.sendError(req, res, requestId, 'NO_RESPONSE_FROM_FUNCTION', 502);
244010
+ devServer.sendError(req, res, requestId, 'FUNCTION_INVOCATION_FAILED');
243900
244011
  }
243901
244012
  });
243902
244013
  }
@@ -243948,11 +244059,12 @@ async function findBuildMatch(matches, files, requestPath, devServer, vercelConf
243948
244059
  return match;
243949
244060
  }
243950
244061
  else {
243951
- // if isIndex === true and ends in .html, we're done. Otherwise, keep searching
243952
- bestIndexMatch = match;
244062
+ // If isIndex === true and ends in `.html`, we're done.
244063
+ // Otherwise, keep searching.
243953
244064
  if (path_1.extname(match.src) === '.html') {
243954
- return bestIndexMatch;
244065
+ return match;
243955
244066
  }
244067
+ bestIndexMatch = match;
243956
244068
  }
243957
244069
  }
243958
244070
  }
@@ -243961,6 +244073,11 @@ async function findBuildMatch(matches, files, requestPath, devServer, vercelConf
243961
244073
  }
243962
244074
  async function shouldServe(match, files, requestPath, devServer, vercelConfig, isFilesystem = false) {
243963
244075
  const { src, config, builderWithPkg: { builder }, } = match;
244076
+ // "middleware" file is not served as a regular asset,
244077
+ // instead it gets invoked as part of the routing logic.
244078
+ if (config?.middleware === true) {
244079
+ return false;
244080
+ }
243964
244081
  const cleanSrc = src.endsWith('.html') ? src.slice(0, -5) : src;
243965
244082
  const trimmedPath = requestPath.endsWith('/')
243966
244083
  ? requestPath.slice(0, -1)
@@ -252428,7 +252545,7 @@ module.exports = JSON.parse("{\"application/1d-interleaved-parityfec\":{\"source
252428
252545
  /***/ ((module) => {
252429
252546
 
252430
252547
  "use strict";
252431
- module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"25.1.1-canary.9\",\"preferGlobal\":true,\"license\":\"Apache-2.0\",\"description\":\"The command-line interface for Vercel\",\"homepage\":\"https://vercel.com\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/vercel/vercel.git\",\"directory\":\"packages/cli\"},\"scripts\":{\"preinstall\":\"node ./scripts/preinstall.js\",\"test\":\"jest --env node --verbose --runInBand --bail --forceExit\",\"test-unit\":\"yarn test test/unit/\",\"test-integration-cli\":\"rimraf test/fixtures/integration && ava test/integration.js --serial --fail-fast --verbose\",\"test-integration-dev\":\"yarn test test/dev/\",\"prepublishOnly\":\"yarn build\",\"coverage\":\"codecov\",\"build\":\"node -r ts-eager/register ./scripts/build.ts\",\"build-dev\":\"node -r ts-eager/register ./scripts/build.ts --dev\"},\"bin\":{\"vc\":\"./dist/index.js\",\"vercel\":\"./dist/index.js\"},\"files\":[\"dist\",\"scripts/preinstall.js\"],\"ava\":{\"extensions\":[\"ts\"],\"require\":[\"ts-node/register/transpile-only\",\"esm\"]},\"engines\":{\"node\":\">= 14\"},\"dependencies\":{\"@vercel/build-utils\":\"4.1.1-canary.1\",\"@vercel/go\":\"2.0.2-canary.1\",\"@vercel/next\":\"3.0.4-canary.3\",\"@vercel/node\":\"2.2.1-canary.1\",\"@vercel/python\":\"3.0.2-canary.1\",\"@vercel/redwood\":\"1.0.2-canary.1\",\"@vercel/remix\":\"1.0.2-canary.1\",\"@vercel/ruby\":\"1.3.10-canary.1\",\"@vercel/static-build\":\"1.0.2-canary.1\",\"update-notifier\":\"5.1.0\"},\"devDependencies\":{\"@alex_neo/jest-expect-message\":\"1.0.5\",\"@next/env\":\"11.1.2\",\"@sentry/node\":\"5.5.0\",\"@sindresorhus/slugify\":\"0.11.0\",\"@tootallnate/once\":\"1.1.2\",\"@types/ansi-escapes\":\"3.0.0\",\"@types/ansi-regex\":\"4.0.0\",\"@types/async-retry\":\"1.2.1\",\"@types/bytes\":\"3.0.0\",\"@types/chance\":\"1.1.3\",\"@types/debug\":\"0.0.31\",\"@types/dotenv\":\"6.1.1\",\"@types/escape-html\":\"0.0.20\",\"@types/express\":\"4.17.13\",\"@types/fs-extra\":\"9.0.13\",\"@types/glob\":\"7.1.1\",\"@types/http-proxy\":\"1.16.2\",\"@types/ini\":\"1.3.31\",\"@types/inquirer\":\"7.3.1\",\"@types/jest\":\"27.4.1\",\"@types/jest-expect-message\":\"1.0.3\",\"@types/load-json-file\":\"2.0.7\",\"@types/mime-types\":\"2.1.0\",\"@types/minimatch\":\"3.0.3\",\"@types/mri\":\"1.1.0\",\"@types/ms\":\"0.7.30\",\"@types/node\":\"11.11.0\",\"@types/node-fetch\":\"2.5.10\",\"@types/npm-package-arg\":\"6.1.0\",\"@types/pluralize\":\"0.0.29\",\"@types/progress\":\"2.0.3\",\"@types/psl\":\"1.1.0\",\"@types/semver\":\"6.0.1\",\"@types/tar-fs\":\"1.16.1\",\"@types/text-table\":\"0.2.0\",\"@types/title\":\"3.4.1\",\"@types/universal-analytics\":\"0.4.2\",\"@types/update-notifier\":\"5.1.0\",\"@types/which\":\"1.3.2\",\"@types/write-json-file\":\"2.2.1\",\"@types/yauzl-promise\":\"2.1.0\",\"@vercel/client\":\"12.0.2-canary.1\",\"@vercel/frameworks\":\"1.0.2-canary.0\",\"@vercel/ncc\":\"0.24.0\",\"@zeit/fun\":\"0.11.2\",\"@zeit/source-map-support\":\"0.6.2\",\"ajv\":\"6.12.2\",\"alpha-sort\":\"2.0.1\",\"ansi-escapes\":\"3.0.0\",\"ansi-regex\":\"3.0.0\",\"arg\":\"5.0.0\",\"async-listen\":\"1.2.0\",\"async-retry\":\"1.1.3\",\"async-sema\":\"2.1.4\",\"ava\":\"2.2.0\",\"bytes\":\"3.0.0\",\"chalk\":\"4.1.0\",\"chance\":\"1.1.7\",\"chokidar\":\"3.3.1\",\"clipboardy\":\"2.1.0\",\"codecov\":\"3.8.2\",\"cpy\":\"7.2.0\",\"credit-card\":\"3.0.1\",\"date-fns\":\"1.29.0\",\"debug\":\"3.1.0\",\"dot\":\"1.1.3\",\"dotenv\":\"4.0.0\",\"email-prompt\":\"0.3.2\",\"email-validator\":\"1.1.1\",\"epipebomb\":\"1.0.0\",\"escape-html\":\"1.0.3\",\"esm\":\"3.1.4\",\"execa\":\"3.2.0\",\"express\":\"4.17.1\",\"fast-deep-equal\":\"3.1.3\",\"fs-extra\":\"10.0.0\",\"get-port\":\"5.1.1\",\"git-last-commit\":\"1.0.1\",\"glob\":\"7.1.2\",\"http-proxy\":\"1.18.1\",\"ini\":\"3.0.0\",\"inquirer\":\"7.0.4\",\"is-docker\":\"2.2.1\",\"is-port-reachable\":\"3.1.0\",\"is-url\":\"1.2.2\",\"jaro-winkler\":\"0.2.8\",\"jsonlines\":\"0.1.1\",\"load-json-file\":\"3.0.0\",\"mime-types\":\"2.1.24\",\"minimatch\":\"3.0.4\",\"mri\":\"1.1.5\",\"ms\":\"2.1.2\",\"node-fetch\":\"2.6.1\",\"npm-package-arg\":\"6.1.0\",\"open\":\"8.4.0\",\"ora\":\"3.4.0\",\"pcre-to-regexp\":\"1.0.0\",\"pluralize\":\"7.0.0\",\"progress\":\"2.0.3\",\"promisepipe\":\"3.0.0\",\"psl\":\"1.1.31\",\"qr-image\":\"3.2.0\",\"raw-body\":\"2.4.1\",\"rimraf\":\"3.0.2\",\"semver\":\"5.5.0\",\"serve-handler\":\"6.1.1\",\"strip-ansi\":\"5.2.0\",\"stripe\":\"5.1.0\",\"tar-fs\":\"1.16.3\",\"test-listen\":\"1.1.0\",\"text-table\":\"0.2.0\",\"title\":\"3.4.1\",\"tmp-promise\":\"1.0.3\",\"tree-kill\":\"1.2.2\",\"ts-node\":\"8.3.0\",\"typescript\":\"4.3.4\",\"universal-analytics\":\"0.4.20\",\"utility-types\":\"2.1.0\",\"which\":\"2.0.2\",\"write-json-file\":\"2.2.0\",\"xdg-app-paths\":\"5.1.0\",\"yauzl-promise\":\"2.1.3\"},\"jest\":{\"preset\":\"ts-jest\",\"globals\":{\"ts-jest\":{\"diagnostics\":false,\"isolatedModules\":true}},\"setupFilesAfterEnv\":[\"@alex_neo/jest-expect-message\"],\"verbose\":false,\"testEnvironment\":\"node\",\"testMatch\":[\"<rootDir>/test/**/*.test.ts\"]},\"gitHead\":\"998f6bf6e65301a19a400886bcc37b2dbbcdabe3\"}");
252548
+ module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"25.2.0\",\"preferGlobal\":true,\"license\":\"Apache-2.0\",\"description\":\"The command-line interface for Vercel\",\"homepage\":\"https://vercel.com\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/vercel/vercel.git\",\"directory\":\"packages/cli\"},\"scripts\":{\"preinstall\":\"node ./scripts/preinstall.js\",\"test\":\"jest --env node --verbose --runInBand --bail --forceExit\",\"test-unit\":\"yarn test test/unit/\",\"test-integration-cli\":\"rimraf test/fixtures/integration && ava test/integration.js --serial --fail-fast --verbose\",\"test-integration-dev\":\"yarn test test/dev/\",\"prepublishOnly\":\"yarn build\",\"coverage\":\"codecov\",\"build\":\"node -r ts-eager/register ./scripts/build.ts\",\"build-dev\":\"node -r ts-eager/register ./scripts/build.ts --dev\"},\"bin\":{\"vc\":\"./dist/index.js\",\"vercel\":\"./dist/index.js\"},\"files\":[\"dist\",\"scripts/preinstall.js\"],\"ava\":{\"extensions\":[\"ts\"],\"require\":[\"ts-node/register/transpile-only\",\"esm\"]},\"engines\":{\"node\":\">= 14\"},\"dependencies\":{\"@vercel/build-utils\":\"4.2.0\",\"@vercel/go\":\"2.0.2\",\"@vercel/next\":\"3.1.0\",\"@vercel/node\":\"2.3.0\",\"@vercel/python\":\"3.0.2\",\"@vercel/redwood\":\"1.0.2\",\"@vercel/remix\":\"1.0.2\",\"@vercel/ruby\":\"1.3.10\",\"@vercel/static-build\":\"1.0.2\",\"update-notifier\":\"5.1.0\"},\"devDependencies\":{\"@alex_neo/jest-expect-message\":\"1.0.5\",\"@next/env\":\"11.1.2\",\"@sentry/node\":\"5.5.0\",\"@sindresorhus/slugify\":\"0.11.0\",\"@tootallnate/once\":\"1.1.2\",\"@types/ansi-escapes\":\"3.0.0\",\"@types/ansi-regex\":\"4.0.0\",\"@types/async-retry\":\"1.2.1\",\"@types/bytes\":\"3.0.0\",\"@types/chance\":\"1.1.3\",\"@types/debug\":\"0.0.31\",\"@types/dotenv\":\"6.1.1\",\"@types/escape-html\":\"0.0.20\",\"@types/express\":\"4.17.13\",\"@types/fs-extra\":\"9.0.13\",\"@types/glob\":\"7.1.1\",\"@types/http-proxy\":\"1.16.2\",\"@types/ini\":\"1.3.31\",\"@types/inquirer\":\"7.3.1\",\"@types/jest\":\"27.4.1\",\"@types/jest-expect-message\":\"1.0.3\",\"@types/load-json-file\":\"2.0.7\",\"@types/mime-types\":\"2.1.0\",\"@types/minimatch\":\"3.0.3\",\"@types/mri\":\"1.1.0\",\"@types/ms\":\"0.7.30\",\"@types/node\":\"11.11.0\",\"@types/node-fetch\":\"2.5.10\",\"@types/npm-package-arg\":\"6.1.0\",\"@types/pluralize\":\"0.0.29\",\"@types/progress\":\"2.0.3\",\"@types/psl\":\"1.1.0\",\"@types/semver\":\"6.0.1\",\"@types/tar-fs\":\"1.16.1\",\"@types/text-table\":\"0.2.0\",\"@types/title\":\"3.4.1\",\"@types/universal-analytics\":\"0.4.2\",\"@types/update-notifier\":\"5.1.0\",\"@types/which\":\"1.3.2\",\"@types/write-json-file\":\"2.2.1\",\"@types/yauzl-promise\":\"2.1.0\",\"@vercel/client\":\"12.0.2\",\"@vercel/frameworks\":\"1.0.2\",\"@vercel/ncc\":\"0.24.0\",\"@zeit/fun\":\"0.11.2\",\"@zeit/source-map-support\":\"0.6.2\",\"ajv\":\"6.12.2\",\"alpha-sort\":\"2.0.1\",\"ansi-escapes\":\"3.0.0\",\"ansi-regex\":\"3.0.0\",\"arg\":\"5.0.0\",\"async-listen\":\"1.2.0\",\"async-retry\":\"1.1.3\",\"async-sema\":\"2.1.4\",\"ava\":\"2.2.0\",\"bytes\":\"3.0.0\",\"chalk\":\"4.1.0\",\"chance\":\"1.1.7\",\"chokidar\":\"3.3.1\",\"clipboardy\":\"2.1.0\",\"codecov\":\"3.8.2\",\"cpy\":\"7.2.0\",\"credit-card\":\"3.0.1\",\"date-fns\":\"1.29.0\",\"debug\":\"3.1.0\",\"dot\":\"1.1.3\",\"dotenv\":\"4.0.0\",\"email-prompt\":\"0.3.2\",\"email-validator\":\"1.1.1\",\"epipebomb\":\"1.0.0\",\"escape-html\":\"1.0.3\",\"esm\":\"3.1.4\",\"execa\":\"3.2.0\",\"express\":\"4.17.1\",\"fast-deep-equal\":\"3.1.3\",\"fs-extra\":\"10.0.0\",\"get-port\":\"5.1.1\",\"git-last-commit\":\"1.0.1\",\"glob\":\"7.1.2\",\"http-proxy\":\"1.18.1\",\"ini\":\"3.0.0\",\"inquirer\":\"7.0.4\",\"is-docker\":\"2.2.1\",\"is-port-reachable\":\"3.1.0\",\"is-url\":\"1.2.2\",\"jaro-winkler\":\"0.2.8\",\"jsonlines\":\"0.1.1\",\"load-json-file\":\"3.0.0\",\"mime-types\":\"2.1.24\",\"minimatch\":\"3.0.4\",\"mri\":\"1.1.5\",\"ms\":\"2.1.2\",\"node-fetch\":\"2.6.1\",\"npm-package-arg\":\"6.1.0\",\"open\":\"8.4.0\",\"ora\":\"3.4.0\",\"pcre-to-regexp\":\"1.0.0\",\"pluralize\":\"7.0.0\",\"progress\":\"2.0.3\",\"promisepipe\":\"3.0.0\",\"psl\":\"1.1.31\",\"qr-image\":\"3.2.0\",\"raw-body\":\"2.4.1\",\"rimraf\":\"3.0.2\",\"semver\":\"5.5.0\",\"serve-handler\":\"6.1.1\",\"strip-ansi\":\"5.2.0\",\"stripe\":\"5.1.0\",\"tar-fs\":\"1.16.3\",\"test-listen\":\"1.1.0\",\"text-table\":\"0.2.0\",\"title\":\"3.4.1\",\"tmp-promise\":\"1.0.3\",\"tree-kill\":\"1.2.2\",\"ts-node\":\"8.3.0\",\"typescript\":\"4.3.4\",\"universal-analytics\":\"0.4.20\",\"utility-types\":\"2.1.0\",\"which\":\"2.0.2\",\"write-json-file\":\"2.2.0\",\"xdg-app-paths\":\"5.1.0\",\"yauzl-promise\":\"2.1.3\"},\"jest\":{\"preset\":\"ts-jest\",\"globals\":{\"ts-jest\":{\"diagnostics\":false,\"isolatedModules\":true}},\"setupFilesAfterEnv\":[\"@alex_neo/jest-expect-message\"],\"verbose\":false,\"testEnvironment\":\"node\",\"testMatch\":[\"<rootDir>/test/**/*.test.ts\"]},\"gitHead\":\"eed39913e1394477b224c38efe29429b17eeada6\"}");
252432
252549
 
252433
252550
  /***/ }),
252434
252551
 
@@ -252444,7 +252561,7 @@ module.exports = JSON.parse("{\"VISA\":\"Visa\",\"MASTERCARD\":\"MasterCard\",\"
252444
252561
  /***/ ((module) => {
252445
252562
 
252446
252563
  "use strict";
252447
- module.exports = JSON.parse("{\"name\":\"@vercel/client\",\"version\":\"12.0.2-canary.1\",\"main\":\"dist/index.js\",\"typings\":\"dist/index.d.ts\",\"homepage\":\"https://vercel.com\",\"license\":\"MIT\",\"files\":[\"dist\"],\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/vercel/vercel.git\",\"directory\":\"packages/client\"},\"scripts\":{\"build\":\"tsc\",\"test-integration-once\":\"yarn test tests/create-deployment.test.ts tests/create-legacy-deployment.test.ts tests/paths.test.ts\",\"test\":\"jest --env node --verbose --runInBand --bail\",\"test-unit\":\"yarn test tests/unit.*test.*\"},\"engines\":{\"node\":\">= 14\"},\"devDependencies\":{\"@types/async-retry\":\"1.4.1\",\"@types/fs-extra\":\"7.0.0\",\"@types/jest\":\"27.4.1\",\"@types/minimatch\":\"3.0.5\",\"@types/ms\":\"0.7.30\",\"@types/node\":\"12.0.4\",\"@types/node-fetch\":\"2.5.4\",\"@types/recursive-readdir\":\"2.2.0\",\"typescript\":\"4.3.4\"},\"jest\":{\"preset\":\"ts-jest\",\"testEnvironment\":\"node\",\"verbose\":false,\"setupFilesAfterEnv\":[\"<rootDir>/tests/setup/index.ts\"]},\"dependencies\":{\"@vercel/build-utils\":\"4.1.1-canary.1\",\"@zeit/fetch\":\"5.2.0\",\"async-retry\":\"1.2.3\",\"async-sema\":\"3.0.0\",\"fs-extra\":\"8.0.1\",\"ignore\":\"4.0.6\",\"minimatch\":\"5.0.1\",\"ms\":\"2.1.2\",\"node-fetch\":\"2.6.1\",\"querystring\":\"^0.2.0\",\"sleep-promise\":\"8.0.1\"}}");
252564
+ module.exports = JSON.parse("{\"name\":\"@vercel/client\",\"version\":\"12.0.2\",\"main\":\"dist/index.js\",\"typings\":\"dist/index.d.ts\",\"homepage\":\"https://vercel.com\",\"license\":\"MIT\",\"files\":[\"dist\"],\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/vercel/vercel.git\",\"directory\":\"packages/client\"},\"scripts\":{\"build\":\"tsc\",\"test-integration-once\":\"yarn test tests/create-deployment.test.ts tests/create-legacy-deployment.test.ts tests/paths.test.ts\",\"test\":\"jest --env node --verbose --runInBand --bail\",\"test-unit\":\"yarn test tests/unit.*test.*\"},\"engines\":{\"node\":\">= 14\"},\"devDependencies\":{\"@types/async-retry\":\"1.4.1\",\"@types/fs-extra\":\"7.0.0\",\"@types/jest\":\"27.4.1\",\"@types/minimatch\":\"3.0.5\",\"@types/ms\":\"0.7.30\",\"@types/node\":\"12.0.4\",\"@types/node-fetch\":\"2.5.4\",\"@types/recursive-readdir\":\"2.2.0\",\"typescript\":\"4.3.4\"},\"jest\":{\"preset\":\"ts-jest\",\"testEnvironment\":\"node\",\"verbose\":false,\"setupFilesAfterEnv\":[\"<rootDir>/tests/setup/index.ts\"]},\"dependencies\":{\"@vercel/build-utils\":\"4.2.0\",\"@zeit/fetch\":\"5.2.0\",\"async-retry\":\"1.2.3\",\"async-sema\":\"3.0.0\",\"fs-extra\":\"8.0.1\",\"ignore\":\"4.0.6\",\"minimatch\":\"5.0.1\",\"ms\":\"2.1.2\",\"node-fetch\":\"2.6.1\",\"querystring\":\"^0.2.0\",\"sleep-promise\":\"8.0.1\"},\"gitHead\":\"eed39913e1394477b224c38efe29429b17eeada6\"}");
252448
252565
 
252449
252566
  /***/ }),
252450
252567
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vercel",
3
- "version": "25.1.1-canary.9",
3
+ "version": "25.2.0",
4
4
  "preferGlobal": true,
5
5
  "license": "Apache-2.0",
6
6
  "description": "The command-line interface for Vercel",
@@ -42,15 +42,15 @@
42
42
  "node": ">= 14"
43
43
  },
44
44
  "dependencies": {
45
- "@vercel/build-utils": "4.1.1-canary.1",
46
- "@vercel/go": "2.0.2-canary.1",
47
- "@vercel/next": "3.0.4-canary.3",
48
- "@vercel/node": "2.2.1-canary.1",
49
- "@vercel/python": "3.0.2-canary.1",
50
- "@vercel/redwood": "1.0.2-canary.1",
51
- "@vercel/remix": "1.0.2-canary.1",
52
- "@vercel/ruby": "1.3.10-canary.1",
53
- "@vercel/static-build": "1.0.2-canary.1",
45
+ "@vercel/build-utils": "4.2.0",
46
+ "@vercel/go": "2.0.2",
47
+ "@vercel/next": "3.1.0",
48
+ "@vercel/node": "2.3.0",
49
+ "@vercel/python": "3.0.2",
50
+ "@vercel/redwood": "1.0.2",
51
+ "@vercel/remix": "1.0.2",
52
+ "@vercel/ruby": "1.3.10",
53
+ "@vercel/static-build": "1.0.2",
54
54
  "update-notifier": "5.1.0"
55
55
  },
56
56
  "devDependencies": {
@@ -95,8 +95,8 @@
95
95
  "@types/which": "1.3.2",
96
96
  "@types/write-json-file": "2.2.1",
97
97
  "@types/yauzl-promise": "2.1.0",
98
- "@vercel/client": "12.0.2-canary.1",
99
- "@vercel/frameworks": "1.0.2-canary.0",
98
+ "@vercel/client": "12.0.2",
99
+ "@vercel/frameworks": "1.0.2",
100
100
  "@vercel/ncc": "0.24.0",
101
101
  "@zeit/fun": "0.11.2",
102
102
  "@zeit/source-map-support": "0.6.2",
@@ -194,5 +194,5 @@
194
194
  "<rootDir>/test/**/*.test.ts"
195
195
  ]
196
196
  },
197
- "gitHead": "998f6bf6e65301a19a400886bcc37b2dbbcdabe3"
197
+ "gitHead": "eed39913e1394477b224c38efe29429b17eeada6"
198
198
  }