vercel 28.5.6 → 28.7.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 (3) hide show
  1. package/README.md +2 -0
  2. package/dist/index.js +540 -96
  3. package/package.json +16 -16
package/README.md CHANGED
@@ -51,6 +51,8 @@ At this point you can make modifications to the CLI source code and test them ou
51
51
  cd packages/cli
52
52
  ```
53
53
 
54
+ ### `yarn dev <cli-commands...>`
55
+
54
56
  From within the `packages/cli` directory, you can use the "dev" script to quickly execute Vercel CLI from its TypeScript source code directly (without having to manually compile first). For example:
55
57
 
56
58
  ```bash
package/dist/index.js CHANGED
@@ -192637,7 +192637,7 @@ const download_1 = __nested_webpack_require_894917__(1611);
192637
192637
  const stream_to_buffer_1 = __importDefault(__nested_webpack_require_894917__(2560));
192638
192638
  class Lambda {
192639
192639
  constructor(opts) {
192640
- const { handler, runtime, maxDuration, memory, environment = {}, allowQuery, regions, supportsMultiPayloads, supportsWrapper, experimentalResponseStreaming, } = opts;
192640
+ const { handler, runtime, maxDuration, memory, environment = {}, allowQuery, regions, supportsMultiPayloads, supportsWrapper, experimentalResponseStreaming, operationType, } = opts;
192641
192641
  if ('files' in opts) {
192642
192642
  assert_1.default(typeof opts.files === 'object', '"files" must be an object');
192643
192643
  }
@@ -192668,6 +192668,7 @@ class Lambda {
192668
192668
  assert_1.default(regions.every(r => typeof r === 'string'), '"regions" is not a string Array');
192669
192669
  }
192670
192670
  this.type = 'Lambda';
192671
+ this.operationType = operationType;
192671
192672
  this.files = 'files' in opts ? opts.files : undefined;
192672
192673
  this.handler = handler;
192673
192674
  this.runtime = runtime;
@@ -192761,13 +192762,13 @@ exports.getLambdaOptionsFromFunction = getLambdaOptionsFromFunction;
192761
192762
  /***/ }),
192762
192763
 
192763
192764
  /***/ 7049:
