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.
- package/dist/chunks/{add-W3FFMTX4.js → add-4GQZ22ZN.js} +11 -11
- package/dist/chunks/{add-MH3WV6PV.js → add-HJSEM4YJ.js} +11 -11
- package/dist/chunks/{add-Z5FM6TFI.js → add-SIGUSM3Y.js} +12 -12
- package/dist/chunks/{build-VYYFBJL7.js → build-XOMJDX4M.js} +11 -11
- package/dist/chunks/{chunk-NSU2BTRS.js → chunk-2O5J3KMT.js} +4 -4
- package/dist/chunks/{chunk-RZ5NP6HN.js → chunk-2YRAWYGE.js} +1 -1
- package/dist/chunks/{chunk-JNU3DTEV.js → chunk-37V5P4VO.js} +9 -9
- package/dist/chunks/{chunk-LLM3ZNXJ.js → chunk-3F5EGINT.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-AWSLWAOC.js → chunk-6JPVTPTU.js} +3 -3
- package/dist/chunks/{chunk-M3OSDZPY.js → chunk-6M2KZUED.js} +16 -7
- 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-V4YLY44R.js → chunk-7R6M3BHM.js} +2 -2
- package/dist/chunks/{chunk-XBN2O34P.js → chunk-7ST552E3.js} +17 -4
- 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-UUVMIXT4.js → chunk-DE7MBNHQ.js} +4 -4
- package/dist/chunks/{chunk-YIHOS3ZF.js → chunk-FRAXI2WT.js} +1 -1
- package/dist/chunks/{chunk-FA3MO56Q.js → chunk-FRZULOVH.js} +5 -5
- 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-TIWAL2YU.js → chunk-GISTGGBO.js} +6 -6
- package/dist/chunks/{chunk-CSCSGSQG.js → chunk-GZQQNLF5.js} +5 -5
- package/dist/chunks/{chunk-PIMIKY4X.js → chunk-IJ4X426J.js} +1 -1
- package/dist/chunks/{chunk-TDXNNIZ6.js → chunk-JH4WQRIU.js} +2 -2
- package/dist/chunks/{chunk-TVXCXIRO.js → chunk-L3UXB2CW.js} +1 -1
- package/dist/chunks/{chunk-4JTF6RD7.js → chunk-LXZVOR6F.js} +4 -4
- package/dist/chunks/{chunk-L7CEMAJG.js → chunk-NGGLYKNU.js} +27 -5
- package/dist/chunks/{chunk-VWYNSJXI.js → chunk-NGNN6WF2.js} +8 -8
- package/dist/chunks/{chunk-GGPE5377.js → chunk-O26N2UPI.js} +1 -1
- package/dist/chunks/{chunk-5LX2JDZP.js → chunk-O75LSD3C.js} +1 -1
- package/dist/chunks/{chunk-MRMNMFMD.js → chunk-PRH6KRUT.js} +1 -1
- package/dist/chunks/{chunk-OX7KI3LF.js → chunk-QFAS4OVW.js} +18 -0
- package/dist/chunks/{chunk-PBHBX6UL.js → chunk-R5PULMHT.js} +3 -3
- package/dist/chunks/{chunk-PPUWG2UB.js → chunk-SF3AYAIF.js} +58 -25
- package/dist/chunks/{chunk-TAZ5ZAKG.js → chunk-SWI6F4X3.js} +2 -2
- package/dist/chunks/{chunk-ZKUHCL6O.js → chunk-V3MDDR2X.js} +5 -5
- package/dist/chunks/{chunk-E6LFKMI2.js → chunk-VJ5NAOWB.js} +791 -122
- package/dist/chunks/{chunk-G75NFPIT.js → chunk-WNAKOXGK.js} +1 -1
- package/dist/chunks/{chunk-JJQP3PYM.js → chunk-WZ2S3A2A.js} +5 -5
- package/dist/chunks/{chunk-CYNB6LL4.js → chunk-XNFHNTS2.js} +1 -1
- package/dist/chunks/{chunk-47VQ6H2S.js → chunk-YJKZQEHS.js} +2 -2
- package/dist/chunks/{chunk-GUWPUX2Y.js → chunk-ZNMTDLYH.js} +4 -4
- package/dist/chunks/{chunk-VLPLCJZC.js → chunk-ZSFEACZU.js} +1 -1
- package/dist/chunks/{clear-TNGRDA7D.js → clear-BWT2FJY4.js} +11 -11
- package/dist/chunks/{compile-vercel-config-ERLXKKWW.js → compile-vercel-config-DGM4NISW.js} +7 -7
- package/dist/chunks/{config-H22EE765.js → config-NJAN3RMU.js} +11 -11
- package/dist/chunks/{config-7EDKML5Q.js → config-RSE6Z4LB.js} +9 -9
- package/dist/chunks/{constants-YMCRE6IG.js → constants-WEQVJSYS.js} +1 -1
- package/dist/chunks/{delete-Q4S5F2AI.js → delete-LROBRBAH.js} +9 -9
- package/dist/chunks/{delete-LORYIZHY.js → delete-SSL2PK2F.js} +8 -8
- package/dist/chunks/{disable-HKWCBDJC.js → disable-ASG5JDZR.js} +8 -8
- package/dist/chunks/{discard-UCCRF2JQ.js → discard-PV47B6IL.js} +8 -8
- package/dist/chunks/{edit-AWL35PYQ.js → edit-5ATYIOLX.js} +10 -10
- package/dist/chunks/{edit-6IM6VRBR.js → edit-REI7HXGG.js} +10 -10
- package/dist/chunks/{enable-GN3D3L3V.js → enable-LZXL7XAG.js} +8 -8
- package/dist/chunks/{exec-CNBOV577.js → exec-XH4K34JM.js} +3 -3
- package/dist/chunks/{export-HHRVFALV.js → export-ZAZFQU2E.js} +8 -8
- package/dist/chunks/{image-4DCU4VPP.js → image-QPHN5V7L.js} +6 -6
- package/dist/chunks/{import-builders-DVG3HOTF.js → import-builders-W3YE2V6A.js} +9 -9
- package/dist/chunks/{inspect-TUW67CFZ.js → inspect-BFGK72WY.js} +10 -10
- package/dist/chunks/{inspect-TGOJDKIT.js → inspect-FRXJRM6T.js} +9 -9
- package/dist/chunks/{inspect-B3OWUFLH.js → inspect-RDMC2Z3Q.js} +11 -11
- package/dist/chunks/{inspect-VPME6UC7.js → inspect-SJEZVGPK.js} +11 -11
- package/dist/chunks/{inspect-VLGKNHJW.js → inspect-SSOM3FXS.js} +11 -11
- package/dist/chunks/{list-K552ITMK.js → list-2HTR7Q3J.js} +9 -9
- package/dist/chunks/{list-TK2JO7BK.js → list-PHDUZVMR.js} +8 -8
- package/dist/chunks/{list-2DPKDHRV.js → list-W33GXKDA.js} +10 -10
- package/dist/chunks/{login-HRWEKW5P.js → login-JWAFHVDG.js} +21 -12
- package/dist/chunks/{ls-M5TYGFP5.js → ls-3AN2DZHN.js} +11 -11
- package/dist/chunks/{ls-YIF3KLF3.js → ls-3MH2OCP3.js} +11 -11
- package/dist/chunks/{ls-TM6NTZEB.js → ls-D2POUHI7.js} +9 -9
- package/dist/chunks/{ls-JSV2WZVF.js → ls-KDFU224B.js} +11 -11
- package/dist/chunks/{ls-IOXGXEY4.js → ls-KX2VBOGV.js} +10 -10
- package/dist/chunks/{ls-O2WYF5UL.js → ls-RWKNJQNT.js} +11 -11
- package/dist/chunks/{open-FWAVEWGU.js → open-IEYRB6RL.js} +9 -9
- package/dist/chunks/{permissions-DPFYL47Z.js → permissions-ZWZUMEHR.js} +7 -7
- package/dist/chunks/{publish-63CGFKQR.js → publish-UWZYBDHK.js} +8 -8
- package/dist/chunks/{push-T5ZTBW3P.js → push-IAEQ3FBF.js} +11 -11
- package/dist/chunks/{query-B6O3EMEV.js → query-NNOZYSED.js} +11 -11
- package/dist/chunks/{reorder-ANV4NMKH.js → reorder-TKBM244W.js} +8 -8
- package/dist/chunks/{reply-C73KGOCG.js → reply-FLBSBMTW.js} +10 -10
- package/dist/chunks/{resolve-IHSIVPEE.js → resolve-GJYPMWUE.js} +9 -9
- package/dist/chunks/{restore-GSUNXP2O.js → restore-PNI3TM3U.js} +8 -8
- package/dist/chunks/{rm-4O74PS4Q.js → rm-76CSSSSV.js} +11 -11
- package/dist/chunks/{rm-M7IJC2WZ.js → rm-FN7LTIIL.js} +11 -11
- package/dist/chunks/{rm-YDTK5ESZ.js → rm-FTE33UHE.js} +10 -10
- package/dist/chunks/{rm-RV5SQFQA.js → rm-FXA5DLXQ.js} +11 -13
- package/dist/chunks/{rm-PRINF4OU.js → rm-PGJ4KR6U.js} +11 -11
- package/dist/chunks/{routes-SZI2G4SE.js → routes-2OLIBRYX.js} +3 -3
- package/dist/chunks/{rule-inspect-ZZC53FLP.js → rule-inspect-LJIGPTWS.js} +10 -10
- package/dist/chunks/{rules-SAOSSGFI.js → rules-6BMNO6M5.js} +10 -10
- package/dist/chunks/{schema-23ZFAKDU.js → schema-45SJNY5L.js} +4 -4
- package/dist/chunks/{schema-2Q3QRMRO.js → schema-HATXEQDP.js} +9 -9
- package/dist/chunks/{set-L47ZCZBJ.js → set-C3UQUQ42.js} +9 -9
- package/dist/chunks/{tags-2TWLM77N.js → tags-BTVDROFG.js} +5 -5
- package/dist/chunks/{types-G3PEUIJH.js → types-JGANJ5EQ.js} +3 -3
- package/dist/chunks/{update-SZH2VBD6.js → update-B6PSOHUW.js} +12 -12
- package/dist/commands/build/builder-worker.cjs +281 -0
- package/dist/commands/build/index.js +690 -235
- package/dist/commands/deploy/index.js +103 -31
- package/dist/commands/dev/index.js +669 -140
- 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 +1978 -953
- package/dist/index.js +18 -18
- package/dist/version.mjs +1 -1
- package/package.json +47 -47
- 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;
|
|
@@ -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) {
|
|
@@ -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(", ");
|
|
@@ -36906,7 +36915,7 @@ var require_jsonfile3 = __commonJS({
|
|
|
36906
36915
|
} catch (_) {
|
|
36907
36916
|
_fs = __require("fs");
|
|
36908
36917
|
}
|
|
36909
|
-
function
|
|
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:
|
|
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.
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
53415
|
-
import { join as
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
58153
|
+
import { join as join9, relative as relative2 } from "path";
|
|
57541
58154
|
|
|
57542
58155
|
// src/util/input/display-services.ts
|
|
57543
|
-
var
|
|
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(
|
|
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
|
|
57693
|
-
import { basename as basename2, join as
|
|
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
|
|
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(
|
|
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-
|
|
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 =
|
|
59141
|
+
const configPath = join8(cwd, "vercel.json");
|
|
58529
59142
|
if (compileResult.sourceFile === "vercel.toml") {
|
|
58530
|
-
return prepareTomlServicesConfigWrite(
|
|
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
|
|
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 :
|
|
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
|
|
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 }) ??
|
|
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)(
|
|
59000
|
-
(0, import_fs_extra7.remove)(
|
|
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,
|
|
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 ?
|
|
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 ?
|
|
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] ??
|
|
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 {
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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)(
|
|
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)(
|
|
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 =
|
|
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(
|
|
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
|
|
60668
|
+
message: `Your codebase isn't linked to a project on Vercel. Run \`${getCommandNamePlain(
|
|
60043
60669
|
"link"
|
|
60044
|
-
)} to begin. Use
|
|
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
|
-
|
|
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
|
|
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 = [
|
|
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
|
|
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
|
-
|
|
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)(
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
60830
|
-
const nowJsonPath =
|
|
60831
|
-
const vercelTomlPath =
|
|
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 =
|
|
60837
|
-
const compiledConfigPath =
|
|
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
|
|
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:
|
|
60901
|
-
(0, import_dotenv.config)({ path:
|
|
60902
|
-
const tempOutPath =
|
|
60903
|
-
const loaderPath =
|
|
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 =
|
|
61008
|
-
const vercelTomlPath =
|
|
61009
|
-
const compiledConfigPath =
|
|
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,
|