vercel 25.1.1-canary.0 → 25.1.1-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +533 -66
  2. package/package.json +17 -14
package/dist/index.js CHANGED
@@ -68574,6 +68574,87 @@ module.exports.array = (stream, options) => getStream(stream, Object.assign({},
68574
68574
  module.exports.MaxBufferError = MaxBufferError;
68575
68575
 
68576
68576
 
68577
+ /***/ }),
68578
+
68579
+ /***/ 13495:
68580
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
68581
+
68582
+ const process = __webpack_require__(63129),
68583
+ splitCharacter = '<##>'
68584
+
68585
+ const executeCommand = (command, options, callback) => {
68586
+ let dst = __dirname
68587
+
68588
+ if(!!options && options.dst) {
68589
+ dst = options.dst
68590
+ }
68591
+
68592
+ process.exec(command, {cwd: dst}, function(err, stdout, stderr) {
68593
+ if (stdout === '') {
68594
+ callback('this does not look like a git repo')
68595
+ return
68596
+ }
68597
+
68598
+ if (stderr) {
68599
+ callback(stderr)
68600
+ return
68601
+ }
68602
+
68603
+ callback(null, stdout)
68604
+ })
68605
+ }
68606
+
68607
+ const prettyFormat = ["%h", "%H", "%s", "%f", "%b", "%at", "%ct", "%an", "%ae", "%cn", "%ce", "%N", ""]
68608
+
68609
+ const getCommandString = splitCharacter =>
68610
+ 'git log -1 --pretty=format:"' + prettyFormat.join(splitCharacter) +'"' +
68611
+ ' && git rev-parse --abbrev-ref HEAD' +
68612
+ ' && git tag --contains HEAD'
68613
+
68614
+ const getLastCommit = (callback, options) => {
68615
+ const command = getCommandString(splitCharacter)
68616
+
68617
+ executeCommand(command, options, function(err, res) {
68618
+ if (err) {
68619
+ callback(err)
68620
+ return
68621
+ }
68622
+
68623
+ var a = res.split(splitCharacter)
68624
+
68625
+ // e.g. master\n or master\nv1.1\n or master\nv1.1\nv1.2\n
68626
+ var branchAndTags = a[a.length-1].split('\n').filter(n => n)
68627
+ var branch = branchAndTags[0]
68628
+ var tags = branchAndTags.slice(1)
68629
+
68630
+ callback(null, {
68631
+ shortHash: a[0],
68632
+ hash: a[1],
68633
+ subject: a[2],
68634
+ sanitizedSubject: a[3],
68635
+ body: a[4],
68636
+ authoredOn: a[5],
68637
+ committedOn: a[6],
68638
+ author: {
68639
+ name: a[7],
68640
+ email: a[8],
68641
+ },
68642
+ committer: {
68643
+ name: a[9],
68644
+ email: a[10]
68645
+ },
68646
+ notes: a[11],
68647
+ branch,
68648
+ tags
68649
+ })
68650
+ })
68651
+ }
68652
+
68653
+ module.exports = {
68654
+ getLastCommit
68655
+ }
68656
+
68657
+
68577
68658
  /***/ }),
68578
68659
 
68579
68660
  /***/ 97507:
@@ -212193,6 +212274,241 @@ module.exports = (flag, argv = process.argv) => {
212193
212274
  };
212194
212275
 
212195
212276
 