192764
- /***/ ((__unused_webpack_module, exports, __nested_webpack_require_900707__) => {
192765
+ /***/ ((__unused_webpack_module, exports, __nested_webpack_require_900766__) => {
192765
192766
 
192766
192767
  "use strict";
192767
192768
 
192768
192769
  Object.defineProperty(exports, "__esModule", ({ value: true }));
192769
192770
  exports.NodejsLambda = void 0;
192770
- const lambda_1 = __nested_webpack_require_900707__(6721);
192771
+ const lambda_1 = __nested_webpack_require_900766__(6721);
192771
192772
  class NodejsLambda extends lambda_1.Lambda {
192772
192773
  constructor({ shouldAddHelpers, shouldAddSourcemapSupport, awsLambdaHandler, ...opts }) {
192773
192774
  super(opts);
@@ -192794,6 +192795,10 @@ class Prerender {
192794
192795
  this.type = 'Prerender';
192795
192796
  this.expiration = expiration;
192796
192797
  this.lambda = lambda;
192798
+ if (this.lambda) {
192799
+ // "ISR" is the platform default lambda label for prerender functions
192800
+ this.lambda.operationType = this.lambda.operationType || 'ISR';
192801
+ }
192797
192802
  if (typeof group !== 'undefined' &&
192798
192803
  (group <= 0 || !Number.isInteger(group))) {
192799
192804
  throw new Error('The `group` argument for `Prerender` needs to be a natural number.');
@@ -192918,13 +192923,13 @@ exports.buildsSchema = {
192918
192923
  /***/ }),
192919
192924
 
192920
192925
  /***/ 2564:
192921
- /***/ ((__unused_webpack_module, exports, __nested_webpack_require_905844__) => {
192926
+ /***/ ((__unused_webpack_module, exports, __nested_webpack_require_906098__) => {
192922
192927
 
192923
192928
  "use strict";
192924
192929
 
192925
192930
  Object.defineProperty(exports, "__esModule", ({ value: true }));
192926
192931
  exports.shouldServe = void 0;
192927
- const path_1 = __nested_webpack_require_905844__(5622);
192932
+ const path_1 = __nested_webpack_require_906098__(5622);
192928
192933
  const shouldServe = ({ entrypoint, files, requestPath, }) => {
192929
192934
  requestPath = requestPath.replace(/\/$/, ''); // sanitize trailing '/'
192930
192935
  entrypoint = entrypoint.replace(/\\/, '/'); // windows compatibility
@@ -193169,7 +193174,7 @@ module.exports = __webpack_require__(78761);
193169
193174
  /******/ var __webpack_module_cache__ = {};
193170
193175
  /******/
193171
193176
  /******/ // The require function
193172
- /******/ function __nested_webpack_require_1283209__(moduleId) {
193177
+ /******/ function __nested_webpack_require_1283463__(moduleId) {
193173
193178
  /******/ // Check if module is in cache
193174
193179
  /******/ if(__webpack_module_cache__[moduleId]) {
193175
193180
  /******/ return __webpack_module_cache__[moduleId].exports;
@@ -193184,7 +193189,7 @@ module.exports = __webpack_require__(78761);
193184
193189
  /******/ // Execute the module function
193185
193190
  /******/ var threw = true;
193186
193191
  /******/ try {
193187
- /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_1283209__);
193192
+ /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_1283463__);
193188
193193
  /******/ threw = false;
193189
193194
  /******/ } finally {
193190
193195
  /******/ if(threw) delete __webpack_module_cache__[moduleId];
@@ -193197,11 +193202,11 @@ module.exports = __webpack_require__(78761);
193197
193202
  /************************************************************************/
193198
193203
  /******/ /* webpack/runtime/compat */
193199
193204
  /******/
193200
- /******/ __nested_webpack_require_1283209__.ab = __dirname + "/";/************************************************************************/
193205
+ /******/ __nested_webpack_require_1283463__.ab = __dirname + "/";/************************************************************************/
193201
193206
  /******/ // module exports must be returned from runtime so entry inlining is disabled
193202
193207
  /******/ // startup
193203
193208
  /******/ // Load entry module and return exports
193204
- /******/ return __nested_webpack_require_1283209__(2855);
193209
+ /******/ return __nested_webpack_require_1283463__(2855);
193205
193210
  /******/ })()
193206
193211
  ;
193207
193212
 
@@ -214223,20 +214228,19 @@ const { readdir, readFile, unlink } = fs_1.promises;
214223
214228
  */
214224
214229
  exports.frameworks = [
214225
214230
  {
214226
- name: 'Blitz.js',
214231
+ name: 'Blitz.js (Legacy)',
214227
214232
  slug: 'blitzjs',
214228
214233
  demo: 'https://blitz-template.vercel.app',
214229
214234
  logo: 'https://api-frameworks.vercel.sh/framework-logos/blitz.svg',
214230
214235
  tagline: 'Blitz.js: The Fullstack React Framework',
214231
- description: 'A brand new Blitz.js app - the result of running `npx blitz new`.',
214236
+ description: 'A brand new Blitz.js app - the result of running `npx blitz@0.45.4 new`.',
214232
214237
  website: 'https://blitzjs.com',
214233
214238
  envPrefix: 'NEXT_PUBLIC_',
214234
214239
  useRuntime: { src: 'package.json', use: '@vercel/next' },
214235
214240
  detectors: {
214236
214241
  every: [
214237
214242
  {
214238
- path: 'package.json',
214239
- matchContent: '"(dev)?(d|D)ependencies":\\s*{[^}]*"blitz":\\s*".+?"[^}]*}',
214243
+ path: 'blitz.config.(js|ts)',
214240
214244
  },
214241
214245
  ],
214242
214246
  },
@@ -214460,17 +214464,10 @@ exports.frameworks = [
214460
214464
  getOutputDirName: async () => 'dist',
214461
214465
  defaultRoutes: [
214462
214466
  {
214463
- src: '^/dist/(.*)$',
214467
+ src: '^/assets/(.*)$',
214464
214468
  headers: { 'cache-control': 'public, max-age=31536000, immutable' },
214465
214469
  continue: true,
214466
214470
  },
214467
- {
214468
- handle: 'filesystem',
214469
- },
214470
- {
214471
- src: '/(.*)',
214472
- dest: '/index.html',
214473
- },
214474
214471
  ],
214475
214472
  },
214476
214473
  {
@@ -215855,6 +215852,72 @@ exports.frameworks = [
215855
215852
  dependency: 'vite',
215856
215853
  getOutputDirName: async () => 'dist',
215857
215854
  },
215855
+ {
215856
+ name: 'VitePress',
215857
+ slug: 'vitepress',
215858
+ demo: 'https://vitepress-starter-template.vercel.app/',
215859
+ logo: 'https://api-frameworks.vercel.sh/framework-logos/vite.svg',
215860
+ tagline: "VitePress is VuePress' little brother, built on top of Vite.",
215861
+ description: 'VuePress on top of Vite',
215862
+ website: 'https://vitepress.vuejs.org/',
215863
+ detectors: {
215864
+ every: [
215865
+ {
215866
+ path: 'package.json',
215867
+ matchContent: '"(dev)?(d|D)ependencies":\\s*{[^}]*vitepress:\\s*".+?"[^}]*}',
215868
+ },
215869
+ ],
215870
+ },
215871
+ settings: {
215872
+ installCommand: {
215873
+ placeholder: '`yarn install`, `pnpm install`, or `npm install`',
215874
+ },
215875
+ buildCommand: {
215876
+ placeholder: '`npm run build` or `vitepress build docs`',
215877
+ value: 'vitepress build docs',
215878
+ },
215879
+ devCommand: {
215880
+ value: 'vitepress dev docs --port $PORT',
215881
+ },
215882
+ outputDirectory: {
215883
+ value: 'docs/.vitepress/dist',
215884
+ },
215885
+ },
215886
+ getOutputDirName: async () => '.vitepress/dist',
215887
+ },
215888
+ {
215889
+ name: 'VuePress',
215890
+ slug: 'vuepress',
215891
+ demo: 'https://vuepress-starter-template.vercel.app',
215892
+ logo: 'https://api-frameworks.vercel.sh/framework-logos/vuepress.png',
215893
+ tagline: 'Vue-powered Static Site Generator',
215894
+ description: 'Vue-powered Static Site Generator',
215895
+ website: 'https://vuepress.vuejs.org/',
215896
+ detectors: {
215897
+ every: [
215898
+ {
215899
+ path: 'package.json',
215900
+ matchContent: '"(dev)?(d|D)ependencies":\\s*{[^}]*vuepress:\\s*".+?"[^}]*}',
215901
+ },
215902
+ ],
215903
+ },
215904
+ settings: {
215905
+ installCommand: {
215906
+ placeholder: '`yarn install`, `pnpm install`, or `npm install`',
215907
+ },
215908
+ buildCommand: {
215909
+ placeholder: '`npm run build` or `vuepress build src`',
215910
+ value: 'vuepress build src',
215911
+ },
215912
+ devCommand: {
215913
+ value: 'vuepress dev src --port $PORT',
215914
+ },
215915
+ outputDirectory: {
215916
+ value: 'src/.vuepress/dist',
215917
+ },
215918
+ },
215919
+ getOutputDirName: async () => 'src/.vuepress/dist',
215920
+ },
215858
215921
  {
215859
215922
  name: 'Parcel',
215860
215923
  slug: 'parcel',
@@ -233662,7 +233725,6 @@ async function main(client) {
233662
233725
  }
233663
233726
  // Parse CLI args
233664
233727
  const argv = (0, get_args_1.default)(client.argv.slice(2), {
233665
- '--cwd': String,
233666
233728
  '--output': String,
233667
233729
  '--prod': Boolean,
233668
233730
  '--yes': Boolean,
@@ -233671,10 +233733,6 @@ async function main(client) {
233671
233733
  help();
233672
233734
  return 2;
233673
233735
  }
233674
- // Set the working directory if necessary
233675
- if (argv['--cwd']) {
233676
- process.chdir(argv['--cwd']);
233677
- }
233678
233736
  const cwd = process.cwd();
233679
233737
  // Build `target` influences which environment variables will be used
233680
233738
  const target = argv['--prod'] ? 'production' : 'preview';
@@ -234661,6 +234719,7 @@ const help = () => `
234661
234719
  login [email] Logs into your account or creates a new one
234662
234720
  logout Logs out of your account
234663
234721
  pull [path] Pull your Project Settings from the cloud
234722
+ rollback [url|id] Quickly revert back to a previous deployment [beta]
234664
234723
  switch [scope] Switches between teams and your personal account
234665
234724
 
234666
234725
  ${chalk_1.default.dim('Advanced')}
@@ -235367,6 +235426,7 @@ async function dev(client, opts, args) {
235367
235426
  if (link.status === 'not_linked' && !process.env.__VERCEL_SKIP_DEV_CMD) {
235368
235427
  link = await (0, setup_and_link_1.default)(client, cwd, {
235369
235428
  autoConfirm: opts['--yes'],
235429
+ link,
235370
235430
  successEmoji: 'link',
235371
235431
  setupMsg: 'Set up and develop',
235372
235432
  });
@@ -237963,6 +238023,7 @@ exports.default = new Map([
237963
238023
  ['pull', 'pull'],
237964
238024
  ['remove', 'remove'],
237965
238025
  ['rm', 'remove'],
238026
+ ['rollback', 'rollback'],
237966
238027
  ['secret', 'secrets'],
237967
238028
  ['secrets', 'secrets'],
237968
238029
  ['switch', 'teams'],
@@ -238601,6 +238662,7 @@ async function main(client) {
238601
238662
  if (status === 'not_linked' && !app) {
238602
238663
  const linkedProject = await (0, ensure_link_1.ensureLink)('list', client, path, {
238603
238664
  autoConfirm,
238665
+ link,
238604
238666
  });
238605
238667
  if (typeof linkedProject === 'number') {
238606
238668
  return linkedProject;
@@ -239911,6 +239973,117 @@ function deploymentsAndProjects(deployments, projects, conjunction = 'and') {
239911
239973
  }
239912
239974
 
239913
239975
 
239976
+ /***/ }),
239977
+
239978
+ /***/ 67121:
239979
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
239980
+
239981
+ "use strict";
239982
+
239983
+ var __importDefault = (this && this.__importDefault) || function (mod) {
239984
+ return (mod && mod.__esModule) ? mod : { "default": mod };
239985
+ };
239986
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
239987
+ const chalk_1 = __importDefault(__webpack_require__(961));
239988
+ const ensure_link_1 = __webpack_require__(3502);
239989
+ const get_args_1 = __importDefault(__webpack_require__(87612));
239990
+ const pkg_name_1 = __webpack_require__(98106);
239991
+ const handle_error_1 = __importDefault(__webpack_require__(70870));
239992
+ const logo_1 = __importDefault(__webpack_require__(9829));
239993
+ const ms_1 = __importDefault(__webpack_require__(80040));
239994
+ const request_rollback_1 = __importDefault(__webpack_require__(96011));
239995
+ const status_1 = __importDefault(__webpack_require__(76939));
239996
+ const validate_paths_1 = __importDefault(__webpack_require__(54579));
239997
+ const help = () => {
239998
+ console.log(`
239999
+ ${chalk_1.default.bold(`${logo_1.default} ${(0, pkg_name_1.getPkgName)()} rollback`)} [deploymentId|deploymentName]
240000
+
240001
+ Quickly revert back to a previous deployment.
240002
+
240003
+ ${chalk_1.default.dim('Options:')}
240004
+
240005
+ -h, --help Output usage information
240006
+ -A ${chalk_1.default.bold.underline('FILE')}, --local-config=${chalk_1.default.bold.underline('FILE')} Path to the local ${'`vercel.json`'} file
240007
+ -Q ${chalk_1.default.bold.underline('DIR')}, --global-config=${chalk_1.default.bold.underline('DIR')} Path to the global ${'`.vercel`'} directory
240008
+ -d, --debug Debug mode [off]
240009
+ -t ${chalk_1.default.bold.underline('TOKEN')}, --token=${chalk_1.default.bold.underline('TOKEN')} Login token
240010
+ --timeout=${chalk_1.default.bold.underline('TIME')} Time to wait for rollback completion [3m]
240011
+ -y, --yes Skip questions when setting up new project using default scope and settings
240012
+
240013
+ ${chalk_1.default.dim('Examples:')}
240014
+
240015
+ ${chalk_1.default.gray('–')} Show the status of any current pending rollbacks
240016
+
240017
+ ${chalk_1.default.cyan(`$ ${(0, pkg_name_1.getPkgName)()} rollback`)}
240018
+ ${chalk_1.default.cyan(`$ ${(0, pkg_name_1.getPkgName)()} rollback status`)}
240019
+ ${chalk_1.default.cyan(`$ ${(0, pkg_name_1.getPkgName)()} rollback status --timeout 30s`)}
240020
+
240021
+ ${chalk_1.default.gray('–')} Rollback a deployment using id or url
240022
+
240023
+ ${chalk_1.default.cyan(`$ ${(0, pkg_name_1.getPkgName)()} rollback <deployment id/url>`)}
240024
+ `);
240025
+ };
240026
+ /**
240027
+ * `vc rollback` command
240028
+ * @param {Client} client
240029
+ * @returns {Promise<number>} Resolves an exit code; 0 on success
240030
+ */
240031
+ exports.default = async (client) => {
240032
+ let argv;
240033
+ try {
240034
+ argv = (0, get_args_1.default)(client.argv.slice(2), {
240035
+ '--debug': Boolean,
240036
+ '-d': '--debug',
240037
+ '--timeout': String,
240038
+ '--yes': Boolean,
240039
+ '-y': '--yes',
240040
+ });
240041
+ }
240042
+ catch (err) {
240043
+ (0, handle_error_1.default)(err);
240044
+ return 1;
240045
+ }
240046
+ if (argv['--help'] || argv._[0] === 'help') {
240047
+ help();
240048
+ return 2;
240049
+ }
240050
+ // ensure the current directory is good
240051
+ const cwd = argv['--cwd'] || process.cwd();
240052
+ const pathValidation = await (0, validate_paths_1.default)(client, [cwd]);
240053
+ if (!pathValidation.valid) {
240054
+ return pathValidation.exitCode;
240055
+ }
240056
+ // ensure the current directory is a linked project
240057
+ const linkedProject = await (0, ensure_link_1.ensureLink)('rollback', client, pathValidation.path, {
240058
+ autoConfirm: Boolean(argv['--yes']),
240059
+ });
240060
+ if (typeof linkedProject === 'number') {
240061
+ return linkedProject;
240062
+ }
240063
+ // validate the timeout
240064
+ let timeout = argv['--timeout'];
240065
+ if (timeout && (0, ms_1.default)(timeout) === undefined) {
240066
+ client.output.error(`Invalid timeout "${timeout}"`);
240067
+ return 1;
240068
+ }
240069
+ const { project } = linkedProject;
240070
+ const actionOrDeployId = argv._[1] || 'status';
240071
+ if (actionOrDeployId === 'status') {
240072
+ return await (0, status_1.default)({
240073
+ client,
240074
+ project,
240075
+ timeout,
240076
+ });
240077
+ }
240078
+ return await (0, request_rollback_1.default)({
240079
+ client,
240080
+ deployId: actionOrDeployId,
240081
+ project,
240082
+ timeout,
240083
+ });
240084
+ };
240085
+
240086
+
239914
240087
  /***/ }),
239915
240088
 
239916
240089
  /***/ 23968:
@@ -240745,7 +240918,7 @@ const main = async () => {
240745
240918
  // * a subcommand (as in: `vercel ls`)
240746
240919
  const targetOrSubcommand = argv._[2];
240747
240920
  // Currently no beta commands - add here as needed
240748
- const betaCommands = [];
240921
+ const betaCommands = ['rollback'];
240749
240922
  if (betaCommands.includes(targetOrSubcommand)) {
240750
240923
  console.log(`${chalk_1.default.grey(`${(0, pkg_name_1.getTitleName)()} CLI ${pkg_1.default.version} ${targetOrSubcommand} (beta) — https://vercel.com/feedback`)}`);
240751
240924
  }
@@ -241050,6 +241223,9 @@ const main = async () => {
241050
241223
  case 'remove':
241051
241224
  func = __webpack_require__(28709).default;
241052
241225
  break;
241226
+ case 'rollback':
241227
+ func = __webpack_require__(67121).default;
241228
+ break;
241053
241229
  case 'secrets':
241054
241230
  func = __webpack_require__(37523)/* .default */ .Z;
241055
241231
  break;
@@ -242262,6 +242438,9 @@ async function writeBuildResultV2(outputDir, buildResult, vercelConfig) {
242262
242438
  await writeLambda(outputDir, output, normalizedPath, undefined, lambdas);
242263
242439
  }
242264
242440
  else if (isPrerender(output)) {
242441
+ if (!output.lambda) {
242442
+ throw new Error(`Invalid Prerender with no "lambda" property: ${normalizedPath}`);
242443
+ }
242265
242444
  await writeLambda(outputDir, output.lambda, normalizedPath, undefined, lambdas);
242266
242445
  // Write the fallback file alongside the Lambda directory
242267
242446
  let fallback = output.fallback;
@@ -247170,11 +247349,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
247170
247349
  Object.defineProperty(exports, "__esModule", ({ value: true }));
247171
247350
  const escape_html_1 = __importDefault(__webpack_require__(84647));
247172
247351
  function error(it) {
247173
- let out = '<main> <p class="devinfo-container"> <span class="error-code"><strong>' +
247174
- it.http_status_code +
247175
- '</strong>: ' +
247176
- (0, escape_html_1.default)(it.http_status_description) +
247177
- '</span> ';
247352
+ let out = '<main> ';
247353
+ if (it.error_code == 'EDGE_FUNCTION_INVOCATION_FAILED') {
247354
+ out +=
247355
+ ' <p class="error-title error-title-guilty"> <strong>This Edge Function</strong><span> has crashed.</span> </p> ';
247356
+ }
247357
+ out += ' ';
247358
+ if (it.error_code == 'FUNCTION_INVOCATION_FAILED') {
247359
+ out +=
247360
+ ' <p class="error-title error-title-guilty"> <strong>This Serverless Function</strong><span> has crashed.</span> </p> ';
247361
+ }
247362
+ out +=
247363
+ ' <p class="devinfo-container"> <span class="error-code"><strong>' +
247364
+ it.http_status_code +
247365
+ '</strong>: ' +
247366
+ (0, escape_html_1.default)(it.http_status_description) +
247367
+ '</span> ';
247178
247368
  if (it.error_code) {
247179
247369
  out +=
247180
247370
  ' <span class="devinfo-line">Code: <code>' +
@@ -247184,7 +247374,7 @@ function error(it) {
247184
247374
  out +=
247185
247375
  ' <span class="devinfo-line">ID: <code>' +
247186
247376
  (0, escape_html_1.default)(it.request_id) +
247187
- '</code> </p></main>';
247377
+ '</code> </p> <p> <ul> <li> Check the logs in your terminal window to see the application error. </li> </ul> </p></main>';
247188
247378
  return out;
247189
247379
  }
247190
247380
  exports.default = error;
@@ -247217,7 +247407,7 @@ function error_404(it) {
247217
247407
  out +=
247218
247408
  ' <span class="devinfo-line">ID: <code>' +
247219
247409
  (0, escape_html_1.default)(it.request_id) +
247220
- '</code> </p></main>';
247410
+ '</code> </p> <a href="https://vercel.link/404"><div class="note">Click here to learn more about this error.</div></a></main>';
247221
247411
  return out;
247222
247412
  }
247223
247413
  exports.default = error_404;
@@ -247236,44 +247426,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
247236
247426
  Object.defineProperty(exports, "__esModule", ({ value: true }));
247237
247427
  const escape_html_1 = __importDefault(__webpack_require__(84647));
247238
247428
  function error_502(it) {
247239
- let out = '<header> <div class="header-item first';
247240
- if (it.app_error) {
247241
- out += ' active';
247242
- }
247243
- out +=
247244
- '"> <svg class="header-item-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> ';
247245
- if (it.app_error) {
247246
- out += ' <circle cx="8" cy="8" r="8" fill="#FF0080" /> ';
247247
- }
247248
- else {
247249
- out += ' <circle cx="8" cy="8" r="7.5" stroke="#CCCCCC" /> ';
247250
- }
247251
- out +=
247252
- ' </svg> <div class="header-item-content"> <h1>Application Error</h1> <p>The error occurred in the hosted application</p> </div> </div> <div class="header-item';
247253
- if (!it.app_error) {
247254
- out += ' active';
247255
- }
247256
- out +=
247257
- '"> <svg class="header-item-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> ';
247258
- if (!it.app_error) {
247259
- out += ' <circle cx="8" cy="8" r="8" fill="#FF0080" /> ';
247260
- }
247261
- else {
247262
- out += ' <circle cx="8" cy="8" r="7.5" stroke="#CCCCCC" /> ';
247263
- }
247264
- out +=
247265
- ' </svg> <div class="header-item-content"> <h1>Platform Error</h1> <p>The error occurred in the infrastructure layer</p> </div> </div></header><main> <p> <h1 class="error-title">' +
247266
- (0, escape_html_1.default)(it.title) +
247267
- '</h1> ';
247268
- if (it.subtitle) {
247269
- out += ' <p>' + (0, escape_html_1.default)(it.subtitle) + '</p> ';
247270
- }
247271
- out +=
247272
- ' </p> <p class="devinfo-container"> <span class="error-code"><strong>' +
247273
- it.http_status_code +
247274
- '</strong>: ' +
247275
- (0, escape_html_1.default)(it.http_status_description) +
247276
- '</span> ';
247429
+ let out = '<main> <p class="devinfo-container"> <span class="error-code"><strong>' +
247430
+ it.http_status_code +
247431
+ '</strong>: ' +
247432
+ (0, escape_html_1.default)(it.http_status_description) +
247433
+ '</span> ';
247277
247434
  if (it.error_code) {
247278
247435
  out +=
247279
247436
  ' <span class="devinfo-line">Code: <code>' +
@@ -247283,18 +247440,7 @@ function error_502(it) {
247283
247440
  out +=
247284
247441
  ' <span class="devinfo-line">ID: <code>' +
247285
247442
  (0, escape_html_1.default)(it.request_id) +
247286
- '</code> </p> ';
247287
- if (it.app_error) {
247288
- out +=
247289
- ' <p> <ul> <li> Check the logs in your terminal window to see the application error. </li> </ul> <a target="_blank" href="https://vercel.com/docs/error/application/' +
247290
- it.error_code +
247291
- '" class="docs-link" rel="noopener noreferrer">Developer Documentation →</a> </p> ';
247292
- }
247293
- else {
247294
- out +=
247295
- ' <p> <ul> <li> Please open a <a target="_blank" href="https://github.com/vercel/vercel/issues/new/choose">GitHub issue</a> describing the problem you are experiencing with <code>vercel dev</code>. </li> </ul> </p> ';
247296
- }
247297
- out += '</main>';
247443
+ '</code> </p> <p> <ul> <li> Check the logs in your terminal window to see the application error. </li> </ul> </p></main>';
247298
247444
  return out;
247299
247445
  }
247300
247446
  exports.default = error_502;
@@ -247317,9 +247463,9 @@ function error_base(it) {
247317
247463
  it.http_status_code +
247318
247464
  ': ' +
247319
247465
  (0, escape_html_1.default)(it.http_status_description) +
247320
- '</title> <style> html { font-size: 62.5%; box-sizing: border-box } *, ::after, ::before { box-sizing: inherit } body { font-family: "SF Pro Text", "SF Pro Icons", "Helvetica Neue", "Helvetica", "Arial", sans-serif; font-size: 1.6rem; line-height: 1.65; word-break: break-word; font-kerning: auto; font-variant: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; hyphens: auto; height: 100vh; max-height: 100vh; margin: 0 } ::selection { background: #79FFE1; } ::-moz-selection { background: #79FFE1; } a { cursor: pointer; color: #0070f3; text-decoration: none; transition: all .2s ease; border-bottom: 1px solid transparent } a:hover { border-bottom: 1px solid #0070f3 } ul { padding: 0; margin-left: 1.5em; list-style-type: none } li { margin-bottom: 10px } ul li:before { content: \'\\02013\' } li:before { display: inline-block; color: #ccc; position: absolute; margin-left: -18px; transition: color .2s ease } code { font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; font-size: .92em } code:after, code:before { content: \'`\' } .container { display: flex; justify-content: center; flex-direction: column; min-height: 100vh } main { max-width: 80rem; padding: 4rem 6rem; margin: auto } ul { margin-bottom: 32px } .error-title { font-size: 2rem; border-left: 2px solid #ff0080; padding-left: 22px; line-height: 1.5; margin-bottom: 24px; font-weight: 500 } main p { color: #333 } .devinfo-container { border: 1px solid #ddd; border-radius: 4px; padding: 2rem; display: flex; flex-direction: column; margin-bottom: 32px } .error-code { margin: 0; font-size: 1.6rem; color: #000; margin-bottom: 1.6rem } .devinfo-line { color: #333 } .devinfo-line code, code, li { color: #000 } .devinfo-line:not(:last-child) { margin-bottom: 8px } .docs-link, .contact-link { font-weight: 500 } header, footer, footer a { display: flex; justify-content: center; align-items: center } header, footer { min-height: 100px; height: 100px; } header { border-bottom: 1px solid #eaeaea; } header h1 { font-size: 1.8rem; margin: 0; font-weight: 500; } header p { font-size: 1.3rem; margin: 0; font-weight: 500; } .header-item { display: flex; padding: 0 2rem; margin: 2rem 0; text-decoration: line-through; color: #999; } .header-item.active { color: #ff0080; text-decoration: none; } .header-item.first { border-right: 1px solid #eaeaea; } .header-item-content { display: flex; flex-direction: column; } .header-item-icon { margin-right: 1rem; margin-top: 0.6rem; } footer { border-top: 1px solid #eaeaea; } footer a { color: #000 } footer a:hover { border-bottom-color: transparent } footer svg { margin-left: .8rem } @media (max-width:500px) { .devinfo-container .devinfo-line { display: flex; flex-direction: column } .devinfo-container .devinfo-line code { margin-top: .4rem } .devinfo-container .devinfo-line:not(:last-child) { margin-bottom: 1.6rem } .devinfo-container { margin-bottom: 0; } header { flex-direction: column; height: auto; min-height: auto; align-items: flex-start; } .header-item.first { border-right: none; margin-bottom: 0; } main { padding: 1rem 2rem; } body { font-size: 1.4rem; line-height: 1.55; } } </style> </head> <body> <div class="container"> ' +
247466
+ '</title> <style> html { font-size: 62.5%; box-sizing: border-box; height: -webkit-fill-available } *, ::after, ::before { box-sizing: inherit } body { font-family: "SF Pro Text", "SF Pro Icons", "Helvetica Neue", "Helvetica", "Arial", sans-serif; font-size: 1.6rem; line-height: 1.65; word-break: break-word; font-kerning: auto; font-variant: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; hyphens: auto; height: 100vh; height: -webkit-fill-available; max-height: 100vh; max-height: -webkit-fill-available; margin: 0 } ::selection { background: #79FFE1; } ::-moz-selection { background: #79FFE1; } a { cursor: pointer; color: #0070f3; text-decoration: none; transition: all .2s ease; border-bottom: 1px solid transparent } a:hover { border-bottom: 1px solid #0070f3 } ul { padding: 0; margin-left: 1.5em; list-style-type: none } li { margin-bottom: 10px } ul li:before { content: \'\\02013\' } li:before { display: inline-block; color: #ccc; position: absolute; margin-left: -18px; transition: color .2s ease } code { font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; font-size: .92em } code:after, code:before { content: \'`\' } .container { display: flex; justify-content: center; flex-direction: column; min-height: 100% } main { max-width: 80rem; padding: 4rem 6rem; margin: auto } ul { margin-bottom: 32px } .error-title { font-size: 2rem; padding-left: 22px; line-height: 1.5; margin-bottom: 24px; } .error-title-guilty { border-left: 2px solid #ED367F; } .error-title-innocent { border-left: 2px solid #59B89C; } main p { color: #333 } .devinfo-container { border: 1px solid #ddd; border-radius: 4px; padding: 2rem; display: flex; flex-direction: column; margin-bottom: 32px } .error-code { margin: 0; font-size: 1.6rem; color: #000; margin-bottom: 1.6rem } .devinfo-line { color: #333 } .devinfo-line code, code, li { color: #000 } .devinfo-line:not(:last-child) { margin-bottom: 8px } .docs-link, .contact-link { font-weight: 500 } header, footer, footer a { display: flex; justify-content: center; align-items: center } header, footer { min-height: 100px; height: 100px; } header { border-bottom: 1px solid #eaeaea; } header h1 { font-size: 1.8rem; margin: 0; font-weight: 500; } header p { font-size: 1.3rem; margin: 0; font-weight: 500; } .header-item { display: flex; padding: 0 2rem; margin: 2rem 0; text-decoration: line-through; color: #999; } .header-item.active { color: #ff0080; text-decoration: none; } .header-item.first { border-right: 1px solid #eaeaea; } .header-item-content { display: flex; flex-direction: column; } .header-item-icon { margin-right: 1rem; margin-top: 0.6rem; } footer { border-top: 1px solid #eaeaea; } footer a { color: #000 } footer a:hover { border-bottom-color: transparent } footer svg { margin-left: .8rem } .note { padding: 8pt 16pt; border-radius: 5px; border: 1px solid #0070f3; font-size: 14px; line-height: 1.8; color: #0070f3; } @media (max-width:500px) { .devinfo-container .devinfo-line code { margin-top: .4rem } .devinfo-container .devinfo-line:not(:last-child) { margin-bottom: 1.6rem } .devinfo-container { margin-bottom: 0; } header { flex-direction: column; height: auto; min-height: auto; align-items: flex-start; } .header-item.first { border-right: none; margin-bottom: 0; } main { padding: 1rem 2rem; } body { font-size: 1.4rem; line-height: 1.55; } footer { display: none; } .note { margin-top: 16px; } } </style> </head> <body> <div class="container"> ' +
247321
247467
  it.view +
247322
- ' <footer> <a href="https://vercel.com" target="_blank" rel="noopener noreferrer">Powered by <svg height="20" viewBox="0 0 131 30" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M17.0669.0 34.1338 29.5211H0L17.0669.0z" fill="#000"></path> <path d="M73.6183 15.6831C73.6183 10.932 70.1127 7.61091 65.0849 7.61091 60.057 7.61091 56.5514 10.932 56.5514 15.6831 56.5514 20.3419 60.3338 23.7553 65.5461 23.7553 68.406 23.7553 70.9891 22.6944 72.6497 20.757L69.513 18.9581C68.5444 19.9268 67.1144 20.5264 65.5461 20.5264 63.2398 20.5264 61.2563 19.281 60.5644 17.3898L60.4261 17.0669H73.4799C73.5722 16.6056 73.6183 16.1444 73.6183 15.6831zM60.3799 14.2993 60.4722 14.0225C61.0718 12.0391 62.8246 10.8398 65.0387 10.8398 67.2989 10.8398 69.0056 12.0391 69.6053 14.0225L69.6975 14.2993H60.3799z" fill="#000"></path> <path d="M123.297 15.6831C123.297 10.932 119.791 7.61091 114.763 7.61091 109.736 7.61091 106.23 10.932 106.23 15.6831 106.23 20.3419 110.012 23.7553 115.225 23.7553 118.085 23.7553 120.668 22.6944 122.328 20.757L119.192 18.9581C118.223 19.9268 116.793 20.5264 115.225 20.5264 112.918 20.5264 110.935 19.281 110.243 17.3898L110.105 17.0669H123.158C123.251 16.6056 123.297 16.1444 123.297 15.6831zM110.058 14.2993 110.151 14.0225C110.75 12.0391 112.503 10.8398 114.717 10.8398 116.977 10.8398 118.684 12.0391 119.284 14.0225L119.376 14.2993H110.058z" fill="#000"></path> <path d="M101.156 13.0539 104.293 11.2549C102.817 8.94858 100.187 7.65703 97.0046 7.65703 91.9768 7.65703 88.4711 10.9782 88.4711 15.7292 88.4711 20.4803 91.9768 23.8014 97.0046 23.8014 100.187 23.8014 102.817 22.5098 104.293 20.2035L101.156 18.4046C100.326 19.7884 98.8497 20.5725 97.0046 20.5725 94.0986 20.5725 92.1613 18.6352 92.1613 15.7292 92.1613 12.8232 94.0986 10.8859 97.0046 10.8859 98.8035 10.8859 100.326 11.6701 101.156 13.0539z" fill="#000"></path> <path d="M130.216 2.5831H126.526V23.3401H130.216V2.5831z" fill="#000"></path> <path d="M59.2729 2.5831H55.0292L46.9109 16.6056 38.7926 2.5831H34.5028L46.9109 23.9859 59.2729 2.5831z" fill="#000"></path> <path d="M85.3806 11.9007C85.7958 11.9007 86.2109 11.9468 86.6261 12.0391V8.1183C83.4894 8.21056 80.5373 9.96338 80.5373 12.1313V8.1183H76.8472V23.3401H80.5373V16.744C80.5373 13.8841 82.5208 11.9007 85.3806 11.9007z" fill="#000"></path> </svg> </a> </footer> </div> </body></html>';
247468
+ ' </div> </body></html>';
247323
247469
  return out;
247324
247470
  }
247325
247471
  exports.default = error_base;
@@ -249335,7 +249481,7 @@ class DeploymentNotFound extends now_error_1.NowError {
249335
249481
  super({
249336
249482
  code: 'DEPLOYMENT_NOT_FOUND',
249337
249483
  meta: { id, context },
249338
- message: `Can't find the deployment ${id} under the context ${context}`,
249484
+ message: `Can't find the deployment "${id}" under the context "${context}"`,
249339
249485
  });
249340
249486
  }
249341
249487
  }
@@ -251057,7 +251203,7 @@ class Now extends events_1.default {
251057
251203
  const { key } = error;
251058
251204
  err.message =
251059
251205
  `The env key ${key} has an invalid type: ${typeof env[key]}. ` +
251060
- 'Please supply a String or a Number (https://err.sh/vercel-cli/env-value-invalid-type)';
251206
+ 'Please supply a String or a Number (https://err.sh/vercel/env-value-invalid-type)';
251061
251207
  }
251062
251208
  else if (code === 'unreferenced_build_specifications') {
251063
251209
  const count = unreferencedBuildSpecs.length;
@@ -252483,7 +252629,11 @@ const link_1 = __webpack_require__(67630);
252483
252629
  * error, otherwise an object containing the org an project
252484
252630
  */
252485
252631
  async function ensureLink(commandName, client, cwd, opts) {
252486
- let link = await (0, link_1.getLinkedProject)(client, cwd);
252632
+ let { link } = opts;
252633
+ if (!link) {
252634
+ link = await (0, link_1.getLinkedProject)(client, cwd);
252635
+ opts.link = link;
252636
+ }
252487
252637
  if ((link.status === 'linked' && opts.forceDelete) ||
252488
252638
  link.status === 'not_linked') {
252489
252639
  link = await (0, setup_and_link_1.default)(client, cwd, opts);
@@ -252533,7 +252683,7 @@ const stamp_1 = __importDefault(__webpack_require__(92205));
252533
252683
  const create_deploy_1 = __importDefault(__webpack_require__(80974));
252534
252684
  const index_1 = __importDefault(__webpack_require__(60487));
252535
252685
  const errors_ts_1 = __webpack_require__(60156);
252536
- async function setupAndLink(client, path, { forceDelete = false, autoConfirm = false, successEmoji = 'link', setupMsg = 'Set up', projectName, }) {
252686
+ async function setupAndLink(client, path, { autoConfirm = false, forceDelete = false, link, successEmoji = 'link', setupMsg = 'Set up', projectName, }) {
252537
252687
  const { localConfig, output, config } = client;
252538
252688
  const debug = output.isDebugEnabled();
252539
252689
  const isFile = !(0, global_path_1.isDirectory)(path);
@@ -252541,7 +252691,9 @@ async function setupAndLink(client, path, { forceDelete = false, autoConfirm = f
252541
252691
  output.error(`Expected directory but found file: ${path}`);
252542
252692
  return { status: 'error', exitCode: 1, reason: 'PATH_IS_FILE' };
252543
252693
  }
252544
- const link = await (0, link_1.getLinkedProject)(client, path);
252694
+ if (!link) {
252695
+ link = await (0, link_1.getLinkedProject)(client, path);
252696
+ }
252545
252697
  const isTTY = client.stdin.isTTY;
252546
252698
  const quiet = !isTTY;
252547
252699
  let rootDirectory = null;
@@ -254619,9 +254771,7 @@ async function getLinkedProject(client, path) {
254619
254771
  })})\n`);
254620
254772
  return { status: 'error', exitCode: 1 };
254621
254773
  }
254622
- else {
254623
- output.print((0, emoji_1.prependEmoji)('Your Project was either deleted, transferred to a new Team, or you don’t have access to it anymore.\n', (0, emoji_1.emoji)('warning')));
254624
- }
254774
+ output.print((0, emoji_1.prependEmoji)('Your Project was either deleted, transferred to a new Team, or you don’t have access to it anymore.\n', (0, emoji_1.emoji)('warning')));
254625
254775
  return { status: 'not_linked', org: null, project: null };
254626
254776
  }
254627
254777
  return { status: 'linked', org, project };
@@ -255028,6 +255178,300 @@ async function responseError(res, fallbackMessage = null, parsedBody = {}) {
255028
255178
  exports.default = responseError;
255029
255179
 
255030
255180
 
255181
+ /***/ }),
255182
+
255183
+ /***/ 48752:
255184
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
255185
+
255186
+ "use strict";
255187
+
255188
+ var __importDefault = (this && this.__importDefault) || function (mod) {
255189
+ return (mod && mod.__esModule) ? mod : { "default": mod };
255190
+ };
255191
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
255192
+ const get_deployment_by_id_or_host_1 = __importDefault(__webpack_require__(71698));
255193
+ const handle_cert_error_1 = __importDefault(__webpack_require__(65214));
255194
+ /**
255195
+ * Attempts to find the deployment by name or id.
255196
+ * @param {Client} client - The Vercel client instance
255197
+ * @param {string} contextName - The scope name
255198
+ * @param {string} deployId - The deployment name or id to rollback
255199
+ * @returns {Promise<Deployment>} Resolves an exit code or deployment info
255200
+ */
255201
+ async function getDeploymentInfo(client, contextName, deployId) {
255202
+ const deployment = (0, handle_cert_error_1.default)(client.output, await (0, get_deployment_by_id_or_host_1.default)(client, contextName, deployId));
255203
+ if (deployment === 1) {
255204
+ throw new Error(`Failed to get deployment "${deployId}" in scope "${contextName}"`);
255205
+ }
255206
+ if (deployment instanceof Error) {
255207
+ throw deployment;
255208
+ }
255209
+ if (!deployment) {
255210
+ throw new Error(`Couldn't find the deployment "${deployId}"`);
255211
+ }
255212
+ return deployment;
255213
+ }
255214
+ exports.default = getDeploymentInfo;
255215
+
255216
+
255217
+ /***/ }),
255218
+
255219
+ /***/ 85248:
255220
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
255221
+
255222
+ "use strict";
255223
+
255224
+ var __importDefault = (this && this.__importDefault) || function (mod) {
255225
+ return (mod && mod.__esModule) ? mod : { "default": mod };
255226
+ };
255227
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
255228
+ const chalk_1 = __importDefault(__webpack_require__(961));
255229
+ /**
255230
+ * Stylize the alias status label.
255231
+ * @param {AliasStatus} status - The status label
255232
+ * @returns {string}
255233
+ */
255234
+ function renderAliasStatus(status) {
255235
+ if (status === 'completed') {
255236
+ return chalk_1.default.green(status);
255237
+ }
255238
+ if (status === 'failed') {
255239
+ return chalk_1.default.red(status);
255240
+ }
255241
+ if (status === 'skipped') {
255242
+ return chalk_1.default.gray(status);
255243
+ }
255244
+ return chalk_1.default.yellow(status);
255245
+ }
255246
+ exports.default = renderAliasStatus;
255247
+
255248
+
255249
+ /***/ }),
255250
+
255251
+ /***/ 96011:
255252
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
255253
+
255254
+ "use strict";
255255
+
255256
+ var __importDefault = (this && this.__importDefault) || function (mod) {
255257
+ return (mod && mod.__esModule) ? mod : { "default": mod };
255258
+ };
255259
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
255260
+ const chalk_1 = __importDefault(__webpack_require__(961));
255261
+ const pkg_name_1 = __webpack_require__(98106);
255262
+ const get_deployment_info_1 = __importDefault(__webpack_require__(48752));
255263
+ const get_scope_1 = __importDefault(__webpack_require__(73389));
255264
+ const is_valid_name_1 = __webpack_require__(31315);
255265
+ const ms_1 = __importDefault(__webpack_require__(80040));
255266
+ const status_1 = __importDefault(__webpack_require__(76939));
255267
+ /**
255268
+ * Requests a rollback and waits for it complete.
255269
+ * @param {Client} client - The Vercel client instance
255270
+ * @param {string} deployId - The deployment name or id to rollback
255271
+ * @param {Project} project - Project info instance
255272
+ * @param {string} [timeout] - Time to poll for succeeded/failed state
255273
+ * @returns {Promise<number>} Resolves an exit code; 0 on success
255274
+ */
255275
+ async function requestRollback({ client, deployId, project, timeout, }) {
255276
+ const { output } = client;
255277
+ const { contextName } = await (0, get_scope_1.default)(client);
255278
+ if (!(0, is_valid_name_1.isValidName)(deployId)) {
255279
+ output.error(`The provided argument "${deployId}" is not a valid deployment or project`);
255280
+ return 1;
255281
+ }
255282
+ output.spinner(`Fetching deployment "${deployId}" in ${chalk_1.default.bold(contextName)}…`);
255283
+ let deployment;
255284
+ try {
255285
+ deployment = await (0, get_deployment_info_1.default)(client, contextName, deployId);
255286
+ }
255287
+ catch (err) {
255288
+ output.error(err?.toString() || err);
255289
+ return 1;
255290
+ }
255291
+ finally {
255292
+ output.stopSpinner();
255293
+ // re-render the spinner text because it goes so fast
255294
+ output.log(`Fetching deployment "${deployId}" in ${chalk_1.default.bold(contextName)}…`);
255295
+ }
255296
+ // create the rollback
255297
+ await client.fetch(`/v9/projects/${project.id}/rollback/${deployment.uid}`, {
255298
+ body: {},
255299
+ method: 'POST',
255300
+ });
255301
+ if (timeout !== undefined && (0, ms_1.default)(timeout) === 0) {
255302
+ output.log(`Successfully requested rollback of ${chalk_1.default.bold(project.name)} to ${deployment.url} (${deployment.uid})`);
255303
+ output.log(`To check rollback status, run ${(0, pkg_name_1.getCommandName)('rollback')}.`);
255304
+ return 0;
255305
+ }
255306
+ // check the status
255307
+ return await (0, status_1.default)({
255308
+ client,
255309
+ contextName,
255310
+ deployment,
255311
+ project,
255312
+ timeout,
255313
+ });
255314
+ }
255315
+ exports.default = requestRollback;
255316
+
255317
+
255318
+ /***/ }),
255319
+
255320
+ /***/ 76939:
255321
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
255322
+
255323
+ "use strict";
255324
+
255325
+ var __importDefault = (this && this.__importDefault) || function (mod) {
255326
+ return (mod && mod.__esModule) ? mod : { "default": mod };
255327
+ };
255328
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
255329
+ const chalk_1 = __importDefault(__webpack_require__(961));
255330
+ const elapsed_1 = __importDefault(__webpack_require__(65303));
255331
+ const format_date_1 = __importDefault(__webpack_require__(17215));
255332
+ const get_deployment_info_1 = __importDefault(__webpack_require__(48752));
255333
+ const get_scope_1 = __importDefault(__webpack_require__(73389));
255334
+ const ms_1 = __importDefault(__webpack_require__(80040));
255335
+ const render_alias_status_1 = __importDefault(__webpack_require__(85248));
255336
+ const sleep_1 = __importDefault(__webpack_require__(35873));
255337
+ /**
255338
+ * Continuously checks a deployment status until it has succeeded, failed, or
255339
+ * taken longer than the timeout (default 3 minutes).
255340
+ * @param {Client} client - The Vercel client instance
255341
+ * @param {string} [contextName] - The scope name; if not specified, it will be
255342
+ * extracted from the `client`
255343
+ * @param {Deployment} [deployment] - Info about the deployment which is used
255344
+ * to display different output following a rollback request
255345
+ * @param {Project} project - Project info instance
255346
+ * @param {string} [timeout] - Milliseconds to poll for succeeded/failed state
255347
+ * @returns {Promise<number>} Resolves an exit code; 0 on success
255348
+ */
255349
+ async function rollbackStatus({ client, contextName, deployment, project, timeout = '3m', }) {
255350
+ const { output } = client;
255351
+ const recentThreshold = Date.now() - (0, ms_1.default)('3m');
255352
+ const rollbackTimeout = Date.now() + (0, ms_1.default)(timeout);
255353
+ let counter = 0;
255354
+ let spinnerMessage = deployment
255355
+ ? 'Rollback in progress'
255356
+ : `Checking rollback status of ${project.name}`;
255357
+ const check = async () => {
255358
+ const { lastRollbackTarget } = await client.fetch(`/v9/projects/${project.id}?rollbackInfo=true`);
255359
+ return lastRollbackTarget;
255360
+ };
255361
+ if (!contextName) {
255362
+ ({ contextName } = await (0, get_scope_1.default)(client));
255363
+ }
255364
+ try {
255365
+ output.spinner(`${spinnerMessage}…`);
255366
+ // continuously loop until the rollback has explicitly succeeded, failed,
255367
+ // or timed out
255368
+ for (;;) {
255369
+ const { jobStatus, requestedAt, toDeploymentId } = (await check()) ?? {};
255370
+ if (!jobStatus ||
255371
+ (jobStatus !== 'in-progress' && jobStatus !== 'pending')) {
255372
+ output.stopSpinner();
255373
+ output.log(`${spinnerMessage}…`);
255374
+ }
255375
+ if (!jobStatus || requestedAt < recentThreshold) {
255376
+ output.log('No deployment rollback in progress');
255377
+ return 0;
255378
+ }
255379
+ if (jobStatus === 'skipped') {
255380
+ output.log('Rollback was skipped');
255381
+ return 0;
255382
+ }
255383
+ if (jobStatus === 'succeeded') {
255384
+ return await renderJobSucceeded({
255385
+ client,
255386
+ contextName,
255387
+ performingRollback: !!deployment,
255388
+ requestedAt,
255389
+ project,
255390
+ toDeploymentId,
255391
+ });
255392
+ }
255393
+ if (jobStatus === 'failed') {
255394
+ return await renderJobFailed({
255395
+ client,
255396
+ contextName,
255397
+ deployment,
255398
+ project,
255399
+ toDeploymentId,
255400
+ });
255401
+ }
255402
+ // lastly, if we're not pending/in-progress, then we don't know what
255403
+ // the status is, so bail
255404
+ if (jobStatus !== 'pending' && jobStatus !== 'in-progress') {
255405
+ output.log(`Unknown rollback status "${jobStatus}"`);
255406
+ return 1;
255407
+ }
255408
+ // check if we have been running for too long
255409
+ if (requestedAt < recentThreshold || Date.now() >= rollbackTimeout) {
255410
+ output.log(`The rollback exceeded its deadline - rerun ${chalk_1.default.bold(`vercel rollback ${toDeploymentId}`)} to try again`);
255411
+ return 1;
255412
+ }
255413
+ // if we've done our first poll and not rolling back, then print the
255414
+ // requested at date/time
255415
+ if (counter++ === 0 && !deployment) {
255416
+ spinnerMessage += ` requested at ${(0, format_date_1.default)(requestedAt)}`;
255417
+ }
255418
+ output.spinner(`${spinnerMessage}…`);
255419
+ await (0, sleep_1.default)(250);
255420
+ }
255421
+ }
255422
+ finally {
255423
+ output.stopSpinner();
255424
+ }
255425
+ }
255426
+ exports.default = rollbackStatus;
255427
+ async function renderJobFailed({ client, contextName, deployment, project, toDeploymentId, }) {
255428
+ const { output } = client;
255429
+ try {
255430
+ const name = (deployment ||
255431
+ (await (0, get_deployment_info_1.default)(client, contextName, toDeploymentId)))?.url;
255432
+ output.error(`Failed to remap all aliases to the requested deployment ${name} (${toDeploymentId})`);
255433
+ }
255434
+ catch (e) {
255435
+ output.error(`Failed to remap all aliases to the requested deployment ${toDeploymentId}`);
255436
+ }
255437
+ // aliases are paginated, so continuously loop until all of them have been
255438
+ // fetched
255439
+ let nextTimestamp;
255440
+ for (;;) {
255441
+ let url = `/v9/projects/${project.id}/rollback/aliases?failedOnly=true&limit=20`;
255442
+ if (nextTimestamp) {
255443
+ url += `&until=${nextTimestamp}`;
255444
+ }
255445
+ const { aliases, pagination } = await client.fetch(url);
255446
+ for (const { alias, status } of aliases) {
255447
+ output.log(` ${(0, render_alias_status_1.default)(status).padEnd(11)} ${alias.alias} (${alias.deploymentId})`);
255448
+ }
255449
+ if (pagination?.next) {
255450
+ nextTimestamp = pagination.next;
255451
+ }
255452
+ else {
255453
+ break;
255454
+ }
255455
+ }
255456
+ return 1;
255457
+ }
255458
+ async function renderJobSucceeded({ client, contextName, performingRollback, project, requestedAt, toDeploymentId, }) {
255459
+ const { output } = client;
255460
+ let deploymentInfo = '';
255461
+ try {
255462
+ const deployment = await (0, get_deployment_info_1.default)(client, contextName, toDeploymentId);
255463
+ deploymentInfo = `${chalk_1.default.bold(deployment.url)} (${toDeploymentId})`;
255464
+ }
255465
+ catch (err) {
255466
+ output.debug(`Failed to get deployment url for ${toDeploymentId}: ${err?.toString() || err}`);
255467
+ deploymentInfo = chalk_1.default.bold(toDeploymentId);
255468
+ }
255469
+ const duration = performingRollback ? (0, elapsed_1.default)(Date.now() - requestedAt) : '';
255470
+ output.log(`Success! ${chalk_1.default.bold(project.name)} was rolled back to ${deploymentInfo} ${duration}`);
255471
+ return 0;
255472
+ }
255473
+
255474
+
255031
255475
  /***/ }),
255032
255476
 
255033
255477
  /***/ 35873:
@@ -255862,7 +256306,7 @@ module.exports = JSON.parse("{\"application/1d-interleaved-parityfec\":{\"source
255862
256306
  /***/ ((module) => {
255863
256307
 
255864
256308
  "use strict";
255865
- module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"28.5.6\",\"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 --bail\",\"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.5.9\",\"@vercel/go\":\"2.2.17\",\"@vercel/hydrogen\":\"0.0.31\",\"@vercel/next\":\"3.2.13\",\"@vercel/node\":\"2.6.4\",\"@vercel/python\":\"3.1.27\",\"@vercel/redwood\":\"1.0.37\",\"@vercel/remix\":\"1.0.37\",\"@vercel/ruby\":\"1.3.43\",\"@vercel/static-build\":\"1.0.39\",\"json5\":\"2.2.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\",\"@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\":\"14.18.33\",\"@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.19\",\"@vercel/error-utils\":\"1.0.3\",\"@vercel/frameworks\":\"1.1.12\",\"@vercel/fs-detectors\":\"3.5.2\",\"@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\",\"line-async-iterator\":\"3.0.0\",\"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\",\"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\"]}}");
256309
+ module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"28.7.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 --bail\",\"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.6.0\",\"@vercel/go\":\"2.2.18\",\"@vercel/hydrogen\":\"0.0.32\",\"@vercel/next\":\"3.3.1\",\"@vercel/node\":\"2.7.0\",\"@vercel/python\":\"3.1.28\",\"@vercel/redwood\":\"1.0.38\",\"@vercel/remix\":\"1.1.0\",\"@vercel/ruby\":\"1.3.44\",\"@vercel/static-build\":\"1.0.41\",\"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\":\"14.18.33\",\"@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.20\",\"@vercel/error-utils\":\"1.0.3\",\"@vercel/frameworks\":\"1.1.14\",\"@vercel/fs-detectors\":\"3.5.4\",\"@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\",\"json5\":\"2.2.1\",\"jsonlines\":\"0.1.1\",\"line-async-iterator\":\"3.0.0\",\"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\",\"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\"]}}");
255866
256310
 
255867
256311
  /***/ }),
255868
256312
 
@@ -255870,7 +256314,7 @@ module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"28.5.6\",\"prefe
255870
256314
  /***/ ((module) => {
255871
256315
 
255872
256316
  "use strict";
255873
- module.exports = JSON.parse("{\"name\":\"@vercel/client\",\"version\":\"12.2.19\",\"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\":\"14.18.33\",\"@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.5.9\",\"@vercel/routing-utils\":\"2.1.3\",\"@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\"}}");
256317
+ module.exports = JSON.parse("{\"name\":\"@vercel/client\",\"version\":\"12.2.20\",\"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\":\"14.18.33\",\"@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.6.0\",\"@vercel/routing-utils\":\"2.1.3\",\"@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\"}}");
255874
256318
 
255875
256319
  /***/ }),
255876
256320
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vercel",
3
- "version": "28.5.6",
3
+ "version": "28.7.0",
4
4
  "preferGlobal": true,
5
5
  "license": "Apache-2.0",
6
6
  "description": "The command-line interface for Vercel",
@@ -41,17 +41,16 @@
41
41
  "node": ">= 14"
42
42
  },
43
43
  "dependencies": {
44
- "@vercel/build-utils": "5.5.9",
45
- "@vercel/go": "2.2.17",
46
- "@vercel/hydrogen": "0.0.31",
47
- "@vercel/next": "3.2.13",
48
- "@vercel/node": "2.6.4",
49
- "@vercel/python": "3.1.27",
50
- "@vercel/redwood": "1.0.37",
51
- "@vercel/remix": "1.0.37",
52
- "@vercel/ruby": "1.3.43",
53
- "@vercel/static-build": "1.0.39",
54
- "json5": "2.2.1",
44
+ "@vercel/build-utils": "5.6.0",
45
+ "@vercel/go": "2.2.18",
46
+ "@vercel/hydrogen": "0.0.32",
47
+ "@vercel/next": "3.3.1",
48
+ "@vercel/node": "2.7.0",
49
+ "@vercel/python": "3.1.28",
50
+ "@vercel/redwood": "1.0.38",
51
+ "@vercel/remix": "1.1.0",
52
+ "@vercel/ruby": "1.3.44",
53
+ "@vercel/static-build": "1.0.41",
55
54
  "update-notifier": "5.1.0"
56
55
  },
57
56
  "devDependencies": {
@@ -96,10 +95,10 @@
96
95
  "@types/which": "1.3.2",
97
96
  "@types/write-json-file": "2.2.1",
98
97
  "@types/yauzl-promise": "2.1.0",
99
- "@vercel/client": "12.2.19",
98
+ "@vercel/client": "12.2.20",
100
99
  "@vercel/error-utils": "1.0.3",
101
- "@vercel/frameworks": "1.1.12",
102
- "@vercel/fs-detectors": "3.5.2",
100
+ "@vercel/frameworks": "1.1.14",
101
+ "@vercel/fs-detectors": "3.5.4",
103
102
  "@vercel/fun": "1.0.4",
104
103
  "@vercel/ncc": "0.24.0",
105
104
  "@zeit/source-map-support": "0.6.2",
@@ -142,6 +141,7 @@
142
141
  "is-port-reachable": "3.1.0",
143
142
  "is-url": "1.2.2",
144
143
  "jaro-winkler": "0.2.8",
144
+ "json5": "2.2.1",
145
145
  "jsonlines": "0.1.1",
146
146
  "line-async-iterator": "3.0.0",
147
147
  "load-json-file": "3.0.0",
@@ -195,5 +195,5 @@
195
195
  "<rootDir>/test/**/*.test.ts"
196
196
  ]
197
197
  },
198
- "gitHead": "7003531d5db7895fc3b2fa940c2d83b6e75bbd9e"
198
+ "gitHead": "a036b033986a99061a9678efec033b9a7cbdfd4e"
199
199
  }