vercel 59.5.0 → 59.6.2

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 (113) hide show
  1. package/dist/chunks/{add-W3FFMTX4.js → add-4GQZ22ZN.js} +11 -11
  2. package/dist/chunks/{add-MH3WV6PV.js → add-HJSEM4YJ.js} +11 -11
  3. package/dist/chunks/{add-Z5FM6TFI.js → add-SIGUSM3Y.js} +12 -12
  4. package/dist/chunks/{build-VYYFBJL7.js → build-XOMJDX4M.js} +11 -11
  5. package/dist/chunks/{chunk-NSU2BTRS.js → chunk-2O5J3KMT.js} +4 -4
  6. package/dist/chunks/{chunk-RZ5NP6HN.js → chunk-2YRAWYGE.js} +1 -1
  7. package/dist/chunks/{chunk-JNU3DTEV.js → chunk-37V5P4VO.js} +9 -9
  8. package/dist/chunks/{chunk-LLM3ZNXJ.js → chunk-3F5EGINT.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-AWSLWAOC.js → chunk-6JPVTPTU.js} +3 -3
  12. package/dist/chunks/{chunk-M3OSDZPY.js → chunk-6M2KZUED.js} +16 -7
  13. package/dist/chunks/{chunk-HT2XWSAJ.js → chunk-7AEEQOD4.js} +2 -29
  14. package/dist/chunks/{chunk-QG4PCM45.js → chunk-7HE63HCR.js} +102 -15
  15. package/dist/chunks/{chunk-V4YLY44R.js → chunk-7R6M3BHM.js} +2 -2
  16. package/dist/chunks/{chunk-XBN2O34P.js → chunk-7ST552E3.js} +17 -4
  17. package/dist/chunks/{chunk-CV4S27SS.js → chunk-ASBP32T6.js} +1 -1
  18. package/dist/chunks/{chunk-CQJRLNTX.js → chunk-AYLY3ZVL.js} +2 -2
  19. package/dist/chunks/{chunk-AWCID36T.js → chunk-BMKU5KEL.js} +1 -1
  20. package/dist/chunks/{chunk-UUVMIXT4.js → chunk-DE7MBNHQ.js} +4 -4
  21. package/dist/chunks/{chunk-YIHOS3ZF.js → chunk-FRAXI2WT.js} +1 -1
  22. package/dist/chunks/{chunk-FA3MO56Q.js → chunk-FRZULOVH.js} +5 -5
  23. package/dist/chunks/{chunk-7XX4ZEOV.js → chunk-FWKSJYDV.js} +1 -1
  24. package/dist/chunks/{chunk-OHER4DGX.js → chunk-FXD67VN5.js} +25 -9
  25. package/dist/chunks/{chunk-TIWAL2YU.js → chunk-GISTGGBO.js} +6 -6
  26. package/dist/chunks/{chunk-CSCSGSQG.js → chunk-GZQQNLF5.js} +5 -5
  27. package/dist/chunks/{chunk-PIMIKY4X.js → chunk-IJ4X426J.js} +1 -1
  28. package/dist/chunks/{chunk-TDXNNIZ6.js → chunk-JH4WQRIU.js} +2 -2
  29. package/dist/chunks/{chunk-TVXCXIRO.js → chunk-L3UXB2CW.js} +1 -1
  30. package/dist/chunks/{chunk-4JTF6RD7.js → chunk-LXZVOR6F.js} +4 -4
  31. package/dist/chunks/{chunk-L7CEMAJG.js → chunk-NGGLYKNU.js} +27 -5
  32. package/dist/chunks/{chunk-VWYNSJXI.js → chunk-NGNN6WF2.js} +8 -8
  33. package/dist/chunks/{chunk-GGPE5377.js → chunk-O26N2UPI.js} +1 -1
  34. package/dist/chunks/{chunk-5LX2JDZP.js → chunk-O75LSD3C.js} +1 -1
  35. package/dist/chunks/{chunk-MRMNMFMD.js → chunk-PRH6KRUT.js} +1 -1
  36. package/dist/chunks/{chunk-OX7KI3LF.js → chunk-QFAS4OVW.js} +18 -0
  37. package/dist/chunks/{chunk-PBHBX6UL.js → chunk-R5PULMHT.js} +3 -3
  38. package/dist/chunks/{chunk-PPUWG2UB.js → chunk-SF3AYAIF.js} +58 -25
  39. package/dist/chunks/{chunk-TAZ5ZAKG.js → chunk-SWI6F4X3.js} +2 -2
  40. package/dist/chunks/{chunk-ZKUHCL6O.js → chunk-V3MDDR2X.js} +5 -5
  41. package/dist/chunks/{chunk-E6LFKMI2.js → chunk-VJ5NAOWB.js} +791 -122
  42. package/dist/chunks/{chunk-G75NFPIT.js → chunk-WNAKOXGK.js} +1 -1
  43. package/dist/chunks/{chunk-JJQP3PYM.js → chunk-WZ2S3A2A.js} +5 -5
  44. package/dist/chunks/{chunk-CYNB6LL4.js → chunk-XNFHNTS2.js} +1 -1
  45. package/dist/chunks/{chunk-47VQ6H2S.js → chunk-YJKZQEHS.js} +2 -2
  46. package/dist/chunks/{chunk-GUWPUX2Y.js → chunk-ZNMTDLYH.js} +4 -4
  47. package/dist/chunks/{chunk-VLPLCJZC.js → chunk-ZSFEACZU.js} +1 -1
  48. package/dist/chunks/{clear-TNGRDA7D.js → clear-BWT2FJY4.js} +11 -11
  49. package/dist/chunks/{compile-vercel-config-ERLXKKWW.js → compile-vercel-config-DGM4NISW.js} +7 -7
  50. package/dist/chunks/{config-H22EE765.js → config-NJAN3RMU.js} +11 -11
  51. package/dist/chunks/{config-7EDKML5Q.js → config-RSE6Z4LB.js} +9 -9
  52. package/dist/chunks/{constants-YMCRE6IG.js → constants-WEQVJSYS.js} +1 -1
  53. package/dist/chunks/{delete-Q4S5F2AI.js → delete-LROBRBAH.js} +9 -9
  54. package/dist/chunks/{delete-LORYIZHY.js → delete-SSL2PK2F.js} +8 -8
  55. package/dist/chunks/{disable-HKWCBDJC.js → disable-ASG5JDZR.js} +8 -8
  56. package/dist/chunks/{discard-UCCRF2JQ.js → discard-PV47B6IL.js} +8 -8
  57. package/dist/chunks/{edit-AWL35PYQ.js → edit-5ATYIOLX.js} +10 -10
  58. package/dist/chunks/{edit-6IM6VRBR.js → edit-REI7HXGG.js} +10 -10
  59. package/dist/chunks/{enable-GN3D3L3V.js → enable-LZXL7XAG.js} +8 -8
  60. package/dist/chunks/{exec-CNBOV577.js → exec-XH4K34JM.js} +3 -3
  61. package/dist/chunks/{export-HHRVFALV.js → export-ZAZFQU2E.js} +8 -8
  62. package/dist/chunks/{image-4DCU4VPP.js → image-QPHN5V7L.js} +6 -6
  63. package/dist/chunks/{import-builders-DVG3HOTF.js → import-builders-W3YE2V6A.js} +9 -9
  64. package/dist/chunks/{inspect-TUW67CFZ.js → inspect-BFGK72WY.js} +10 -10
  65. package/dist/chunks/{inspect-TGOJDKIT.js → inspect-FRXJRM6T.js} +9 -9
  66. package/dist/chunks/{inspect-B3OWUFLH.js → inspect-RDMC2Z3Q.js} +11 -11
  67. package/dist/chunks/{inspect-VPME6UC7.js → inspect-SJEZVGPK.js} +11 -11
  68. package/dist/chunks/{inspect-VLGKNHJW.js → inspect-SSOM3FXS.js} +11 -11
  69. package/dist/chunks/{list-K552ITMK.js → list-2HTR7Q3J.js} +9 -9
  70. package/dist/chunks/{list-TK2JO7BK.js → list-PHDUZVMR.js} +8 -8
  71. package/dist/chunks/{list-2DPKDHRV.js → list-W33GXKDA.js} +10 -10
  72. package/dist/chunks/{login-HRWEKW5P.js → login-JWAFHVDG.js} +21 -12
  73. package/dist/chunks/{ls-M5TYGFP5.js → ls-3AN2DZHN.js} +11 -11
  74. package/dist/chunks/{ls-YIF3KLF3.js → ls-3MH2OCP3.js} +11 -11
  75. package/dist/chunks/{ls-TM6NTZEB.js → ls-D2POUHI7.js} +9 -9
  76. package/dist/chunks/{ls-JSV2WZVF.js → ls-KDFU224B.js} +11 -11
  77. package/dist/chunks/{ls-IOXGXEY4.js → ls-KX2VBOGV.js} +10 -10
  78. package/dist/chunks/{ls-O2WYF5UL.js → ls-RWKNJQNT.js} +11 -11
  79. package/dist/chunks/{open-FWAVEWGU.js → open-IEYRB6RL.js} +9 -9
  80. package/dist/chunks/{permissions-DPFYL47Z.js → permissions-ZWZUMEHR.js} +7 -7
  81. package/dist/chunks/{publish-63CGFKQR.js → publish-UWZYBDHK.js} +8 -8
  82. package/dist/chunks/{push-T5ZTBW3P.js → push-IAEQ3FBF.js} +11 -11
  83. package/dist/chunks/{query-B6O3EMEV.js → query-NNOZYSED.js} +11 -11
  84. package/dist/chunks/{reorder-ANV4NMKH.js → reorder-TKBM244W.js} +8 -8
  85. package/dist/chunks/{reply-C73KGOCG.js → reply-FLBSBMTW.js} +10 -10
  86. package/dist/chunks/{resolve-IHSIVPEE.js → resolve-GJYPMWUE.js} +9 -9
  87. package/dist/chunks/{restore-GSUNXP2O.js → restore-PNI3TM3U.js} +8 -8
  88. package/dist/chunks/{rm-4O74PS4Q.js → rm-76CSSSSV.js} +11 -11
  89. package/dist/chunks/{rm-M7IJC2WZ.js → rm-FN7LTIIL.js} +11 -11
  90. package/dist/chunks/{rm-YDTK5ESZ.js → rm-FTE33UHE.js} +10 -10
  91. package/dist/chunks/{rm-RV5SQFQA.js → rm-FXA5DLXQ.js} +11 -13
  92. package/dist/chunks/{rm-PRINF4OU.js → rm-PGJ4KR6U.js} +11 -11
  93. package/dist/chunks/{routes-SZI2G4SE.js → routes-2OLIBRYX.js} +3 -3
  94. package/dist/chunks/{rule-inspect-ZZC53FLP.js → rule-inspect-LJIGPTWS.js} +10 -10
  95. package/dist/chunks/{rules-SAOSSGFI.js → rules-6BMNO6M5.js} +10 -10
  96. package/dist/chunks/{schema-23ZFAKDU.js → schema-45SJNY5L.js} +4 -4
  97. package/dist/chunks/{schema-2Q3QRMRO.js → schema-HATXEQDP.js} +9 -9
  98. package/dist/chunks/{set-L47ZCZBJ.js → set-C3UQUQ42.js} +9 -9
  99. package/dist/chunks/{tags-2TWLM77N.js → tags-BTVDROFG.js} +5 -5
  100. package/dist/chunks/{types-G3PEUIJH.js → types-JGANJ5EQ.js} +3 -3
  101. package/dist/chunks/{update-SZH2VBD6.js → update-B6PSOHUW.js} +12 -12
  102. package/dist/commands/build/builder-worker.cjs +281 -0
  103. package/dist/commands/build/index.js +690 -235
  104. package/dist/commands/deploy/index.js +103 -31
  105. package/dist/commands/dev/index.js +669 -140
  106. package/dist/commands/env/index.js +1167 -542
  107. package/dist/commands/link/index.js +10 -10
  108. package/dist/commands/list/index.js +10 -10
  109. package/dist/commands-bulk.js +1978 -953
  110. package/dist/index.js +18 -18
  111. package/dist/version.mjs +1 -1
  112. package/package.json +47 -47
  113. 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;