212277
+ /***/ }),
212278
+
212279
+ /***/ 61967:
212280
+ /***/ ((module) => {
212281
+
212282
+ const { hasOwnProperty } = Object.prototype
212283
+
212284
+ /* istanbul ignore next */
212285
+ const eol = typeof process !== 'undefined' &&
212286
+ process.platform === 'win32' ? '\r\n' : '\n'
212287
+
212288
+ const encode = (obj, opt) => {
212289
+ const children = []
212290
+ let out = ''
212291
+
212292
+ if (typeof opt === 'string') {
212293
+ opt = {
212294
+ section: opt,
212295
+ whitespace: false,
212296
+ }
212297
+ } else {
212298
+ opt = opt || Object.create(null)
212299
+ opt.whitespace = opt.whitespace === true
212300
+ }
212301
+
212302
+ const separator = opt.whitespace ? ' = ' : '='
212303
+
212304
+ for (const k of Object.keys(obj)) {
212305
+ const val = obj[k]
212306
+ if (val && Array.isArray(val)) {
212307
+ for (const item of val) {
212308
+ out += safe(k + '[]') + separator + safe(item) + eol
212309
+ }
212310
+ } else if (val && typeof val === 'object') {
212311
+ children.push(k)
212312
+ } else {
212313
+ out += safe(k) + separator + safe(val) + eol
212314
+ }
212315
+ }
212316
+
212317
+ if (opt.section && out.length) {
212318
+ out = '[' + safe(opt.section) + ']' + eol + out
212319
+ }
212320
+
212321
+ for (const k of children) {
212322
+ const nk = dotSplit(k).join('\\.')
212323
+ const section = (opt.section ? opt.section + '.' : '') + nk
212324
+ const { whitespace } = opt
212325
+ const child = encode(obj[k], {
212326
+ section,
212327
+ whitespace,
212328
+ })
212329
+ if (out.length && child.length) {
212330
+ out += eol
212331
+ }
212332
+
212333
+ out += child
212334
+ }
212335
+
212336
+ return out
212337
+ }
212338
+
212339
+ const dotSplit = str =>
212340
+ str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002')
212341
+ .replace(/\\\./g, '\u0001')
212342
+ .split(/\./)
212343
+ .map(part =>
212344
+ part.replace(/\1/g, '\\.')
212345
+ .replace(/\2LITERAL\\1LITERAL\2/g, '\u0001'))
212346
+
212347
+ const decode = str => {
212348
+ const out = Object.create(null)
212349
+ let p = out
212350
+ let section = null
212351
+ // section |key = value
212352
+ const re = /^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i
212353
+ const lines = str.split(/[\r\n]+/g)
212354
+
212355
+ for (const line of lines) {
212356
+ if (!line || line.match(/^\s*[;#]/)) {
212357
+ continue
212358
+ }
212359
+ const match = line.match(re)
212360
+ if (!match) {
212361
+ continue
212362
+ }
212363
+ if (match[1] !== undefined) {
212364
+ section = unsafe(match[1])
212365
+ if (section === '__proto__') {
212366
+ // not allowed
212367
+ // keep parsing the section, but don't attach it.
212368
+ p = Object.create(null)
212369
+ continue
212370
+ }
212371
+ p = out[section] = out[section] || Object.create(null)
212372
+ continue
212373
+ }
212374
+ const keyRaw = unsafe(match[2])
212375
+ const isArray = keyRaw.length > 2 && keyRaw.slice(-2) === '[]'
212376
+ const key = isArray ? keyRaw.slice(0, -2) : keyRaw
212377
+ if (key === '__proto__') {
212378
+ continue
212379
+ }
212380
+ const valueRaw = match[3] ? unsafe(match[4]) : true
212381
+ const value = valueRaw === 'true' ||
212382
+ valueRaw === 'false' ||
212383
+ valueRaw === 'null' ? JSON.parse(valueRaw)
212384
+ : valueRaw
212385
+
212386
+ // Convert keys with '[]' suffix to an array
212387
+ if (isArray) {
212388
+ if (!hasOwnProperty.call(p, key)) {
212389
+ p[key] = []
212390
+ } else if (!Array.isArray(p[key])) {
212391
+ p[key] = [p[key]]
212392
+ }
212393
+ }
212394
+
212395
+ // safeguard against resetting a previously defined
212396
+ // array by accidentally forgetting the brackets
212397
+ if (Array.isArray(p[key])) {
212398
+ p[key].push(value)
212399
+ } else {
212400
+ p[key] = value
212401
+ }
212402
+ }
212403
+
212404
+ // {a:{y:1},"a.b":{x:2}} --> {a:{y:1,b:{x:2}}}
212405
+ // use a filter to return the keys that have to be deleted.
212406
+ const remove = []
212407
+ for (const k of Object.keys(out)) {
212408
+ if (!hasOwnProperty.call(out, k) ||
212409
+ typeof out[k] !== 'object' ||
212410
+ Array.isArray(out[k])) {
212411
+ continue
212412
+ }
212413
+
212414
+ // see if the parent section is also an object.
212415
+ // if so, add it to that, and mark this one for deletion
212416
+ const parts = dotSplit(k)
212417
+ p = out
212418
+ const l = parts.pop()
212419
+ const nl = l.replace(/\\\./g, '.')
212420
+ for (const part of parts) {
212421
+ if (part === '__proto__') {
212422
+ continue
212423
+ }
212424
+ if (!hasOwnProperty.call(p, part) || typeof p[part] !== 'object') {
212425
+ p[part] = Object.create(null)
212426
+ }
212427
+ p = p[part]
212428
+ }
212429
+ if (p === out && nl === l) {
212430
+ continue
212431
+ }
212432
+
212433
+ p[nl] = out[k]
212434
+ remove.push(k)
212435
+ }
212436
+ for (const del of remove) {
212437
+ delete out[del]
212438
+ }
212439
+
212440
+ return out
212441
+ }
212442
+
212443
+ const isQuoted = val => {
212444
+ return (val.startsWith('"') && val.endsWith('"')) ||
212445
+ (val.startsWith("'") && val.endsWith("'"))
212446
+ }
212447
+
212448
+ const safe = val => {
212449
+ if (
212450
+ typeof val !== 'string' ||
212451
+ val.match(/[=\r\n]/) ||
212452
+ val.match(/^\[/) ||
212453
+ (val.length > 1 && isQuoted(val)) ||
212454
+ val !== val.trim()
212455
+ ) {
212456
+ return JSON.stringify(val)
212457
+ }
212458
+ return val.split(';').join('\\;').split('#').join('\\#')
212459
+ }
212460
+
212461
+ const unsafe = (val, doUnesc) => {
212462
+ val = (val || '').trim()
212463
+ if (isQuoted(val)) {
212464
+ // remove the single quotes before calling JSON.parse
212465
+ if (val.charAt(0) === "'") {
212466
+ val = val.slice(1, -1)
212467
+ }
212468
+ try {
212469
+ val = JSON.parse(val)
212470
+ } catch (_) {}
212471
+ } else {
212472
+ // walk the val to find the first not-escaped ; character
212473
+ let esc = false
212474
+ let unesc = ''
212475
+ for (let i = 0, l = val.length; i < l; i++) {
212476
+ const c = val.charAt(i)
212477
+ if (esc) {
212478
+ if ('\\;#'.indexOf(c) !== -1) {
212479
+ unesc += c
212480
+ } else {
212481
+ unesc += '\\' + c
212482
+ }
212483
+
212484
+ esc = false
212485
+ } else if (';#'.indexOf(c) !== -1) {
212486
+ break
212487
+ } else if (c === '\\') {
212488
+ esc = true
212489
+ } else {
212490
+ unesc += c
212491
+ }
212492
+ }
212493
+ if (esc) {
212494
+ unesc += '\\'
212495
+ }
212496
+
212497
+ return unesc.trim()
212498
+ }
212499
+ return val
212500
+ }
212501
+
212502
+ module.exports = {
212503
+ parse: decode,
212504
+ decode,
212505
+ stringify: encode,
212506
+ encode,
212507
+ safe,
212508
+ unsafe,
212509
+ }
212510
+
212511
+
212196
212512
  /***/ }),
212197
212513
 
212198
212514
  /***/ 16337:
@@ -231158,15 +231474,29 @@ async function main(client) {
231158
231474
  }
231159
231475
  exports.default = main;
231160
231476
  function expandBuild(files, build) {
231161
- if (!build.src)
231162
- return [];
231163
- let pattern = build.src;
231164
- if (pattern[0] === '/') {
231477
+ if (!build.use) {
231478
+ throw new build_utils_1.NowBuildError({
231479
+ code: `invalid_build_specification`,
231480
+ message: 'Field `use` is missing in build specification',
231481
+ link: 'https://vercel.com/docs/configuration#project/builds',
231482
+ action: 'View Documentation',
231483
+ });
231484
+ }
231485
+ let src = path_1.normalize(build.src || '**');
231486
+ if (src === '.' || src === './') {
231487
+ throw new build_utils_1.NowBuildError({
231488
+ code: `invalid_build_specification`,
231489
+ message: 'A build `src` path resolves to an empty string',
231490
+ link: 'https://vercel.com/docs/configuration#project/builds',
231491
+ action: 'View Documentation',
231492
+ });
231493
+ }
231494
+ if (src[0] === '/') {
231165
231495
  // Remove a leading slash so that the globbing is relative
231166
231496
  // to `cwd` instead of the root of the filesystem.
231167
- pattern = pattern.substring(1);
231497
+ src = src.substring(1);
231168
231498
  }
231169
- const matches = files.filter(name => name === pattern || minimatch_1.default(name, pattern, { dot: true }));
231499
+ const matches = files.filter(name => name === src || minimatch_1.default(name, src, { dot: true }));
231170
231500
  return matches.map(m => {
231171
231501
  return {
231172
231502
  ...build,
@@ -231936,6 +232266,7 @@ const args_1 = __webpack_require__(56870);
231936
232266
  const get_deployment_checks_1 = __webpack_require__(58293);
231937
232267
  const parse_target_1 = __importDefault(__webpack_require__(77601));
231938
232268
  const get_prebuilt_json_1 = __importDefault(__webpack_require__(91307));
232269
+ const create_git_meta_1 = __webpack_require__(92282);
231939
232270
  exports.default = async (client) => {
231940
232271
  const { output } = client;
231941
232272
  let argv = null;
@@ -232164,6 +232495,7 @@ exports.default = async (client) => {
232164
232495
  }
232165
232496
  // build `meta`
232166
232497
  const meta = Object.assign({}, parse_meta_1.default(localConfig.meta), parse_meta_1.default(argv['--meta']));
232498
+ const gitMetadata = await create_git_meta_1.createGitMeta(path, output);
232167
232499
  // Merge dotenv config, `env` from vercel.json, and `--env` / `-e` arguments
232168
232500
  const deploymentEnv = Object.assign({}, parseEnv(localConfig.env), parseEnv(argv['--env']));
232169
232501
  // Merge build env out of `build.env` from vercel.json, and `--build-env` args
@@ -232190,6 +232522,14 @@ exports.default = async (client) => {
232190
232522
  });
232191
232523
  let deployStamp = stamp_1.default();
232192
232524
  let deployment = null;
232525
+ const localConfigurationOverrides = {
232526
+ buildCommand: localConfig?.buildCommand,
232527
+ devCommand: localConfig?.devCommand,
232528
+ framework: localConfig?.framework,
232529
+ commandForIgnoringBuildStep: localConfig?.ignoreCommand,
232530
+ installCommand: localConfig?.installCommand,
232531
+ outputDirectory: localConfig?.outputDirectory,
232532
+ };
232193
232533
  try {
232194
232534
  const createArgs = {
232195
232535
  name: project ? project.name : newProjectName,
@@ -232205,13 +232545,19 @@ exports.default = async (client) => {
232205
232545
  nowConfig: localConfig,
232206
232546
  regions,
232207
232547
  meta,
232548
+ gitMetadata,
232208
232549
  deployStamp,
232209
232550
  target,
232210
232551
  skipAutoDetectionConfirmation: autoConfirm,
232211
232552
  };
232212
232553
  if (!localConfig.builds || localConfig.builds.length === 0) {
232213
232554
  // Only add projectSettings for zero config deployments
232214
- createArgs.projectSettings = { sourceFilesOutsideRootDirectory };
232555
+ createArgs.projectSettings =
232556
+ status === 'not_linked'
232557
+ ? {
232558
+ sourceFilesOutsideRootDirectory,
232559
+ }
232560
+ : { ...localConfigurationOverrides, sourceFilesOutsideRootDirectory };
232215
232561
  }
232216
232562
  deployment = await create_deploy_1.default(client, now, contextName, [sourcePath], createArgs, org, !project, path);
232217
232563
  if (deployment.code === 'missing_project_settings') {
@@ -232223,7 +232569,7 @@ exports.default = async (client) => {
232223
232569
  projectSettings.sourceFilesOutsideRootDirectory =
232224
232570
  sourceFilesOutsideRootDirectory;
232225
232571
  }
232226
- const settings = await edit_project_settings_1.default(output, projectSettings, framework);
232572
+ const settings = await edit_project_settings_1.default(output, projectSettings, framework, false, localConfigurationOverrides);
232227
232573
  // deploy again, but send projectSettings this time
232228
232574
  createArgs.projectSettings = settings;
232229
232575
  deployStamp = stamp_1.default();
@@ -233624,16 +233970,7 @@ async function inspect(client, opts, args) {
233624
233970
  output.print('\n');
233625
233971
  }
233626
233972
  if (domainConfig.misconfigured) {
233627
- output.warn(`This Domain is not configured properly. To configure it you should either:`, null, null, null, {
233628
- boxen: {
233629
- margin: {
233630
- left: 2,
233631
- right: 0,
233632
- bottom: 0,
233633
- top: 0,
233634
- },
233635
- },
233636
- });
233973
+ output.warn(`This Domain is not configured properly. To configure it you should either:`, null, null, null);
233637
233974
  output.print(` ${chalk_1.default.grey('a)')} ` +
233638
233975
  `Set the following record on your DNS provider to continue: ` +
233639
233976
  `${code_1.default(`A ${domainName} 76.76.21.21`)} ` +
@@ -234768,6 +235105,7 @@ exports.default = new Map([
234768
235105
  ['certs', 'certs'],
234769
235106
  ['deploy', 'deploy'],
234770
235107
  ['dev', 'dev'],
235108
+ ['develop', 'dev'],
234771
235109
  ['dns', 'dns'],
234772
235110
  ['domain', 'domains'],
234773
235111
  ['domains', 'domains'],
@@ -240331,6 +240669,84 @@ async function createDeploy(client, now, contextName, paths, createArgs, org, is
240331
240669
  exports.default = createDeploy;
240332
240670
 
240333
240671
 
240672
+ /***/ }),
240673
+
240674
+ /***/ 92282:
240675
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
240676
+
240677
+ "use strict";
240678
+
240679
+ var __importDefault = (this && this.__importDefault) || function (mod) {
240680
+ return (mod && mod.__esModule) ? mod : { "default": mod };
240681
+ };
240682
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
240683
+ exports.createGitMeta = exports.getRemoteUrl = exports.isDirty = void 0;
240684
+ const fs_extra_1 = __importDefault(__webpack_require__(45392));
240685
+ const path_1 = __webpack_require__(85622);
240686
+ const ini_1 = __importDefault(__webpack_require__(61967));
240687
+ const git_last_commit_1 = __importDefault(__webpack_require__(13495));
240688
+ const child_process_1 = __webpack_require__(63129);
240689
+ function isDirty(directory) {
240690
+ return new Promise((resolve, reject) => {
240691
+ child_process_1.exec('git status -s', { cwd: directory }, function (err, stdout, stderr) {
240692
+ if (err)
240693
+ return reject(err);
240694
+ if (stderr)
240695
+ return reject(new Error(`Failed to determine if git repo has been modified: ${stderr.trim()}`));
240696
+ resolve(stdout.trim().length > 0);
240697
+ });
240698
+ });
240699
+ }
240700
+ exports.isDirty = isDirty;
240701
+ function getLastCommit(directory) {
240702
+ return new Promise((resolve, reject) => {
240703
+ git_last_commit_1.default.getLastCommit((err, commit) => {
240704
+ if (err)
240705
+ return reject(err);
240706
+ resolve(commit);
240707
+ }, { dst: directory });
240708
+ });
240709
+ }
240710
+ async function getRemoteUrl(configPath, output) {
240711
+ let gitConfig;
240712
+ try {
240713
+ gitConfig = ini_1.default.parse(await fs_extra_1.default.readFile(configPath, 'utf-8'));
240714
+ }
240715
+ catch (error) {
240716
+ output.debug(`Error while parsing repo data: ${error.message}`);
240717
+ }
240718
+ if (!gitConfig) {
240719
+ return null;
240720
+ }
240721
+ const originUrl = gitConfig['remote "origin"']?.url;
240722
+ if (originUrl) {
240723
+ return originUrl;
240724
+ }
240725
+ return null;
240726
+ }
240727
+ exports.getRemoteUrl = getRemoteUrl;
240728
+ async function createGitMeta(directory, output) {
240729
+ const remoteUrl = await getRemoteUrl(path_1.join(directory, '.git/config'), output);
240730
+ // If we can't get the repo URL, then don't return any metadata
240731
+ if (!remoteUrl) {
240732
+ return;
240733
+ }
240734
+ const [commit, dirty] = await Promise.all([
240735
+ getLastCommit(directory),
240736
+ isDirty(directory),
240737
+ ]);
240738
+ return {
240739
+ remoteUrl,
240740
+ commitAuthorName: commit.author.name,
240741
+ commitMessage: commit.subject,
240742
+ commitRef: commit.branch,
240743
+ commitSha: commit.hash,
240744
+ dirty,
240745
+ };
240746
+ }
240747
+ exports.createGitMeta = createGitMeta;
240748
+
240749
+
240334
240750
  /***/ }),
240335
240751
 
240336
240752
  /***/ 80478:
@@ -241434,9 +241850,6 @@ async function getBuildMatches(vercelConfig, cwd, output, devServer, fileList) {
241434
241850
  // of Vercel deployments.
241435
241851
  src = src.substring(1);
241436
241852
  }
241437
- // We need to escape brackets since `glob` will
241438
- // try to find a group otherwise
241439
- src = src.replace(/(\[|\])/g, '[$1]');
241440
241853
  // lambda function files are trimmed of their file extension
241441
241854
  const mapToEntrypoint = new Map();
241442
241855
  const extensionless = devServer.getExtensionlessFile(src);
@@ -241444,6 +241857,9 @@ async function getBuildMatches(vercelConfig, cwd, output, devServer, fileList) {
241444
241857
  mapToEntrypoint.set(extensionless, src);
241445
241858
  src = extensionless;
241446
241859
  }
241860
+ // We need to escape brackets since `glob` will
241861
+ // try to find a group otherwise
241862
+ src = src.replace(/(\[|\])/g, '[$1]');
241447
241863
  const files = fileList
241448
241864
  .filter(name => name === src || minimatch_1.default(name, src, { dot: true }))
241449
241865
  .map(name => path_1.join(cwd, name));
@@ -243648,8 +244064,9 @@ function needsBlockingBuild(buildMatch) {
243648
244064
  return typeof builder.shouldServe !== 'function';
243649
244065
  }
243650
244066
  async function checkForPort(port, timeout) {
244067
+ const opts = { host: '127.0.0.1' };
243651
244068
  const start = Date.now();
243652
- while (!(await is_port_reachable_1.default(port))) {
244069
+ while (!(await is_port_reachable_1.default(port, opts))) {
243653
244070
  if (Date.now() - start > timeout) {
243654
244071
  throw new Error(`Detecting port ${port} timed out after ${timeout}ms`);
243655
244072
  }
@@ -247347,7 +247764,7 @@ class Now extends events_1.default {
247347
247764
  // Legacy
247348
247765
  nowConfig: nowConfig = {},
247349
247766
  // Latest
247350
- name, project, prebuilt = false, rootDirectory, wantsPublic, meta, regions, quiet = false, env, build, forceNew = false, withCache = false, target = null, deployStamp, projectSettings, skipAutoDetectionConfirmation, }, org, isSettingUpProject, cwd) {
247767
+ name, project, prebuilt = false, rootDirectory, wantsPublic, meta, gitMetadata, regions, quiet = false, env, build, forceNew = false, withCache = false, target = null, deployStamp, projectSettings, skipAutoDetectionConfirmation, }, org, isSettingUpProject, cwd) {
247351
247768
  let hashes = {};
247352
247769
  const uploadStamp = stamp_1.default();
247353
247770
  let requestBody = {
@@ -247358,6 +247775,7 @@ class Now extends events_1.default {
247358
247775
  name,
247359
247776
  project,
247360
247777
  meta,
247778
+ gitMetadata,
247361
247779
  regions,
247362
247780
  target: target || undefined,
247363
247781
  projectSettings,
@@ -247762,53 +248180,104 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
247762
248180
  const inquirer_1 = __importDefault(__webpack_require__(64016));
247763
248181
  const confirm_1 = __importDefault(__webpack_require__(33564));
247764
248182
  const chalk_1 = __importDefault(__webpack_require__(961));
248183
+ const frameworks_1 = __importDefault(__webpack_require__(48438));
247765
248184
  const is_setting_value_1 = __webpack_require__(41005);
247766
- const fields = [
247767
- { name: 'Build Command', value: 'buildCommand' },
247768
- { name: 'Output Directory', value: 'outputDirectory' },
247769
- { name: 'Development Command', value: 'devCommand' },
247770
- ];
247771
- async function editProjectSettings(output, projectSettings, framework, autoConfirm) {
247772
- // create new settings object, missing values will be filled with `null`
247773
- const settings = Object.assign({ framework: null }, projectSettings);
247774
- for (let field of fields) {
247775
- settings[field.value] =
247776
- (projectSettings && projectSettings[field.value]) || null;
248185
+ const settingMap = {
248186
+ buildCommand: 'Build Command',
248187
+ devCommand: 'Development Command',
248188
+ commandForIgnoringBuildStep: 'Ignore Command',
248189
+ installCommand: 'Install Command',
248190
+ outputDirectory: 'Output Directory',
248191
+ framework: 'Framework',
248192
+ };
248193
+ const settingKeys = Object.keys(settingMap).sort();
248194
+ async function editProjectSettings(output, projectSettings, framework, autoConfirm, localConfigurationOverrides) {
248195
+ // Create initial settings object defaulting everything to `null` and assigning what may exist in `projectSettings`
248196
+ const settings = Object.assign({
248197
+ buildCommand: null,
248198
+ devCommand: null,
248199
+ framework: null,
248200
+ commandForIgnoringBuildStep: null,
248201
+ installCommand: null,
248202
+ outputDirectory: null,
248203
+ }, projectSettings);
248204
+ // Start UX by displaying (and applying) overrides. They will be referenced throughout remainder of CLI.
248205
+ if (localConfigurationOverrides) {
248206
+ // Apply local overrides (from `vercel.json`)
248207
+ for (const setting of settingKeys) {
248208
+ const localConfigValue = localConfigurationOverrides[setting];
248209
+ if (localConfigValue)
248210
+ settings[setting] = localConfigValue;
248211
+ }
248212
+ output.print('Local settings detected in vercel.json:\n');
248213
+ // Print provided overrides including framework
248214
+ for (const setting of settingKeys) {
248215
+ const override = localConfigurationOverrides[setting];
248216
+ if (override) {
248217
+ output.print(`${chalk_1.default.dim(`- ${chalk_1.default.bold(`${settingMap[setting]}:`)} ${override}`)}\n`);
248218
+ }
248219
+ }
248220
+ // If framework is overridden, set it to the `framework` parameter and let the normal framework-flow occur
248221
+ if (localConfigurationOverrides.framework) {
248222
+ const overrideFramework = frameworks_1.default.find(f => f.slug === localConfigurationOverrides.framework);
248223
+ if (overrideFramework) {
248224
+ framework = overrideFramework;
248225
+ output.print(`Merging default Project Settings for ${framework.name}. Previously listed overrides are prioritized.\n`);
248226
+ }
248227
+ }
247777
248228
  }
247778
248229
  // skip editing project settings if no framework is detected
247779
248230
  if (!framework) {
247780
248231
  settings.framework = null;
247781
248232
  return settings;
247782
248233
  }
248234
+ // A missing framework slug implies the "Other" framework was selected
247783
248235
  output.print(!framework.slug
247784
248236
  ? `No framework detected. Default Project Settings:\n`
247785
248237
  : `Auto-detected Project Settings (${chalk_1.default.bold(framework.name)}):\n`);
247786
248238
  settings.framework = framework.slug;
247787
- for (let field of fields) {
247788
- const defaults = framework.settings[field.value];
247789
- output.print(chalk_1.default.dim(`- ${chalk_1.default.bold(`${field.name}:`)} ${`${is_setting_value_1.isSettingValue(defaults)
247790
- ? defaults.value
247791
- : chalk_1.default.italic(`${defaults.placeholder}`)}`}`) + '\n');
248239
+ // Now print defaults for the provided framework whether it was auto-detected or overwritten
248240
+ for (const setting of settingKeys) {
248241
+ if (setting === 'framework' || setting === 'commandForIgnoringBuildStep') {
248242
+ continue;
248243
+ }
248244
+ const defaultSetting = framework.settings[setting];
248245
+ const override = localConfigurationOverrides?.[setting];
248246
+ if (!override && defaultSetting) {
248247
+ output.print(`${chalk_1.default.dim(`- ${chalk_1.default.bold(`${settingMap[setting]}:`)} ${is_setting_value_1.isSettingValue(defaultSetting)
248248
+ ? defaultSetting.value
248249
+ : chalk_1.default.italic(`${defaultSetting.placeholder}`)}`)}\n`);
248250
+ }
247792
248251
  }
248252
+ // Prompt the user if they want to modify any settings not defined by local configuration.
247793
248253
  if (autoConfirm ||
247794
- !(await confirm_1.default(`Want to override the settings?`, false))) {
248254
+ !(await confirm_1.default('Want to modify these settings?', false))) {
247795
248255
  return settings;
247796
248256
  }
248257
+ const choices = settingKeys.reduce((acc, setting) => {
248258
+ const skip = setting === 'framework' ||
248259
+ setting === 'commandForIgnoringBuildStep' ||
248260
+ setting === 'installCommand' ||
248261
+ localConfigurationOverrides?.[setting];
248262
+ if (!skip) {
248263
+ acc.push({ name: settingMap[setting], value: setting });
248264
+ }
248265
+ return acc;
248266
+ }, []);
247797
248267
  const { settingFields } = await inquirer_1.default.prompt({
247798
248268
  name: 'settingFields',
247799
248269
  type: 'checkbox',
247800
248270
  message: 'Which settings would you like to overwrite (select multiple)?',
247801
- choices: fields,
248271
+ choices,
247802
248272
  });
247803
248273
  for (let setting of settingFields) {
247804
- const field = fields.find(f => f.value === setting);
247805
- const name = `${Date.now()}`;
248274
+ const field = settingMap[setting];
247806
248275
  const answers = await inquirer_1.default.prompt({
247807
248276
  type: 'input',
247808
- name: name,
247809
- message: `What's your ${chalk_1.default.bold(field ? field.name : setting)}?`,
248277
+ name: setting,
248278
+ message: `What's your ${chalk_1.default.bold(field)}?`,
247810
248279
  });
247811
- settings[setting] = answers[name];
248280
+ settings[setting] = answers[setting];
247812
248281
  }
247813
248282
  return settings;
247814
248283
  }
@@ -248902,6 +249371,14 @@ async function setupAndLink(client, path, { forceDelete = false, autoConfirm = f
248902
249371
  client,
248903
249372
  currentTeam: config.currentTeam,
248904
249373
  });
249374
+ const localConfigurationOverrides = {
249375
+ buildCommand: localConfig?.buildCommand,
249376
+ devCommand: localConfig?.devCommand,
249377
+ framework: localConfig?.framework,
249378
+ commandForIgnoringBuildStep: localConfig?.ignoreCommand,
249379
+ installCommand: localConfig?.installCommand,
249380
+ outputDirectory: localConfig?.outputDirectory,
249381
+ };
248905
249382
  const createArgs = {
248906
249383
  name: newProjectName,
248907
249384
  env: {},
@@ -248916,11 +249393,11 @@ async function setupAndLink(client, path, { forceDelete = false, autoConfirm = f
248916
249393
  deployStamp: stamp_1.default(),
248917
249394
  target: undefined,
248918
249395
  skipAutoDetectionConfirmation: false,
249396
+ projectSettings: {
249397
+ ...localConfigurationOverrides,
249398
+ sourceFilesOutsideRootDirectory,
249399
+ },
248919
249400
  };
248920
- if (isZeroConfig) {
248921
- // Only add projectSettings for zero config deployments
248922
- createArgs.projectSettings = { sourceFilesOutsideRootDirectory };
248923
- }
248924
249401
  const deployment = await create_deploy_1.default(client, now, config.currentTeam || 'current user', [sourcePath], createArgs, org, true, path);
248925
249402
  if (!deployment ||
248926
249403
  !('code' in deployment) ||
@@ -248936,7 +249413,7 @@ async function setupAndLink(client, path, { forceDelete = false, autoConfirm = f
248936
249413
  };
248937
249414
  }
248938
249415
  const { projectSettings, framework } = deployment;
248939
- settings = await edit_project_settings_1.default(output, projectSettings, framework, autoConfirm);
249416
+ settings = await edit_project_settings_1.default(output, projectSettings, framework, autoConfirm, localConfigurationOverrides);
248940
249417
  }
248941
249418
  if (rootDirectory) {
248942
249419
  settings.rootDirectory = rootDirectory;
@@ -249878,7 +250355,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
249878
250355
  Object.defineProperty(exports, "__esModule", ({ value: true }));
249879
250356
  exports.Output = void 0;
249880
250357
  const chalk_1 = __importDefault(__webpack_require__(961));
249881
- const boxen_1 = __importDefault(__webpack_require__(30396));
249882
250358
  const link_1 = __importDefault(__webpack_require__(98472));
249883
250359
  const wait_1 = __importDefault(__webpack_require__(22015));
249884
250360
  class Output {
@@ -249897,20 +250373,11 @@ class Output {
249897
250373
  this.dim = (str, color = chalk_1.default.grey) => {
249898
250374
  this.print(`${color(`> ${str}`)}\n`);
249899
250375
  };
249900
- this.warn = (str, slug = null, link = null, action = 'Learn More', options) => {
250376
+ this.warn = (str, slug = null, link = null, action = 'Learn More') => {
249901
250377
  const details = slug ? `https://err.sh/vercel/${slug}` : link;
249902
- this.print(boxen_1.default(chalk_1.default.bold.yellow('WARN! ') +
250378
+ this.print(chalk_1.default.yellow(chalk_1.default.bold('WARN! ') +
249903
250379
  str +
249904
- (details ? `\n${action}: ${link_1.default(details)}` : ''), {
249905
- padding: {
249906
- top: 0,
249907
- bottom: 0,
249908
- left: 1,
249909
- right: 1,
249910
- },
249911
- borderColor: 'yellow',
249912
- ...options?.boxen,
249913
- }));
250380
+ (details ? `\n${action}: ${link_1.default(details)}` : '')));
249914
250381
  this.print('\n');
249915
250382
  };
249916
250383
  this.note = (str) => {
@@ -251946,7 +252413,7 @@ module.exports = JSON.parse("{\"application/1d-interleaved-parityfec\":{\"source
251946
252413
  /***/ ((module) => {
251947
252414
 
251948
252415
  "use strict";
251949
- module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"25.1.1-canary.0\",\"preferGlobal\":true,\"license\":\"Apache-2.0\",\"description\":\"The command-line interface for Vercel\",\"homepage\":\"https://vercel.com\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/vercel/vercel.git\",\"directory\":\"packages/cli\"},\"scripts\":{\"preinstall\":\"node ./scripts/preinstall.js\",\"test\":\"jest --env node --verbose --runInBand --bail --forceExit\",\"test-unit\":\"yarn test test/unit/\",\"test-integration-cli\":\"rimraf test/fixtures/integration && ava test/integration.js --serial --fail-fast --verbose\",\"test-integration-dev\":\"yarn test test/dev/\",\"prepublishOnly\":\"yarn build\",\"coverage\":\"codecov\",\"build\":\"node -r ts-eager/register ./scripts/build.ts\",\"build-dev\":\"node -r ts-eager/register ./scripts/build.ts --dev\"},\"bin\":{\"vc\":\"./dist/index.js\",\"vercel\":\"./dist/index.js\"},\"files\":[\"dist\",\"scripts/preinstall.js\"],\"ava\":{\"extensions\":[\"ts\"],\"require\":[\"ts-node/register/transpile-only\",\"esm\"]},\"engines\":{\"node\":\">= 14\"},\"dependencies\":{\"@vercel/build-utils\":\"4.1.1-canary.0\",\"@vercel/go\":\"2.0.2-canary.0\",\"@vercel/next\":\"3.0.2-canary.0\",\"@vercel/node\":\"2.1.1-canary.0\",\"@vercel/python\":\"3.0.2-canary.0\",\"@vercel/redwood\":\"1.0.2-canary.0\",\"@vercel/remix\":\"1.0.2-canary.0\",\"@vercel/ruby\":\"1.3.10-canary.0\",\"@vercel/static-build\":\"1.0.2-canary.0\",\"update-notifier\":\"5.1.0\"},\"devDependencies\":{\"@alex_neo/jest-expect-message\":\"1.0.5\",\"@next/env\":\"11.1.2\",\"@sentry/node\":\"5.5.0\",\"@sindresorhus/slugify\":\"0.11.0\",\"@tootallnate/once\":\"1.1.2\",\"@types/ansi-escapes\":\"3.0.0\",\"@types/ansi-regex\":\"4.0.0\",\"@types/async-retry\":\"1.2.1\",\"@types/bytes\":\"3.0.0\",\"@types/chance\":\"1.1.3\",\"@types/debug\":\"0.0.31\",\"@types/dotenv\":\"6.1.1\",\"@types/escape-html\":\"0.0.20\",\"@types/express\":\"4.17.13\",\"@types/fs-extra\":\"9.0.13\",\"@types/glob\":\"7.1.1\",\"@types/http-proxy\":\"1.16.2\",\"@types/inquirer\":\"7.3.1\",\"@types/jest\":\"27.4.1\",\"@types/jest-expect-message\":\"1.0.3\",\"@types/load-json-file\":\"2.0.7\",\"@types/mime-types\":\"2.1.0\",\"@types/minimatch\":\"3.0.3\",\"@types/mri\":\"1.1.0\",\"@types/ms\":\"0.7.30\",\"@types/node\":\"11.11.0\",\"@types/node-fetch\":\"2.5.10\",\"@types/npm-package-arg\":\"6.1.0\",\"@types/pluralize\":\"0.0.29\",\"@types/progress\":\"2.0.3\",\"@types/psl\":\"1.1.0\",\"@types/semver\":\"6.0.1\",\"@types/tar-fs\":\"1.16.1\",\"@types/text-table\":\"0.2.0\",\"@types/title\":\"3.4.1\",\"@types/universal-analytics\":\"0.4.2\",\"@types/update-notifier\":\"5.1.0\",\"@types/which\":\"1.3.2\",\"@types/write-json-file\":\"2.2.1\",\"@types/yauzl-promise\":\"2.1.0\",\"@vercel/client\":\"12.0.2-canary.0\",\"@vercel/frameworks\":\"1.0.1\",\"@vercel/ncc\":\"0.24.0\",\"@zeit/fun\":\"0.11.2\",\"@zeit/source-map-support\":\"0.6.2\",\"ajv\":\"6.12.2\",\"alpha-sort\":\"2.0.1\",\"ansi-escapes\":\"3.0.0\",\"ansi-regex\":\"3.0.0\",\"arg\":\"5.0.0\",\"async-listen\":\"1.2.0\",\"async-retry\":\"1.1.3\",\"async-sema\":\"2.1.4\",\"ava\":\"2.2.0\",\"bytes\":\"3.0.0\",\"chalk\":\"4.1.0\",\"chance\":\"1.1.7\",\"chokidar\":\"3.3.1\",\"clipboardy\":\"2.1.0\",\"codecov\":\"3.8.2\",\"cpy\":\"7.2.0\",\"credit-card\":\"3.0.1\",\"date-fns\":\"1.29.0\",\"debug\":\"3.1.0\",\"dot\":\"1.1.3\",\"dotenv\":\"4.0.0\",\"email-prompt\":\"0.3.2\",\"email-validator\":\"1.1.1\",\"epipebomb\":\"1.0.0\",\"escape-html\":\"1.0.3\",\"esm\":\"3.1.4\",\"execa\":\"3.2.0\",\"express\":\"4.17.1\",\"fast-deep-equal\":\"3.1.3\",\"fs-extra\":\"10.0.0\",\"get-port\":\"5.1.1\",\"glob\":\"7.1.2\",\"http-proxy\":\"1.18.1\",\"inquirer\":\"7.0.4\",\"is-docker\":\"2.2.1\",\"is-port-reachable\":\"3.0.0\",\"is-url\":\"1.2.2\",\"jaro-winkler\":\"0.2.8\",\"jsonlines\":\"0.1.1\",\"load-json-file\":\"3.0.0\",\"mime-types\":\"2.1.24\",\"minimatch\":\"3.0.4\",\"mri\":\"1.1.5\",\"ms\":\"2.1.2\",\"node-fetch\":\"2.6.1\",\"npm-package-arg\":\"6.1.0\",\"open\":\"8.4.0\",\"ora\":\"3.4.0\",\"pcre-to-regexp\":\"1.0.0\",\"pluralize\":\"7.0.0\",\"progress\":\"2.0.3\",\"promisepipe\":\"3.0.0\",\"psl\":\"1.1.31\",\"qr-image\":\"3.2.0\",\"raw-body\":\"2.4.1\",\"rimraf\":\"3.0.2\",\"semver\":\"5.5.0\",\"serve-handler\":\"6.1.1\",\"strip-ansi\":\"5.2.0\",\"stripe\":\"5.1.0\",\"tar-fs\":\"1.16.3\",\"test-listen\":\"1.1.0\",\"text-table\":\"0.2.0\",\"title\":\"3.4.1\",\"tmp-promise\":\"1.0.3\",\"tree-kill\":\"1.2.2\",\"ts-node\":\"8.3.0\",\"typescript\":\"4.3.4\",\"universal-analytics\":\"0.4.20\",\"utility-types\":\"2.1.0\",\"which\":\"2.0.2\",\"write-json-file\":\"2.2.0\",\"xdg-app-paths\":\"5.1.0\",\"yauzl-promise\":\"2.1.3\"},\"jest\":{\"preset\":\"ts-jest\",\"globals\":{\"ts-jest\":{\"diagnostics\":false,\"isolatedModules\":true}},\"setupFilesAfterEnv\":[\"@alex_neo/jest-expect-message\"],\"verbose\":false,\"testEnvironment\":\"node\",\"testMatch\":[\"<rootDir>/test/**/*.test.ts\"]},\"gitHead\":\"4bf6295d7a1d6544f195d76a2a4aedb476fa7dc1\"}");
252416
+ module.exports = JSON.parse("{\"name\":\"vercel\",\"version\":\"25.1.1-canary.1\",\"preferGlobal\":true,\"license\":\"Apache-2.0\",\"description\":\"The command-line interface for Vercel\",\"homepage\":\"https://vercel.com\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/vercel/vercel.git\",\"directory\":\"packages/cli\"},\"scripts\":{\"preinstall\":\"node ./scripts/preinstall.js\",\"test\":\"jest --env node --verbose --runInBand --bail --forceExit\",\"test-unit\":\"yarn test test/unit/\",\"test-integration-cli\":\"rimraf test/fixtures/integration && ava test/integration.js --serial --fail-fast --verbose\",\"test-integration-dev\":\"yarn test test/dev/\",\"prepublishOnly\":\"yarn build\",\"coverage\":\"codecov\",\"build\":\"node -r ts-eager/register ./scripts/build.ts\",\"build-dev\":\"node -r ts-eager/register ./scripts/build.ts --dev\"},\"bin\":{\"vc\":\"./dist/index.js\",\"vercel\":\"./dist/index.js\"},\"files\":[\"dist\",\"scripts/preinstall.js\"],\"ava\":{\"extensions\":[\"ts\"],\"require\":[\"ts-node/register/transpile-only\",\"esm\"]},\"engines\":{\"node\":\">= 14\"},\"dependencies\":{\"@vercel/build-utils\":\"4.1.1-canary.1\",\"@vercel/go\":\"2.0.2-canary.1\",\"@vercel/next\":\"3.0.2-canary.1\",\"@vercel/node\":\"2.1.1-canary.1\",\"@vercel/python\":\"3.0.2-canary.1\",\"@vercel/redwood\":\"1.0.2-canary.1\",\"@vercel/remix\":\"1.0.2-canary.1\",\"@vercel/ruby\":\"1.3.10-canary.1\",\"@vercel/static-build\":\"1.0.2-canary.1\",\"update-notifier\":\"5.1.0\"},\"devDependencies\":{\"@alex_neo/jest-expect-message\":\"1.0.5\",\"@next/env\":\"11.1.2\",\"@sentry/node\":\"5.5.0\",\"@sindresorhus/slugify\":\"0.11.0\",\"@tootallnate/once\":\"1.1.2\",\"@types/ansi-escapes\":\"3.0.0\",\"@types/ansi-regex\":\"4.0.0\",\"@types/async-retry\":\"1.2.1\",\"@types/bytes\":\"3.0.0\",\"@types/chance\":\"1.1.3\",\"@types/debug\":\"0.0.31\",\"@types/dotenv\":\"6.1.1\",\"@types/escape-html\":\"0.0.20\",\"@types/express\":\"4.17.13\",\"@types/fs-extra\":\"9.0.13\",\"@types/glob\":\"7.1.1\",\"@types/http-proxy\":\"1.16.2\",\"@types/ini\":\"1.3.31\",\"@types/inquirer\":\"7.3.1\",\"@types/jest\":\"27.4.1\",\"@types/jest-expect-message\":\"1.0.3\",\"@types/load-json-file\":\"2.0.7\",\"@types/mime-types\":\"2.1.0\",\"@types/minimatch\":\"3.0.3\",\"@types/mri\":\"1.1.0\",\"@types/ms\":\"0.7.30\",\"@types/node\":\"11.11.0\",\"@types/node-fetch\":\"2.5.10\",\"@types/npm-package-arg\":\"6.1.0\",\"@types/pluralize\":\"0.0.29\",\"@types/progress\":\"2.0.3\",\"@types/psl\":\"1.1.0\",\"@types/semver\":\"6.0.1\",\"@types/tar-fs\":\"1.16.1\",\"@types/text-table\":\"0.2.0\",\"@types/title\":\"3.4.1\",\"@types/universal-analytics\":\"0.4.2\",\"@types/update-notifier\":\"5.1.0\",\"@types/which\":\"1.3.2\",\"@types/write-json-file\":\"2.2.1\",\"@types/yauzl-promise\":\"2.1.0\",\"@vercel/client\":\"12.0.2-canary.1\",\"@vercel/frameworks\":\"1.0.2-canary.0\",\"@vercel/ncc\":\"0.24.0\",\"@zeit/fun\":\"0.11.2\",\"@zeit/source-map-support\":\"0.6.2\",\"ajv\":\"6.12.2\",\"alpha-sort\":\"2.0.1\",\"ansi-escapes\":\"3.0.0\",\"ansi-regex\":\"3.0.0\",\"arg\":\"5.0.0\",\"async-listen\":\"1.2.0\",\"async-retry\":\"1.1.3\",\"async-sema\":\"2.1.4\",\"ava\":\"2.2.0\",\"bytes\":\"3.0.0\",\"chalk\":\"4.1.0\",\"chance\":\"1.1.7\",\"chokidar\":\"3.3.1\",\"clipboardy\":\"2.1.0\",\"codecov\":\"3.8.2\",\"cpy\":\"7.2.0\",\"credit-card\":\"3.0.1\",\"date-fns\":\"1.29.0\",\"debug\":\"3.1.0\",\"dot\":\"1.1.3\",\"dotenv\":\"4.0.0\",\"email-prompt\":\"0.3.2\",\"email-validator\":\"1.1.1\",\"epipebomb\":\"1.0.0\",\"escape-html\":\"1.0.3\",\"esm\":\"3.1.4\",\"execa\":\"3.2.0\",\"express\":\"4.17.1\",\"fast-deep-equal\":\"3.1.3\",\"fs-extra\":\"10.0.0\",\"get-port\":\"5.1.1\",\"git-last-commit\":\"1.0.1\",\"glob\":\"7.1.2\",\"http-proxy\":\"1.18.1\",\"ini\":\"3.0.0\",\"inquirer\":\"7.0.4\",\"is-docker\":\"2.2.1\",\"is-port-reachable\":\"3.1.0\",\"is-url\":\"1.2.2\",\"jaro-winkler\":\"0.2.8\",\"jsonlines\":\"0.1.1\",\"load-json-file\":\"3.0.0\",\"mime-types\":\"2.1.24\",\"minimatch\":\"3.0.4\",\"mri\":\"1.1.5\",\"ms\":\"2.1.2\",\"node-fetch\":\"2.6.1\",\"npm-package-arg\":\"6.1.0\",\"open\":\"8.4.0\",\"ora\":\"3.4.0\",\"pcre-to-regexp\":\"1.0.0\",\"pluralize\":\"7.0.0\",\"progress\":\"2.0.3\",\"promisepipe\":\"3.0.0\",\"psl\":\"1.1.31\",\"qr-image\":\"3.2.0\",\"raw-body\":\"2.4.1\",\"rimraf\":\"3.0.2\",\"semver\":\"5.5.0\",\"serve-handler\":\"6.1.1\",\"strip-ansi\":\"5.2.0\",\"stripe\":\"5.1.0\",\"tar-fs\":\"1.16.3\",\"test-listen\":\"1.1.0\",\"text-table\":\"0.2.0\",\"title\":\"3.4.1\",\"tmp-promise\":\"1.0.3\",\"tree-kill\":\"1.2.2\",\"ts-node\":\"8.3.0\",\"typescript\":\"4.3.4\",\"universal-analytics\":\"0.4.20\",\"utility-types\":\"2.1.0\",\"which\":\"2.0.2\",\"write-json-file\":\"2.2.0\",\"xdg-app-paths\":\"5.1.0\",\"yauzl-promise\":\"2.1.3\"},\"jest\":{\"preset\":\"ts-jest\",\"globals\":{\"ts-jest\":{\"diagnostics\":false,\"isolatedModules\":true}},\"setupFilesAfterEnv\":[\"@alex_neo/jest-expect-message\"],\"verbose\":false,\"testEnvironment\":\"node\",\"testMatch\":[\"<rootDir>/test/**/*.test.ts\"]},\"gitHead\":\"c1bc53dea872955b95e428b8e972cda1acaaab38\"}");
251950
252417
 
251951
252418
  /***/ }),
251952
252419
 
@@ -251962,7 +252429,7 @@ module.exports = JSON.parse("{\"VISA\":\"Visa\",\"MASTERCARD\":\"MasterCard\",\"
251962
252429
  /***/ ((module) => {
251963
252430
 
251964
252431
  "use strict";
251965
- module.exports = JSON.parse("{\"name\":\"@vercel/client\",\"version\":\"12.0.2-canary.0\",\"main\":\"dist/index.js\",\"typings\":\"dist/index.d.ts\",\"homepage\":\"https://vercel.com\",\"license\":\"MIT\",\"files\":[\"dist\"],\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/vercel/vercel.git\",\"directory\":\"packages/client\"},\"scripts\":{\"build\":\"tsc\",\"test-integration-once\":\"yarn test tests/create-deployment.test.ts tests/create-legacy-deployment.test.ts tests/paths.test.ts\",\"test\":\"jest --env node --verbose --runInBand --bail\",\"test-unit\":\"yarn test tests/unit.*test.*\"},\"engines\":{\"node\":\">= 14\"},\"devDependencies\":{\"@types/async-retry\":\"1.4.1\",\"@types/fs-extra\":\"7.0.0\",\"@types/jest\":\"27.4.1\",\"@types/minimatch\":\"3.0.5\",\"@types/ms\":\"0.7.30\",\"@types/node\":\"12.0.4\",\"@types/node-fetch\":\"2.5.4\",\"@types/recursive-readdir\":\"2.2.0\",\"typescript\":\"4.3.4\"},\"jest\":{\"preset\":\"ts-jest\",\"testEnvironment\":\"node\",\"verbose\":false,\"setupFilesAfterEnv\":[\"<rootDir>/tests/setup/index.ts\"]},\"dependencies\":{\"@vercel/build-utils\":\"4.1.1-canary.0\",\"@zeit/fetch\":\"5.2.0\",\"async-retry\":\"1.2.3\",\"async-sema\":\"3.0.0\",\"fs-extra\":\"8.0.1\",\"ignore\":\"4.0.6\",\"minimatch\":\"5.0.1\",\"ms\":\"2.1.2\",\"node-fetch\":\"2.6.1\",\"querystring\":\"^0.2.0\",\"sleep-promise\":\"8.0.1\"},\"gitHead\":\"4bf6295d7a1d6544f195d76a2a4aedb476fa7dc1\"}");
252432
+ module.exports = JSON.parse("{\"name\":\"@vercel/client\",\"version\":\"12.0.2-canary.1\",\"main\":\"dist/index.js\",\"typings\":\"dist/index.d.ts\",\"homepage\":\"https://vercel.com\",\"license\":\"MIT\",\"files\":[\"dist\"],\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/vercel/vercel.git\",\"directory\":\"packages/client\"},\"scripts\":{\"build\":\"tsc\",\"test-integration-once\":\"yarn test tests/create-deployment.test.ts tests/create-legacy-deployment.test.ts tests/paths.test.ts\",\"test\":\"jest --env node --verbose --runInBand --bail\",\"test-unit\":\"yarn test tests/unit.*test.*\"},\"engines\":{\"node\":\">= 14\"},\"devDependencies\":{\"@types/async-retry\":\"1.4.1\",\"@types/fs-extra\":\"7.0.0\",\"@types/jest\":\"27.4.1\",\"@types/minimatch\":\"3.0.5\",\"@types/ms\":\"0.7.30\",\"@types/node\":\"12.0.4\",\"@types/node-fetch\":\"2.5.4\",\"@types/recursive-readdir\":\"2.2.0\",\"typescript\":\"4.3.4\"},\"jest\":{\"preset\":\"ts-jest\",\"testEnvironment\":\"node\",\"verbose\":false,\"setupFilesAfterEnv\":[\"<rootDir>/tests/setup/index.ts\"]},\"dependencies\":{\"@vercel/build-utils\":\"4.1.1-canary.1\",\"@zeit/fetch\":\"5.2.0\",\"async-retry\":\"1.2.3\",\"async-sema\":\"3.0.0\",\"fs-extra\":\"8.0.1\",\"ignore\":\"4.0.6\",\"minimatch\":\"5.0.1\",\"ms\":\"2.1.2\",\"node-fetch\":\"2.6.1\",\"querystring\":\"^0.2.0\",\"sleep-promise\":\"8.0.1\"},\"gitHead\":\"c1bc53dea872955b95e428b8e972cda1acaaab38\"}");
251966
252433
 
251967
252434
  /***/ }),
251968
252435
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vercel",
3
- "version": "25.1.1-canary.0",
3
+ "version": "25.1.1-canary.1",
4
4
  "preferGlobal": true,
5
5
  "license": "Apache-2.0",
6
6
  "description": "The command-line interface for Vercel",
@@ -42,15 +42,15 @@
42
42
  "node": ">= 14"
43
43
  },
44
44
  "dependencies": {
45
- "@vercel/build-utils": "4.1.1-canary.0",
46
- "@vercel/go": "2.0.2-canary.0",
47
- "@vercel/next": "3.0.2-canary.0",
48
- "@vercel/node": "2.1.1-canary.0",
49
- "@vercel/python": "3.0.2-canary.0",
50
- "@vercel/redwood": "1.0.2-canary.0",
51
- "@vercel/remix": "1.0.2-canary.0",
52
- "@vercel/ruby": "1.3.10-canary.0",
53
- "@vercel/static-build": "1.0.2-canary.0",
45
+ "@vercel/build-utils": "4.1.1-canary.1",
46
+ "@vercel/go": "2.0.2-canary.1",
47
+ "@vercel/next": "3.0.2-canary.1",
48
+ "@vercel/node": "2.1.1-canary.1",
49
+ "@vercel/python": "3.0.2-canary.1",
50
+ "@vercel/redwood": "1.0.2-canary.1",
51
+ "@vercel/remix": "1.0.2-canary.1",
52
+ "@vercel/ruby": "1.3.10-canary.1",
53
+ "@vercel/static-build": "1.0.2-canary.1",
54
54
  "update-notifier": "5.1.0"
55
55
  },
56
56
  "devDependencies": {
@@ -71,6 +71,7 @@
71
71
  "@types/fs-extra": "9.0.13",
72
72
  "@types/glob": "7.1.1",
73
73
  "@types/http-proxy": "1.16.2",
74
+ "@types/ini": "1.3.31",
74
75
  "@types/inquirer": "7.3.1",
75
76
  "@types/jest": "27.4.1",
76
77
  "@types/jest-expect-message": "1.0.3",
@@ -94,8 +95,8 @@
94
95
  "@types/which": "1.3.2",
95
96
  "@types/write-json-file": "2.2.1",
96
97
  "@types/yauzl-promise": "2.1.0",
97
- "@vercel/client": "12.0.2-canary.0",
98
- "@vercel/frameworks": "1.0.1",
98
+ "@vercel/client": "12.0.2-canary.1",
99
+ "@vercel/frameworks": "1.0.2-canary.0",
99
100
  "@vercel/ncc": "0.24.0",
100
101
  "@zeit/fun": "0.11.2",
101
102
  "@zeit/source-map-support": "0.6.2",
@@ -130,11 +131,13 @@
130
131
  "fast-deep-equal": "3.1.3",
131
132
  "fs-extra": "10.0.0",
132
133
  "get-port": "5.1.1",
134
+ "git-last-commit": "1.0.1",
133
135
  "glob": "7.1.2",
134
136
  "http-proxy": "1.18.1",
137
+ "ini": "3.0.0",
135
138
  "inquirer": "7.0.4",
136
139
  "is-docker": "2.2.1",
137
- "is-port-reachable": "3.0.0",
140
+ "is-port-reachable": "3.1.0",
138
141
  "is-url": "1.2.2",
139
142
  "jaro-winkler": "0.2.8",
140
143
  "jsonlines": "0.1.1",
@@ -191,5 +194,5 @@
191
194
  "<rootDir>/test/**/*.test.ts"
192
195
  ]
193
196
  },
194
- "gitHead": "4bf6295d7a1d6544f195d76a2a4aedb476fa7dc1"
197
+ "gitHead": "c1bc53dea872955b95e428b8e972cda1acaaab38"
195
198
  }