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.
- package/dist/chunks/{add-Z5FM6TFI.js → add-7O4TM33A.js} +12 -12
- package/dist/chunks/{add-MH3WV6PV.js → add-UT6ZPA4F.js} +11 -11
- package/dist/chunks/{add-W3FFMTX4.js → add-UVMFKSSY.js} +11 -11
- package/dist/chunks/{build-VYYFBJL7.js → build-SKKT3DIB.js} +11 -11
- package/dist/chunks/{chunk-LLM3ZNXJ.js → chunk-2EH6SZRG.js} +2 -2
- package/dist/chunks/{chunk-UUVMIXT4.js → chunk-2T3IZZTJ.js} +4 -4
- package/dist/chunks/{chunk-RZ5NP6HN.js → chunk-2YRAWYGE.js} +1 -1
- package/dist/chunks/{chunk-TDXNNIZ6.js → chunk-3PA7LXYM.js} +2 -2
- package/dist/chunks/{chunk-KQRVZWJU.js → chunk-3T7WSWZH.js} +1 -1
- package/dist/chunks/{chunk-R6IGDGX3.js → chunk-5XECIWME.js} +1 -1
- package/dist/chunks/{chunk-PBHBX6UL.js → chunk-63OX2DER.js} +3 -3
- package/dist/chunks/{chunk-V4YLY44R.js → chunk-67IIZBBY.js} +2 -2
- package/dist/chunks/{chunk-AWSLWAOC.js → chunk-6JPVTPTU.js} +3 -3
- package/dist/chunks/{chunk-HT2XWSAJ.js → chunk-7AEEQOD4.js} +2 -29
- package/dist/chunks/{chunk-QG4PCM45.js → chunk-7HE63HCR.js} +102 -15
- package/dist/chunks/{chunk-FA3MO56Q.js → chunk-7IDPPWDN.js} +5 -5
- package/dist/chunks/{chunk-MRMNMFMD.js → chunk-7KSICC3A.js} +1 -1
- package/dist/chunks/{chunk-XBN2O34P.js → chunk-7ST552E3.js} +17 -4
- package/dist/chunks/{chunk-TAZ5ZAKG.js → chunk-AFKB6VMO.js} +2 -2
- package/dist/chunks/{chunk-CV4S27SS.js → chunk-ASBP32T6.js} +1 -1
- package/dist/chunks/{chunk-CQJRLNTX.js → chunk-AYLY3ZVL.js} +2 -2
- package/dist/chunks/{chunk-AWCID36T.js → chunk-BMKU5KEL.js} +1 -1
- package/dist/chunks/{chunk-E6LFKMI2.js → chunk-BQG777JE.js} +794 -124
- package/dist/chunks/{chunk-VWYNSJXI.js → chunk-CBHLLOGZ.js} +8 -8
- package/dist/chunks/{chunk-CSCSGSQG.js → chunk-CMRZ4KI4.js} +5 -5
- package/dist/chunks/{chunk-TIWAL2YU.js → chunk-DG6IMLCF.js} +6 -6
- package/dist/chunks/{chunk-YIHOS3ZF.js → chunk-FRAXI2WT.js} +1 -1
- package/dist/chunks/{chunk-7XX4ZEOV.js → chunk-FWKSJYDV.js} +1 -1
- package/dist/chunks/{chunk-OHER4DGX.js → chunk-FXD67VN5.js} +25 -9
- package/dist/chunks/{chunk-GUWPUX2Y.js → chunk-GK3RE3AC.js} +4 -4
- package/dist/chunks/{chunk-JNU3DTEV.js → chunk-IFNCPWH5.js} +9 -9
- package/dist/chunks/{chunk-PIMIKY4X.js → chunk-IJ4X426J.js} +1 -1
- package/dist/chunks/{chunk-NSU2BTRS.js → chunk-KD2N44NG.js} +4 -4
- package/dist/chunks/{chunk-TVXCXIRO.js → chunk-L3UXB2CW.js} +1 -1
- package/dist/chunks/{chunk-JJQP3PYM.js → chunk-MHCGKUI7.js} +5 -5
- package/dist/chunks/{chunk-47VQ6H2S.js → chunk-MUMITVZP.js} +2 -2
- package/dist/chunks/{chunk-L7CEMAJG.js → chunk-NGGLYKNU.js} +27 -5
- package/dist/chunks/{chunk-ZKUHCL6O.js → chunk-NJCM5JJN.js} +5 -5
- package/dist/chunks/{chunk-5LX2JDZP.js → chunk-O75LSD3C.js} +1 -1
- package/dist/chunks/{chunk-OX7KI3LF.js → chunk-QFAS4OVW.js} +18 -0
- package/dist/chunks/{chunk-4JTF6RD7.js → chunk-SSBYESJ5.js} +4 -4
- package/dist/chunks/{chunk-G75NFPIT.js → chunk-WNAKOXGK.js} +1 -1
- package/dist/chunks/{chunk-PPUWG2UB.js → chunk-WVPMR7XV.js} +58 -25
- package/dist/chunks/{chunk-CYNB6LL4.js → chunk-XNFHNTS2.js} +1 -1
- package/dist/chunks/{chunk-M3OSDZPY.js → chunk-XSYZDMUP.js} +16 -7
- package/dist/chunks/{chunk-VLPLCJZC.js → chunk-ZSFEACZU.js} +1 -1
- package/dist/chunks/{clear-TNGRDA7D.js → clear-X7M4WGBC.js} +11 -11
- package/dist/chunks/{compile-vercel-config-ERLXKKWW.js → compile-vercel-config-FBOZBWJC.js} +7 -7
- package/dist/chunks/{config-7EDKML5Q.js → config-KGW667XC.js} +9 -9
- package/dist/chunks/{config-H22EE765.js → config-RYPSCAR7.js} +11 -11
- package/dist/chunks/{delete-LORYIZHY.js → delete-OXYXXPHR.js} +8 -8
- package/dist/chunks/{delete-Q4S5F2AI.js → delete-VK6FTDBI.js} +9 -9
- package/dist/chunks/{disable-HKWCBDJC.js → disable-XRJTKNX4.js} +8 -8
- package/dist/chunks/{discard-UCCRF2JQ.js → discard-NAPSPR6Y.js} +8 -8
- package/dist/chunks/{edit-AWL35PYQ.js → edit-34GDLPQG.js} +10 -10
- package/dist/chunks/{edit-6IM6VRBR.js → edit-WLG4GLU3.js} +10 -10
- package/dist/chunks/{enable-GN3D3L3V.js → enable-IDKKVXKB.js} +8 -8
- package/dist/chunks/{exec-CNBOV577.js → exec-XH4K34JM.js} +3 -3
- package/dist/chunks/{export-HHRVFALV.js → export-MPMU3FYY.js} +8 -8
- package/dist/chunks/{image-4DCU4VPP.js → image-RZ2A4FWP.js} +6 -6
- package/dist/chunks/{import-builders-DVG3HOTF.js → import-builders-GZPE5N44.js} +9 -9
- package/dist/chunks/{inspect-B3OWUFLH.js → inspect-56S2DKPO.js} +11 -11
- package/dist/chunks/{inspect-VPME6UC7.js → inspect-EVDBNPP4.js} +11 -11
- package/dist/chunks/{inspect-TGOJDKIT.js → inspect-KGEMHV2T.js} +9 -9
- package/dist/chunks/{inspect-VLGKNHJW.js → inspect-OOV2ORKD.js} +11 -11
- package/dist/chunks/{inspect-TUW67CFZ.js → inspect-X2Y5FDKR.js} +10 -10
- package/dist/chunks/{list-K552ITMK.js → list-FWLSZYMO.js} +9 -9
- package/dist/chunks/{list-2DPKDHRV.js → list-H357CF7M.js} +10 -10
- package/dist/chunks/{list-TK2JO7BK.js → list-TWSOAQRB.js} +8 -8
- package/dist/chunks/{login-HRWEKW5P.js → login-54OPNB5E.js} +21 -12
- package/dist/chunks/{ls-JSV2WZVF.js → ls-6JHFSJBJ.js} +11 -11
- package/dist/chunks/{ls-O2WYF5UL.js → ls-DU3S2GBJ.js} +11 -11
- package/dist/chunks/{ls-IOXGXEY4.js → ls-VDFNIR5H.js} +10 -10
- package/dist/chunks/{ls-M5TYGFP5.js → ls-WFMTVJOO.js} +11 -11
- package/dist/chunks/{ls-YIF3KLF3.js → ls-WGIRTAVM.js} +11 -11
- package/dist/chunks/{ls-TM6NTZEB.js → ls-ZMR5RMU4.js} +9 -9
- package/dist/chunks/{open-FWAVEWGU.js → open-RCSCNKHF.js} +9 -9
- package/dist/chunks/{permissions-DPFYL47Z.js → permissions-XNN37R4N.js} +7 -7
- package/dist/chunks/{publish-63CGFKQR.js → publish-PLXEACYY.js} +8 -8
- package/dist/chunks/{push-T5ZTBW3P.js → push-EFYSB52Q.js} +11 -11
- package/dist/chunks/{query-B6O3EMEV.js → query-EKTXDOL7.js} +11 -11
- package/dist/chunks/{reorder-ANV4NMKH.js → reorder-OSA7D2RG.js} +8 -8
- package/dist/chunks/{reply-C73KGOCG.js → reply-6M2IYKLK.js} +10 -10
- package/dist/chunks/{resolve-IHSIVPEE.js → resolve-MCX5STKN.js} +9 -9
- package/dist/chunks/{restore-GSUNXP2O.js → restore-52OEP3NL.js} +8 -8
- package/dist/chunks/{rm-M7IJC2WZ.js → rm-2VAJFK25.js} +11 -11
- package/dist/chunks/{rm-RV5SQFQA.js → rm-4BJN2LJX.js} +11 -13
- package/dist/chunks/{rm-4O74PS4Q.js → rm-IYEDZOMN.js} +11 -11
- package/dist/chunks/{rm-PRINF4OU.js → rm-QW35WHSK.js} +11 -11
- package/dist/chunks/{rm-YDTK5ESZ.js → rm-TXV4GB4L.js} +10 -10
- package/dist/chunks/{routes-SZI2G4SE.js → routes-2OLIBRYX.js} +3 -3
- package/dist/chunks/{rule-inspect-ZZC53FLP.js → rule-inspect-WOBAN3Y2.js} +10 -10
- package/dist/chunks/{rules-SAOSSGFI.js → rules-CUJRAZYO.js} +10 -10
- package/dist/chunks/{schema-23ZFAKDU.js → schema-45SJNY5L.js} +4 -4
- package/dist/chunks/{schema-2Q3QRMRO.js → schema-VCGEJAOG.js} +9 -9
- package/dist/chunks/{set-L47ZCZBJ.js → set-2QSXMDVF.js} +9 -9
- package/dist/chunks/{tags-2TWLM77N.js → tags-NHX2VQ7E.js} +5 -5
- package/dist/chunks/{types-G3PEUIJH.js → types-JGANJ5EQ.js} +3 -3
- package/dist/chunks/{update-SZH2VBD6.js → update-EOHXTT4N.js} +12 -12
- package/dist/commands/build/builder-worker.cjs +281 -0
- package/dist/commands/build/index.js +798 -236
- package/dist/commands/deploy/index.js +103 -31
- package/dist/commands/dev/index.js +983 -176
- package/dist/commands/env/index.js +1167 -542
- package/dist/commands/link/index.js +10 -10
- package/dist/commands/list/index.js +10 -10
- package/dist/commands-bulk.js +2002 -962
- package/dist/index.js +16 -16
- package/dist/version.mjs +1 -1
- package/package.json +48 -48
- 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-
|
|
9
|
+
} from "./chunk-FXD67VN5.js";
|
|
10
10
|
import {
|
|
11
11
|
TelemetryClient,
|
|
12
12
|
require_graceful_fs
|
|
13
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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:
|
|
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:
|
|
13756
|
+
var { readFile: readFile8 } = import_fs6.promises;
|
|
13757
13757
|
async function readFileOrNull(file) {
|
|
13758
13758
|
try {
|
|
13759
|
-
const data = await
|
|
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: () =>
|
|
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:
|
|
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
|
|
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
|
|
18233
|
-
var frameworks_default =
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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(
|
|
21518
|
+
function filterFrameworkList(frameworkList6, useExperimentalFrameworks) {
|
|
21510
21519
|
if (shouldIncludeExperimentalFrameworks(useExperimentalFrameworks)) {
|
|
21511
|
-
return
|
|
21520
|
+
return frameworkList6;
|
|
21512
21521
|
}
|
|
21513
|
-
return
|
|
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:
|
|
21639
|
+
frameworkList: frameworkList6,
|
|
21631
21640
|
useExperimentalFrameworks
|
|
21632
21641
|
}) {
|
|
21633
21642
|
const filteredList = filterFrameworkList(
|
|
21634
|
-
|
|
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:
|
|
21659
|
+
frameworkList: frameworkList6,
|
|
21651
21660
|
useExperimentalFrameworks
|
|
21652
21661
|
}) {
|
|
21653
21662
|
const filteredList = filterFrameworkList(
|
|
21654
|
-
|
|
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:
|
|
21679
|
+
frameworkList: frameworkList6,
|
|
21671
21680
|
useExperimentalFrameworks
|
|
21672
21681
|
}) {
|
|
21673
21682
|
const filteredList = filterFrameworkList(
|
|
21674
|
-
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
21958
|
+
return import_promises5.default.readFile(this.getFilePath(name));
|
|
21950
21959
|
}
|
|
21951
21960
|
async _isFile(name) {
|
|
21952
|
-
const stat2 = await
|
|
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
|
|
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: () =>
|
|
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
|
|
32377
|
+
var import_frameworks6 = require_frameworks();
|
|
32369
32378
|
var import_types = require_types3();
|
|
32370
|
-
var DETECTION_FRAMEWORKS =
|
|
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
|
|
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
|
|
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(
|
|
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)(
|
|
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
|
|
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(
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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.
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
53415
|
-
import { join as
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
58154
|
+
import { join as join9, relative as relative2 } from "path";
|
|
57541
58155
|
|
|
57542
58156
|
// src/util/input/display-services.ts
|
|
57543
|
-
var
|
|
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(
|
|
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
|
|
57693
|
-
import { basename as basename2, join as
|
|
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
|
|
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(
|
|
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-
|
|
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 =
|
|
59142
|
+
const configPath = join8(cwd, "vercel.json");
|
|
58529
59143
|
if (compileResult.sourceFile === "vercel.toml") {
|
|
58530
|
-
return prepareTomlServicesConfigWrite(
|
|
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
|
|
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 :
|
|
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
|
|
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 }) ??
|
|
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)(
|
|
59000
|
-
(0, import_fs_extra7.remove)(
|
|
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,
|
|
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 ?
|
|
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 ?
|
|
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] ??
|
|
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 {
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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)(
|
|
59369
|
-
const hasVercelJson = await (0, import_fs_extra8.pathExists)(
|
|
59370
|
-
const hasVercelToml = await (0, import_fs_extra8.pathExists)(
|
|
59371
|
-
const hasGit = await (0, import_fs_extra8.pathExists)(
|
|
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 =
|
|
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(
|
|
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
|
|
60669
|
+
message: `Your codebase isn't linked to a project on Vercel. Run \`${getCommandNamePlain(
|
|
60043
60670
|
"link"
|
|
60044
|
-
)} to begin. Use
|
|
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
|
-
|
|
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
|
|
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 = [
|
|
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
|
|
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
|
-
|
|
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)(
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
60830
|
-
const nowJsonPath =
|
|
60831
|
-
const vercelTomlPath =
|
|
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 =
|
|
60837
|
-
const compiledConfigPath =
|
|
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
|
|
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:
|
|
60901
|
-
(0, import_dotenv.config)({ path:
|
|
60902
|
-
const tempOutPath =
|
|
60903
|
-
const loaderPath =
|
|
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 =
|
|
61008
|
-
const vercelTomlPath =
|
|
61009
|
-
const compiledConfigPath =
|
|
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,
|