@@ -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) {
@@ -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(", ");
@@ -36906,7 +36915,7 @@ var require_jsonfile3 = __commonJS({
36906
36915
  } catch (_) {
36907
36916
  _fs = __require("fs");
36908
36917
  }
36909
- function readFile7(file, options, callback) {
36918
+ function readFile8(file, options, callback) {
36910
36919
  if (callback == null) {
36911
36920
  callback = options;
36912
36921
  options = {};
@@ -37005,7 +37014,7 @@ var require_jsonfile3 = __commonJS({
37005
37014
  return content;
37006
37015
  }
37007
37016
  var jsonfile = {
37008
- readFile: readFile7,
37017
+ readFile: readFile8,
37009
37018
  readFileSync,
37010
37019
  writeFile: writeFile5,
37011
37020
  writeFileSync
@@ -38000,7 +38009,7 @@ var require_package = __commonJS({
38000
38009
  "../client/package.json"(exports, module) {
38001
38010
  module.exports = {
38002
38011
  name: "@vercel/client",
38003
- version: "18.2.16",
38012
+ version: "18.2.18",
38004
38013
  main: "dist/index.js",
38005
38014
  typings: "dist/index.d.ts",
38006
38015
  homepage: "https://vercel.com",
@@ -45686,14 +45695,14 @@ var require_utils8 = __commonJS({
45686
45695
  });
45687
45696
  module.exports = __toCommonJS2(utils_exports);
45688
45697
  var import_node_fs2 = __toESM2(__require("fs"), 1);
45689
- var import_node_path2 = __require("path");
45698
+ var import_node_path3 = __require("path");
45690
45699
  var CONFIGURATION_FILENAMES = [
45691
45700
  "microfrontends.jsonc",
45692
45701
  "microfrontends.json"
45693
45702
  ];
45694
45703
  function findConfig({ dir }) {
45695
45704
  for (const filename of CONFIGURATION_FILENAMES) {
45696
- const maybeConfig = (0, import_node_path2.join)(dir, filename);
45705
+ const maybeConfig = (0, import_node_path3.join)(dir, filename);
45697
45706
  if (import_node_fs2.default.existsSync(maybeConfig)) {
45698
45707
  return maybeConfig;
45699
45708
  }
@@ -47805,7 +47814,7 @@ var require_BufferList = __commonJS({
47805
47814
  this.head = this.tail = null;
47806
47815
  this.length = 0;
47807
47816
  };
47808
- BufferList.prototype.join = function join14(s) {
47817
+ BufferList.prototype.join = function join15(s) {
47809
47818
  if (this.length === 0)
47810
47819
  return "";
47811
47820
  var p = this.head;
@@ -52813,7 +52822,7 @@ var require_archive = __commonJS({
52813
52822
  createTgzFiles: () => createTgzFiles
52814
52823
  });
52815
52824
  module.exports = __toCommonJS2(archive_exports);
52816
- var import_node_path2 = __require("path");
52825
+ var import_node_path3 = __require("path");
52817
52826
  var import_node_zlib = __require("zlib");
52818
52827
  var import_build_utils11 = __require("@vercel/build-utils");
52819
52828
  var import_tar_fs = __toESM2(require_tar_fs());
@@ -52822,7 +52831,7 @@ var require_archive = __commonJS({
52822
52831
  const filesToArchive = exclude ? fileList.filter((file) => !exclude.includes(file)) : fileList;
52823
52832
  debug?.("Packing tarball");
52824
52833
  const tarStream = import_tar_fs.default.pack(workPath, {
52825
- entries: filesToArchive.map((file) => (0, import_node_path2.relative)(workPath, file))
52834
+ entries: filesToArchive.map((file) => (0, import_node_path3.relative)(workPath, file))
52826
52835
  }).pipe((0, import_node_zlib.createGzip)());
52827
52836
  const chunkedTarBuffers = await (0, import_build_utils11.streamToBufferChunks)(tarStream);
52828
52837
  debug?.(`Packed tarball into ${chunkedTarBuffers.length} chunks`);
@@ -52830,7 +52839,7 @@ var require_archive = __commonJS({
52830
52839
  chunkedTarBuffers.map((chunk, index) => [
52831
52840
  (0, import_hashes.hash)(chunk),
52832
52841
  {
52833
- names: [(0, import_node_path2.join)(workPath, `.vercel/source.tgz.part${index + 1}`)],
52842
+ names: [(0, import_node_path3.join)(workPath, `.vercel/source.tgz.part${index + 1}`)],
52834
52843
  data: chunk,
52835
52844
  mode: 438
52836
52845
  }
@@ -53411,8 +53420,8 @@ var require_dist7 = __commonJS({
53411
53420
 
53412
53421
  // src/util/compile-vercel-config.ts
53413
53422
  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";
53423
+ import { mkdir, readFile as readFile7, writeFile as writeFile4, unlink, access } from "fs/promises";
53424
+ import { join as join14, basename as basename4 } from "path";
53416
53425
  import { fork } from "child_process";
53417
53426
  import { parse as tomlParse2 } from "smol-toml";
53418
53427
 
@@ -53420,7 +53429,7 @@ import { parse as tomlParse2 } from "smol-toml";
53420
53429
  var import_ajv = __toESM(require_ajv(), 1);
53421
53430
  var import_fs_extra10 = __toESM(require_lib(), 1);
53422
53431
  import fs4 from "fs";
53423
- import { join as join12, relative as relative5 } from "path";
53432
+ import { join as join13, relative as relative5 } from "path";
53424
53433
  import { promisify } from "util";
53425
53434
 
53426
53435
  // src/util/projects/get-project-by-id-or-name.ts
@@ -56826,6 +56835,610 @@ function addDeltaSection(prefix, arr, changed = false) {
56826
56835
 
56827
56836
  // src/util/env/constants.ts
56828
56837
  var VERCEL_OIDC_TOKEN = "VERCEL_OIDC_TOKEN";
56838
+ var SENSITIVE_ENV_VALUE_PLACEHOLDER = "[SENSITIVE]";
56839
+
56840
+ // src/util/env/validate-env.ts
56841
+ var import_frameworks2 = __toESM(require_frameworks(), 1);
56842
+ import { readFile as readFile3 } from "fs/promises";
56843
+ import { join as join6 } from "path";
56844
+
56845
+ // src/util/env/secret-detection.ts
56846
+ var SERVER_ONLY_KEY_PATTERNS = [
56847
+ "access_token",
56848
+ "refresh_token",
56849
+ "client_secret",
56850
+ "webhook_secret",
56851
+ "api_key",
56852
+ "private_key",
56853
+ "service_account",
56854
+ "service_role",
56855
+ "database_url",
56856
+ "database_uri",
56857
+ "db_url",
56858
+ "postgres_url",
56859
+ "postgres_uri",
56860
+ "mysql_url",
56861
+ "mongo_url",
56862
+ "mongo_uri",
56863
+ "redis_url",
56864
+ "redis_uri",
56865
+ "amqp_url",
56866
+ "kafka_url",
56867
+ "elasticsearch_url",
56868
+ "password",
56869
+ "passwd",
56870
+ "pwd",
56871
+ "secret",
56872
+ "private",
56873
+ "key",
56874
+ "apikey",
56875
+ "auth",
56876
+ "token",
56877
+ "jwt",
56878
+ "signature",
56879
+ "cert",
56880
+ "pem",
56881
+ "salt",
56882
+ "bearer",
56883
+ "credential",
56884
+ "credentials",
56885
+ "creds"
56886
+ ];
56887
+ var SAFE_KEY_HINT_TOKENS = ["public", "publishable", "anon"];
56888
+ var WELL_KNOWN_SECRET_NAMES = /* @__PURE__ */ new Set([
56889
+ "DATABASE_URL",
56890
+ "DATABASE_URL_UNPOOLED",
56891
+ "POSTGRES_URL",
56892
+ "POSTGRES_URL_NON_POOLING",
56893
+ "POSTGRES_URL_NO_SSL",
56894
+ "POSTGRES_URL_UNPOOLED",
56895
+ "POSTGRES_PRISMA_URL",
56896
+ "MONGODB_URI",
56897
+ "MONGODB_URL",
56898
+ "MONGO_URI",
56899
+ "MONGO_URL",
56900
+ "MYSQL_URL",
56901
+ "MYSQL_URI",
56902
+ "REDIS_URL",
56903
+ "REDIS_TLS_URL",
56904
+ "KV_URL",
56905
+ "KV_REST_API_URL",
56906
+ "UPSTASH_REDIS_REST_URL",
56907
+ "GOOGLE_APPLICATION_CREDENTIALS",
56908
+ "AWS_ACCESS_KEY_ID"
56909
+ ]);
56910
+ var SECRET_SEGMENT_PATTERN = /(?:^|[_-])(SECRET|PASSWORD|PASSWD|PASSPHRASE|PWD|PGPASSWORD|TOKEN|CREDENTIAL|JWT|DSN|APIKEY|PRIVATEKEY|SALT|PEPPER|MNEMONIC|PEM|CIPHER)S?(?:[_-]|$)/i;
56911
+ var EXPLICIT_SECRET_TOKEN_PATTERN = /(?:^|[_-])(SECRET|PASSWORD|PASSWD|PASSPHRASE|PWD|PGPASSWORD|TOKEN|CREDENTIAL|MNEMONIC|PRIVATEKEY|APIKEY)S?(?:[_-]|$)/i;
56912
+ var SECRET_COMPOUND_PATTERNS = [
56913
+ /(?:^|[_-])(?:API|PRIVATE|SIGNING|ENCRYPTION|SESSION|COOKIE|CSRF|HMAC|ACCESS|APP|WRITE)[_-]?(?:KEY|SECRET)S?(?:[_-]|$)/i,
56914
+ /(?:^|[_-])(?:ACCESS|REFRESH|BEARER|AUTH)[_-]?TOKENS?(?:[_-]|$)/i,
56915
+ /(?:^|[_-])(?:WEBHOOK|SIGNING)[_-]?SECRETS?(?:[_-]|$)/i,
56916
+ /(?:^|[_-])SERVICE[_-]?(?:ROLE(?:[_-]?KEYS?)?|ACCOUNTS?)(?:[_-]|$)/i
56917
+ ];
56918
+ var NON_CREDENTIAL_KEY_TOKENS = /* @__PURE__ */ new Set([
56919
+ "PUBLIC",
56920
+ "PUBLISHABLE",
56921
+ "ANON",
56922
+ "PRIMARY",
56923
+ "PARTITION",
56924
+ "FOREIGN",
56925
+ "SORT",
56926
+ "HASH",
56927
+ "COMPOSITE",
56928
+ "INDEX",
56929
+ "UNIQUE",
56930
+ "NATURAL",
56931
+ "SURROGATE",
56932
+ "CACHE",
56933
+ "IDEMPOTENCY",
56934
+ "LOOKUP",
56935
+ "ROW",
56936
+ "SHARD",
56937
+ "CLUSTER",
56938
+ "LICENSE",
56939
+ "LICENCE",
56940
+ "PRODUCT",
56941
+ "TRANSLATION",
56942
+ "TRANSLATIONS",
56943
+ "I18N",
56944
+ "LOCALE",
56945
+ "RBAC",
56946
+ "ACL",
56947
+ "ROLE",
56948
+ "ROLES",
56949
+ "PERMISSION",
56950
+ "PERMISSIONS",
56951
+ "SCOPE",
56952
+ "SCOPES",
56953
+ "POLICY",
56954
+ "POLICIES"
56955
+ ]);
56956
+ var GENERIC_KEY_SUFFIX_PATTERN = /(?:^|[_-])([A-Z0-9]+)[_-]KEYS?$/i;
56957
+ var GENERIC_KEY_PREFIX_PATTERN = /^KEYS?[_-]([A-Z0-9]+)(?:[_-]|$)/i;
56958
+ var DB_URL_PATTERN = /(?:^|_)(?:DATABASE|POSTGRES|MONGO|MONGODB|MYSQL|REDIS|NEON|PLANETSCALE|TURSO|RDS)(?:_[A-Z0-9_]*)?_(?:URL|URI)(?:_[A-Z0-9_]+)?$/i;
56959
+ var SECRET_VALUE_PATTERNS = [
56960
+ /gh[opsru]_[A-Za-z0-9_]{20,}/,
56961
+ /github_pat_[A-Za-z0-9_]{20,}/,
56962
+ /glpat-[A-Za-z0-9_-]{20,}/,
56963
+ /(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{20,}/,
56964
+ /whsec_[A-Za-z0-9]{20,}/,
56965
+ /xox[abprs]-[A-Za-z0-9-]{20,}/,
56966
+ /xapp-[A-Za-z0-9-]{20,}/,
56967
+ /\b(?:AKIA|ASIA)[A-Z0-9]{16}\b/,
56968
+ /\bAIza[A-Za-z0-9_-]{30,}/,
56969
+ /sk-ant-[A-Za-z0-9_-]{20,}/,
56970
+ /sk-(?:proj|svcacct|admin)-[A-Za-z0-9_-]{20,}/,
56971
+ /\bsk-[A-Za-z0-9]{32,}\b/,
56972
+ /shp(?:at|ss|ca)_[a-fA-F0-9]{32}/,
56973
+ /npm_[A-Za-z0-9]{30,}/,
56974
+ /\bhf_[A-Za-z0-9_]{30,}/,
56975
+ /nvapi-[A-Za-z0-9_-]{40,}/,
56976
+ /SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}/,
56977
+ /key-[a-f0-9]{32}/,
56978
+ /glsa_[A-Za-z0-9_]{32}_[a-f0-9]{8}/,
56979
+ /pscale_pw_[A-Za-z0-9_-]{20,}/,
56980
+ /\bre_[A-Za-z0-9_]{30,}/,
56981
+ /dop_v1_[a-f0-9]{64}/,
56982
+ /sntrys_[A-Za-z0-9_-]{30,}/,
56983
+ /FlyV1 [A-Za-z0-9_-]{20,}/,
56984
+ /AccountKey=[A-Za-z0-9+/]{40,}=*/,
56985
+ /-----BEGIN [A-Z0-9 ]*PRIVATE KEY[A-Z0-9 ]*-----/,
56986
+ /-----BEGIN PGP MESSAGE-----/,
56987
+ /\beyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{8,}\b/,
56988
+ /[a-zA-Z][a-zA-Z0-9+.-]*:\/\/[A-Za-z0-9_.%-]*:[^@\s/]+(?<!\.\.)@/,
56989
+ /\bBearer\s+[A-Za-z0-9_+=/.-]{20,}/i,
56990
+ /(?:password|passwd|pwd|secret|token|api[_-]?key|access[_-]?token|refresh[_-]?token|private[_-]?key|auth)\s*[=:]\s*["']?[A-Za-z0-9_+=/.-]{12,}/i
56991
+ ];
56992
+ function tokenize(key) {
56993
+ return new Set(
56994
+ key.split(/(?<=[a-z])(?=[A-Z])/).flatMap((part) => part.split(/[_\-.]+/)).map((token) => token.toLowerCase()).filter(Boolean)
56995
+ );
56996
+ }
56997
+ function hasSafeKeyHint(key) {
56998
+ const tokens = tokenize(key);
56999
+ return SAFE_KEY_HINT_TOKENS.some((token) => tokens.has(token));
57000
+ }
57001
+ function hasGenericKeySuffix(key) {
57002
+ const precedingToken = GENERIC_KEY_SUFFIX_PATTERN.exec(key)?.[1]?.toUpperCase();
57003
+ return Boolean(
57004
+ precedingToken && !NON_CREDENTIAL_KEY_TOKENS.has(precedingToken)
57005
+ );
57006
+ }
57007
+ function hasGenericKeyPrefix(key) {
57008
+ const followingToken = GENERIC_KEY_PREFIX_PATTERN.exec(key)?.[1]?.toUpperCase();
57009
+ return Boolean(
57010
+ followingToken && !NON_CREDENTIAL_KEY_TOKENS.has(followingToken)
57011
+ );
57012
+ }
57013
+ function getMatchingServerOnlyKey(key) {
57014
+ const normalized = key.replace(/(?<=[a-z])(?=[A-Z])/g, "_").toLowerCase().replace(/[-.]+/g, "_");
57015
+ for (const pattern of SERVER_ONLY_KEY_PATTERNS) {
57016
+ if (pattern.includes("_") && normalized.includes(pattern))
57017
+ return pattern;
57018
+ }
57019
+ const tokens = tokenize(key);
57020
+ return SERVER_ONLY_KEY_PATTERNS.find(
57021
+ (pattern) => !pattern.includes("_") && tokens.has(pattern)
57022
+ ) ?? null;
57023
+ }
57024
+ function looksLikeSecret(key) {
57025
+ if (!key || hasSafeKeyHint(key))
57026
+ return false;
57027
+ if (WELL_KNOWN_SECRET_NAMES.has(key.toUpperCase()))
57028
+ return true;
57029
+ if (SECRET_SEGMENT_PATTERN.test(key))
57030
+ return true;
57031
+ if (SECRET_COMPOUND_PATTERNS.some((pattern) => pattern.test(key)))
57032
+ return true;
57033
+ if (DB_URL_PATTERN.test(key))
57034
+ return true;
57035
+ return hasGenericKeySuffix(key) || hasGenericKeyPrefix(key);
57036
+ }
57037
+ function looksLikeSecretValue(value) {
57038
+ const trimmed = value.trim();
57039
+ return Boolean(
57040
+ trimmed && SECRET_VALUE_PATTERNS.some((pattern) => pattern.test(trimmed))
57041
+ );
57042
+ }
57043
+ function shouldConfirmRotationBeforeDelete(env) {
57044
+ if (env.type === "system")
57045
+ return false;
57046
+ if (EXPLICIT_SECRET_TOKEN_PATTERN.test(env.key))
57047
+ return true;
57048
+ if (env.hasPublicPrefix || hasSafeKeyHint(env.key))
57049
+ return false;
57050
+ return looksLikeSecret(env.key);
57051
+ }
57052
+ function isFlagsSecretNeedingSplit(env) {
57053
+ if (env.key !== "FLAGS_SECRET")
57054
+ return false;
57055
+ if (env.type !== "plain" && env.type !== "encrypted")
57056
+ return false;
57057
+ return env.targets.length + (env.customEnvironmentIds?.length ?? 0) > 1;
57058
+ }
57059
+
57060
+ // src/util/env/validate-env.ts
57061
+ function getEnvValueWarnings(value) {
57062
+ const warnings = [];
57063
+ const normalized = value.replace(/\n$/, "");
57064
+ if (/^[ \t]+/.test(normalized)) {
57065
+ warnings.push({
57066
+ message: "starts with whitespace",
57067
+ requiresConfirmation: false
57068
+ });
57069
+ }
57070
+ if (/[ \t]+$/.test(normalized)) {
57071
+ warnings.push({
57072
+ message: "ends with whitespace",
57073
+ requiresConfirmation: false
57074
+ });
57075
+ }
57076
+ if (normalized.includes("\r") || normalized.includes("\n")) {
57077
+ warnings.push({
57078
+ message: "contains newlines",
57079
+ requiresConfirmation: false
57080
+ });
57081
+ }
57082
+ if (value.includes("\0")) {
57083
+ warnings.push({
57084
+ message: "contains null characters",
57085
+ requiresConfirmation: false
57086
+ });
57087
+ }
57088
+ if (value === "") {
57089
+ warnings.push({
57090
+ message: "is empty",
57091
+ requiresConfirmation: true
57092
+ });
57093
+ }
57094
+ if (value.length > 2 && (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'"))) {
57095
+ warnings.push({
57096
+ message: "includes surrounding quotes (these will be stored literally)",
57097
+ requiresConfirmation: false
57098
+ });
57099
+ }
57100
+ return warnings;
57101
+ }
57102
+ function formatWarnings(warnings) {
57103
+ if (warnings.length === 0)
57104
+ return null;
57105
+ const messages = warnings.map((w) => w.message);
57106
+ const startsIdx = messages.indexOf("starts with whitespace");
57107
+ const endsIdx = messages.indexOf("ends with whitespace");
57108
+ if (startsIdx !== -1 && endsIdx !== -1) {
57109
+ messages.splice(Math.max(startsIdx, endsIdx), 1);
57110
+ messages[Math.min(startsIdx, endsIdx)] = "starts and ends with whitespace";
57111
+ }
57112
+ if (messages.length === 1) {
57113
+ return `Value ${messages[0]}`;
57114
+ }
57115
+ if (messages.length === 2) {
57116
+ return `Value ${messages[0]} and ${messages[1]}`;
57117
+ }
57118
+ const last = messages.pop();
57119
+ return `Value ${messages.join(", ")}, and ${last}`;
57120
+ }
57121
+ var API_PUBLIC_PREFIXES = [
57122
+ "NEXT_PUBLIC_",
57123
+ "VUE_APP_",
57124
+ "REACT_APP_",
57125
+ "GATSBY_",
57126
+ "GRIDSOME_",
57127
+ "NUXT_PUBLIC_",
57128
+ "STORYBOOK_",
57129
+ "VITE_",
57130
+ "PUBLIC_",
57131
+ "EXPO_PUBLIC_",
57132
+ "NG_APP_",
57133
+ "REDWOOD_ENV_"
57134
+ ];
57135
+ var PUBLIC_PREFIXES = [
57136
+ .../* @__PURE__ */ new Set([
57137
+ ...API_PUBLIC_PREFIXES,
57138
+ ...import_frameworks2.frameworkList.map((f) => f.envPrefix).filter((prefix) => !!prefix)
57139
+ ])
57140
+ ];
57141
+ function hasOnlyWhitespaceWarnings(warnings) {
57142
+ return warnings.length > 0 && warnings.every(
57143
+ (w) => w.message === "starts with whitespace" || w.message === "ends with whitespace"
57144
+ );
57145
+ }
57146
+ function trimValue(value) {
57147
+ return value.replace(/\n$/, "").trim();
57148
+ }
57149
+ function normalizeStdinEnvValue(value) {
57150
+ let valueWithoutTrailingNewline = value;
57151
+ if (value.endsWith("\r\n")) {
57152
+ valueWithoutTrailingNewline = value.slice(0, -2);
57153
+ } else if (value.endsWith("\n")) {
57154
+ valueWithoutTrailingNewline = value.slice(0, -1);
57155
+ } else {
57156
+ return {
57157
+ value,
57158
+ strippedTrailingNewline: false
57159
+ };
57160
+ }
57161
+ if (valueWithoutTrailingNewline.includes("\n") || valueWithoutTrailingNewline.includes("\r")) {
57162
+ return {
57163
+ value,
57164
+ strippedTrailingNewline: false
57165
+ };
57166
+ }
57167
+ return {
57168
+ value: valueWithoutTrailingNewline,
57169
+ strippedTrailingNewline: true
57170
+ };
57171
+ }
57172
+ function getPublicPrefix(key) {
57173
+ const upperKey = key.toUpperCase();
57174
+ return PUBLIC_PREFIXES.find((p) => upperKey.startsWith(p)) || null;
57175
+ }
57176
+ function getFrameworkPublicPrefix(frameworkSlug, key) {
57177
+ const prefix = import_frameworks2.frameworkList.find(
57178
+ (framework) => framework.slug === frameworkSlug
57179
+ )?.envPrefix;
57180
+ return prefix && key.toUpperCase().startsWith(prefix.toUpperCase()) ? prefix : null;
57181
+ }
57182
+ function getApiPublicPrefix(key) {
57183
+ const upperKey = key.toUpperCase();
57184
+ return API_PUBLIC_PREFIXES.find((prefix) => upperKey.startsWith(prefix)) ?? null;
57185
+ }
57186
+ function parseSvelteKitPublicEnvVarPrefix(config) {
57187
+ if (!config.includes("publicPrefix")) {
57188
+ return { status: "ready", prefix: null };
57189
+ }
57190
+ const match = /publicPrefix:\s*(?:'(?<single>[^']*)'|"(?<double>[^"]*)"|`(?<template>[^`$]*)`)/.exec(
57191
+ config
57192
+ );
57193
+ const prefix = match?.groups?.single ?? match?.groups?.double ?? match?.groups?.template;
57194
+ return prefix === void 0 ? { status: "unavailable" } : { status: "ready", prefix };
57195
+ }
57196
+ async function getLocalSvelteKitPublicPrefixes(cwd, rootDirectory) {
57197
+ const projectRoot = rootDirectory ? join6(cwd, rootDirectory) : cwd;
57198
+ let config;
57199
+ try {
57200
+ config = await readFile3(join6(projectRoot, "svelte.config.js"), "utf8");
57201
+ } catch {
57202
+ return void 0;
57203
+ }
57204
+ const parsed = parseSvelteKitPublicEnvVarPrefix(config);
57205
+ if (parsed.status === "unavailable")
57206
+ return void 0;
57207
+ return [parsed.prefix ?? "PUBLIC_", "VITE_"];
57208
+ }
57209
+ function removePublicPrefix(key) {
57210
+ const prefix = getPublicPrefix(key);
57211
+ if (!prefix)
57212
+ return key;
57213
+ return key.slice(prefix.length);
57214
+ }
57215
+ async function validateEnvValue(opts) {
57216
+ let finalValue = opts.initialValue;
57217
+ let alreadyConfirmed = false;
57218
+ if (!opts.skipConfirm) {
57219
+ let valueAccepted = false;
57220
+ while (!valueAccepted) {
57221
+ const valueWarnings = getEnvValueWarnings(finalValue);
57222
+ const warningMessage = formatWarnings(valueWarnings);
57223
+ if (!warningMessage) {
57224
+ valueAccepted = true;
57225
+ break;
57226
+ }
57227
+ opts.showWarning(warningMessage);
57228
+ const canTrim = hasOnlyWhitespaceWarnings(valueWarnings);
57229
+ const choices = canTrim ? [
57230
+ { name: "Leave as is", value: "c" },
57231
+ { name: "Re-enter", value: "r" },
57232
+ { name: "Trim whitespace", value: "t" }
57233
+ ] : [
57234
+ { name: "Leave as is", value: "c" },
57235
+ { name: "Re-enter", value: "r" }
57236
+ ];
57237
+ const action = await opts.selectAction(choices);
57238
+ if (action === "c") {
57239
+ valueAccepted = true;
57240
+ if (valueWarnings.some((w) => w.requiresConfirmation)) {
57241
+ alreadyConfirmed = true;
57242
+ }
57243
+ } else if (action === "t") {
57244
+ finalValue = trimValue(finalValue);
57245
+ opts.showLog("Trimmed whitespace");
57246
+ } else {
57247
+ finalValue = await opts.promptForValue();
57248
+ }
57249
+ }
57250
+ } else {
57251
+ const valueWarnings = getEnvValueWarnings(finalValue);
57252
+ const warningMessage = formatWarnings(valueWarnings);
57253
+ if (warningMessage) {
57254
+ opts.showWarning(warningMessage);
57255
+ }
57256
+ }
57257
+ return { finalValue, alreadyConfirmed };
57258
+ }
57259
+ function getEnvKeyWarnings(key) {
57260
+ const warnings = [];
57261
+ const matchingPrefix = getPublicPrefix(key);
57262
+ if (matchingPrefix) {
57263
+ const nameWithoutPrefix = key.slice(matchingPrefix.length);
57264
+ const sensitiveMatch = looksLikeSecret(nameWithoutPrefix) && getMatchingServerOnlyKey(nameWithoutPrefix);
57265
+ if (sensitiveMatch) {
57266
+ warnings.push({
57267
+ message: `\`${matchingPrefix}\` exposes \`${key}\` to anyone visiting your site`,
57268
+ requiresConfirmation: true
57269
+ });
57270
+ } else {
57271
+ warnings.push({
57272
+ message: `\`${matchingPrefix}\` exposes this value to anyone visiting your site`,
57273
+ requiresConfirmation: false
57274
+ });
57275
+ }
57276
+ }
57277
+ return warnings;
57278
+ }
57279
+
57280
+ // src/util/env/env-var-config-secret-ui.ts
57281
+ var ENV_VISIBILITY_DEPRECATION_MESSAGE = "`--visibility` is deprecated. Use `--type` instead.";
57282
+ function invalidTypeOptionError(optionName, value) {
57283
+ if (value === "config" || value === "secret") {
57284
+ return void 0;
57285
+ }
57286
+ if (value === "sensitive") {
57287
+ return `The \`${optionName}\` flag accepts \`config\` or \`secret\`. Use \`--type secret\` or the legacy \`--sensitive\` flag.`;
57288
+ }
57289
+ if (value === "plain" || value === "encrypted") {
57290
+ return `The \`${optionName}\` flag accepts \`config\` or \`secret\`. Use \`--type config\` for readable values.`;
57291
+ }
57292
+ return `The \`${optionName}\` flag must be either \`config\` or \`secret\`.`;
57293
+ }
57294
+ function resolveEnvVarTypeOption(options) {
57295
+ const usedDeprecatedVisibility = options.visibility !== void 0;
57296
+ if (options.type !== void 0) {
57297
+ const error = invalidTypeOptionError("--type", options.type);
57298
+ if (error) {
57299
+ return {
57300
+ usedDeprecatedVisibility,
57301
+ error,
57302
+ errorReason: "invalid_type"
57303
+ };
57304
+ }
57305
+ }
57306
+ if (options.visibility !== void 0) {
57307
+ const error = invalidTypeOptionError("--visibility", options.visibility);
57308
+ if (error) {
57309
+ return {
57310
+ usedDeprecatedVisibility,
57311
+ error,
57312
+ errorReason: "invalid_visibility"
57313
+ };
57314
+ }
57315
+ }
57316
+ if (options.type !== void 0 && options.visibility !== void 0 && options.type !== options.visibility) {
57317
+ return {
57318
+ usedDeprecatedVisibility,
57319
+ error: `\`--type ${options.type}\` conflicts with \`--visibility ${options.visibility}\`. \`--visibility\` is a deprecated alias of \`--type\`; remove it.`,
57320
+ errorReason: "conflicting_type_visibility"
57321
+ };
57322
+ }
57323
+ if (options.type !== void 0) {
57324
+ return {
57325
+ explicitVisibility: options.type,
57326
+ source: "type",
57327
+ usedDeprecatedVisibility
57328
+ };
57329
+ }
57330
+ if (options.visibility !== void 0) {
57331
+ return {
57332
+ explicitVisibility: options.visibility,
57333
+ source: "visibility",
57334
+ usedDeprecatedVisibility
57335
+ };
57336
+ }
57337
+ return { usedDeprecatedVisibility };
57338
+ }
57339
+ function isSecretEnvVar(env) {
57340
+ return env.type === "sensitive" || env.visibility === "secret";
57341
+ }
57342
+ function formatVisibilityLabel(visibility, type) {
57343
+ const resolved = visibility ?? visibilityFromEnvType(type);
57344
+ if (resolved === "config") {
57345
+ return "Config";
57346
+ }
57347
+ if (resolved === "secret") {
57348
+ return "Secret";
57349
+ }
57350
+ return void 0;
57351
+ }
57352
+ function visibilityFromEnvType(type) {
57353
+ if (type === "sensitive") {
57354
+ return "secret";
57355
+ }
57356
+ if (type === "plain" || type === "encrypted") {
57357
+ return "config";
57358
+ }
57359
+ return void 0;
57360
+ }
57361
+ function hasNonDevelopmentTarget(envTargets) {
57362
+ return envTargets.some((target) => target !== "development");
57363
+ }
57364
+ function getPublicPrefixSecretVisibilityError(key, options) {
57365
+ const publicPrefix = getApiPublicPrefix(key);
57366
+ if (!publicPrefix) {
57367
+ return null;
57368
+ }
57369
+ const wouldBeSecret = options.visibility === "secret" || options.type === "sensitive";
57370
+ if (!wouldBeSecret) {
57371
+ return null;
57372
+ }
57373
+ const privateKey = key.slice(publicPrefix.length);
57374
+ if (options.context === "update") {
57375
+ 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.`;
57376
+ }
57377
+ 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\`.`;
57378
+ }
57379
+ function shouldOmitInferredVisibility(key, envTargets, teamSensitivePolicyOn) {
57380
+ if (!getApiPublicPrefix(key)) {
57381
+ return false;
57382
+ }
57383
+ if (!hasNonDevelopmentTarget(envTargets)) {
57384
+ return false;
57385
+ }
57386
+ return teamSensitivePolicyOn;
57387
+ }
57388
+ function resolveEnvVarVisibility(options) {
57389
+ if (options.explicitVisibility !== void 0) {
57390
+ if (options.explicitVisibility !== "config" && options.explicitVisibility !== "secret") {
57391
+ const optionName = options.explicitOptionSource === "visibility" ? "--visibility" : "--type";
57392
+ return {
57393
+ 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\`.`
57394
+ };
57395
+ }
57396
+ const publicPrefixError2 = getPublicPrefixSecretVisibilityError(
57397
+ options.key,
57398
+ {
57399
+ visibility: options.explicitVisibility,
57400
+ type: options.type,
57401
+ context: options.context
57402
+ }
57403
+ );
57404
+ if (publicPrefixError2) {
57405
+ return { error: publicPrefixError2 };
57406
+ }
57407
+ return { visibility: options.explicitVisibility };
57408
+ }
57409
+ const inferred = visibilityFromEnvType(options.type);
57410
+ if (inferred === void 0) {
57411
+ return {};
57412
+ }
57413
+ if (shouldOmitInferredVisibility(
57414
+ options.key,
57415
+ options.envTargets,
57416
+ options.teamSensitivePolicyOn
57417
+ )) {
57418
+ return {};
57419
+ }
57420
+ const publicPrefixError = getPublicPrefixSecretVisibilityError(options.key, {
57421
+ visibility: inferred,
57422
+ type: options.type,
57423
+ context: options.context
57424
+ });
57425
+ if (publicPrefixError) {
57426
+ return { error: publicPrefixError };
57427
+ }
57428
+ return { visibility: inferred };
57429
+ }
57430
+
57431
+ // src/util/env/secret-read-guidance.ts
57432
+ function getUnavailableSecretValuesMessage(environment, count) {
57433
+ const values = count === 1 ? "value" : "values";
57434
+ if (environment === "development") {
57435
+ return `${count} Development Secret ${values} ${count === 1 ? "was" : "were"} not returned by Vercel.`;
57436
+ }
57437
+ return `${count} Secret ${values} cannot be pulled from the \`${environment}\` Environment.`;
57438
+ }
57439
+ function getLocalSecretFallbackMessage(count) {
57440
+ return ` Define ${count === 1 ? "it" : "them"} in a local .env file.`;
57441
+ }
56829
57442
 
56830
57443
  // src/util/env/update-oidc-token-contents.ts
56831
57444
  var CONTENTS_HEADER = "# Created by Vercel CLI";
@@ -56865,7 +57478,7 @@ var import_error_utils3 = __toESM(require_dist(), 1);
56865
57478
  // src/util/link/setup-and-link.ts
56866
57479
  var import_fs_extra7 = __toESM(require_lib(), 1);
56867
57480
  var import_fs_detectors5 = __toESM(require_dist2(), 1);
56868
- import { join as join10, basename as basename3 } from "path";
57481
+ import { join as join11, basename as basename3 } from "path";
56869
57482
  import { getPlatformEnv as getPlatformEnv2 } from "@vercel/build-utils";
56870
57483
 
56871
57484
  // src/util/input/input-project.ts
@@ -57286,7 +57899,7 @@ async function inputRootDirectory(client, cwd, autoConfirm = false) {
57286
57899
 
57287
57900
  // src/util/input/edit-project-settings.ts
57288
57901
  var import_chalk15 = __toESM(require_source(), 1);
57289
- var import_frameworks2 = __toESM(require_frameworks(), 1);
57902
+ var import_frameworks3 = __toESM(require_frameworks(), 1);
57290
57903
 
57291
57904
  // src/util/is-setting-value.ts
57292
57905
  function isSettingValue(setting) {
@@ -57336,7 +57949,7 @@ async function editProjectSettings(client, projectSettings, framework, autoConfi
57336
57949
  }
57337
57950
  }
57338
57951
  if (localConfigurationOverrides.framework) {
57339
- const overrideFramework = import_frameworks2.frameworkList.find(
57952
+ const overrideFramework = import_frameworks3.frameworkList.find(
57340
57953
  (f) => f.slug === localConfigurationOverrides.framework
57341
57954
  );
57342
57955
  if (overrideFramework) {
@@ -57495,7 +58108,7 @@ async function readConfig(dir) {
57495
58108
  }
57496
58109
 
57497
58110
  // src/util/link/setup-and-link.ts
57498
- var import_frameworks4 = __toESM(require_frameworks(), 1);
58111
+ var import_frameworks5 = __toESM(require_frameworks(), 1);
57499
58112
 
57500
58113
  // src/util/input/vercel-auth.ts
57501
58114
  var import_chalk16 = __toESM(require_source(), 1);
@@ -57537,10 +58150,10 @@ import {
57537
58150
  isExperimentalServiceV2 as isExperimentalServiceV23,
57538
58151
  normalizePath as normalizePath4
57539
58152
  } from "@vercel/build-utils";
57540
- import { join as join8, relative as relative2 } from "path";
58153
+ import { join as join9, relative as relative2 } from "path";
57541
58154
 
57542
58155
  // src/util/input/display-services.ts
57543
- var import_frameworks3 = __toESM(require_frameworks(), 1);
58156
+ var import_frameworks4 = __toESM(require_frameworks(), 1);
57544
58157
  import {
57545
58158
  getServiceQueueTopics,
57546
58159
  isExperimentalServiceV2 as isExperimentalServiceV22,
@@ -57549,7 +58162,7 @@ import {
57549
58162
  isWorkflowTriggeredService
57550
58163
  } from "@vercel/build-utils";
57551
58164
  var chalk17 = require_source();
57552
- var frameworksBySlug = new Map(import_frameworks3.frameworkList.map((f) => [f.slug, f]));
58165
+ var frameworksBySlug = new Map(import_frameworks4.frameworkList.map((f) => [f.slug, f]));
57553
58166
  var frameworkColors = {
57554
58167
  // JavaScript/TypeScript frameworks
57555
58168
  nextjs: chalk17.white,
@@ -57689,8 +58302,8 @@ function displayServiceErrors(errors) {
57689
58302
  // src/util/projects/detect-services.ts
57690
58303
  var import_fs_detectors3 = __toESM(require_dist2(), 1);
57691
58304
  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";
58305
+ import { readFile as readFile4, writeFile as writeFile2 } from "fs/promises";
58306
+ import { basename as basename2, join as join8 } from "path";
57694
58307
  import { parse as tomlParse, stringify as tomlStringify } from "smol-toml";
57695
58308
 
57696
58309
  // src/util/validate-config.ts
@@ -58408,7 +59021,7 @@ function validateConfig(config) {
58408
59021
  }
58409
59022
 
58410
59023
  // src/util/projects/detect-entrypoint.ts
58411
- import { join as join6 } from "path";
59024
+ import { join as join7 } from "path";
58412
59025
  import {
58413
59026
  isPythonFramework,
58414
59027
  isNodeBackendFramework,
@@ -58416,7 +59029,7 @@ import {
58416
59029
  } from "@vercel/build-utils";
58417
59030
  function createDetectEntrypoint(projectRoot) {
58418
59031
  return async ({ workPath, framework }) => {
58419
- const absWorkPath = normalizePath3(join6(projectRoot, workPath));
59032
+ const absWorkPath = normalizePath3(join7(projectRoot, workPath));
58420
59033
  let builderName;
58421
59034
  if (isPythonFramework(framework)) {
58422
59035
  builderName = "@vercel/python";
@@ -58446,7 +59059,7 @@ function createDetectEntrypoint(projectRoot) {
58446
59059
  };
58447
59060
  }
58448
59061
  async function loadBuilderDetectEntrypoint(name, projectRoot) {
58449
- const { importBuilders } = await import("./import-builders-DVG3HOTF.js");
59062
+ const { importBuilders } = await import("./import-builders-W3YE2V6A.js");
58450
59063
  const builders = await importBuilders(/* @__PURE__ */ new Set([name]), projectRoot);
58451
59064
  const loaded = builders.get(name);
58452
59065
  if (!loaded) {
@@ -58525,9 +59138,9 @@ function toProjectServicesConfigPatch(config) {
58525
59138
  }
58526
59139
  async function prepareServicesConfigWrite(cwd, config) {
58527
59140
  const compileResult = await compileVercelConfig(cwd);
58528
- const configPath = join7(cwd, "vercel.json");
59141
+ const configPath = join8(cwd, "vercel.json");
58529
59142
  if (compileResult.sourceFile === "vercel.toml") {
58530
- return prepareTomlServicesConfigWrite(join7(cwd, "vercel.toml"), config);
59143
+ return prepareTomlServicesConfigWrite(join8(cwd, "vercel.toml"), config);
58531
59144
  }
58532
59145
  if (compileResult.wasCompiled) {
58533
59146
  throw new Error(
@@ -58568,7 +59181,7 @@ async function prepareTomlServicesConfigWrite(configPath, config) {
58568
59181
  const patchKeys = Object.keys(patch);
58569
59182
  let existingContent;
58570
59183
  try {
58571
- existingContent = await readFile3(configPath, "utf8");
59184
+ existingContent = await readFile4(configPath, "utf8");
58572
59185
  } catch {
58573
59186
  existingContent = "";
58574
59187
  }
@@ -58706,7 +59319,7 @@ async function promptForInferredServicesSetup({
58706
59319
  const serviceRoot = isExperimentalServiceV23(service) ? service.root : service.workspace;
58707
59320
  choice = {
58708
59321
  type: "single-app",
58709
- selectedPath: serviceRoot === "." ? workPath : join8(workPath, serviceRoot)
59322
+ selectedPath: serviceRoot === "." ? workPath : join9(workPath, serviceRoot)
58710
59323
  };
58711
59324
  }
58712
59325
  }
@@ -58725,7 +59338,7 @@ async function promptForInferredServicesSetup({
58725
59338
 
58726
59339
  // src/util/projects/search-project-across-teams.ts
58727
59340
  var import_slugify3 = __toESM(require_slugify(), 1);
58728
- import { join as join9, relative as relative3 } from "path";
59341
+ import { join as join10, relative as relative3 } from "path";
58729
59342
  async function searchProjectsByRepoRoot({
58730
59343
  client,
58731
59344
  cwd,
@@ -58738,7 +59351,7 @@ async function searchProjectsByRepoRoot({
58738
59351
  if (!rootPath) {
58739
59352
  return empty;
58740
59353
  }
58741
- const gitConfigPath = getGitConfigPath({ cwd: rootPath }) ?? join9(rootPath, ".git/config");
59354
+ const gitConfigPath = getGitConfigPath({ cwd: rootPath }) ?? join10(rootPath, ".git/config");
58742
59355
  const remoteUrls = await getRemoteUrls(gitConfigPath);
58743
59356
  const remoteNames = remoteUrls ? Object.keys(remoteUrls).sort() : [];
58744
59357
  let remote;
@@ -58996,8 +59609,8 @@ async function setupAndLink(client, path3, {
58996
59609
  }
58997
59610
  if (forceDelete) {
58998
59611
  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));
59612
+ (0, import_fs_extra7.remove)(join11(vercelDir, VERCEL_DIR_README));
59613
+ (0, import_fs_extra7.remove)(join11(vercelDir, VERCEL_DIR_PROJECT));
59001
59614
  }
59002
59615
  output_manager_default.print("\n");
59003
59616
  printAlignedLabel("Directory", humanizePath(path3));
@@ -59167,7 +59780,7 @@ async function setupAndLink(client, path3, {
59167
59780
  });
59168
59781
  if (shouldPromptRoot) {
59169
59782
  rootDirectory = await inputRootDirectory(client, path3, autoConfirm);
59170
- if (rootDirectory && !await validateRootDirectory(path3, join10(path3, rootDirectory))) {
59783
+ if (rootDirectory && !await validateRootDirectory(path3, join11(path3, rootDirectory))) {
59171
59784
  return {
59172
59785
  status: "error",
59173
59786
  exitCode: 1,
@@ -59176,7 +59789,7 @@ async function setupAndLink(client, path3, {
59176
59789
  }
59177
59790
  }
59178
59791
  }
59179
- pathWithRootDirectory = rootDirectory ? join10(path3, rootDirectory) : path3;
59792
+ pathWithRootDirectory = rootDirectory ? join11(path3, rootDirectory) : path3;
59180
59793
  const selectedRootServicesSetup = pathWithRootDirectory === path3 ? null : await getServicesSetupState(pathWithRootDirectory);
59181
59794
  let selectedRootInferredServicesChoice = null;
59182
59795
  if (!skipSelectedRootInferredServicesPrompt) {
@@ -59203,7 +59816,7 @@ async function setupAndLink(client, path3, {
59203
59816
  path3,
59204
59817
  selectedRootInferredServicesChoice.selectedPath
59205
59818
  );
59206
- pathWithRootDirectory = rootDirectory ? join10(path3, rootDirectory) : path3;
59819
+ pathWithRootDirectory = rootDirectory ? join11(path3, rootDirectory) : path3;
59207
59820
  }
59208
59821
  const localConfig = await readConfig(pathWithRootDirectory);
59209
59822
  if (localConfig instanceof CantParseJSONFile) {
@@ -59224,7 +59837,7 @@ async function setupAndLink(client, path3, {
59224
59837
  pathWithRootDirectory
59225
59838
  );
59226
59839
  const detectedProjects = detectedProjectsForWorkspace.get("") || [];
59227
- const framework = detectedProjects[0] ?? import_frameworks4.frameworkList.find((f) => f.slug === null);
59840
+ const framework = detectedProjects[0] ?? import_frameworks5.frameworkList.find((f) => f.slug === null);
59228
59841
  settings = await editProjectSettings(
59229
59842
  client,
59230
59843
  {},
@@ -59274,7 +59887,12 @@ async function setupAndLink(client, path3, {
59274
59887
  autoConfirm,
59275
59888
  org
59276
59889
  );
59277
- return { status: "linked", org, project };
59890
+ return {
59891
+ status: "linked",
59892
+ org,
59893
+ project,
59894
+ ...gitConnectIntent?.offered && { gitConnectOffered: true }
59895
+ };
59278
59896
  } catch (err) {
59279
59897
  if (isPromptCanceledError(err)) {
59280
59898
  throw err;
@@ -59292,7 +59910,8 @@ async function setupAndLink(client, path3, {
59292
59910
  }
59293
59911
  async function resolveGitConnectIntent(client, path3, autoConfirm) {
59294
59912
  try {
59295
- const gitConfig = await parseGitConfig(join10(path3, ".git/config"));
59913
+ const gitConfigPath = getGitConfigPath({ cwd: path3 }) ?? join11(path3, ".git/config");
59914
+ const gitConfig = await parseGitConfig(gitConfigPath);
59296
59915
  if (!gitConfig) {
59297
59916
  return null;
59298
59917
  }
@@ -59301,15 +59920,18 @@ async function resolveGitConnectIntent(client, path3, autoConfirm) {
59301
59920
  return null;
59302
59921
  }
59303
59922
  const skipPrompts = autoConfirm || client.nonInteractive;
59304
- const shouldConnect = skipPrompts || await client.input.confirm(`Connect detected Git repository?`, false);
59923
+ const shouldConnect = skipPrompts || await client.input.confirm(
59924
+ `Connect this Git repository to automatically deploy changes on every push?`,
59925
+ false
59926
+ );
59305
59927
  if (!shouldConnect) {
59306
- return null;
59928
+ return { offered: true };
59307
59929
  }
59308
59930
  const repoInfo = skipPrompts ? parseRepoUrl(remoteUrls.origin ?? Object.values(remoteUrls)[0]) : await selectAndParseRemoteUrl(client, remoteUrls);
59309
59931
  if (!repoInfo) {
59310
59932
  return null;
59311
59933
  }
59312
- return { repoInfo };
59934
+ return { repoInfo, offered: !skipPrompts };
59313
59935
  } catch (error) {
59314
59936
  if (isPromptCanceledError(error)) {
59315
59937
  throw error;
@@ -59319,7 +59941,7 @@ async function resolveGitConnectIntent(client, path3, autoConfirm) {
59319
59941
  }
59320
59942
  }
59321
59943
  async function applyGitConnectIntent(client, intent, project, autoConfirm, org) {
59322
- if (!intent) {
59944
+ if (!intent?.repoInfo) {
59323
59945
  return;
59324
59946
  }
59325
59947
  const { repoInfo } = intent;
@@ -59348,7 +59970,7 @@ async function applyGitConnectIntent(client, intent, project, autoConfirm, org)
59348
59970
  var import_chalk17 = __toESM(require_source(), 1);
59349
59971
  var import_fs_extra8 = __toESM(require_lib(), 1);
59350
59972
  import { stat } from "fs/promises";
59351
- import { join as join11, dirname } from "path";
59973
+ import { join as join12, dirname } from "path";
59352
59974
  async function findProjectRoot(startDir) {
59353
59975
  let cwdDev;
59354
59976
  try {
@@ -59365,10 +59987,10 @@ async function findProjectRoot(startDir) {
59365
59987
  } catch {
59366
59988
  return null;
59367
59989
  }
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"));
59990
+ const hasVercelDir = await (0, import_fs_extra8.pathExists)(join12(dir, ".vercel"));
59991
+ const hasVercelJson = await (0, import_fs_extra8.pathExists)(join12(dir, "vercel.json"));
59992
+ const hasVercelToml = await (0, import_fs_extra8.pathExists)(join12(dir, "vercel.toml"));
59993
+ const hasGit = await (0, import_fs_extra8.pathExists)(join12(dir, ".git"));
59372
59994
  if (hasVercelDir || hasVercelJson || hasVercelToml || hasGit) {
59373
59995
  return dir;
59374
59996
  }
@@ -59938,6 +60560,10 @@ async function getDeployment(client, contextName, hostOrId) {
59938
60560
 
59939
60561
  // src/commands/env/pull.ts
59940
60562
  var CONTENTS_PREFIX = "# Created by Vercel CLI\n";
60563
+ function printEnvPullWarning(message) {
60564
+ output_manager_default.print(`${import_chalk19.default.yellow("!")} ${message}
60565
+ `);
60566
+ }
59941
60567
  function readHeadSync(path3, length) {
59942
60568
  const buffer = Buffer.alloc(length);
59943
60569
  const fd = openSync(path3, "r");
@@ -59968,7 +60594,7 @@ var VARIABLES_TO_IGNORE = [
59968
60594
  "VERCEL_SPEED_INSIGHTS_ID",
59969
60595
  "VERCEL_WEB_ANALYTICS_ID"
59970
60596
  ];
59971
- var SENSITIVE_PLACEHOLDER = "[SENSITIVE]";
60597
+ var SENSITIVE_PLACEHOLDER = SENSITIVE_ENV_VALUE_PLACEHOLDER;
59972
60598
  async function getRedactedSensitiveKeys(client, projectId, source, target, gitBranch, records) {
59973
60599
  const emptyKeys = Object.keys(records).filter((key) => !records[key]);
59974
60600
  if (!projectId || emptyKeys.length === 0) {
@@ -59980,7 +60606,7 @@ async function getRedactedSensitiveKeys(client, projectId, source, target, gitBr
59980
60606
  gitBranch
59981
60607
  });
59982
60608
  const sensitiveKeys = new Set(
59983
- envs.filter((env) => env.type === "sensitive").map((env) => env.key)
60609
+ envs.filter(isSecretEnvVar).map((env) => env.key)
59984
60610
  );
59985
60611
  return new Set(emptyKeys.filter((key) => sensitiveKeys.has(key)));
59986
60612
  } catch {
@@ -60039,9 +60665,9 @@ async function pull(client, argv, source = "vercel-cli:env:pull", options = {})
60039
60665
  {
60040
60666
  status: "error",
60041
60667
  reason: "not_linked",
60042
- message: `Your codebase isn't linked to a project on Vercel. Run ${getCommandNamePlain(
60668
+ message: `Your codebase isn't linked to a project on Vercel. Run \`${getCommandNamePlain(
60043
60669
  "link"
60044
- )} to begin. Use --yes for non-interactive; use --scope or --project to specify team or project.`,
60670
+ )}\` to begin. Use \`--yes\` for non-interactive; use \`--scope\` or \`--project\` to specify team or project.`,
60045
60671
  next: [
60046
60672
  { command: buildCommandWithYes(linkArgv) },
60047
60673
  { command: buildCommandWithYes(client.argv) }
@@ -60160,6 +60786,9 @@ async function envPullCommandLogic(client, filename, skipConfirmation, environme
60160
60786
  let contents;
60161
60787
  let fileChanged = true;
60162
60788
  const keptLocalKeys = [];
60789
+ const preservedLocalSecretKeys = [];
60790
+ let redactedSecretCount = 0;
60791
+ let placeholderSecretCount = 0;
60163
60792
  if (oidcTokenOnly) {
60164
60793
  const existingContents = exists ? await (0, import_fs_extra9.readFile)(fullPath, "utf8") : "";
60165
60794
  contents = updateOidcTokenContents(
@@ -60176,9 +60805,17 @@ async function envPullCommandLogic(client, filename, skipConfirmation, environme
60176
60805
  gitBranch,
60177
60806
  records
60178
60807
  );
60808
+ redactedSecretCount = sensitiveKeys.size;
60179
60809
  const mergedRecords = { ...records };
60180
60810
  for (const key of sensitiveKeys) {
60181
- mergedRecords[key] = SENSITIVE_PLACEHOLDER;
60811
+ const localValue = oldEnv?.[key];
60812
+ if (localValue && localValue !== SENSITIVE_PLACEHOLDER) {
60813
+ mergedRecords[key] = localValue;
60814
+ preservedLocalSecretKeys.push(key);
60815
+ } else {
60816
+ mergedRecords[key] = SENSITIVE_PLACEHOLDER;
60817
+ placeholderSecretCount++;
60818
+ }
60182
60819
  }
60183
60820
  if (oldEnv) {
60184
60821
  for (const [key, value] of Object.entries(oldEnv)) {
@@ -60211,6 +60848,16 @@ async function envPullCommandLogic(client, filename, skipConfirmation, environme
60211
60848
  )} Environment)`
60212
60849
  );
60213
60850
  }
60851
+ if (redactedSecretCount > 0) {
60852
+ const preservedMessage = preservedLocalSecretKeys.length > 0 ? ` Kept ${preservedLocalSecretKeys.length} existing local ${preservedLocalSecretKeys.length === 1 ? "value" : "values"}.` : "";
60853
+ 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.` : "";
60854
+ printEnvPullWarning(
60855
+ `${getUnavailableSecretValuesMessage(
60856
+ environment,
60857
+ redactedSecretCount
60858
+ )}${preservedMessage}${placeholderMessage}`
60859
+ );
60860
+ }
60214
60861
  let isGitIgnoreUpdated = false;
60215
60862
  const fileExistsAfterPull = exists || contents.length > 0;
60216
60863
  if (filename === ".env.local" && fileExistsAfterPull) {
@@ -60237,7 +60884,7 @@ function escapeValue2(value) {
60237
60884
  }
60238
60885
 
60239
60886
  // src/util/projects/link.ts
60240
- var readFile5 = promisify(fs4.readFile);
60887
+ var readFile6 = promisify(fs4.readFile);
60241
60888
  var writeFile3 = promisify(fs4.writeFile);
60242
60889
  var VERCEL_DIR = ".vercel";
60243
60890
  var VERCEL_DIR_FALLBACK = ".now";
@@ -60272,7 +60919,7 @@ var linkSchema = {
60272
60919
  }
60273
60920
  };
60274
60921
  function getVercelDirectory(cwd) {
60275
- const possibleDirs = [join12(cwd, VERCEL_DIR), join12(cwd, VERCEL_DIR_FALLBACK)];
60922
+ const possibleDirs = [join13(cwd, VERCEL_DIR), join13(cwd, VERCEL_DIR_FALLBACK)];
60276
60923
  const existingDirs = possibleDirs.filter((d) => isDirectory(d));
60277
60924
  if (existingDirs.length > 1) {
60278
60925
  throw new NowBuildError2({
@@ -60365,7 +61012,7 @@ async function getProjectLinkFromRepoLink(client, path3, projectName, projectNam
60365
61012
  }
60366
61013
  async function getLinkFromDir(dir) {
60367
61014
  try {
60368
- const json = await readFile5(join12(dir, VERCEL_DIR_PROJECT), "utf8");
61015
+ const json = await readFile6(join13(dir, VERCEL_DIR_PROJECT), "utf8");
60369
61016
  const ajv = new import_ajv.default();
60370
61017
  const link = JSON.parse(json);
60371
61018
  if (!ajv.validate(linkSchema, link)) {
@@ -60629,7 +61276,7 @@ Upon creation, it will be automatically added to your ".gitignore" file.
60629
61276
  `;
60630
61277
  async function writeReadme(path3) {
60631
61278
  await writeFile3(
60632
- join12(path3, VERCEL_DIR, VERCEL_DIR_README),
61279
+ join13(path3, VERCEL_DIR, VERCEL_DIR_README),
60633
61280
  VERCEL_DIR_README_CONTENT
60634
61281
  );
60635
61282
  }
@@ -60638,7 +61285,7 @@ async function linkFolderToProject(client, path3, projectLink, projectName, orgS
60638
61285
  return;
60639
61286
  }
60640
61287
  try {
60641
- await (0, import_fs_extra10.ensureDir)(join12(path3, VERCEL_DIR));
61288
+ await (0, import_fs_extra10.ensureDir)(join13(path3, VERCEL_DIR));
60642
61289
  } catch (err) {
60643
61290
  if ((0, import_error_utils4.isErrnoException)(err) && err.code === "ENOTDIR") {
60644
61291
  return;
@@ -60646,7 +61293,7 @@ async function linkFolderToProject(client, path3, projectLink, projectName, orgS
60646
61293
  throw err;
60647
61294
  }
60648
61295
  await writeFile3(
60649
- join12(path3, VERCEL_DIR, VERCEL_DIR_PROJECT),
61296
+ join13(path3, VERCEL_DIR, VERCEL_DIR_PROJECT),
60650
61297
  JSON.stringify({
60651
61298
  ...projectLink,
60652
61299
  projectName
@@ -60771,7 +61418,7 @@ async function fileExists(filePath) {
60771
61418
  async function findAllVercelConfigFiles(workPath) {
60772
61419
  const foundFiles = [];
60773
61420
  for (const ext of VERCEL_CONFIG_EXTENSIONS) {
60774
- const configPath = join13(workPath, `vercel.${ext}`);
61421
+ const configPath = join14(workPath, `vercel.${ext}`);
60775
61422
  if (await fileExists(configPath)) {
60776
61423
  foundFiles.push(configPath);
60777
61424
  }
@@ -60780,12 +61427,12 @@ async function findAllVercelConfigFiles(workPath) {
60780
61427
  }
60781
61428
  async function findSourceVercelConfigFile(workPath) {
60782
61429
  for (const ext of VERCEL_CONFIG_EXTENSIONS) {
60783
- const configPath = join13(workPath, `vercel.${ext}`);
61430
+ const configPath = join14(workPath, `vercel.${ext}`);
60784
61431
  if (await fileExists(configPath)) {
60785
61432
  return basename4(configPath);
60786
61433
  }
60787
61434
  }
60788
- const tomlPath = join13(workPath, "vercel.toml");
61435
+ const tomlPath = join14(workPath, "vercel.toml");
60789
61436
  if (await fileExists(tomlPath)) {
60790
61437
  return "vercel.toml";
60791
61438
  }
@@ -60826,15 +61473,15 @@ function parseConfigLoaderError(stderr) {
60826
61473
  return stderr.trim();
60827
61474
  }
60828
61475
  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");
61476
+ const vercelJsonPath = join14(workPath, "vercel.json");
61477
+ const nowJsonPath = join14(workPath, "now.json");
61478
+ const vercelTomlPath = join14(workPath, "vercel.toml");
60832
61479
  const hasVercelJson = await fileExists(vercelJsonPath);
60833
61480
  const hasNowJson = await fileExists(nowJsonPath);
60834
61481
  const hasVercelToml = await fileExists(vercelTomlPath);
60835
61482
  const vercelConfigPath = await findVercelConfigFile(workPath);
60836
- const vercelDir = join13(workPath, VERCEL_DIR);
60837
- const compiledConfigPath = join13(vercelDir, "vercel.json");
61483
+ const vercelDir = join14(workPath, VERCEL_DIR);
61484
+ const compiledConfigPath = join14(vercelDir, "vercel.json");
60838
61485
  if (hasNowJson) {
60839
61486
  throw new DeprecatedNowJson(nowJsonPath);
60840
61487
  }
@@ -60873,7 +61520,7 @@ async function compileVercelConfig(workPath) {
60873
61520
  }
60874
61521
  if (hasVercelToml) {
60875
61522
  try {
60876
- const tomlContent = await readFile6(vercelTomlPath, "utf8");
61523
+ const tomlContent = await readFile7(vercelTomlPath, "utf8");
60877
61524
  const config = tomlParse2(tomlContent);
60878
61525
  const normalizedConfig = normalizeConfig(config);
60879
61526
  await mkdir(vercelDir, { recursive: true });
@@ -60897,10 +61544,10 @@ async function compileVercelConfig(workPath) {
60897
61544
  }
60898
61545
  }
60899
61546
  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");
61547
+ (0, import_dotenv.config)({ path: join14(workPath, ".env") });
61548
+ (0, import_dotenv.config)({ path: join14(workPath, ".env.local") });
61549
+ const tempOutPath = join14(vercelDir, "vercel-temp.mjs");
61550
+ const loaderPath = join14(vercelDir, "vercel-loader.mjs");
60904
61551
  try {
60905
61552
  const { build } = await import("esbuild");
60906
61553
  await mkdir(vercelDir, { recursive: true });
@@ -61004,9 +61651,9 @@ async function compileVercelConfig(workPath) {
61004
61651
  }
61005
61652
  }
61006
61653
  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");
61654
+ const vercelJsonPath = join14(workPath, "vercel.json");
61655
+ const vercelTomlPath = join14(workPath, "vercel.toml");
61656
+ const compiledConfigPath = join14(workPath, VERCEL_DIR, "vercel.json");
61010
61657
  if (await fileExists(vercelJsonPath)) {
61011
61658
  return vercelJsonPath;
61012
61659
  }
@@ -61065,6 +61712,7 @@ export {
61065
61712
  require_ajv,
61066
61713
  getProjectByNameOrId,
61067
61714
  require_pluralize,
61715
+ getGitConfigPath,
61068
61716
  createGitMeta,
61069
61717
  parseGitConfig,
61070
61718
  pluckRemoteUrls,
@@ -61092,6 +61740,27 @@ export {
61092
61740
  parseEnv,
61093
61741
  createEnvObject,
61094
61742
  VERCEL_OIDC_TOKEN,
61743
+ SENSITIVE_ENV_VALUE_PLACEHOLDER,
61744
+ looksLikeSecret,
61745
+ looksLikeSecretValue,
61746
+ shouldConfirmRotationBeforeDelete,
61747
+ isFlagsSecretNeedingSplit,
61748
+ normalizeStdinEnvValue,
61749
+ getPublicPrefix,
61750
+ getFrameworkPublicPrefix,
61751
+ getApiPublicPrefix,
61752
+ getLocalSvelteKitPublicPrefixes,
61753
+ removePublicPrefix,
61754
+ validateEnvValue,
61755
+ getEnvKeyWarnings,
61756
+ ENV_VISIBILITY_DEPRECATION_MESSAGE,
61757
+ resolveEnvVarTypeOption,
61758
+ isSecretEnvVar,
61759
+ formatVisibilityLabel,
61760
+ getPublicPrefixSecretVisibilityError,
61761
+ resolveEnvVarVisibility,
61762
+ getUnavailableSecretValuesMessage,
61763
+ getLocalSecretFallbackMessage,
61095
61764
  PromptCanceledError,
61096
61765
  PromptBackError,
61097
61766
  isPromptCanceledError,