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.
- package/README.md +2 -0
- package/dist/index.js +540 -96
- 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,
|
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 =
|
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,
|
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 =
|
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
|
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,
|
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
|
-
/******/
|
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
|
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: '
|
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: '^/
|
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>
|
247174
|
-
|
247175
|
-
|
247176
|
-
|
247177
|
-
|
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 = '<
|
247240
|
-
|
247241
|
-
|
247242
|
-
|
247243
|
-
|
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:
|
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
|
-
'
|
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
|
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 =
|
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, {
|
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
|
-
|
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
|
-
|
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.
|
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.
|
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.
|
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.
|
45
|
-
"@vercel/go": "2.2.
|
46
|
-
"@vercel/hydrogen": "0.0.
|
47
|
-
"@vercel/next": "3.
|
48
|
-
"@vercel/node": "2.
|
49
|
-
"@vercel/python": "3.1.
|
50
|
-
"@vercel/redwood": "1.0.
|
51
|
-
"@vercel/remix": "1.0
|
52
|
-
"@vercel/ruby": "1.3.
|
53
|
-
"@vercel/static-build": "1.0.
|
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.
|
98
|
+
"@vercel/client": "12.2.20",
|
100
99
|
"@vercel/error-utils": "1.0.3",
|
101
|
-
"@vercel/frameworks": "1.1.
|
102
|
-
"@vercel/fs-detectors": "3.5.
|
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": "
|
198
|
+
"gitHead": "a036b033986a99061a9678efec033b9a7cbdfd4e"
|
199
199
|
}
|