vercel 59.5.0 → 59.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/chunks/{add-Z5FM6TFI.js → add-7O4TM33A.js} +12 -12
  2. package/dist/chunks/{add-MH3WV6PV.js → add-UT6ZPA4F.js} +11 -11
  3. package/dist/chunks/{add-W3FFMTX4.js → add-UVMFKSSY.js} +11 -11
  4. package/dist/chunks/{build-VYYFBJL7.js → build-SKKT3DIB.js} +11 -11
  5. package/dist/chunks/{chunk-LLM3ZNXJ.js → chunk-2EH6SZRG.js} +2 -2
  6. package/dist/chunks/{chunk-UUVMIXT4.js → chunk-2T3IZZTJ.js} +4 -4
  7. package/dist/chunks/{chunk-RZ5NP6HN.js → chunk-2YRAWYGE.js} +1 -1
  8. package/dist/chunks/{chunk-TDXNNIZ6.js → chunk-3PA7LXYM.js} +2 -2
  9. package/dist/chunks/{chunk-KQRVZWJU.js → chunk-3T7WSWZH.js} +1 -1
  10. package/dist/chunks/{chunk-R6IGDGX3.js → chunk-5XECIWME.js} +1 -1
  11. package/dist/chunks/{chunk-PBHBX6UL.js → chunk-63OX2DER.js} +3 -3
  12. package/dist/chunks/{chunk-V4YLY44R.js → chunk-67IIZBBY.js} +2 -2
  13. package/dist/chunks/{chunk-AWSLWAOC.js → chunk-6JPVTPTU.js} +3 -3
  14. package/dist/chunks/{chunk-HT2XWSAJ.js → chunk-7AEEQOD4.js} +2 -29
  15. package/dist/chunks/{chunk-QG4PCM45.js → chunk-7HE63HCR.js} +102 -15
  16. package/dist/chunks/{chunk-FA3MO56Q.js → chunk-7IDPPWDN.js} +5 -5
  17. package/dist/chunks/{chunk-MRMNMFMD.js → chunk-7KSICC3A.js} +1 -1
  18. package/dist/chunks/{chunk-XBN2O34P.js → chunk-7ST552E3.js} +17 -4
  19. package/dist/chunks/{chunk-TAZ5ZAKG.js → chunk-AFKB6VMO.js} +2 -2
  20. package/dist/chunks/{chunk-CV4S27SS.js → chunk-ASBP32T6.js} +1 -1
  21. package/dist/chunks/{chunk-CQJRLNTX.js → chunk-AYLY3ZVL.js} +2 -2
  22. package/dist/chunks/{chunk-AWCID36T.js → chunk-BMKU5KEL.js} +1 -1
  23. package/dist/chunks/{chunk-E6LFKMI2.js → chunk-BQG777JE.js} +794 -124
  24. package/dist/chunks/{chunk-VWYNSJXI.js → chunk-CBHLLOGZ.js} +8 -8
  25. package/dist/chunks/{chunk-CSCSGSQG.js → chunk-CMRZ4KI4.js} +5 -5
  26. package/dist/chunks/{chunk-TIWAL2YU.js → chunk-DG6IMLCF.js} +6 -6
  27. package/dist/chunks/{chunk-YIHOS3ZF.js → chunk-FRAXI2WT.js} +1 -1
  28. package/dist/chunks/{chunk-7XX4ZEOV.js → chunk-FWKSJYDV.js} +1 -1
  29. package/dist/chunks/{chunk-OHER4DGX.js → chunk-FXD67VN5.js} +25 -9
  30. package/dist/chunks/{chunk-GUWPUX2Y.js → chunk-GK3RE3AC.js} +4 -4
  31. package/dist/chunks/{chunk-JNU3DTEV.js → chunk-IFNCPWH5.js} +9 -9
  32. package/dist/chunks/{chunk-PIMIKY4X.js → chunk-IJ4X426J.js} +1 -1
  33. package/dist/chunks/{chunk-NSU2BTRS.js → chunk-KD2N44NG.js} +4 -4
  34. package/dist/chunks/{chunk-TVXCXIRO.js → chunk-L3UXB2CW.js} +1 -1
  35. package/dist/chunks/{chunk-JJQP3PYM.js → chunk-MHCGKUI7.js} +5 -5
  36. package/dist/chunks/{chunk-47VQ6H2S.js → chunk-MUMITVZP.js} +2 -2
  37. package/dist/chunks/{chunk-L7CEMAJG.js → chunk-NGGLYKNU.js} +27 -5
  38. package/dist/chunks/{chunk-ZKUHCL6O.js → chunk-NJCM5JJN.js} +5 -5
  39. package/dist/chunks/{chunk-5LX2JDZP.js → chunk-O75LSD3C.js} +1 -1
  40. package/dist/chunks/{chunk-OX7KI3LF.js → chunk-QFAS4OVW.js} +18 -0
  41. package/dist/chunks/{chunk-4JTF6RD7.js → chunk-SSBYESJ5.js} +4 -4
  42. package/dist/chunks/{chunk-G75NFPIT.js → chunk-WNAKOXGK.js} +1 -1
  43. package/dist/chunks/{chunk-PPUWG2UB.js → chunk-WVPMR7XV.js} +58 -25
  44. package/dist/chunks/{chunk-CYNB6LL4.js → chunk-XNFHNTS2.js} +1 -1
  45. package/dist/chunks/{chunk-M3OSDZPY.js → chunk-XSYZDMUP.js} +16 -7
  46. package/dist/chunks/{chunk-VLPLCJZC.js → chunk-ZSFEACZU.js} +1 -1
  47. package/dist/chunks/{clear-TNGRDA7D.js → clear-X7M4WGBC.js} +11 -11
  48. package/dist/chunks/{compile-vercel-config-ERLXKKWW.js → compile-vercel-config-FBOZBWJC.js} +7 -7
  49. package/dist/chunks/{config-7EDKML5Q.js → config-KGW667XC.js} +9 -9
  50. package/dist/chunks/{config-H22EE765.js → config-RYPSCAR7.js} +11 -11
  51. package/dist/chunks/{delete-LORYIZHY.js → delete-OXYXXPHR.js} +8 -8
  52. package/dist/chunks/{delete-Q4S5F2AI.js → delete-VK6FTDBI.js} +9 -9
  53. package/dist/chunks/{disable-HKWCBDJC.js → disable-XRJTKNX4.js} +8 -8
  54. package/dist/chunks/{discard-UCCRF2JQ.js → discard-NAPSPR6Y.js} +8 -8
  55. package/dist/chunks/{edit-AWL35PYQ.js → edit-34GDLPQG.js} +10 -10
  56. package/dist/chunks/{edit-6IM6VRBR.js → edit-WLG4GLU3.js} +10 -10
  57. package/dist/chunks/{enable-GN3D3L3V.js → enable-IDKKVXKB.js} +8 -8
  58. package/dist/chunks/{exec-CNBOV577.js → exec-XH4K34JM.js} +3 -3
  59. package/dist/chunks/{export-HHRVFALV.js → export-MPMU3FYY.js} +8 -8
  60. package/dist/chunks/{image-4DCU4VPP.js → image-RZ2A4FWP.js} +6 -6
  61. package/dist/chunks/{import-builders-DVG3HOTF.js → import-builders-GZPE5N44.js} +9 -9
  62. package/dist/chunks/{inspect-B3OWUFLH.js → inspect-56S2DKPO.js} +11 -11
  63. package/dist/chunks/{inspect-VPME6UC7.js → inspect-EVDBNPP4.js} +11 -11
  64. package/dist/chunks/{inspect-TGOJDKIT.js → inspect-KGEMHV2T.js} +9 -9
  65. package/dist/chunks/{inspect-VLGKNHJW.js → inspect-OOV2ORKD.js} +11 -11
  66. package/dist/chunks/{inspect-TUW67CFZ.js → inspect-X2Y5FDKR.js} +10 -10
  67. package/dist/chunks/{list-K552ITMK.js → list-FWLSZYMO.js} +9 -9
  68. package/dist/chunks/{list-2DPKDHRV.js → list-H357CF7M.js} +10 -10
  69. package/dist/chunks/{list-TK2JO7BK.js → list-TWSOAQRB.js} +8 -8
  70. package/dist/chunks/{login-HRWEKW5P.js → login-54OPNB5E.js} +21 -12
  71. package/dist/chunks/{ls-JSV2WZVF.js → ls-6JHFSJBJ.js} +11 -11
  72. package/dist/chunks/{ls-O2WYF5UL.js → ls-DU3S2GBJ.js} +11 -11
  73. package/dist/chunks/{ls-IOXGXEY4.js → ls-VDFNIR5H.js} +10 -10
  74. package/dist/chunks/{ls-M5TYGFP5.js → ls-WFMTVJOO.js} +11 -11
  75. package/dist/chunks/{ls-YIF3KLF3.js → ls-WGIRTAVM.js} +11 -11
  76. package/dist/chunks/{ls-TM6NTZEB.js → ls-ZMR5RMU4.js} +9 -9
  77. package/dist/chunks/{open-FWAVEWGU.js → open-RCSCNKHF.js} +9 -9
  78. package/dist/chunks/{permissions-DPFYL47Z.js → permissions-XNN37R4N.js} +7 -7
  79. package/dist/chunks/{publish-63CGFKQR.js → publish-PLXEACYY.js} +8 -8
  80. package/dist/chunks/{push-T5ZTBW3P.js → push-EFYSB52Q.js} +11 -11
  81. package/dist/chunks/{query-B6O3EMEV.js → query-EKTXDOL7.js} +11 -11
  82. package/dist/chunks/{reorder-ANV4NMKH.js → reorder-OSA7D2RG.js} +8 -8
  83. package/dist/chunks/{reply-C73KGOCG.js → reply-6M2IYKLK.js} +10 -10
  84. package/dist/chunks/{resolve-IHSIVPEE.js → resolve-MCX5STKN.js} +9 -9
  85. package/dist/chunks/{restore-GSUNXP2O.js → restore-52OEP3NL.js} +8 -8
  86. package/dist/chunks/{rm-M7IJC2WZ.js → rm-2VAJFK25.js} +11 -11
  87. package/dist/chunks/{rm-RV5SQFQA.js → rm-4BJN2LJX.js} +11 -13
  88. package/dist/chunks/{rm-4O74PS4Q.js → rm-IYEDZOMN.js} +11 -11
  89. package/dist/chunks/{rm-PRINF4OU.js → rm-QW35WHSK.js} +11 -11
  90. package/dist/chunks/{rm-YDTK5ESZ.js → rm-TXV4GB4L.js} +10 -10
  91. package/dist/chunks/{routes-SZI2G4SE.js → routes-2OLIBRYX.js} +3 -3
  92. package/dist/chunks/{rule-inspect-ZZC53FLP.js → rule-inspect-WOBAN3Y2.js} +10 -10
  93. package/dist/chunks/{rules-SAOSSGFI.js → rules-CUJRAZYO.js} +10 -10
  94. package/dist/chunks/{schema-23ZFAKDU.js → schema-45SJNY5L.js} +4 -4
  95. package/dist/chunks/{schema-2Q3QRMRO.js → schema-VCGEJAOG.js} +9 -9
  96. package/dist/chunks/{set-L47ZCZBJ.js → set-2QSXMDVF.js} +9 -9
  97. package/dist/chunks/{tags-2TWLM77N.js → tags-NHX2VQ7E.js} +5 -5
  98. package/dist/chunks/{types-G3PEUIJH.js → types-JGANJ5EQ.js} +3 -3
  99. package/dist/chunks/{update-SZH2VBD6.js → update-EOHXTT4N.js} +12 -12
  100. package/dist/commands/build/builder-worker.cjs +281 -0
  101. package/dist/commands/build/index.js +798 -236
  102. package/dist/commands/deploy/index.js +103 -31
  103. package/dist/commands/dev/index.js +983 -176
  104. package/dist/commands/env/index.js +1167 -542
  105. package/dist/commands/link/index.js +10 -10
  106. package/dist/commands/list/index.js +10 -10
  107. package/dist/commands-bulk.js +2002 -962
  108. package/dist/index.js +16 -16
  109. package/dist/version.mjs +1 -1
  110. package/package.json +48 -48
  111. package/dist/chunks/chunk-HGRWPPYB.js +0 -18
@@ -6,11 +6,11 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  pullSubcommand
9
- } from "./chunk-OHER4DGX.js";
9
+ } from "./chunk-FXD67VN5.js";
10
10
  import {
11
11
  TelemetryClient,
12
12
  require_graceful_fs
13
- } from "./chunk-CYNB6LL4.js";
13
+ } from "./chunk-XNFHNTS2.js";
14
14
  import {
15
15
  AGENT_REASON,
16
16
  AGENT_STATUS,
@@ -21,13 +21,13 @@ import {
21
21
  outputActionRequired,
22
22
  outputAgentError,
23
23
  shouldEmitNonInteractiveCommandError
24
- } from "./chunk-L7CEMAJG.js";
24
+ } from "./chunk-NGGLYKNU.js";
25
25
  import {
26
26
  require_ms
27
27
  } from "./chunk-GGP5R3FU.js";
