vercel 28.2.1 → 28.2.4

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 +109 -42
  2. package/package.json +15 -15
package/dist/index.js CHANGED
@@ -210995,10 +210995,16 @@ exports.frameworks = [
210995
210995
  website: 'https://www.sanity.io',
210996
210996
  envPrefix: 'SANITY_STUDIO_',
210997
210997
  detectors: {
210998
- every: [
210998
+ some: [
210999
210999
  {
211000
211000
  path: 'sanity.json',
211001
211001
  },
211002
+ {
211003
+ path: 'sanity.config.js',
211004
+ },
211005
+ {
211006
+ path: 'sanity.config.ts',
211007
+ },
211002
211008
  ],
211003
211009
  },
211004
211010
  settings: {
@@ -216387,12 +216393,13 @@ exports.detectFramework = detectFramework;
216387
216393
  /***/ }),
216388
216394
 
216389
216395
  /***/ 56114:
216390
- /***/ ((__unused_webpack_module, exports) => {
216396
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
216391
216397
 
216392
216398
  "use strict";
216393
216399
 
216394
216400
  Object.defineProperty(exports, "__esModule", ({ value: true }));
216395
216401
  exports.DetectorFilesystem = void 0;
216402
+ const path_1 = __webpack_require__(85622);
216396
216403
  /**
216397
216404
  * `DetectorFilesystem` is an abstract class that represents a virtual filesystem
216398
216405
  * to perform read-only operations on in order to detect which framework is being
@@ -216446,12 +216453,34 @@ class DetectorFilesystem {
216446
216453
  };
216447
216454
  /**
216448
216455
  * Returns a list of Stat objects from the current working directory.
216456
+ * @param dirPath The path of the directory to read.
216457
+ * @param options.potentialFiles optional. Array of potential file names (relative to the path). If provided, these will be used to mark the filesystem caches as existing or not existing.
216449
216458
  */
216450
- this.readdir = async (name) => {
216451
- let p = this.readdirCache.get(name);
216459
+ this.readdir = async (dirPath, options) => {
216460
+ let p = this.readdirCache.get(dirPath);
216452
216461
  if (!p) {
216453
- p = this._readdir(name);
216454
- this.readdirCache.set(name, p);
216462
+ p = this._readdir(dirPath);
216463
+ this.readdirCache.set(dirPath, p);
216464
+ const directoryContent = await p;
216465
+ const directoryFiles = new Set();
216466
+ for (const file of directoryContent) {
216467
+ if (file.type === 'file') {
216468
+ // we know this file exists, mark it as so on the filesystem
216469
+ this.fileCache.set(file.path, Promise.resolve(true));
216470
+ this.pathCache.set(file.path, Promise.resolve(true));
216471
+ directoryFiles.add(file.name);
216472
+ }
216473
+ }
216474
+ if (options?.potentialFiles) {
216475
+ // calculate the set of paths that truly do not exist
216476
+ const filesThatDoNotExist = options.potentialFiles.filter(path => !directoryFiles.has(path));
216477
+ for (const filePath of filesThatDoNotExist) {
216478
+ const fullFilePath = dirPath === '/' ? filePath : path_1.posix.join(dirPath, filePath);
216479
+ // we know this file does not exist, mark it as so on the filesystem
216480
+ this.fileCache.set(fullFilePath, Promise.resolve(false));
216481
+ this.pathCache.set(fullFilePath, Promise.resolve(false));
216482
+ }
216483
+ }
216455
216484
  }
216456
216485
  return p;
216457
216486
  };
@@ -216461,22 +216490,21 @@ class DetectorFilesystem {
216461
216490
  this.chdir = (name) => {
216462
216491
  return this._chdir(name);
216463
216492
  };
216493
+ /**
216494
+ * Writes a file to the filesystem cache.
216495
+ * @param name the name of the file to write
216496
+ * @param content The content of the file
216497
+ */
216498
+ this.writeFile = async (name, content) => {
216499
+ this.readFileCache.set(name, Promise.resolve(Buffer.from(content)));
216500
+ this.fileCache.set(name, Promise.resolve(true));
216501
+ this.pathCache.set(name, Promise.resolve(true));
216502
+ };
216464
216503
  this.pathCache = new Map();
216465
216504
  this.fileCache = new Map();
216466
216505
  this.readFileCache = new Map();
216467
216506
  this.readdirCache = new Map();
216468
216507
  }
216469
- /**
216470
- * Writes a file to the filesystem cache.
216471
- * @param name the name of the file to write
216472
- * @param content The content of the file
216473
- */
216474
- writeFile(name, content) {
216475
- if (content)
216476
- this.readFileCache.set(name, Promise.resolve(Buffer.from(content)));
216477
- this.fileCache.set(name, Promise.resolve(true));
216478
- this.pathCache.set(name, Promise.resolve(true));
216479
- }
216480
216508
  }
216481
216509
  exports.DetectorFilesystem = DetectorFilesystem;
216482
216510
  //# sourceMappingURL=filesystem.js.map
@@ -238853,6 +238881,7 @@ const tree_kill_1 = __webpack_require__(21780);
238853
238881
  const headers_1 = __webpack_require__(17929);
238854
238882
  const parse_query_string_1 = __webpack_require__(40165);
238855
238883
  const is_error_1 = __webpack_require__(11026);
238884
+ const is_url_1 = __importDefault(__webpack_require__(4567));
238856
238885
  const project_settings_1 = __webpack_require__(42697);
238857
238886
  const frontendRuntimeSet = new Set(frameworks_1.default.map(f => f.useRuntime?.use || '@vercel/static-build'));
238858
238887
  function sortBuilders(buildA, buildB) {
@@ -239070,14 +239099,33 @@ class DevServer {
239070
239099
  return;
239071
239100
  }
239072
239101
  if (rewritePath) {
239073
- // TODO: add validation?
239074
239102
  debug(`Detected rewrite path from middleware: "${rewritePath}"`);
239075
239103
  prevUrl = rewritePath;
239076
- // Retain orginal pathname, but override query parameters from the rewrite
239077
239104
  const beforeRewriteUrl = req.url || '/';
239078
- const rewriteUrlParsed = url_1.default.parse(beforeRewriteUrl);
239079
- rewriteUrlParsed.search = url_1.default.parse(rewritePath).search;
239080
- req.url = url_1.default.format(rewriteUrlParsed);
239105
+ if ((0, is_url_1.default)(rewritePath)) {
239106
+ const rewriteUrlParsed = new url_1.URL(rewritePath);
239107
+ // `this.address` already has localhost normalized from ip4 and ip6 values
239108
+ const devServerParsed = new url_1.URL(this.address);
239109
+ if (devServerParsed.origin === rewriteUrlParsed.origin) {
239110
+ // remove origin, leaving the path
239111
+ req.url =
239112
+ rewritePath.slice(rewriteUrlParsed.origin.length) || '/';
239113
+ prevUrl = req.url;
239114
+ }
239115
+ else {
239116
+ // Proxy to absolute URL with different origin
239117
+ debug(`ProxyPass: ${rewritePath}`);
239118
+ this.setResponseHeaders(res, requestId);
239119
+ proxyPass(req, res, rewritePath, this, requestId);
239120
+ return;
239121
+ }
239122
+ }
239123
+ else {
239124
+ // Retain orginal pathname, but override query parameters from the rewrite
239125
+ const rewriteUrlParsed = url_1.default.parse(beforeRewriteUrl);
239126
+ rewriteUrlParsed.search = url_1.default.parse(rewritePath).search;
239127
+ req.url = url_1.default.format(rewriteUrlParsed);
239128
+ }
239081
239129
  debug(`Rewrote incoming HTTP URL from "${beforeRewriteUrl}" to "${req.url}"`);
239082
239130
  }
239083
239131
  }
@@ -239104,12 +239152,14 @@ class DevServer {
239104
239152
  statusCode = undefined;
239105
239153
  const phaseRoutes = handleMap.get(phase) || [];
239106
239154
  routeResult = await (0, router_1.devRouter)(prevUrl, req.method, phaseRoutes, this, vercelConfig, prevHeaders, missRoutes, phase);
239107
- prevUrl =
239108
- routeResult.continue && routeResult.dest
239109
- ? getReqUrl(routeResult)
239110
- : req.url;
239111
- prevHeaders =
239112
- routeResult.continue && routeResult.headers ? routeResult.headers : {};
239155
+ if (routeResult.continue) {
239156
+ if (routeResult.dest) {
239157
+ prevUrl = getReqUrl(routeResult);
239158
+ }
239159
+ if (routeResult.headers) {
239160
+ prevHeaders = routeResult.headers;
239161
+ }
239162
+ }
239113
239163
  if (routeResult.isDestUrl) {
239114
239164
  // Mix the `routes` result dest query params into the req path
239115
239165
  const destParsed = url_1.default.parse(routeResult.dest);
@@ -239192,8 +239242,8 @@ class DevServer {
239192
239242
  const requestPath = dest.replace(/^\//, '');
239193
239243
  if (!match) {
239194
239244
  // If the dev command is started, then proxy to it
239195
- if (this.devProcessPort) {
239196
- const upstream = `http://127.0.0.1:${this.devProcessPort}`;
239245
+ if (this.devProcessOrigin) {
239246
+ const upstream = this.devProcessOrigin;
239197
239247
  debug(`Proxying to frontend dev server: ${upstream}`);
239198
239248
  // Add the Vercel platform proxy request headers
239199
239249
  const headers = this.getProxyHeaders(req, requestId, false);
@@ -239318,7 +239368,7 @@ class DevServer {
239318
239368
  // Proxy to the dev server:
239319
239369
  // - when there is no asset
239320
239370
  // - when the asset is not a Lambda (the dev server must take care of all static files)
239321
- if (this.devProcessPort &&
239371
+ if (this.devProcessOrigin &&
239322
239372
  (!foundAsset || (foundAsset && foundAsset.asset.type !== 'Lambda'))) {
239323
239373
  debug('Proxying to frontend dev server');
239324
239374
  // Add the Vercel platform proxy request headers
@@ -239327,7 +239377,7 @@ class DevServer {
239327
239377
  req.headers[name] = value;
239328
239378
  }
239329
239379
  this.setResponseHeaders(res, requestId);
239330
- return proxyPass(req, res, `http://127.0.0.1:${this.devProcessPort}`, this, requestId, false);
239380
+ return proxyPass(req, res, this.devProcessOrigin, this, requestId, false);
239331
239381
  }
239332
239382
  if (!foundAsset) {
239333
239383
  await this.send404(req, res, requestId);
@@ -239440,6 +239490,10 @@ class DevServer {
239440
239490
  ws: true,
239441
239491
  xfwd: true,
239442
239492
  });
239493
+ this.proxy.on('proxyRes', proxyRes => {
239494
+ // override "server" header, like production
239495
+ proxyRes.headers['server'] = 'Vercel';
239496
+ });
239443
239497
  this.server = http_1.default.createServer(this.devServerHandler);
239444
239498
  this.server.timeout = 0; // Disable timeout
239445
239499
  this.stopping = false;
@@ -240059,12 +240113,12 @@ class DevServer {
240059
240113
  // Configure the server to forward WebSocket "upgrade" events to the proxy.
240060
240114
  this.server.on('upgrade', async (req, socket, head) => {
240061
240115
  await this.startPromise;
240062
- if (!this.devProcessPort) {
240116
+ if (!this.devProcessOrigin) {
240063
240117
  this.output.debug(`Detected "upgrade" event, but closing socket because no frontend dev server is running`);
240064
240118
  socket.destroy();
240065
240119
  return;
240066
240120
  }
240067
- const target = `http://127.0.0.1:${this.devProcessPort}`;
240121
+ const target = this.devProcessOrigin;
240068
240122
  this.output.debug(`Detected "upgrade" event, proxying to ${target}`);
240069
240123
  this.proxy.ws(req, socket, head, { target });
240070
240124
  });
@@ -240451,10 +240505,10 @@ class DevServer {
240451
240505
  });
240452
240506
  p.on('exit', (code, signal) => {
240453
240507
  this.output.debug(`Dev command exited with "${signal || code}"`);
240454
- this.devProcessPort = undefined;
240508
+ this.devProcessOrigin = undefined;
240455
240509
  });
240456
- await checkForPort(port, 1000 * 60 * 5);
240457
- this.devProcessPort = port;
240510
+ const devProcessHost = await checkForPort(port, 1000 * 60 * 5);
240511
+ this.devProcessOrigin = `http://${devProcessHost}:${port}`;
240458
240512
  }
240459
240513
  }
240460
240514
  exports.default = DevServer;
@@ -240648,14 +240702,27 @@ function needsBlockingBuild(buildMatch) {
240648
240702
  return typeof builder.shouldServe !== 'function';
240649
240703
  }
240650
240704
  async function checkForPort(port, timeout) {
240651
- const opts = { host: '127.0.0.1' };
240705
+ let host;
240652
240706
  const start = Date.now();
240653
- while (!(await (0, is_port_reachable_1.default)(port, opts))) {
240707
+ while (!(host = await getReachableHostOnPort(port))) {
240654
240708
  if (Date.now() - start > timeout) {
240655
- throw new Error(`Detecting port ${port} timed out after ${timeout}ms`);
240709
+ break;
240656
240710
  }
240657
240711
  await (0, sleep_1.default)(100);
240658
240712
  }
240713
+ if (!host) {
240714
+ throw new Error(`Detecting port ${port} timed out after ${timeout}ms`);
240715
+ }
240716
+ return host;
240717
+ }
240718
+ async function getReachableHostOnPort(port) {
240719
+ const optsIpv4 = { host: '127.0.0.1' };
240720
+ const optsIpv6 = { host: '::1' };
240721
+ const results = await Promise.all([
240722
+ (0, is_port_reachable_1.default)(port, optsIpv6).then(r => r && `[${optsIpv6.host}]`),
240723
+ (0, is_port_reachable_1.default)(port, optsIpv4).then(r => r && optsIpv4.host),
240724
+ ]);
240725
+ return results.find(Boolean) || false;
240659
240726
  }
240660
240727
  function filterFrontendBuilds(build) {
240661
240728
  const { name } = (0, npm_package_arg_1.default)(build.use);
@@ -249433,7 +249500,7 @@ module.exports = JSON.parse("{\"application/1d-interleaved-parityfec\":{\"source
249433
249500
  /***/ ((module) => {
249434
249501
 
249435
249502
  "use strict";
249436
- module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"28.2.1\",\"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/\",\"coverage\":\"codecov\",\"build\":\"ts-node ./scripts/build.ts\",\"dev\":\"ts-node ./src/index.ts\"},\"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\":\"5.4.1\",\"@vercel/go\":\"2.2.4\",\"@vercel/hydrogen\":\"0.0.17\",\"@vercel/next\":\"3.1.23\",\"@vercel/node\":\"2.5.12\",\"@vercel/python\":\"3.1.13\",\"@vercel/redwood\":\"1.0.21\",\"@vercel/remix\":\"1.0.22\",\"@vercel/ruby\":\"1.3.30\",\"@vercel/static-build\":\"1.0.21\",\"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\",\"@swc/core\":\"1.2.218\",\"@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/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.2.3\",\"@vercel/frameworks\":\"1.1.3\",\"@vercel/fs-detectors\":\"2.1.0\",\"@vercel/fun\":\"1.0.4\",\"@vercel/ncc\":\"0.24.0\",\"@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\",\"boxen\":\"4.2.0\",\"bytes\":\"3.0.0\",\"chalk\":\"4.1.0\",\"chance\":\"1.1.7\",\"chokidar\":\"3.3.1\",\"codecov\":\"3.8.2\",\"cpy\":\"7.2.0\",\"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.7\",\"npm-package-arg\":\"6.1.0\",\"open\":\"8.4.0\",\"ora\":\"3.4.0\",\"pcre-to-regexp\":\"1.0.0\",\"pluralize\":\"7.0.0\",\"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\":\"10.9.1\",\"typescript\":\"4.7.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\"]}}");
249503
+ module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"28.2.4\",\"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/\",\"coverage\":\"codecov\",\"build\":\"ts-node ./scripts/build.ts\",\"dev\":\"ts-node ./src/index.ts\"},\"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\":\"5.4.2\",\"@vercel/go\":\"2.2.5\",\"@vercel/hydrogen\":\"0.0.18\",\"@vercel/next\":\"3.1.25\",\"@vercel/node\":\"2.5.14\",\"@vercel/python\":\"3.1.14\",\"@vercel/redwood\":\"1.0.23\",\"@vercel/remix\":\"1.0.24\",\"@vercel/ruby\":\"1.3.31\",\"@vercel/static-build\":\"1.0.23\",\"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\",\"@swc/core\":\"1.2.218\",\"@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/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.2.4\",\"@vercel/frameworks\":\"1.1.5\",\"@vercel/fs-detectors\":\"3.1.0\",\"@vercel/fun\":\"1.0.4\",\"@vercel/ncc\":\"0.24.0\",\"@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\",\"boxen\":\"4.2.0\",\"bytes\":\"3.0.0\",\"chalk\":\"4.1.0\",\"chance\":\"1.1.7\",\"chokidar\":\"3.3.1\",\"codecov\":\"3.8.2\",\"cpy\":\"7.2.0\",\"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.7\",\"npm-package-arg\":\"6.1.0\",\"open\":\"8.4.0\",\"ora\":\"3.4.0\",\"pcre-to-regexp\":\"1.0.0\",\"pluralize\":\"7.0.0\",\"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\":\"10.9.1\",\"typescript\":\"4.7.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\"]}}");
249437
249504
 
249438
249505
  /***/ }),
249439
249506
 
@@ -249441,7 +249508,7 @@ module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"28.2.1\",\"prefe
249441
249508
  /***/ ((module) => {
249442
249509
 
249443
249510
  "use strict";
249444
- module.exports = JSON.parse("{\"name\":\"@vercel/client\",\"version\":\"12.2.3\",\"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\",\"@types/tar-fs\":\"1.16.1\",\"typescript\":\"4.3.4\"},\"jest\":{\"preset\":\"ts-jest\",\"testEnvironment\":\"node\",\"verbose\":false,\"setupFilesAfterEnv\":[\"<rootDir>/tests/setup/index.ts\"]},\"dependencies\":{\"@vercel/build-utils\":\"5.4.1\",\"@vercel/routing-utils\":\"2.0.2\",\"@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.7\",\"querystring\":\"^0.2.0\",\"sleep-promise\":\"8.0.1\",\"tar-fs\":\"1.16.3\"}}");
249511
+ module.exports = JSON.parse("{\"name\":\"@vercel/client\",\"version\":\"12.2.4\",\"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\",\"@types/tar-fs\":\"1.16.1\",\"typescript\":\"4.3.4\"},\"jest\":{\"preset\":\"ts-jest\",\"testEnvironment\":\"node\",\"verbose\":false,\"setupFilesAfterEnv\":[\"<rootDir>/tests/setup/index.ts\"]},\"dependencies\":{\"@vercel/build-utils\":\"5.4.2\",\"@vercel/routing-utils\":\"2.0.2\",\"@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.7\",\"querystring\":\"^0.2.0\",\"sleep-promise\":\"8.0.1\",\"tar-fs\":\"1.16.3\"}}");
249445
249512
 
249446
249513
  /***/ }),
249447
249514
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vercel",
3
- "version": "28.2.1",
3
+ "version": "28.2.4",
4
4
  "preferGlobal": true,
5
5
  "license": "Apache-2.0",
6
6
  "description": "The command-line interface for Vercel",
@@ -41,16 +41,16 @@
41
41
  "node": ">= 14"
42
42
  },
43
43
  "dependencies": {
44
- "@vercel/build-utils": "5.4.1",
45
- "@vercel/go": "2.2.4",
46
- "@vercel/hydrogen": "0.0.17",
47
- "@vercel/next": "3.1.23",
48
- "@vercel/node": "2.5.12",
49
- "@vercel/python": "3.1.13",
50
- "@vercel/redwood": "1.0.21",
51
- "@vercel/remix": "1.0.22",
52
- "@vercel/ruby": "1.3.30",
53
- "@vercel/static-build": "1.0.21",
44
+ "@vercel/build-utils": "5.4.2",
45
+ "@vercel/go": "2.2.5",
46
+ "@vercel/hydrogen": "0.0.18",
47
+ "@vercel/next": "3.1.25",
48
+ "@vercel/node": "2.5.14",
49
+ "@vercel/python": "3.1.14",
50
+ "@vercel/redwood": "1.0.23",
51
+ "@vercel/remix": "1.0.24",
52
+ "@vercel/ruby": "1.3.31",
53
+ "@vercel/static-build": "1.0.23",
54
54
  "update-notifier": "5.1.0"
55
55
  },
56
56
  "devDependencies": {
@@ -95,9 +95,9 @@
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.2.3",
99
- "@vercel/frameworks": "1.1.3",
100
- "@vercel/fs-detectors": "2.1.0",
98
+ "@vercel/client": "12.2.4",
99
+ "@vercel/frameworks": "1.1.5",
100
+ "@vercel/fs-detectors": "3.1.0",
101
101
  "@vercel/fun": "1.0.4",
102
102
  "@vercel/ncc": "0.24.0",
103
103
  "@zeit/source-map-support": "0.6.2",
@@ -193,5 +193,5 @@
193
193
  "<rootDir>/test/**/*.test.ts"
194
194
  ]
195
195
  },
196
- "gitHead": "2906d83eaeddc72f9d874981dbe6698e812f3ca3"
196
+ "gitHead": "8b3c52b9e8cbf7de7fc51f76975374c4bb2fad56"
197
197
  }