28
28
  import {
29
29
  printError
30
- } from "./chunk-CQJRLNTX.js";
30
+ } from "./chunk-AYLY3ZVL.js";
31
31
  import {
32
32
  parseArguments
33
33
  } from "./chunk-57RHXXXG.js";
@@ -55,7 +55,7 @@ import {
55
55
  TooManyRequests,
56
56
  code,
57
57
  isAPIError
58
- } from "./chunk-AWCID36T.js";
58
+ } from "./chunk-BMKU5KEL.js";
59
59
  import {
60
60
  getCommandName,
61
61
  getCommandNamePlain,
@@ -81,7 +81,7 @@ import {
81
81
  require_cli_spinners,
82
82
  require_dist,
83
83
  require_escape_string_regexp
84
- } from "./chunk-OX7KI3LF.js";
84
+ } from "./chunk-QFAS4OVW.js";
85
85
  import {
86
86
  require_ansi_styles,
87
87
  require_source,
@@ -8025,7 +8025,7 @@ var require_jsonfile = __commonJS({
8025
8025
  }
8026
8026
  return obj;
8027
8027
  }
8028
- var readFile7 = universalify.fromPromise(_readFile);
8028
+ var readFile8 = universalify.fromPromise(_readFile);
8029
8029
  function readFileSync(file, options = {}) {
8030
8030
  if (typeof options === "string") {
8031
8031
  options = { encoding: options };
@@ -8057,7 +8057,7 @@ var require_jsonfile = __commonJS({
8057
8057
  return fs5.writeFileSync(file, str, options);
8058
8058
  }
8059
8059
  module.exports = {
8060
- readFile: readFile7,
8060
+ readFile: readFile8,
8061
8061
  readFileSync,
8062
8062
  writeFile: writeFile5,
8063
8063
  writeFileSync
@@ -13753,10 +13753,10 @@ var require_read_config_file = __commonJS({
13753
13753
  var import_smol_toml3 = __require("smol-toml");
13754
13754
  var import_fs6 = __require("fs");
13755
13755
  var import_error_utils5 = require_dist();
13756
- var { readFile: readFile7 } = import_fs6.promises;
13756
+ var { readFile: readFile8 } = import_fs6.promises;
13757
13757
  async function readFileOrNull(file) {
13758
13758
  try {
13759
- const data = await readFile7(file);
13759
+ const data = await readFile8(file);
13760
13760
  return data;
13761
13761
  } catch (error) {
13762
13762
  if (!(0, import_error_utils5.isErrnoException)(error)) {
@@ -13835,7 +13835,7 @@ var require_frameworks = __commonJS({
13835
13835
  var frameworks_exports = {};
13836
13836
  __export2(frameworks_exports, {
13837
13837
  default: () => frameworks_default,
13838
- frameworkList: () => frameworkList5,
13838
+ frameworkList: () => frameworkList6,
13839
13839
  frameworks: () => frameworks
13840
13840
  });
13841
13841
  module.exports = __toCommonJS2(frameworks_exports);
@@ -13843,7 +13843,7 @@ var require_frameworks = __commonJS({
13843
13843
  var import_fs6 = __require("fs");
13844
13844
  var import_read_config_file = require_read_config_file();
13845
13845
  __reExport(frameworks_exports, require_types(), module.exports);
13846
- var { readdir, readFile: readFile7, unlink: unlink2 } = import_fs6.promises;
13846
+ var { readdir, readFile: readFile8, unlink: unlink2 } = import_fs6.promises;
13847
13847
  var frameworks = [
13848
13848
  {
13849
13849
  // A `Dockerfile.vercel` / `Containerfile.vercel` is an explicit opt-in to
@@ -14015,7 +14015,7 @@ var require_frameworks = __commonJS({
14015
14015
  "public",
14016
14016
  "__now_routes_g4t5bY.json"
14017
14017
  );
14018
- const content = await readFile7(nowRoutesPath, "utf8");
14018
+ const content = await readFile8(nowRoutesPath, "utf8");
14019
14019
  const nowRoutes = JSON.parse(content);
14020
14020
  try {
14021
14021
  await unlink2(nowRoutesPath);
@@ -17819,7 +17819,6 @@ var require_frameworks = __commonJS({
17819
17819
  {
17820
17820
  name: "Rust",
17821
17821
  slug: "rust",
17822
- experimental: true,
17823
17822
  runtimeFramework: true,
17824
17823
  logo: "https://api-frameworks.vercel.sh/framework-logos/rust.svg",
17825
17824
  tagline: "A language empowering everyone to build reliable and efficient software.",
@@ -17828,6 +17827,8 @@ var require_frameworks = __commonJS({
17828
17827
  useRuntime: { src: "src/main.rs", use: "@vercel/rust" },
17829
17828
  ignoreRuntimes: ["@vercel/rust"],
17830
17829
  detectors: {
17830
+ // Do not detect on `[[bin]]` declarations: `api/**/*.rs` projects
17831
+ // declare one per handler and must stay framework-less.
17831
17832
  every: [
17832
17833
  {
17833
17834
  path: "Cargo.toml"
@@ -18229,8 +18230,8 @@ var require_frameworks = __commonJS({
18229
18230
  getOutputDirName: async () => "public"
18230
18231
  }
18231
18232
  ];
18232
- var frameworkList5 = frameworks;
18233
- var frameworks_default = frameworkList5;
18233
+ var frameworkList6 = frameworks;
18234
+ var frameworks_default = frameworkList6;
18234
18235
  }
18235
18236
  });
18236
18237
 
@@ -20341,7 +20342,7 @@ var require_detect_builders = __commonJS({
20341
20342
  var import_minimatch = __toESM2(require_minimatch());
20342
20343
  var import_semver = require_semver();
20343
20344
  var import_path19 = __require("path");
20344
- var import_frameworks5 = require_frameworks();
20345
+ var import_frameworks6 = require_frameworks();
20345
20346
  var import_is_official_runtime = require_is_official_runtime();
20346
20347
  var import_build_utils11 = __require("@vercel/build-utils");
20347
20348
  var import_python = require_python();
@@ -20371,11 +20372,11 @@ var require_detect_builders = __commonJS({
20371
20372
  }
20372
20373
  var REGEX_NON_VERCEL_PLATFORM_FILES2 = getStaticFilesPattern();
20373
20374
  var slugToFramework = new Map(
20374
- import_frameworks5.frameworkList.map((f) => [f.slug, f])
20375
+ import_frameworks6.frameworkList.map((f) => [f.slug, f])
20375
20376
  );
20376
20377
  var builderToFrameworks2 = (() => {
20377
20378
  const map = /* @__PURE__ */ new Map();
20378
- for (const f of import_frameworks5.frameworkList) {
20379
+ for (const f of import_frameworks6.frameworkList) {
20379
20380
  if (!f.useRuntime?.use)
20380
20381
  continue;
20381
20382
  const builder = f.useRuntime.use;
@@ -20458,7 +20459,10 @@ var require_detect_builders = __commonJS({
20458
20459
  const absolutePathCache = /* @__PURE__ */ new Map();
20459
20460
  const { buildCommand, outputDirectory } = projectSettings;
20460
20461
  const frameworkConfig = slugToFramework.get(framework || "");
20461
- const ignoreRuntimes = new Set(frameworkConfig?.ignoreRuntimes);
20462
+ const rustStaticOutput = isRustStaticOutput(framework, projectSettings);
20463
+ const ignoreRuntimes = new Set(
20464
+ rustStaticOutput ? void 0 : frameworkConfig?.ignoreRuntimes
20465
+ );
20462
20466
  const withTag = options.tag ? `@${options.tag}` : "";
20463
20467
  const apiMatches = getApiMatches().filter(
20464
20468
  (b) => (
@@ -20533,7 +20537,8 @@ var require_detect_builders = __commonJS({
20533
20537
  addToUsedFunctions(proxyBuilder);
20534
20538
  apiBuilders.unshift(proxyBuilder);
20535
20539
  }
20536
- if (!makeFrontendStatic && (hasBuildScript(pkg) || buildCommand || framework)) {
20540
+ const rustStaticPrebuilt = rustStaticOutput && !pkg && !buildCommand;
20541
+ if (!makeFrontendStatic && !rustStaticPrebuilt && (hasBuildScript(pkg) || buildCommand || framework)) {
20537
20542
  frontendBuilder = detectFrontBuilder(
20538
20543
  pkg,
20539
20544
  files,
@@ -20830,6 +20835,10 @@ var require_detect_builders = __commonJS({
20830
20835
  const { scripts = {} } = pkg || {};
20831
20836
  return Boolean(scripts && scripts["build"]);
20832
20837
  }
20838
+ function isRustStaticOutput(framework, projectSettings) {
20839
+ return framework === "rust" && typeof projectSettings.outputDirectory === "string" && projectSettings.outputDirectory !== "" && // The framework preset's display default; not a real directory.
20840
+ projectSettings.outputDirectory !== "N/A";
20841
+ }
20833
20842
  function detectFrontBuilder(pkg, files, usedFunctions, fallbackEntrypoint, options) {
20834
20843
  const { tag, projectSettings = {} } = options;
20835
20844
  const withTag = tag ? `@${tag}` : "";
@@ -20875,7 +20884,7 @@ var require_detect_builders = __commonJS({
20875
20884
  });
20876
20885
  }
20877
20886
  const f = slugToFramework.get(framework || "");
20878
- if (f && f.useRuntime) {
20887
+ if (f && f.useRuntime && !isRustStaticOutput(framework, projectSettings)) {
20879
20888
  const { src, use } = f.useRuntime;
20880
20889
  const shouldUseUnifiedBackend = (0, import_build_utils11.isExperimentalBackendsEnabled)() && import_build_utils11.BACKEND_BUILDERS.includes(use);
20881
20890
  const finalUse = shouldUseUnifiedBackend ? import_build_utils11.UNIFIED_BACKEND_BUILDER : use;
@@ -21506,11 +21515,11 @@ var require_detect_framework = __commonJS({
21506
21515
  const isEnabled = (val) => val === "1" || typeof val === "string" && val.toLowerCase() === "true";
21507
21516
  return isEnabled(experimentalEnv);
21508
21517
  }
21509
- function filterFrameworkList(frameworkList5, useExperimentalFrameworks) {
21518
+ function filterFrameworkList(frameworkList6, useExperimentalFrameworks) {
21510
21519
  if (shouldIncludeExperimentalFrameworks(useExperimentalFrameworks)) {
21511
- return frameworkList5;
21520
+ return frameworkList6;
21512
21521
  }
21513
- return frameworkList5.filter((f) => {
21522
+ return frameworkList6.filter((f) => {
21514
21523
  const experimental = f.experimental;
21515
21524
  return !experimental;
21516
21525
  });
@@ -21627,11 +21636,11 @@ var require_detect_framework = __commonJS({
21627
21636
  }
21628
21637
  async function detectFramework2({
21629
21638
  fs: fs5,
21630
- frameworkList: frameworkList5,
21639
+ frameworkList: frameworkList6,
21631
21640
  useExperimentalFrameworks
21632
21641
  }) {
21633
21642
  const filteredList = filterFrameworkList(
21634
- frameworkList5,
21643
+ frameworkList6,
21635
21644
  useExperimentalFrameworks
21636
21645
  );
21637
21646
  const result = await Promise.all(
@@ -21647,11 +21656,11 @@ var require_detect_framework = __commonJS({
21647
21656
  }
21648
21657
  async function detectFrameworks3({
21649
21658
  fs: fs5,
21650
- frameworkList: frameworkList5,
21659
+ frameworkList: frameworkList6,
21651
21660
  useExperimentalFrameworks
21652
21661
  }) {
21653
21662
  const filteredList = filterFrameworkList(
21654
- frameworkList5,
21663
+ frameworkList6,
21655
21664
  useExperimentalFrameworks
21656
21665
  );
21657
21666
  const result = await Promise.all(
@@ -21667,11 +21676,11 @@ var require_detect_framework = __commonJS({
21667
21676
  }
21668
21677
  async function detectFrameworkRecord2({
21669
21678
  fs: fs5,
21670
- frameworkList: frameworkList5,
21679
+ frameworkList: frameworkList6,
21671
21680
  useExperimentalFrameworks
21672
21681
  }) {
21673
21682
  const filteredList = filterFrameworkList(
21674
- frameworkList5,
21683
+ frameworkList6,
21675
21684
  useExperimentalFrameworks
21676
21685
  );
21677
21686
  const result = await Promise.all(
@@ -21746,7 +21755,7 @@ var require_get_project_paths = __commonJS({
21746
21755
  });
21747
21756
  module.exports = __toCommonJS2(get_project_paths_exports);
21748
21757
  var import_detect_framework = require_detect_framework();
21749
- var import_frameworks5 = require_frameworks();
21758
+ var import_frameworks6 = require_frameworks();
21750
21759
  var MAX_DEPTH_TRAVERSE = 3;
21751
21760
  var getProjectPaths2 = async ({
21752
21761
  fs: fs5,
@@ -21763,7 +21772,7 @@ var require_get_project_paths = __commonJS({
21763
21772
  }
21764
21773
  const framework = await (0, import_detect_framework.detectFramework)({
21765
21774
  fs: fs5.chdir(topPath),
21766
- frameworkList: import_frameworks5.frameworkList
21775
+ frameworkList: import_frameworks6.frameworkList
21767
21776
  });
21768
21777
  if (framework !== null)
21769
21778
  allPaths.push(topPath);
@@ -21925,7 +21934,7 @@ var require_local_file_system_detector = __commonJS({
21925
21934
  LocalFileSystemDetector: () => LocalFileSystemDetector6
21926
21935
  });
21927
21936
  module.exports = __toCommonJS2(local_file_system_detector_exports);
21928
- var import_promises4 = __toESM2(__require("fs/promises"));
21937
+ var import_promises5 = __toESM2(__require("fs/promises"));
21929
21938
  var import_path19 = __require("path");
21930
21939
  var import_filesystem = require_filesystem();
21931
21940
  var import_error_utils5 = require_dist();
@@ -21936,7 +21945,7 @@ var require_local_file_system_detector = __commonJS({
21936
21945
  }
21937
21946
  async _hasPath(name) {
21938
21947
  try {
21939
- await import_promises4.default.stat(this.getFilePath(name));
21948
+ await import_promises5.default.stat(this.getFilePath(name));
21940
21949
  return true;
21941
21950
  } catch (err) {
21942
21951
  if ((0, import_error_utils5.isErrnoException)(err) && err.code === "ENOENT") {
@@ -21946,15 +21955,15 @@ var require_local_file_system_detector = __commonJS({
21946
21955
  }
21947
21956
  }
21948
21957
  _readFile(name) {
21949
- return import_promises4.default.readFile(this.getFilePath(name));
21958
+ return import_promises5.default.readFile(this.getFilePath(name));
21950
21959
  }
21951
21960
  async _isFile(name) {
21952
- const stat2 = await import_promises4.default.stat(this.getFilePath(name));
21961
+ const stat2 = await import_promises5.default.stat(this.getFilePath(name));
21953
21962
  return stat2.isFile();
21954
21963
  }
21955
21964
  async _readdir(dir) {
21956
21965
  const dirPath = this.getFilePath(dir);
21957
- const entries = await import_promises4.default.readdir(dirPath, { withFileTypes: true });
21966
+ const entries = await import_promises5.default.readdir(dirPath, { withFileTypes: true });
21958
21967
  const result = [];
21959
21968
  for (const entry of entries) {
21960
21969
  let type;
@@ -32355,7 +32364,7 @@ var require_utils3 = __commonJS({
32355
32364
  getInternalServiceWorkerPathPrefix: () => import_build_utils11.getInternalServiceWorkerPathPrefix,
32356
32365
  hasFile: () => hasFile,
32357
32366
  inferRuntimeFromFramework: () => inferRuntimeFromFramework,
32358
- inferServiceRuntime: () => inferServiceRuntime,
32367
+ inferServiceRuntime: () => inferServiceRuntime2,
32359
32368
  isBFFFramework: () => isBFFFramework,
32360
32369
  isFrontendFramework: () => isFrontendFramework,
32361
32370
  isRouteOwningBuilder: () => isRouteOwningBuilder2,
@@ -32365,9 +32374,9 @@ var require_utils3 = __commonJS({
32365
32374
  });
32366
32375
  module.exports = __toCommonJS2(utils_exports);
32367
32376
  var import_build_utils11 = __require("@vercel/build-utils");
32368
- var import_frameworks5 = require_frameworks();
32377
+ var import_frameworks6 = require_frameworks();
32369
32378
  var import_types = require_types3();
32370
- var DETECTION_FRAMEWORKS = import_frameworks5.frameworkList.filter(
32379
+ var DETECTION_FRAMEWORKS = import_frameworks6.frameworkList.filter(
32371
32380
  (framework) => !framework.experimental || framework.runtimeFramework
32372
32381
  );
32373
32382
  function stripTrailingSlash(p) {
@@ -32434,7 +32443,7 @@ var require_utils3 = __commonJS({
32434
32443
  (framework) => inferRuntimeFromFramework(framework.slug) === runtime
32435
32444
  );
32436
32445
  }
32437
- function inferServiceRuntime(config) {
32446
+ function inferServiceRuntime2(config) {
32438
32447
  if (config.runtime && config.runtime in import_types.RUNTIME_BUILDERS) {
32439
32448
  return config.runtime;
32440
32449
  }
@@ -32581,11 +32590,11 @@ var require_resolve2 = __commonJS({
32581
32590
  var import_build_utils11 = __require("@vercel/build-utils");
32582
32591
  var import_types = require_types3();
32583
32592
  var import_utils4 = require_utils3();
32584
- var import_frameworks5 = require_frameworks();
32593
+ var import_frameworks6 = require_frameworks();
32585
32594
  var import_fs_detectors6 = require_dist2();
32586
32595
  var import_routing_utils2 = require_dist5();
32587
32596
  var import_build_utils22 = __require("@vercel/build-utils");
32588
- var frameworksBySlug2 = new Map(import_frameworks5.frameworkList.map((f) => [f.slug, f]));
32597
+ var frameworksBySlug2 = new Map(import_frameworks6.frameworkList.map((f) => [f.slug, f]));
32589
32598
  var PYTHON_MODULE_ATTR_RE = /^([A-Za-z_][\w]*(?:\.[A-Za-z_][\w]*)*):([A-Za-z_][\w]*)$/;
32590
32599
  function parsePyModuleAttrEntrypoint(entrypoint) {
32591
32600
  const match = PYTHON_MODULE_ATTR_RE.exec(entrypoint);
@@ -32761,7 +32770,7 @@ var require_resolve2 = __commonJS({
32761
32770
  runtime
32762
32771
  }) {
32763
32772
  const serviceFs = workspace === "." ? fs5 : fs5.chdir(workspace);
32764
- const frameworkCandidates = (0, import_utils4.filterFrameworksByRuntime)(import_frameworks5.frameworkList, runtime);
32773
+ const frameworkCandidates = (0, import_utils4.filterFrameworksByRuntime)(import_frameworks6.frameworkList, runtime);
32765
32774
  const frameworks = await (0, import_fs_detectors6.detectFrameworks)({
32766
32775
  fs: serviceFs,
32767
32776
  frameworkList: frameworkCandidates
@@ -33481,11 +33490,11 @@ var require_resolve_v2 = __commonJS({
33481
33490
  module.exports = __toCommonJS2(resolve_v2_exports);
33482
33491
  var import_path19 = __require("path");
33483
33492
  var import_build_utils11 = __require("@vercel/build-utils");
33484
- var import_frameworks5 = require_frameworks();
33493
+ var import_frameworks6 = require_frameworks();
33485
33494
  var import_types = require_types3();
33486
33495
  var import_resolve = require_resolve2();
33487
33496
  var import_utils4 = require_utils3();
33488
- var frameworksBySlug2 = new Map(import_frameworks5.frameworkList.map((f) => [f.slug, f]));
33497
+ var frameworksBySlug2 = new Map(import_frameworks6.frameworkList.map((f) => [f.slug, f]));
33489
33498
  var MAX_SERVICE_NAME_LENGTH = 64;
33490
33499
  var SERVICE_NAME_REGEX = /^[a-z]([a-z_-]*[a-z])?$/;
33491
33500
  function isValidServiceName(name) {
@@ -33873,7 +33882,7 @@ var require_auto_detect = __commonJS({
33873
33882
  });
33874
33883
  module.exports = __toCommonJS2(auto_detect_exports);
33875
33884
  var import_fs_detectors6 = require_dist2();
33876
- var import_frameworks5 = require_frameworks();
33885
+ var import_frameworks6 = require_frameworks();
33877
33886
  var import_utils4 = require_utils3();
33878
33887
  var FRONTEND_DIR = "frontend";
33879
33888
  var APPS_WEB_DIR = "apps/web";
@@ -33884,7 +33893,7 @@ var require_auto_detect = __commonJS({
33884
33893
  const { fs: fs5, detectEntrypoint } = options;
33885
33894
  const rootFrameworks = await (0, import_fs_detectors6.detectFrameworks)({
33886
33895
  fs: fs5,
33887
- frameworkList: import_frameworks5.frameworkList
33896
+ frameworkList: import_frameworks6.frameworkList
33888
33897
  });
33889
33898
  if (rootFrameworks.length > 1) {
33890
33899
  const frameworkNames = rootFrameworks.map((f) => f.name).join(", ");
@@ -33910,7 +33919,7 @@ var require_auto_detect = __commonJS({
33910
33919
  const frontendFs = fs5.chdir(frontendLocation);
33911
33920
  const frontendFrameworks = await (0, import_fs_detectors6.detectFrameworks)({
33912
33921
  fs: frontendFs,
33913
- frameworkList: import_frameworks5.frameworkList
33922
+ frameworkList: import_frameworks6.frameworkList
33914
33923
  });
33915
33924
  if (frontendFrameworks.length > 1) {
33916
33925
  const frameworkNames = frontendFrameworks.map((f) => f.name).join(", ");
@@ -35298,6 +35307,7 @@ var require_dist6 = __commonJS({
35298
35307
  getInternalServiceFunctionPath: () => import_utils4.getInternalServiceFunctionPath,
35299
35308
  getInternalServiceWorkerPath: () => import_utils4.getInternalServiceWorkerPath,
35300
35309
  getInternalServiceWorkerPathPrefix: () => import_utils4.getInternalServiceWorkerPathPrefix,
35310
+ inferServiceRuntime: () => import_utils4.inferServiceRuntime,
35301
35311
  isExperimentalService: () => import_build_utils11.isExperimentalService,
35302
35312
  isExperimentalServiceV2: () => import_build_utils11.isExperimentalServiceV2,
35303
35313
  isRouteOwningBuilder: () => import_utils4.isRouteOwningBuilder,
@@ -36906,7 +36916,7 @@ var require_jsonfile3 = __commonJS({
36906
36916
  } catch (_) {
36907
36917
  _fs = __require("fs");
36908
36918
  }
36909
- function readFile7(file, options, callback) {
36919
+ function readFile8(file, options, callback) {
36910
36920
  if (callback == null) {
36911
36921
  callback = options;
36912
36922
  options = {};
@@ -37005,7 +37015,7 @@ var require_jsonfile3 = __commonJS({
37005
37015
  return content;
37006
37016
  }
37007
37017
  var jsonfile = {
37008
- readFile: readFile7,
37018
+ readFile: readFile8,
37009
37019
  readFileSync,
37010
37020
  writeFile: writeFile5,
37011
37021
  writeFileSync
@@ -38000,7 +38010,7 @@ var require_package = __commonJS({
38000
38010
  "../client/package.json"(exports, module) {
38001
38011
  module.exports = {
38002
38012
  name: "@vercel/client",
38003
- version: "18.2.16",
38013
+ version: "18.2.19",
38004
38014
  main: "dist/index.js",
38005
38015
  typings: "dist/index.d.ts",
38006
38016
  homepage: "https://vercel.com",
@@ -45686,14 +45696,14 @@ var require_utils8 = __commonJS({
45686
45696
  });
45687
45697
  module.exports = __toCommonJS2(utils_exports);
45688
45698
  var import_node_fs2 = __toESM2(__require("fs"), 1);
45689
- var import_node_path2 = __require("path");
45699
+ var import_node_path3 = __require("path");
45690
45700
  var CONFIGURATION_FILENAMES = [
45691
45701
  "microfrontends.jsonc",
45692
45702
  "microfrontends.json"
45693
45703
  ];
45694
45704
  function findConfig({ dir }) {
45695
45705
  for (const filename of CONFIGURATION_FILENAMES) {
45696
- const maybeConfig = (0, import_node_path2.join)(dir, filename);
45706
+ const maybeConfig = (0, import_node_path3.join)(dir, filename);
45697
45707
  if (import_node_fs2.default.existsSync(maybeConfig)) {
45698
45708
  return maybeConfig;
45699
45709
  }
@@ -47805,7 +47815,7 @@ var require_BufferList = __commonJS({
47805
47815
  this.head = this.tail = null;
47806
47816
  this.length = 0;
47807
47817
  };
47808
- BufferList.prototype.join = function join14(s) {
47818
+ BufferList.prototype.join = function join15(s) {
47809
47819
  if (this.length === 0)
47810
47820
  return "";
47811
47821
  var p = this.head;
@@ -52813,7 +52823,7 @@ var require_archive = __commonJS({
52813
52823
  createTgzFiles: () => createTgzFiles
52814
52824
  });
52815
52825
  module.exports = __toCommonJS2(archive_exports);
52816
- var import_node_path2 = __require("path");
52826
+ var import_node_path3 = __require("path");
52817
52827
  var import_node_zlib = __require("zlib");
52818
52828
  var import_build_utils11 = __require("@vercel/build-utils");
52819
52829
  var import_tar_fs = __toESM2(require_tar_fs());
@@ -52822,7 +52832,7 @@ var require_archive = __commonJS({
52822
52832
  const filesToArchive = exclude ? fileList.filter((file) => !exclude.includes(file)) : fileList;
52823
52833
  debug?.("Packing tarball");
52824
52834
  const tarStream = import_tar_fs.default.pack(workPath, {
52825
- entries: filesToArchive.map((file) => (0, import_node_path2.relative)(workPath, file))
52835
+ entries: filesToArchive.map((file) => (0, import_node_path3.relative)(workPath, file))
52826
52836
  }).pipe((0, import_node_zlib.createGzip)());
52827
52837
  const chunkedTarBuffers = await (0, import_build_utils11.streamToBufferChunks)(tarStream);
52828
52838
  debug?.(`Packed tarball into ${chunkedTarBuffers.length} chunks`);
@@ -52830,7 +52840,7 @@ var require_archive = __commonJS({
52830
52840
  chunkedTarBuffers.map((chunk, index) => [
52831
52841
  (0, import_hashes.hash)(chunk),
52832
52842
  {
52833
- names: [(0, import_node_path2.join)(workPath, `.vercel/source.tgz.part${index + 1}`)],
52843
+ names: [(0, import_node_path3.join)(workPath, `.vercel/source.tgz.part${index + 1}`)],
52834
52844
  data: chunk,
52835
52845
  mode: 438
52836
52846
  }
@@ -53411,8 +53421,8 @@ var require_dist7 = __commonJS({
53411
53421
 
53412
53422
  // src/util/compile-vercel-config.ts
53413
53423
  var import_dotenv = __toESM(require_main(), 1);
53414
- import { mkdir, readFile as readFile6, writeFile as writeFile4, unlink, access } from "fs/promises";
53415
- import { join as join13, basename as basename4 } from "path";
53424
+ import { mkdir, readFile as readFile7, writeFile as writeFile4, unlink, access } from "fs/promises";
53425
+ import { join as join14, basename as basename4 } from "path";
53416
53426
  import { fork } from "child_process";
53417
53427
  import { parse as tomlParse2 } from "smol-toml";
53418
53428
 
@@ -53420,7 +53430,7 @@ import { parse as tomlParse2 } from "smol-toml";
53420
53430
  var import_ajv = __toESM(require_ajv(), 1);
53421
53431
  var import_fs_extra10 = __toESM(require_lib(), 1);
53422
53432
  import fs4 from "fs";
53423
- import { join as join12, relative as relative5 } from "path";
53433
+ import { join as join13, relative as relative5 } from "path";
53424
53434
  import { promisify } from "util";
53425
53435
 
53426
53436
  // src/util/projects/get-project-by-id-or-name.ts
@@ -56826,6 +56836,610 @@ function addDeltaSection(prefix, arr, changed = false) {
56826
56836
 
56827
56837
  // src/util/env/constants.ts
56828
56838
  var VERCEL_OIDC_TOKEN = "VERCEL_OIDC_TOKEN";
56839
+ var SENSITIVE_ENV_VALUE_PLACEHOLDER = "[SENSITIVE]";
56840
+
56841
+ // src/util/env/validate-env.ts
56842
+ var import_frameworks2 = __toESM(require_frameworks(), 1);
56843
+ import { readFile as readFile3 } from "fs/promises";
56844
+ import { join as join6 } from "path";
56845
+
56846
+ // src/util/env/secret-detection.ts
56847
+ var SERVER_ONLY_KEY_PATTERNS = [
56848
+ "access_token",
56849
+ "refresh_token",
56850
+ "client_secret",
56851
+ "webhook_secret",
56852
+ "api_key",
56853
+ "private_key",
56854
+ "service_account",
56855
+ "service_role",
56856
+ "database_url",
56857
+ "database_uri",
56858
+ "db_url",
56859
+ "postgres_url",
56860
+ "postgres_uri",
56861
+ "mysql_url",
56862
+ "mongo_url",
56863
+ "mongo_uri",
56864
+ "redis_url",
56865
+ "redis_uri",
56866
+ "amqp_url",
56867
+ "kafka_url",
56868
+ "elasticsearch_url",
56869
+ "password",
56870
+ "passwd",
56871
+ "pwd",
56872
+ "secret",
56873
+ "private",
56874
+ "key",
56875
+ "apikey",
56876
+ "auth",
56877
+ "token",
56878
+ "jwt",
56879
+ "signature",
56880
+ "cert",
56881
+ "pem",
56882
+ "salt",
56883
+ "bearer",
56884
+ "credential",
56885
+ "credentials",
56886
+ "creds"
56887
+ ];
56888
+ var SAFE_KEY_HINT_TOKENS = ["public", "publishable", "anon"];
56889
+ var WELL_KNOWN_SECRET_NAMES = /* @__PURE__ */ new Set([
56890
+ "DATABASE_URL",
56891
+ "DATABASE_URL_UNPOOLED",
56892
+ "POSTGRES_URL",
56893
+ "POSTGRES_URL_NON_POOLING",
56894
+ "POSTGRES_URL_NO_SSL",
56895
+ "POSTGRES_URL_UNPOOLED",
56896
+ "POSTGRES_PRISMA_URL",
56897
+ "MONGODB_URI",
56898
+ "MONGODB_URL",
56899
+ "MONGO_URI",
56900
+ "MONGO_URL",
56901
+ "MYSQL_URL",
56902
+ "MYSQL_URI",
56903
+ "REDIS_URL",
56904
+ "REDIS_TLS_URL",
56905
+ "KV_URL",
56906
+ "KV_REST_API_URL",
56907
+ "UPSTASH_REDIS_REST_URL",
56908
+ "GOOGLE_APPLICATION_CREDENTIALS",
56909
+ "AWS_ACCESS_KEY_ID"
56910
+ ]);
56911
+ var SECRET_SEGMENT_PATTERN = /(?:^|[_-])(SECRET|PASSWORD|PASSWD|PASSPHRASE|PWD|PGPASSWORD|TOKEN|CREDENTIAL|JWT|DSN|APIKEY|PRIVATEKEY|SALT|PEPPER|MNEMONIC|PEM|CIPHER)S?(?:[_-]|$)/i;
56912
+ var EXPLICIT_SECRET_TOKEN_PATTERN = /(?:^|[_-])(SECRET|PASSWORD|PASSWD|PASSPHRASE|PWD|PGPASSWORD|TOKEN|CREDENTIAL|MNEMONIC|PRIVATEKEY|APIKEY)S?(?:[_-]|$)/i;
56913
+ var SECRET_COMPOUND_PATTERNS = [
56914
+ /(?:^|[_-])(?:API|PRIVATE|SIGNING|ENCRYPTION|SESSION|COOKIE|CSRF|HMAC|ACCESS|APP|WRITE)[_-]?(?:KEY|SECRET)S?(?:[_-]|$)/i,
56915
+ /(?:^|[_-])(?:ACCESS|REFRESH|BEARER|AUTH)[_-]?TOKENS?(?:[_-]|$)/i,
56916
+ /(?:^|[_-])(?:WEBHOOK|SIGNING)[_-]?SECRETS?(?:[_-]|$)/i,
56917
+ /(?:^|[_-])SERVICE[_-]?(?:ROLE(?:[_-]?KEYS?)?|ACCOUNTS?)(?:[_-]|$)/i
56918
+ ];
56919
+ var NON_CREDENTIAL_KEY_TOKENS = /* @__PURE__ */ new Set([
56920
+ "PUBLIC",
56921
+ "PUBLISHABLE",
56922
+ "ANON",
56923
+ "PRIMARY",
56924
+ "PARTITION",
56925
+ "FOREIGN",
56926
+ "SORT",
56927
+ "HASH",
56928
+ "COMPOSITE",
56929
+ "INDEX",
56930
+ "UNIQUE",
56931
+ "NATURAL",
56932
+ "SURROGATE",
56933
+ "CACHE",
56934
+ "IDEMPOTENCY",
56935
+ "LOOKUP",
56936
+ "ROW",
56937
+ "SHARD",
56938
+ "CLUSTER",
56939
+ "LICENSE",
56940
+ "LICENCE",
56941
+ "PRODUCT",
56942
+ "TRANSLATION",
56943
+ "TRANSLATIONS",
56944
+ "I18N",
56945
+ "LOCALE",
56946
+ "RBAC",
56947
+ "ACL",
56948
+ "ROLE",
56949
+ "ROLES",
56950
+ "PERMISSION",
56951
+ "PERMISSIONS",
56952
+ "SCOPE",
56953
+ "SCOPES",
56954
+ "POLICY",
56955
+ "POLICIES"
56956
+ ]);
56957
+ var GENERIC_KEY_SUFFIX_PATTERN = /(?:^|[_-])([A-Z0-9]+)[_-]KEYS?$/i;
56958
+ var GENERIC_KEY_PREFIX_PATTERN = /^KEYS?[_-]([A-Z0-9]+)(?:[_-]|$)/i;
56959
+ var DB_URL_PATTERN = /(?:^|_)(?:DATABASE|POSTGRES|MONGO|MONGODB|MYSQL|REDIS|NEON|PLANETSCALE|TURSO|RDS)(?:_[A-Z0-9_]*)?_(?:URL|URI)(?:_[A-Z0-9_]+)?$/i;
56960
+ var SECRET_VALUE_PATTERNS = [
56961
+ /gh[opsru]_[A-Za-z0-9_]{20,}/,
56962
+ /github_pat_[A-Za-z0-9_]{20,}/,
56963
+ /glpat-[A-Za-z0-9_-]{20,}/,
56964
+ /(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{20,}/,
56965
+ /whsec_[A-Za-z0-9]{20,}/,
56966
+ /xox[abprs]-[A-Za-z0-9-]{20,}/,
56967
+ /xapp-[A-Za-z0-9-]{20,}/,
56968
+ /\b(?:AKIA|ASIA)[A-Z0-9]{16}\b/,
56969
+ /\bAIza[A-Za-z0-9_-]{30,}/,
56970
+ /sk-ant-[A-Za-z0-9_-]{20,}/,
56971
+ /sk-(?:proj|svcacct|admin)-[A-Za-z0-9_-]{20,}/,
56972
+ /\bsk-[A-Za-z0-9]{32,}\b/,
56973
+ /shp(?:at|ss|ca)_[a-fA-F0-9]{32}/,
56974
+ /npm_[A-Za-z0-9]{30,}/,
56975
+ /\bhf_[A-Za-z0-9_]{30,}/,
56976
+ /nvapi-[A-Za-z0-9_-]{40,}/,
56977
+ /SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}/,
56978
+ /key-[a-f0-9]{32}/,
56979
+ /glsa_[A-Za-z0-9_]{32}_[a-f0-9]{8}/,
56980
+ /pscale_pw_[A-Za-z0-9_-]{20,}/,
56981
+ /\bre_[A-Za-z0-9_]{30,}/,
56982
+ /dop_v1_[a-f0-9]{64}/,
56983
+ /sntrys_[A-Za-z0-9_-]{30,}/,
56984
+ /FlyV1 [A-Za-z0-9_-]{20,}/,
56985
+ /AccountKey=[A-Za-z0-9+/]{40,}=*/,
56986
+ /-----BEGIN [A-Z0-9 ]*PRIVATE KEY[A-Z0-9 ]*-----/,
56987
+ /-----BEGIN PGP MESSAGE-----/,
56988
+ /\beyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{8,}\b/,
56989
+ /[a-zA-Z][a-zA-Z0-9+.-]*:\/\/[A-Za-z0-9_.%-]*:[^@\s/]+(?<!\.\.)@/,
56990
+ /\bBearer\s+[A-Za-z0-9_+=/.-]{20,}/i,
56991
+ /(?:password|passwd|pwd|secret|token|api[_-]?key|access[_-]?token|refresh[_-]?token|private[_-]?key|auth)\s*[=:]\s*["']?[A-Za-z0-9_+=/.-]{12,}/i
56992
+ ];
56993
+ function tokenize(key) {
56994
+ return new Set(
56995
+ key.split(/(?<=[a-z])(?=[A-Z])/).flatMap((part) => part.split(/[_\-.]+/)).map((token) => token.toLowerCase()).filter(Boolean)
56996
+ );
56997
+ }
56998
+ function hasSafeKeyHint(key) {
56999
+ const tokens = tokenize(key);
57000
+ return SAFE_KEY_HINT_TOKENS.some((token) => tokens.has(token));
57001
+ }
57002
+ function hasGenericKeySuffix(key) {
57003
+ const precedingToken = GENERIC_KEY_SUFFIX_PATTERN.exec(key)?.[1]?.toUpperCase();
57004
+ return Boolean(
57005
+ precedingToken && !NON_CREDENTIAL_KEY_TOKENS.has(precedingToken)
57006
+ );
57007
+ }
57008
+ function hasGenericKeyPrefix(key) {
57009
+ const followingToken = GENERIC_KEY_PREFIX_PATTERN.exec(key)?.[1]?.toUpperCase();
57010
+ return Boolean(
57011
+ followingToken && !NON_CREDENTIAL_KEY_TOKENS.has(followingToken)
57012
+ );
57013
+ }
57014
+ function getMatchingServerOnlyKey(key) {
57015
+ const normalized = key.replace(/(?<=[a-z])(?=[A-Z])/g, "_").toLowerCase().replace(/[-.]+/g, "_");
57016
+ for (const pattern of SERVER_ONLY_KEY_PATTERNS) {
57017
+ if (pattern.includes("_") && normalized.includes(pattern))
57018
+ return pattern;
57019
+ }
57020
+ const tokens = tokenize(key);
57021
+ return SERVER_ONLY_KEY_PATTERNS.find(
57022
+ (pattern) => !pattern.includes("_") && tokens.has(pattern)
57023
+ ) ?? null;
57024
+ }
57025
+ function looksLikeSecret(key) {
57026
+ if (!key || hasSafeKeyHint(key))
57027
+ return false;
57028
+ if (WELL_KNOWN_SECRET_NAMES.has(key.toUpperCase()))
57029
+ return true;
57030
+ if (SECRET_SEGMENT_PATTERN.test(key))
57031
+ return true;
57032
+ if (SECRET_COMPOUND_PATTERNS.some((pattern) => pattern.test(key)))
57033
+ return true;
57034
+ if (DB_URL_PATTERN.test(key))
57035
+ return true;
57036
+ return hasGenericKeySuffix(key) || hasGenericKeyPrefix(key);
57037
+ }
57038
+ function looksLikeSecretValue(value) {
57039
+ const trimmed = value.trim();
57040
+ return Boolean(
57041
+ trimmed && SECRET_VALUE_PATTERNS.some((pattern) => pattern.test(trimmed))
57042
+ );
57043
+ }
57044
+ function shouldConfirmRotationBeforeDelete(env) {
57045
+ if (env.type === "system")
57046
+ return false;
57047
+ if (EXPLICIT_SECRET_TOKEN_PATTERN.test(env.key))
57048
+ return true;
57049
+ if (env.hasPublicPrefix || hasSafeKeyHint(env.key))
57050
+ return false;
57051
+ return looksLikeSecret(env.key);
57052
+ }
57053
+ function isFlagsSecretNeedingSplit(env) {
57054
+ if (env.key !== "FLAGS_SECRET")
57055
+ return false;
57056
+ if (env.type !== "plain" && env.type !== "encrypted")
57057
+ return false;
57058
+ return env.targets.length + (env.customEnvironmentIds?.length ?? 0) > 1;
57059
+ }
57060
+
57061
+ // src/util/env/validate-env.ts
57062
+ function getEnvValueWarnings(value) {
57063
+ const warnings = [];
57064
+ const normalized = value.replace(/\n$/, "");
57065
+ if (/^[ \t]+/.test(normalized)) {
57066
+ warnings.push({
57067
+ message: "starts with whitespace",
57068
+ requiresConfirmation: false
57069
+ });
57070
+ }
57071
+ if (/[ \t]+$/.test(normalized)) {
57072
+ warnings.push({
57073
+ message: "ends with whitespace",
57074
+ requiresConfirmation: false
57075
+ });
57076
+ }
57077
+ if (normalized.includes("\r") || normalized.includes("\n")) {
57078
+ warnings.push({
57079
+ message: "contains newlines",
57080
+ requiresConfirmation: false
57081
+ });
57082
+ }
57083
+ if (value.includes("\0")) {
57084
+ warnings.push({
57085
+ message: "contains null characters",
57086
+ requiresConfirmation: false
57087
+ });
57088
+ }
57089
+ if (value === "") {
57090
+ warnings.push({
57091
+ message: "is empty",
57092
+ requiresConfirmation: true
57093
+ });
57094
+ }
57095
+ if (value.length > 2 && (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'"))) {
57096
+ warnings.push({
57097
+ message: "includes surrounding quotes (these will be stored literally)",
57098
+ requiresConfirmation: false
57099
+ });
57100
+ }
57101
+ return warnings;
57102
+ }
57103
+ function formatWarnings(warnings) {
57104
+ if (warnings.length === 0)
57105
+ return null;
57106
+ const messages = warnings.map((w) => w.message);
57107
+ const startsIdx = messages.indexOf("starts with whitespace");
57108
+ const endsIdx = messages.indexOf("ends with whitespace");
57109
+ if (startsIdx !== -1 && endsIdx !== -1) {
57110
+ messages.splice(Math.max(startsIdx, endsIdx), 1);
57111
+ messages[Math.min(startsIdx, endsIdx)] = "starts and ends with whitespace";
57112
+ }
57113
+ if (messages.length === 1) {
57114
+ return `Value ${messages[0]}`;
57115
+ }
57116
+ if (messages.length === 2) {
57117
+ return `Value ${messages[0]} and ${messages[1]}`;
57118
+ }
57119
+ const last = messages.pop();
57120
+ return `Value ${messages.join(", ")}, and ${last}`;
57121
+ }
57122
+ var API_PUBLIC_PREFIXES = [
57123
+ "NEXT_PUBLIC_",
57124
+ "VUE_APP_",
57125
+ "REACT_APP_",
57126
+ "GATSBY_",
57127
+ "GRIDSOME_",
57128
+ "NUXT_PUBLIC_",
57129
+ "STORYBOOK_",
57130
+ "VITE_",
57131
+ "PUBLIC_",
57132
+ "EXPO_PUBLIC_",
57133
+ "NG_APP_",
57134
+ "REDWOOD_ENV_"
57135
+ ];
57136
+ var PUBLIC_PREFIXES = [
57137
+ .../* @__PURE__ */ new Set([
57138
+ ...API_PUBLIC_PREFIXES,
57139
+ ...import_frameworks2.frameworkList.map((f) => f.envPrefix).filter((prefix) => !!prefix)
57140
+ ])
57141
+ ];
57142
+ function hasOnlyWhitespaceWarnings(warnings) {
57143
+ return warnings.length > 0 && warnings.every(
57144
+ (w) => w.message === "starts with whitespace" || w.message === "ends with whitespace"
57145
+ );
57146
+ }
57147
+ function trimValue(value) {
57148
+ return value.replace(/\n$/, "").trim();
57149
+ }
57150
+ function normalizeStdinEnvValue(value) {
57151
+ let valueWithoutTrailingNewline = value;
57152
+ if (value.endsWith("\r\n")) {
57153
+ valueWithoutTrailingNewline = value.slice(0, -2);
57154
+ } else if (value.endsWith("\n")) {
57155
+ valueWithoutTrailingNewline = value.slice(0, -1);
57156
+ } else {
57157
+ return {
57158
+ value,
57159
+ strippedTrailingNewline: false
57160
+ };
57161
+ }
57162
+ if (valueWithoutTrailingNewline.includes("\n") || valueWithoutTrailingNewline.includes("\r")) {
57163
+ return {
57164
+ value,
57165
+ strippedTrailingNewline: false
57166
+ };
57167
+ }
57168
+ return {
57169
+ value: valueWithoutTrailingNewline,
57170
+ strippedTrailingNewline: true
57171
+ };
57172
+ }
57173
+ function getPublicPrefix(key) {
57174
+ const upperKey = key.toUpperCase();
57175
+ return PUBLIC_PREFIXES.find((p) => upperKey.startsWith(p)) || null;
57176
+ }
57177
+ function getFrameworkPublicPrefix(frameworkSlug, key) {
57178
+ const prefix = import_frameworks2.frameworkList.find(
57179
+ (framework) => framework.slug === frameworkSlug
57180
+ )?.envPrefix;
57181
+ return prefix && key.toUpperCase().startsWith(prefix.toUpperCase()) ? prefix : null;
57182
+ }
57183
+ function getApiPublicPrefix(key) {
57184
+ const upperKey = key.toUpperCase();
57185
+ return API_PUBLIC_PREFIXES.find((prefix) => upperKey.startsWith(prefix)) ?? null;
57186
+ }
57187
+ function parseSvelteKitPublicEnvVarPrefix(config) {
57188
+ if (!config.includes("publicPrefix")) {
57189
+ return { status: "ready", prefix: null };
57190
+ }
57191
+ const match = /publicPrefix:\s*(?:'(?<single>[^']*)'|"(?<double>[^"]*)"|`(?<template>[^`$]*)`)/.exec(
57192
+ config
57193
+ );
57194
+ const prefix = match?.groups?.single ?? match?.groups?.double ?? match?.groups?.template;
57195
+ return prefix === void 0 ? { status: "unavailable" } : { status: "ready", prefix };
57196
+ }
57197
+ async function getLocalSvelteKitPublicPrefixes(cwd, rootDirectory) {
57198
+ const projectRoot = rootDirectory ? join6(cwd, rootDirectory) : cwd;
57199
+ let config;
57200
+ try {
57201
+ config = await readFile3(join6(projectRoot, "svelte.config.js"), "utf8");
57202
+ } catch {
57203
+ return void 0;
57204
+ }
57205
+ const parsed = parseSvelteKitPublicEnvVarPrefix(config);
57206
+ if (parsed.status === "unavailable")
57207
+ return void 0;
57208
+ return [parsed.prefix ?? "PUBLIC_", "VITE_"];
57209
+ }
57210
+ function removePublicPrefix(key) {
57211
+ const prefix = getPublicPrefix(key);
57212
+ if (!prefix)
57213
+ return key;
57214
+ return key.slice(prefix.length);
57215
+ }
57216
+ async function validateEnvValue(opts) {
57217
+ let finalValue = opts.initialValue;
57218
+ let alreadyConfirmed = false;
57219
+ if (!opts.skipConfirm) {
57220
+ let valueAccepted = false;
57221
+ while (!valueAccepted) {
57222
+ const valueWarnings = getEnvValueWarnings(finalValue);
57223
+ const warningMessage = formatWarnings(valueWarnings);
57224
+ if (!warningMessage) {
57225
+ valueAccepted = true;
57226
+ break;
57227
+ }
57228
+ opts.showWarning(warningMessage);
57229
+ const canTrim = hasOnlyWhitespaceWarnings(valueWarnings);
57230
+ const choices = canTrim ? [
57231
+ { name: "Leave as is", value: "c" },
57232
+ { name: "Re-enter", value: "r" },
57233
+ { name: "Trim whitespace", value: "t" }
57234
+ ] : [
57235
+ { name: "Leave as is", value: "c" },
57236
+ { name: "Re-enter", value: "r" }
57237
+ ];
57238
+ const action = await opts.selectAction(choices);
57239
+ if (action === "c") {
57240
+ valueAccepted = true;
57241
+ if (valueWarnings.some((w) => w.requiresConfirmation)) {
57242
+ alreadyConfirmed = true;
57243
+ }
57244
+ } else if (action === "t") {
57245
+ finalValue = trimValue(finalValue);
57246
+ opts.showLog("Trimmed whitespace");
57247
+ } else {
57248
+ finalValue = await opts.promptForValue();
57249
+ }
57250
+ }
57251
+ } else {
57252
+ const valueWarnings = getEnvValueWarnings(finalValue);
57253
+ const warningMessage = formatWarnings(valueWarnings);
57254
+ if (warningMessage) {
57255
+ opts.showWarning(warningMessage);
57256
+ }
57257
+ }
57258
+ return { finalValue, alreadyConfirmed };
57259
+ }
57260
+ function getEnvKeyWarnings(key) {
57261
+ const warnings = [];
57262
+ const matchingPrefix = getPublicPrefix(key);
57263
+ if (matchingPrefix) {
57264
+ const nameWithoutPrefix = key.slice(matchingPrefix.length);
57265
+ const sensitiveMatch = looksLikeSecret(nameWithoutPrefix) && getMatchingServerOnlyKey(nameWithoutPrefix);
57266
+ if (sensitiveMatch) {
57267
+ warnings.push({
57268
+ message: `\`${matchingPrefix}\` exposes \`${key}\` to anyone visiting your site`,
57269
+ requiresConfirmation: true
57270
+ });
57271
+ } else {
57272
+ warnings.push({
57273
+ message: `\`${matchingPrefix}\` exposes this value to anyone visiting your site`,
57274
+ requiresConfirmation: false
57275
+ });
57276
+ }
57277
+ }
57278
+ return warnings;
57279
+ }
57280
+
57281
+ // src/util/env/env-var-config-secret-ui.ts
57282
+ var ENV_VISIBILITY_DEPRECATION_MESSAGE = "`--visibility` is deprecated. Use `--type` instead.";
57283
+ function invalidTypeOptionError(optionName, value) {
57284
+ if (value === "config" || value === "secret") {
57285
+ return void 0;
57286
+ }
57287
+ if (value === "sensitive") {
57288
+ return `The \`${optionName}\` flag accepts \`config\` or \`secret\`. Use \`--type secret\` or the legacy \`--sensitive\` flag.`;
57289
+ }
57290
+ if (value === "plain" || value === "encrypted") {
57291
+ return `The \`${optionName}\` flag accepts \`config\` or \`secret\`. Use \`--type config\` for readable values.`;
57292
+ }
57293
+ return `The \`${optionName}\` flag must be either \`config\` or \`secret\`.`;
57294
+ }
57295
+ function resolveEnvVarTypeOption(options) {
57296
+ const usedDeprecatedVisibility = options.visibility !== void 0;
57297
+ if (options.type !== void 0) {
57298
+ const error = invalidTypeOptionError("--type", options.type);
57299
+ if (error) {
57300
+ return {
57301
+ usedDeprecatedVisibility,
57302
+ error,
57303
+ errorReason: "invalid_type"
57304
+ };
57305
+ }
57306
+ }
57307
+ if (options.visibility !== void 0) {
57308
+ const error = invalidTypeOptionError("--visibility", options.visibility);
57309
+ if (error) {
57310
+ return {
57311
+ usedDeprecatedVisibility,
57312
+ error,
57313
+ errorReason: "invalid_visibility"
57314
+ };
57315
+ }
57316
+ }
57317
+ if (options.type !== void 0 && options.visibility !== void 0 && options.type !== options.visibility) {
57318
+ return {
57319
+ usedDeprecatedVisibility,
57320
+ error: `\`--type ${options.type}\` conflicts with \`--visibility ${options.visibility}\`. \`--visibility\` is a deprecated alias of \`--type\`; remove it.`,
57321
+ errorReason: "conflicting_type_visibility"
57322
+ };
57323
+ }
57324
+ if (options.type !== void 0) {
57325
+ return {
57326
+ explicitVisibility: options.type,
57327
+ source: "type",
57328
+ usedDeprecatedVisibility
57329
+ };
57330
+ }
57331
+ if (options.visibility !== void 0) {
57332
+ return {
57333
+ explicitVisibility: options.visibility,
57334
+ source: "visibility",
57335
+ usedDeprecatedVisibility
57336
+ };
57337
+ }
57338
+ return { usedDeprecatedVisibility };
57339
+ }
57340
+ function isSecretEnvVar(env) {
57341
+ return env.type === "sensitive" || env.visibility === "secret";
57342
+ }
57343
+ function formatVisibilityLabel(visibility, type) {
57344
+ const resolved = visibility ?? visibilityFromEnvType(type);
57345
+ if (resolved === "config") {
57346
+ return "Config";
57347
+ }
57348
+ if (resolved === "secret") {
57349
+ return "Secret";
57350
+ }
57351
+ return void 0;
57352
+ }
57353
+ function visibilityFromEnvType(type) {
57354
+ if (type === "sensitive") {
57355
+ return "secret";
57356
+ }
57357
+ if (type === "plain" || type === "encrypted") {
57358
+ return "config";
57359
+ }
57360
+ return void 0;
57361
+ }
57362
+ function hasNonDevelopmentTarget(envTargets) {
57363
+ return envTargets.some((target) => target !== "development");
57364
+ }
57365
+ function getPublicPrefixSecretVisibilityError(key, options) {
57366
+ const publicPrefix = getApiPublicPrefix(key);
57367
+ if (!publicPrefix) {
57368
+ return null;
57369
+ }
57370
+ const wouldBeSecret = options.visibility === "secret" || options.type === "sensitive";
57371
+ if (!wouldBeSecret) {
57372
+ return null;
57373
+ }
57374
+ const privateKey = key.slice(publicPrefix.length);
57375
+ if (options.context === "update") {
57376
+ return `\`${publicPrefix}\` exposes this value to anyone visiting your site, so \`${key}\` cannot be a Secret. To keep it private, add \`${privateKey}\` as a Secret, then remove \`${key}\`. If the value is safe to expose, keep it as Config.`;
57377
+ }
57378
+ return `\`${publicPrefix}\` exposes this value to anyone visiting your site, so \`${key}\` cannot be a Secret. To keep it private, rename the variable to \`${privateKey}\` and keep the Secret type. If the value is safe to expose, use \`--type config\`.`;
57379
+ }
57380
+ function shouldOmitInferredVisibility(key, envTargets, teamSensitivePolicyOn) {
57381
+ if (!getApiPublicPrefix(key)) {
57382
+ return false;
57383
+ }
57384
+ if (!hasNonDevelopmentTarget(envTargets)) {
57385
+ return false;
57386
+ }
57387
+ return teamSensitivePolicyOn;
57388
+ }
57389
+ function resolveEnvVarVisibility(options) {
57390
+ if (options.explicitVisibility !== void 0) {
57391
+ if (options.explicitVisibility !== "config" && options.explicitVisibility !== "secret") {
57392
+ const optionName = options.explicitOptionSource === "visibility" ? "--visibility" : "--type";
57393
+ return {
57394
+ error: options.explicitVisibility === "sensitive" ? `The \`${optionName}\` flag accepts \`config\` or \`secret\`. Use \`--type secret\` or the legacy \`--sensitive\` flag.` : options.explicitVisibility === "plain" || options.explicitVisibility === "encrypted" ? `The \`${optionName}\` flag accepts \`config\` or \`secret\`. Use \`--type config\` for readable values.` : `The \`${optionName}\` flag must be either \`config\` or \`secret\`.`
57395
+ };
57396
+ }
57397
+ const publicPrefixError2 = getPublicPrefixSecretVisibilityError(
57398
+ options.key,
57399
+ {
57400
+ visibility: options.explicitVisibility,
57401
+ type: options.type,
57402
+ context: options.context
57403
+ }
57404
+ );
57405
+ if (publicPrefixError2) {
57406
+ return { error: publicPrefixError2 };
57407
+ }
57408
+ return { visibility: options.explicitVisibility };
57409
+ }
57410
+ const inferred = visibilityFromEnvType(options.type);
57411
+ if (inferred === void 0) {
57412
+ return {};
57413
+ }
57414
+ if (shouldOmitInferredVisibility(
57415
+ options.key,
57416
+ options.envTargets,
57417
+ options.teamSensitivePolicyOn
57418
+ )) {
57419
+ return {};
57420
+ }
57421
+ const publicPrefixError = getPublicPrefixSecretVisibilityError(options.key, {
57422
+ visibility: inferred,
57423
+ type: options.type,
57424
+ context: options.context
57425
+ });
57426
+ if (publicPrefixError) {
57427
+ return { error: publicPrefixError };
57428
+ }
57429
+ return { visibility: inferred };
57430
+ }
57431
+
57432
+ // src/util/env/secret-read-guidance.ts
57433
+ function getUnavailableSecretValuesMessage(environment, count) {
57434
+ const values = count === 1 ? "value" : "values";
57435
+ if (environment === "development") {
57436
+ return `${count} Development Secret ${values} ${count === 1 ? "was" : "were"} not returned by Vercel.`;
57437
+ }
57438
+ return `${count} Secret ${values} cannot be pulled from the \`${environment}\` Environment.`;
57439
+ }
57440
+ function getLocalSecretFallbackMessage(count) {
57441
+ return ` Define ${count === 1 ? "it" : "them"} in a local .env file.`;
57442
+ }
56829
57443
 
56830
57444
  // src/util/env/update-oidc-token-contents.ts
56831
57445
  var CONTENTS_HEADER = "# Created by Vercel CLI";
@@ -56865,7 +57479,7 @@ var import_error_utils3 = __toESM(require_dist(), 1);
56865
57479
  // src/util/link/setup-and-link.ts
56866
57480
  var import_fs_extra7 = __toESM(require_lib(), 1);
56867
57481
  var import_fs_detectors5 = __toESM(require_dist2(), 1);
56868
- import { join as join10, basename as basename3 } from "path";
57482
+ import { join as join11, basename as basename3 } from "path";
56869
57483
  import { getPlatformEnv as getPlatformEnv2 } from "@vercel/build-utils";
56870
57484
 
56871
57485
  // src/util/input/input-project.ts
@@ -57286,7 +57900,7 @@ async function inputRootDirectory(client, cwd, autoConfirm = false) {
57286
57900
 
57287
57901
  // src/util/input/edit-project-settings.ts
57288
57902
  var import_chalk15 = __toESM(require_source(), 1);
57289
- var import_frameworks2 = __toESM(require_frameworks(), 1);
57903
+ var import_frameworks3 = __toESM(require_frameworks(), 1);
57290
57904
 
57291
57905
  // src/util/is-setting-value.ts
57292
57906
  function isSettingValue(setting) {
@@ -57336,7 +57950,7 @@ async function editProjectSettings(client, projectSettings, framework, autoConfi
57336
57950
  }
57337
57951
  }
57338
57952
  if (localConfigurationOverrides.framework) {
57339
- const overrideFramework = import_frameworks2.frameworkList.find(
57953
+ const overrideFramework = import_frameworks3.frameworkList.find(
57340
57954
  (f) => f.slug === localConfigurationOverrides.framework
57341
57955
  );
57342
57956
  if (overrideFramework) {
@@ -57495,7 +58109,7 @@ async function readConfig(dir) {
57495
58109
  }
57496
58110
 
57497
58111
  // src/util/link/setup-and-link.ts
57498
- var import_frameworks4 = __toESM(require_frameworks(), 1);
58112
+ var import_frameworks5 = __toESM(require_frameworks(), 1);
57499
58113
 
57500
58114
  // src/util/input/vercel-auth.ts
57501
58115
  var import_chalk16 = __toESM(require_source(), 1);
@@ -57537,10 +58151,10 @@ import {
57537
58151
  isExperimentalServiceV2 as isExperimentalServiceV23,
57538
58152
  normalizePath as normalizePath4
57539
58153
  } from "@vercel/build-utils";
57540
- import { join as join8, relative as relative2 } from "path";
58154
+ import { join as join9, relative as relative2 } from "path";
57541
58155
 
57542
58156
  // src/util/input/display-services.ts
57543
- var import_frameworks3 = __toESM(require_frameworks(), 1);
58157
+ var import_frameworks4 = __toESM(require_frameworks(), 1);
57544
58158
  import {
57545
58159
  getServiceQueueTopics,
57546
58160
  isExperimentalServiceV2 as isExperimentalServiceV22,
@@ -57549,7 +58163,7 @@ import {
57549
58163
  isWorkflowTriggeredService
57550
58164
  } from "@vercel/build-utils";
57551
58165
  var chalk17 = require_source();
57552
- var frameworksBySlug = new Map(import_frameworks3.frameworkList.map((f) => [f.slug, f]));
58166
+ var frameworksBySlug = new Map(import_frameworks4.frameworkList.map((f) => [f.slug, f]));
57553
58167
  var frameworkColors = {
57554
58168
  // JavaScript/TypeScript frameworks
57555
58169
  nextjs: chalk17.white,
@@ -57689,8 +58303,8 @@ function displayServiceErrors(errors) {
57689
58303
  // src/util/projects/detect-services.ts
57690
58304
  var import_fs_detectors3 = __toESM(require_dist2(), 1);
57691
58305
  var import_service_topology = __toESM(require_dist6(), 1);
57692
- import { readFile as readFile3, writeFile as writeFile2 } from "fs/promises";
57693
- import { basename as basename2, join as join7 } from "path";
58306
+ import { readFile as readFile4, writeFile as writeFile2 } from "fs/promises";
58307
+ import { basename as basename2, join as join8 } from "path";
57694
58308
  import { parse as tomlParse, stringify as tomlStringify } from "smol-toml";
57695
58309
 
57696
58310
  // src/util/validate-config.ts
@@ -58408,7 +59022,7 @@ function validateConfig(config) {
58408
59022
  }
58409
59023
 
58410
59024
  // src/util/projects/detect-entrypoint.ts
58411
- import { join as join6 } from "path";
59025
+ import { join as join7 } from "path";
58412
59026
  import {
58413
59027
  isPythonFramework,
58414
59028
  isNodeBackendFramework,
@@ -58416,7 +59030,7 @@ import {
58416
59030
  } from "@vercel/build-utils";
58417
59031
  function createDetectEntrypoint(projectRoot) {
58418
59032
  return async ({ workPath, framework }) => {
58419
- const absWorkPath = normalizePath3(join6(projectRoot, workPath));
59033
+ const absWorkPath = normalizePath3(join7(projectRoot, workPath));
58420
59034
  let builderName;
58421
59035
  if (isPythonFramework(framework)) {
58422
59036
  builderName = "@vercel/python";
@@ -58446,7 +59060,7 @@ function createDetectEntrypoint(projectRoot) {
58446
59060
  };
58447
59061
  }
58448
59062
  async function loadBuilderDetectEntrypoint(name, projectRoot) {
58449
- const { importBuilders } = await import("./import-builders-DVG3HOTF.js");
59063
+ const { importBuilders } = await import("./import-builders-GZPE5N44.js");
58450
59064
  const builders = await importBuilders(/* @__PURE__ */ new Set([name]), projectRoot);
58451
59065
  const loaded = builders.get(name);
58452
59066
  if (!loaded) {
@@ -58525,9 +59139,9 @@ function toProjectServicesConfigPatch(config) {
58525
59139
  }
58526
59140
  async function prepareServicesConfigWrite(cwd, config) {
58527
59141
  const compileResult = await compileVercelConfig(cwd);
58528
- const configPath = join7(cwd, "vercel.json");
59142
+ const configPath = join8(cwd, "vercel.json");
58529
59143
  if (compileResult.sourceFile === "vercel.toml") {
58530
- return prepareTomlServicesConfigWrite(join7(cwd, "vercel.toml"), config);
59144
+ return prepareTomlServicesConfigWrite(join8(cwd, "vercel.toml"), config);
58531
59145
  }
58532
59146
  if (compileResult.wasCompiled) {
58533
59147
  throw new Error(
@@ -58568,7 +59182,7 @@ async function prepareTomlServicesConfigWrite(configPath, config) {
58568
59182
  const patchKeys = Object.keys(patch);
58569
59183
  let existingContent;
58570
59184
  try {
58571
- existingContent = await readFile3(configPath, "utf8");
59185
+ existingContent = await readFile4(configPath, "utf8");
58572
59186
  } catch {
58573
59187
  existingContent = "";
58574
59188
  }
@@ -58706,7 +59320,7 @@ async function promptForInferredServicesSetup({
58706
59320
  const serviceRoot = isExperimentalServiceV23(service) ? service.root : service.workspace;
58707
59321
  choice = {
58708
59322
  type: "single-app",
58709
- selectedPath: serviceRoot === "." ? workPath : join8(workPath, serviceRoot)
59323
+ selectedPath: serviceRoot === "." ? workPath : join9(workPath, serviceRoot)
58710
59324
  };
58711
59325
  }
58712
59326
  }
@@ -58725,7 +59339,7 @@ async function promptForInferredServicesSetup({
58725
59339
 
58726
59340
  // src/util/projects/search-project-across-teams.ts
58727
59341
  var import_slugify3 = __toESM(require_slugify(), 1);
58728
- import { join as join9, relative as relative3 } from "path";
59342
+ import { join as join10, relative as relative3 } from "path";
58729
59343
  async function searchProjectsByRepoRoot({
58730
59344
  client,
58731
59345
  cwd,
@@ -58738,7 +59352,7 @@ async function searchProjectsByRepoRoot({
58738
59352
  if (!rootPath) {
58739
59353
  return empty;
58740
59354
  }
58741
- const gitConfigPath = getGitConfigPath({ cwd: rootPath }) ?? join9(rootPath, ".git/config");
59355
+ const gitConfigPath = getGitConfigPath({ cwd: rootPath }) ?? join10(rootPath, ".git/config");
58742
59356
  const remoteUrls = await getRemoteUrls(gitConfigPath);
58743
59357
  const remoteNames = remoteUrls ? Object.keys(remoteUrls).sort() : [];
58744
59358
  let remote;
@@ -58996,8 +59610,8 @@ async function setupAndLink(client, path3, {
58996
59610
  }
58997
59611
  if (forceDelete) {
58998
59612
  const vercelDir = getVercelDirectory(path3);
58999
- (0, import_fs_extra7.remove)(join10(vercelDir, VERCEL_DIR_README));
59000
- (0, import_fs_extra7.remove)(join10(vercelDir, VERCEL_DIR_PROJECT));
59613
+ (0, import_fs_extra7.remove)(join11(vercelDir, VERCEL_DIR_README));
59614
+ (0, import_fs_extra7.remove)(join11(vercelDir, VERCEL_DIR_PROJECT));
59001
59615
  }
59002
59616
  output_manager_default.print("\n");
59003
59617
  printAlignedLabel("Directory", humanizePath(path3));
@@ -59167,7 +59781,7 @@ async function setupAndLink(client, path3, {
59167
59781
  });
59168
59782
  if (shouldPromptRoot) {
59169
59783
  rootDirectory = await inputRootDirectory(client, path3, autoConfirm);
59170
- if (rootDirectory && !await validateRootDirectory(path3, join10(path3, rootDirectory))) {
59784
+ if (rootDirectory && !await validateRootDirectory(path3, join11(path3, rootDirectory))) {
59171
59785
  return {
59172
59786
  status: "error",
59173
59787
  exitCode: 1,
@@ -59176,7 +59790,7 @@ async function setupAndLink(client, path3, {
59176
59790
  }
59177
59791
  }
59178
59792
  }
59179
- pathWithRootDirectory = rootDirectory ? join10(path3, rootDirectory) : path3;
59793
+ pathWithRootDirectory = rootDirectory ? join11(path3, rootDirectory) : path3;
59180
59794
  const selectedRootServicesSetup = pathWithRootDirectory === path3 ? null : await getServicesSetupState(pathWithRootDirectory);
59181
59795
  let selectedRootInferredServicesChoice = null;
59182
59796
  if (!skipSelectedRootInferredServicesPrompt) {
@@ -59203,7 +59817,7 @@ async function setupAndLink(client, path3, {
59203
59817
  path3,
59204
59818
  selectedRootInferredServicesChoice.selectedPath
59205
59819
  );
59206
- pathWithRootDirectory = rootDirectory ? join10(path3, rootDirectory) : path3;
59820
+ pathWithRootDirectory = rootDirectory ? join11(path3, rootDirectory) : path3;
59207
59821
  }
59208
59822
  const localConfig = await readConfig(pathWithRootDirectory);
59209
59823
  if (localConfig instanceof CantParseJSONFile) {
@@ -59224,7 +59838,7 @@ async function setupAndLink(client, path3, {
59224
59838
  pathWithRootDirectory
59225
59839
  );
59226
59840
  const detectedProjects = detectedProjectsForWorkspace.get("") || [];
59227
- const framework = detectedProjects[0] ?? import_frameworks4.frameworkList.find((f) => f.slug === null);
59841
+ const framework = detectedProjects[0] ?? import_frameworks5.frameworkList.find((f) => f.slug === null);
59228
59842
  settings = await editProjectSettings(
59229
59843
  client,
59230
59844
  {},
@@ -59274,7 +59888,12 @@ async function setupAndLink(client, path3, {
59274
59888
  autoConfirm,
59275
59889
  org
59276
59890
  );
59277
- return { status: "linked", org, project };
59891
+ return {
59892
+ status: "linked",
59893
+ org,
59894
+ project,
59895
+ ...gitConnectIntent?.offered && { gitConnectOffered: true }
59896
+ };
59278
59897
  } catch (err) {
59279
59898
  if (isPromptCanceledError(err)) {
59280
59899
  throw err;
@@ -59292,7 +59911,8 @@ async function setupAndLink(client, path3, {
59292
59911
  }
59293
59912
  async function resolveGitConnectIntent(client, path3, autoConfirm) {
59294
59913
  try {
59295
- const gitConfig = await parseGitConfig(join10(path3, ".git/config"));
59914
+ const gitConfigPath = getGitConfigPath({ cwd: path3 }) ?? join11(path3, ".git/config");
59915
+ const gitConfig = await parseGitConfig(gitConfigPath);
59296
59916
  if (!gitConfig) {
59297
59917
  return null;
59298
59918
  }
@@ -59301,15 +59921,18 @@ async function resolveGitConnectIntent(client, path3, autoConfirm) {
59301
59921
  return null;
59302
59922
  }
59303
59923
  const skipPrompts = autoConfirm || client.nonInteractive;
59304
- const shouldConnect = skipPrompts || await client.input.confirm(`Connect detected Git repository?`, false);
59924
+ const shouldConnect = skipPrompts || await client.input.confirm(
59925
+ `Connect this Git repository to automatically deploy changes on every push?`,
59926
+ false
59927
+ );
59305
59928
  if (!shouldConnect) {
59306
- return null;
59929
+ return { offered: true };
59307
59930
  }
59308
59931
  const repoInfo = skipPrompts ? parseRepoUrl(remoteUrls.origin ?? Object.values(remoteUrls)[0]) : await selectAndParseRemoteUrl(client, remoteUrls);
59309
59932
  if (!repoInfo) {
59310
59933
  return null;
59311
59934
  }
59312
- return { repoInfo };
59935
+ return { repoInfo, offered: !skipPrompts };
59313
59936
  } catch (error) {
59314
59937
  if (isPromptCanceledError(error)) {
59315
59938
  throw error;
@@ -59319,7 +59942,7 @@ async function resolveGitConnectIntent(client, path3, autoConfirm) {
59319
59942
  }
59320
59943
  }
59321
59944
  async function applyGitConnectIntent(client, intent, project, autoConfirm, org) {
59322
- if (!intent) {
59945
+ if (!intent?.repoInfo) {
59323
59946
  return;
59324
59947
  }
59325
59948
  const { repoInfo } = intent;
@@ -59348,7 +59971,7 @@ async function applyGitConnectIntent(client, intent, project, autoConfirm, org)
59348
59971
  var import_chalk17 = __toESM(require_source(), 1);
59349
59972
  var import_fs_extra8 = __toESM(require_lib(), 1);
59350
59973
  import { stat } from "fs/promises";
59351
- import { join as join11, dirname } from "path";
59974
+ import { join as join12, dirname } from "path";
59352
59975
  async function findProjectRoot(startDir) {
59353
59976
  let cwdDev;
59354
59977
  try {
@@ -59365,10 +59988,10 @@ async function findProjectRoot(startDir) {
59365
59988
  } catch {
59366
59989
  return null;
59367
59990
  }
59368
- const hasVercelDir = await (0, import_fs_extra8.pathExists)(join11(dir, ".vercel"));
59369
- const hasVercelJson = await (0, import_fs_extra8.pathExists)(join11(dir, "vercel.json"));
59370
- const hasVercelToml = await (0, import_fs_extra8.pathExists)(join11(dir, "vercel.toml"));
59371
- const hasGit = await (0, import_fs_extra8.pathExists)(join11(dir, ".git"));
59991
+ const hasVercelDir = await (0, import_fs_extra8.pathExists)(join12(dir, ".vercel"));
59992
+ const hasVercelJson = await (0, import_fs_extra8.pathExists)(join12(dir, "vercel.json"));
59993
+ const hasVercelToml = await (0, import_fs_extra8.pathExists)(join12(dir, "vercel.toml"));
59994
+ const hasGit = await (0, import_fs_extra8.pathExists)(join12(dir, ".git"));
59372
59995
  if (hasVercelDir || hasVercelJson || hasVercelToml || hasGit) {
59373
59996
  return dir;
59374
59997
  }
@@ -59938,6 +60561,10 @@ async function getDeployment(client, contextName, hostOrId) {
59938
60561
 
59939
60562
  // src/commands/env/pull.ts
59940
60563
  var CONTENTS_PREFIX = "# Created by Vercel CLI\n";
60564
+ function printEnvPullWarning(message) {
60565
+ output_manager_default.print(`${import_chalk19.default.yellow("!")} ${message}
60566
+ `);
60567
+ }
59941
60568
  function readHeadSync(path3, length) {
59942
60569
  const buffer = Buffer.alloc(length);
59943
60570
  const fd = openSync(path3, "r");
@@ -59968,7 +60595,7 @@ var VARIABLES_TO_IGNORE = [
59968
60595
  "VERCEL_SPEED_INSIGHTS_ID",
59969
60596
  "VERCEL_WEB_ANALYTICS_ID"
59970
60597
  ];
59971
- var SENSITIVE_PLACEHOLDER = "[SENSITIVE]";
60598
+ var SENSITIVE_PLACEHOLDER = SENSITIVE_ENV_VALUE_PLACEHOLDER;
59972
60599
  async function getRedactedSensitiveKeys(client, projectId, source, target, gitBranch, records) {
59973
60600
  const emptyKeys = Object.keys(records).filter((key) => !records[key]);
59974
60601
  if (!projectId || emptyKeys.length === 0) {
@@ -59980,7 +60607,7 @@ async function getRedactedSensitiveKeys(client, projectId, source, target, gitBr
59980
60607
  gitBranch
59981
60608
  });
59982
60609
  const sensitiveKeys = new Set(
59983
- envs.filter((env) => env.type === "sensitive").map((env) => env.key)
60610
+ envs.filter(isSecretEnvVar).map((env) => env.key)
59984
60611
  );
59985
60612
  return new Set(emptyKeys.filter((key) => sensitiveKeys.has(key)));
59986
60613
  } catch {
@@ -60039,9 +60666,9 @@ async function pull(client, argv, source = "vercel-cli:env:pull", options = {})
60039
60666
  {
60040
60667
  status: "error",
60041
60668
  reason: "not_linked",
60042
- message: `Your codebase isn't linked to a project on Vercel. Run ${getCommandNamePlain(
60669
+ message: `Your codebase isn't linked to a project on Vercel. Run \`${getCommandNamePlain(
60043
60670
  "link"
60044
- )} to begin. Use --yes for non-interactive; use --scope or --project to specify team or project.`,
60671
+ )}\` to begin. Use \`--yes\` for non-interactive; use \`--scope\` or \`--project\` to specify team or project.`,
60045
60672
  next: [
60046
60673
  { command: buildCommandWithYes(linkArgv) },
60047
60674
  { command: buildCommandWithYes(client.argv) }
@@ -60160,6 +60787,9 @@ async function envPullCommandLogic(client, filename, skipConfirmation, environme
60160
60787
  let contents;
60161
60788
  let fileChanged = true;
60162
60789
  const keptLocalKeys = [];
60790
+ const preservedLocalSecretKeys = [];
60791
+ let redactedSecretCount = 0;
60792
+ let placeholderSecretCount = 0;
60163
60793
  if (oidcTokenOnly) {
60164
60794
  const existingContents = exists ? await (0, import_fs_extra9.readFile)(fullPath, "utf8") : "";
60165
60795
  contents = updateOidcTokenContents(
@@ -60176,9 +60806,17 @@ async function envPullCommandLogic(client, filename, skipConfirmation, environme
60176
60806
  gitBranch,
60177
60807
  records
60178
60808
  );
60809
+ redactedSecretCount = sensitiveKeys.size;
60179
60810
  const mergedRecords = { ...records };
60180
60811
  for (const key of sensitiveKeys) {
60181
- mergedRecords[key] = SENSITIVE_PLACEHOLDER;
60812
+ const localValue = oldEnv?.[key];
60813
+ if (localValue && localValue !== SENSITIVE_PLACEHOLDER) {
60814
+ mergedRecords[key] = localValue;
60815
+ preservedLocalSecretKeys.push(key);
60816
+ } else {
60817
+ mergedRecords[key] = SENSITIVE_PLACEHOLDER;
60818
+ placeholderSecretCount++;
60819
+ }
60182
60820
  }
60183
60821
  if (oldEnv) {
60184
60822
  for (const [key, value] of Object.entries(oldEnv)) {
@@ -60211,6 +60849,16 @@ async function envPullCommandLogic(client, filename, skipConfirmation, environme
60211
60849
  )} Environment)`
60212
60850
  );
60213
60851
  }
60852
+ if (redactedSecretCount > 0) {
60853
+ const preservedMessage = preservedLocalSecretKeys.length > 0 ? ` Kept ${preservedLocalSecretKeys.length} existing local ${preservedLocalSecretKeys.length === 1 ? "value" : "values"}.` : "";
60854
+ const placeholderMessage = placeholderSecretCount > 0 ? ` Wrote "${SENSITIVE_PLACEHOLDER}" ${placeholderSecretCount === 1 ? "as a placeholder" : "as placeholders"} for the remaining ${placeholderSecretCount === 1 ? "value" : "values"}; replace ${placeholderSecretCount === 1 ? "it" : "them"} with local-only values.` : "";
60855
+ printEnvPullWarning(
60856
+ `${getUnavailableSecretValuesMessage(
60857
+ environment,
60858
+ redactedSecretCount
60859
+ )}${preservedMessage}${placeholderMessage}`
60860
+ );
60861
+ }
60214
60862
  let isGitIgnoreUpdated = false;
60215
60863
  const fileExistsAfterPull = exists || contents.length > 0;
60216
60864
  if (filename === ".env.local" && fileExistsAfterPull) {
@@ -60237,7 +60885,7 @@ function escapeValue2(value) {
60237
60885
  }
60238
60886
 
60239
60887
  // src/util/projects/link.ts
60240
- var readFile5 = promisify(fs4.readFile);
60888
+ var readFile6 = promisify(fs4.readFile);
60241
60889
  var writeFile3 = promisify(fs4.writeFile);
60242
60890
  var VERCEL_DIR = ".vercel";
60243
60891
  var VERCEL_DIR_FALLBACK = ".now";
@@ -60272,7 +60920,7 @@ var linkSchema = {
60272
60920
  }
60273
60921
  };
60274
60922
  function getVercelDirectory(cwd) {
60275
- const possibleDirs = [join12(cwd, VERCEL_DIR), join12(cwd, VERCEL_DIR_FALLBACK)];
60923
+ const possibleDirs = [join13(cwd, VERCEL_DIR), join13(cwd, VERCEL_DIR_FALLBACK)];
60276
60924
  const existingDirs = possibleDirs.filter((d) => isDirectory(d));
60277
60925
  if (existingDirs.length > 1) {
60278
60926
  throw new NowBuildError2({
@@ -60365,7 +61013,7 @@ async function getProjectLinkFromRepoLink(client, path3, projectName, projectNam
60365
61013
  }
60366
61014
  async function getLinkFromDir(dir) {
60367
61015
  try {
60368
- const json = await readFile5(join12(dir, VERCEL_DIR_PROJECT), "utf8");
61016
+ const json = await readFile6(join13(dir, VERCEL_DIR_PROJECT), "utf8");
60369
61017
  const ajv = new import_ajv.default();
60370
61018
  const link = JSON.parse(json);
60371
61019
  if (!ajv.validate(linkSchema, link)) {
@@ -60629,7 +61277,7 @@ Upon creation, it will be automatically added to your ".gitignore" file.
60629
61277
  `;
60630
61278
  async function writeReadme(path3) {
60631
61279
  await writeFile3(
60632
- join12(path3, VERCEL_DIR, VERCEL_DIR_README),
61280
+ join13(path3, VERCEL_DIR, VERCEL_DIR_README),
60633
61281
  VERCEL_DIR_README_CONTENT
60634
61282
  );
60635
61283
  }
@@ -60638,7 +61286,7 @@ async function linkFolderToProject(client, path3, projectLink, projectName, orgS
60638
61286
  return;
60639
61287
  }
60640
61288
  try {
60641
- await (0, import_fs_extra10.ensureDir)(join12(path3, VERCEL_DIR));
61289
+ await (0, import_fs_extra10.ensureDir)(join13(path3, VERCEL_DIR));
60642
61290
  } catch (err) {
60643
61291
  if ((0, import_error_utils4.isErrnoException)(err) && err.code === "ENOTDIR") {
60644
61292
  return;
@@ -60646,7 +61294,7 @@ async function linkFolderToProject(client, path3, projectLink, projectName, orgS
60646
61294
  throw err;
60647
61295
  }
60648
61296
  await writeFile3(
60649
- join12(path3, VERCEL_DIR, VERCEL_DIR_PROJECT),
61297
+ join13(path3, VERCEL_DIR, VERCEL_DIR_PROJECT),
60650
61298
  JSON.stringify({
60651
61299
  ...projectLink,
60652
61300
  projectName
@@ -60771,7 +61419,7 @@ async function fileExists(filePath) {
60771
61419
  async function findAllVercelConfigFiles(workPath) {
60772
61420
  const foundFiles = [];
60773
61421
  for (const ext of VERCEL_CONFIG_EXTENSIONS) {
60774
- const configPath = join13(workPath, `vercel.${ext}`);
61422
+ const configPath = join14(workPath, `vercel.${ext}`);
60775
61423
  if (await fileExists(configPath)) {
60776
61424
  foundFiles.push(configPath);
60777
61425
  }
@@ -60780,12 +61428,12 @@ async function findAllVercelConfigFiles(workPath) {
60780
61428
  }
60781
61429
  async function findSourceVercelConfigFile(workPath) {
60782
61430
  for (const ext of VERCEL_CONFIG_EXTENSIONS) {
60783
- const configPath = join13(workPath, `vercel.${ext}`);
61431
+ const configPath = join14(workPath, `vercel.${ext}`);
60784
61432
  if (await fileExists(configPath)) {
60785
61433
  return basename4(configPath);
60786
61434
  }
60787
61435
  }
60788
- const tomlPath = join13(workPath, "vercel.toml");
61436
+ const tomlPath = join14(workPath, "vercel.toml");
60789
61437
  if (await fileExists(tomlPath)) {
60790
61438
  return "vercel.toml";
60791
61439
  }
@@ -60826,15 +61474,15 @@ function parseConfigLoaderError(stderr) {
60826
61474
  return stderr.trim();
60827
61475
  }
60828
61476
  async function compileVercelConfig(workPath) {
60829
- const vercelJsonPath = join13(workPath, "vercel.json");
60830
- const nowJsonPath = join13(workPath, "now.json");
60831
- const vercelTomlPath = join13(workPath, "vercel.toml");
61477
+ const vercelJsonPath = join14(workPath, "vercel.json");
61478
+ const nowJsonPath = join14(workPath, "now.json");
61479
+ const vercelTomlPath = join14(workPath, "vercel.toml");
60832
61480
  const hasVercelJson = await fileExists(vercelJsonPath);
60833
61481
  const hasNowJson = await fileExists(nowJsonPath);
60834
61482
  const hasVercelToml = await fileExists(vercelTomlPath);
60835
61483
  const vercelConfigPath = await findVercelConfigFile(workPath);
60836
- const vercelDir = join13(workPath, VERCEL_DIR);
60837
- const compiledConfigPath = join13(vercelDir, "vercel.json");
61484
+ const vercelDir = join14(workPath, VERCEL_DIR);
61485
+ const compiledConfigPath = join14(vercelDir, "vercel.json");
60838
61486
  if (hasNowJson) {
60839
61487
  throw new DeprecatedNowJson(nowJsonPath);
60840
61488
  }
@@ -60873,7 +61521,7 @@ async function compileVercelConfig(workPath) {
60873
61521
  }
60874
61522
  if (hasVercelToml) {
60875
61523
  try {
60876
- const tomlContent = await readFile6(vercelTomlPath, "utf8");
61524
+ const tomlContent = await readFile7(vercelTomlPath, "utf8");
60877
61525
  const config = tomlParse2(tomlContent);
60878
61526
  const normalizedConfig = normalizeConfig(config);
60879
61527
  await mkdir(vercelDir, { recursive: true });
@@ -60897,10 +61545,10 @@ async function compileVercelConfig(workPath) {
60897
61545
  }
60898
61546
  }
60899
61547
  const sourceConfigPath = vercelConfigPath;
60900
- (0, import_dotenv.config)({ path: join13(workPath, ".env") });
60901
- (0, import_dotenv.config)({ path: join13(workPath, ".env.local") });
60902
- const tempOutPath = join13(vercelDir, "vercel-temp.mjs");
60903
- const loaderPath = join13(vercelDir, "vercel-loader.mjs");
61548
+ (0, import_dotenv.config)({ path: join14(workPath, ".env") });
61549
+ (0, import_dotenv.config)({ path: join14(workPath, ".env.local") });
61550
+ const tempOutPath = join14(vercelDir, "vercel-temp.mjs");
61551
+ const loaderPath = join14(vercelDir, "vercel-loader.mjs");
60904
61552
  try {
60905
61553
  const { build } = await import("esbuild");
60906
61554
  await mkdir(vercelDir, { recursive: true });
@@ -61004,9 +61652,9 @@ async function compileVercelConfig(workPath) {
61004
61652
  }
61005
61653
  }
61006
61654
  async function getVercelConfigPath(workPath) {
61007
- const vercelJsonPath = join13(workPath, "vercel.json");
61008
- const vercelTomlPath = join13(workPath, "vercel.toml");
61009
- const compiledConfigPath = join13(workPath, VERCEL_DIR, "vercel.json");
61655
+ const vercelJsonPath = join14(workPath, "vercel.json");
61656
+ const vercelTomlPath = join14(workPath, "vercel.toml");
61657
+ const compiledConfigPath = join14(workPath, VERCEL_DIR, "vercel.json");
61010
61658
  if (await fileExists(vercelJsonPath)) {
61011
61659
  return vercelJsonPath;
61012
61660
  }
@@ -61065,6 +61713,7 @@ export {
61065
61713
  require_ajv,
61066
61714
  getProjectByNameOrId,
61067
61715
  require_pluralize,
61716
+ getGitConfigPath,
61068
61717
  createGitMeta,
61069
61718
  parseGitConfig,
61070
61719
  pluckRemoteUrls,
@@ -61092,6 +61741,27 @@ export {
61092
61741
  parseEnv,
61093
61742
  createEnvObject,
61094
61743
  VERCEL_OIDC_TOKEN,
61744
+ SENSITIVE_ENV_VALUE_PLACEHOLDER,
61745
+ looksLikeSecret,
61746
+ looksLikeSecretValue,
61747
+ shouldConfirmRotationBeforeDelete,
61748
+ isFlagsSecretNeedingSplit,
61749
+ normalizeStdinEnvValue,
61750
+ getPublicPrefix,
61751
+ getFrameworkPublicPrefix,
61752
+ getApiPublicPrefix,
61753
+ getLocalSvelteKitPublicPrefixes,
61754
+ removePublicPrefix,
61755
+ validateEnvValue,
61756
+ getEnvKeyWarnings,
61757
+ ENV_VISIBILITY_DEPRECATION_MESSAGE,
61758
+ resolveEnvVarTypeOption,
61759
+ isSecretEnvVar,
61760
+ formatVisibilityLabel,
61761
+ getPublicPrefixSecretVisibilityError,
61762
+ resolveEnvVarVisibility,
61763
+ getUnavailableSecretValuesMessage,
61764
+ getLocalSecretFallbackMessage,
61095
61765
  PromptCanceledError,
61096
61766
  PromptBackError,
61097
61767
  isPromptCanceledError,