void 0.10.11 → 0.10.12
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/cli/cli.mjs +14 -14
- package/dist/cli/env-schema-probe.mjs +2 -2
- package/dist/{config-E03l1C_h.mjs → config-BkTvs43g.mjs} +13 -0
- package/dist/{db-PZBsLSGb.mjs → db-DOiJMRt2.mjs} +3 -3
- package/dist/{deploy-DT8wsPZd.mjs → deploy-u7Rv9q_q.mjs} +187 -51
- package/dist/{env-AAHU02L6.mjs → env-CZy5MorI.mjs} +1 -1
- package/dist/{env-validation-BdDlGhbN.mjs → env-validation-Dea3v3ej.mjs} +1 -1
- package/dist/{gen-oup1xBN0.mjs → gen-o_w-8yI8.mjs} +1 -1
- package/dist/{git-metadata-CBKaL0v5.mjs → git-metadata-D-gurjzG.mjs} +6 -5
- package/dist/{github-cmd-BdNaOVNa.mjs → github-cmd-DKcGUNsj.mjs} +1 -1
- package/dist/{headers-BQknpzkn.mjs → headers-nsHIFixA.mjs} +1 -1
- package/dist/index.mjs +63 -25
- package/dist/{init-Dl2PKuQn.mjs → init-3rgHKBVi.mjs} +2 -2
- package/dist/{node-BDx8pmhq.mjs → node-Da0UcsGA.mjs} +1 -1
- package/dist/pages/index.mjs +2 -2
- package/dist/{prepare-DOBTY0o4.mjs → prepare-BoKHgMNx.mjs} +1 -1
- package/dist/{preset-BGrvB4Bl.mjs → preset-BjyR3lzz.mjs} +55 -2
- package/dist/{provision-BLrCEBbI.mjs → provision-rShh6MKY.mjs} +2 -2
- package/package.json +2 -2
- package/schema.json +5 -0
- package/skills/void/docs/guide/app-types.md +43 -0
- package/skills/void/docs/guide/edge/static-assets.md +23 -0
- package/skills/void/docs/integrations/frameworks/overview.md +1 -0
- package/skills/void/docs/reference/config.md +27 -1
package/dist/cli/cli.mjs
CHANGED
|
@@ -2078,7 +2078,7 @@ else if (command === "deploy") {
|
|
|
2078
2078
|
log.error(err instanceof Error ? err.message : String(err));
|
|
2079
2079
|
process.exit(1);
|
|
2080
2080
|
}
|
|
2081
|
-
import("../deploy-
|
|
2081
|
+
import("../deploy-u7Rv9q_q.mjs").then((n) => n.t).then(({ runDeploy }) => {
|
|
2082
2082
|
runDeploy(root, {
|
|
2083
2083
|
projectSlug: deployArgs.projectSlug,
|
|
2084
2084
|
dir: deployArgs.dir,
|
|
@@ -2096,10 +2096,10 @@ else if (command === "deploy") {
|
|
|
2096
2096
|
else if (command === "project") runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (root, parsed) => import("../project-cmd-D_w-4w5B.mjs").then(({ runProjectCommand }) => runProjectCommand(root, parsed)));
|
|
2097
2097
|
else if (command === "secret") runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (root, parsed) => import("../secret-Dt32J6RI.mjs").then(({ runSecretCommand }) => runSecretCommand(root, parsed)));
|
|
2098
2098
|
else if (command === "domain") runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (root, parsed) => import("../domain-DiaNQbrl.mjs").then(({ runDomainCommand }) => runDomainCommand(root, parsed)));
|
|
2099
|
-
else if (command === "db") runSubcommandGroup("db", dbSubcommands, parseDbArgs, (root, parsed) => import("../db-
|
|
2100
|
-
else if (command === "env") runSubcommandGroup("env", envSubcommands, parseEnvArgs, (root, parsed) => import("../env-
|
|
2101
|
-
else if (command === "gen") runSubcommandGroup("gen", genSubcommands, parseGenArgs, (root, parsed) => import("../gen-
|
|
2102
|
-
else if (command === "github") runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (root, parsed) => import("../github-cmd-
|
|
2099
|
+
else if (command === "db") runSubcommandGroup("db", dbSubcommands, parseDbArgs, (root, parsed) => import("../db-DOiJMRt2.mjs").then(({ runDbCommand }) => runDbCommand(root, parsed)));
|
|
2100
|
+
else if (command === "env") runSubcommandGroup("env", envSubcommands, parseEnvArgs, (root, parsed) => import("../env-CZy5MorI.mjs").then(({ runEnvCommand }) => runEnvCommand(root, parsed)));
|
|
2101
|
+
else if (command === "gen") runSubcommandGroup("gen", genSubcommands, parseGenArgs, (root, parsed) => import("../gen-o_w-8yI8.mjs").then(({ runGenCommand }) => runGenCommand(root, parsed)));
|
|
2102
|
+
else if (command === "github") runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (root, parsed) => import("../github-cmd-DKcGUNsj.mjs").then(({ runGithubCommand }) => runGithubCommand(root, parsed)));
|
|
2103
2103
|
else if (command === "build") runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (root, parsed) => import("../build-cmd-Bujrv5q-.mjs").then(({ runBuildCommand }) => runBuildCommand(root, parsed)));
|
|
2104
2104
|
else if (command === "prepare") {
|
|
2105
2105
|
const root = process.cwd();
|
|
@@ -2110,7 +2110,7 @@ else if (command === "prepare") {
|
|
|
2110
2110
|
log.error(err instanceof Error ? err.message : String(err));
|
|
2111
2111
|
process.exit(1);
|
|
2112
2112
|
}
|
|
2113
|
-
import("../prepare-
|
|
2113
|
+
import("../prepare-BoKHgMNx.mjs").then(({ runPrepareCommand }) => {
|
|
2114
2114
|
runPrepareCommand(root, prepareArgs).catch((err) => {
|
|
2115
2115
|
log.error(err.message ?? err);
|
|
2116
2116
|
process.exit(1);
|
|
@@ -2118,7 +2118,7 @@ else if (command === "prepare") {
|
|
|
2118
2118
|
});
|
|
2119
2119
|
} else if (command === "init") {
|
|
2120
2120
|
const root = process.cwd();
|
|
2121
|
-
import("../init-
|
|
2121
|
+
import("../init-3rgHKBVi.mjs").then(({ runInitCommand, parseInitArgs }) => {
|
|
2122
2122
|
let initArgs;
|
|
2123
2123
|
try {
|
|
2124
2124
|
initArgs = parseInitArgs(args.slice(1));
|
|
@@ -2217,12 +2217,12 @@ else if (command === "-v" || command === "--version") {
|
|
|
2217
2217
|
const root = process.cwd();
|
|
2218
2218
|
switch (cmd) {
|
|
2219
2219
|
case "init": {
|
|
2220
|
-
const { runInitCommand, parseInitArgs } = await import("../init-
|
|
2220
|
+
const { runInitCommand, parseInitArgs } = await import("../init-3rgHKBVi.mjs");
|
|
2221
2221
|
await runInitCommand(root, parseInitArgs([]));
|
|
2222
2222
|
return;
|
|
2223
2223
|
}
|
|
2224
2224
|
case "deploy": {
|
|
2225
|
-
const { runDeploy } = await import("../deploy-
|
|
2225
|
+
const { runDeploy } = await import("../deploy-u7Rv9q_q.mjs").then((n) => n.t);
|
|
2226
2226
|
await runDeploy(root);
|
|
2227
2227
|
return;
|
|
2228
2228
|
}
|
|
@@ -2235,13 +2235,13 @@ else if (command === "-v" || command === "--version") {
|
|
|
2235
2235
|
case "project": return runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (r, p) => import("../project-cmd-D_w-4w5B.mjs").then(({ runProjectCommand }) => runProjectCommand(r, p)));
|
|
2236
2236
|
case "secret": return runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (r, p) => import("../secret-Dt32J6RI.mjs").then(({ runSecretCommand }) => runSecretCommand(r, p)));
|
|
2237
2237
|
case "domain": return runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (r, p) => import("../domain-DiaNQbrl.mjs").then(({ runDomainCommand }) => runDomainCommand(r, p)));
|
|
2238
|
-
case "github": return runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (r, p) => import("../github-cmd-
|
|
2238
|
+
case "github": return runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (r, p) => import("../github-cmd-DKcGUNsj.mjs").then(({ runGithubCommand }) => runGithubCommand(r, p)));
|
|
2239
2239
|
case "build": return runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (r, p) => import("../build-cmd-Bujrv5q-.mjs").then(({ runBuildCommand }) => runBuildCommand(r, p)));
|
|
2240
|
-
case "db": return runSubcommandGroup("db", dbSubcommands, parseDbArgs, (r, p) => import("../db-
|
|
2241
|
-
case "env": return runSubcommandGroup("env", envSubcommands, parseEnvArgs, (r, p) => import("../env-
|
|
2242
|
-
case "gen": return runSubcommandGroup("gen", genSubcommands, parseGenArgs, (r, p) => import("../gen-
|
|
2240
|
+
case "db": return runSubcommandGroup("db", dbSubcommands, parseDbArgs, (r, p) => import("../db-DOiJMRt2.mjs").then(({ runDbCommand }) => runDbCommand(r, p)));
|
|
2241
|
+
case "env": return runSubcommandGroup("env", envSubcommands, parseEnvArgs, (r, p) => import("../env-CZy5MorI.mjs").then(({ runEnvCommand }) => runEnvCommand(r, p)));
|
|
2242
|
+
case "gen": return runSubcommandGroup("gen", genSubcommands, parseGenArgs, (r, p) => import("../gen-o_w-8yI8.mjs").then(({ runGenCommand }) => runGenCommand(r, p)));
|
|
2243
2243
|
case "prepare": {
|
|
2244
|
-
const { runPrepareCommand } = await import("../prepare-
|
|
2244
|
+
const { runPrepareCommand } = await import("../prepare-BoKHgMNx.mjs");
|
|
2245
2245
|
await runPrepareCommand(root, parsePrepareArgs([]));
|
|
2246
2246
|
return;
|
|
2247
2247
|
}
|
|
@@ -208,7 +208,7 @@ async function runFactsChild(root) {
|
|
|
208
208
|
});
|
|
209
209
|
return;
|
|
210
210
|
}
|
|
211
|
-
const { deriveSelfHostSchemaFacts, SelfHostSchemaError } = await import("../env-validation-
|
|
211
|
+
const { deriveSelfHostSchemaFacts, SelfHostSchemaError } = await import("../env-validation-Dea3v3ej.mjs").then((n) => n.c);
|
|
212
212
|
try {
|
|
213
213
|
emitResult({
|
|
214
214
|
kind: "ok",
|
|
@@ -233,7 +233,7 @@ async function runFactsChild(root) {
|
|
|
233
233
|
* fault → fail closed as a values-free schema error.
|
|
234
234
|
*/
|
|
235
235
|
async function runValidateEmittedChild(root) {
|
|
236
|
-
const { computeInvalidEmittedKeys, readEmittedWorkerVars, SelfHostSchemaError } = await import("../env-validation-
|
|
236
|
+
const { computeInvalidEmittedKeys, readEmittedWorkerVars, SelfHostSchemaError } = await import("../env-validation-Dea3v3ej.mjs").then((n) => n.c);
|
|
237
237
|
const emitted = readEmittedWorkerVars(root);
|
|
238
238
|
if (!emitted.ok) {
|
|
239
239
|
emitResult({
|
|
@@ -5,6 +5,7 @@ import { i as isVoidAuthProvider, t as VOID_AUTH_PROVIDERS } from "./providers-C
|
|
|
5
5
|
import { readFileSync } from "node:fs";
|
|
6
6
|
//#region src/config.ts
|
|
7
7
|
var config_exports = /* @__PURE__ */ __exportAll({
|
|
8
|
+
VALID_NOT_FOUND_HANDLING: () => VALID_NOT_FOUND_HANDLING,
|
|
8
9
|
VALID_REDIRECT_STATUSES: () => VALID_REDIRECT_STATUSES,
|
|
9
10
|
assertSingleSplat: () => assertSingleSplat,
|
|
10
11
|
assertUniqueCaptureNames: () => assertUniqueCaptureNames,
|
|
@@ -35,6 +36,15 @@ const VALID_APP_TYPES = /* @__PURE__ */ new Set([
|
|
|
35
36
|
]);
|
|
36
37
|
const VALID_OUTPUTS = /* @__PURE__ */ new Set(["server", "static"]);
|
|
37
38
|
/**
|
|
39
|
+
* Accepted `routing.notFound` values. Source of truth for the framework, the
|
|
40
|
+
* `AssetConfig.not_found_handling` field, and the schema.json enum.
|
|
41
|
+
*/
|
|
42
|
+
const VALID_NOT_FOUND_HANDLING = /* @__PURE__ */ new Set([
|
|
43
|
+
"single-page-application",
|
|
44
|
+
"404-page",
|
|
45
|
+
"none"
|
|
46
|
+
]);
|
|
47
|
+
/**
|
|
38
48
|
* Allowed 3xx redirect statuses. Source of truth for the framework, the
|
|
39
49
|
* `_redirects` parser (`cli/headers.ts`), and the schema.json enum. 303 is
|
|
40
50
|
* included for POST→GET after-submit patterns; 304/305/306 aren't
|
|
@@ -279,6 +289,9 @@ function readConfig(root) {
|
|
|
279
289
|
if (obj.routing !== void 0) {
|
|
280
290
|
if (typeof obj.routing !== "object" || obj.routing === null || Array.isArray(obj.routing)) throw new Error(`config: "routing" in ${CONFIG_FILE} must be an object.`);
|
|
281
291
|
const routing = obj.routing;
|
|
292
|
+
if (routing.notFound !== void 0) {
|
|
293
|
+
if (typeof routing.notFound !== "string" || !VALID_NOT_FOUND_HANDLING.has(routing.notFound)) throw new Error(`config: "routing.notFound" in ${CONFIG_FILE} must be one of: ${[...VALID_NOT_FOUND_HANDLING].join(", ")}.`);
|
|
294
|
+
}
|
|
282
295
|
if (routing.revalidate !== void 0) if (typeof routing.revalidate === "number") {
|
|
283
296
|
if (!Number.isFinite(routing.revalidate) || routing.revalidate < 0) throw new Error(`config: "routing.revalidate" in ${CONFIG_FILE} must be a non-negative finite number.`);
|
|
284
297
|
} else if (typeof routing.revalidate === "object" && routing.revalidate !== null && !Array.isArray(routing.revalidate)) {
|
|
@@ -3,11 +3,11 @@ import { D as outro, S as confirm, T as log, a as cliTitle, j as isCancel, s as
|
|
|
3
3
|
import { n as readProjectPaths } from "./project-paths-BQd7OmIo.mjs";
|
|
4
4
|
import { t as cfAccessHeaders } from "./cf-access-Bqw81xAf.mjs";
|
|
5
5
|
import { b as readProjectConfig, f as getToken, m as isStagingMode, n as PlatformClient, t as PlatformApiError } from "./client-Gb71-XkG.mjs";
|
|
6
|
-
import { c as getDatabaseDialect, f as readConfig, p as resolveBindingNames } from "./config-
|
|
6
|
+
import { c as getDatabaseDialect, f as readConfig, p as resolveBindingNames } from "./config-BkTvs43g.mjs";
|
|
7
7
|
import { r as detectFramework } from "./plugin-inference-DMeavIJ6.mjs";
|
|
8
8
|
import { c as collectMigrations, d as stripSqlExt, f as writeJournal, n as listDrizzleArtifacts, r as validateMigrations, t as assertJournalCoherence, u as readJournal } from "./validate-Cw_RLeTj.mjs";
|
|
9
9
|
import { n as STAGING_PROXY_URL, t as DEFAULT_PROXY_URL } from "./proxy-D-3_D-Gl.mjs";
|
|
10
|
-
import { formatTimestamp } from "./gen-
|
|
10
|
+
import { formatTimestamp } from "./gen-o_w-8yI8.mjs";
|
|
11
11
|
import { existsSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
12
12
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
13
13
|
import { execFileSync } from "node:child_process";
|
|
@@ -947,7 +947,7 @@ async function runExport(root, args, dialect) {
|
|
|
947
947
|
}
|
|
948
948
|
}
|
|
949
949
|
async function runSetUrl(root) {
|
|
950
|
-
const { readConfig: readVoidConfig, getDatabaseDialect: getDialect } = await import("./config-
|
|
950
|
+
const { readConfig: readVoidConfig, getDatabaseDialect: getDialect } = await import("./config-BkTvs43g.mjs").then((n) => n.n);
|
|
951
951
|
if (getDialect(readVoidConfig(root)) !== "postgresql") {
|
|
952
952
|
log.error("db: This command is only for PostgreSQL projects. Set \"database\": \"pg\" in void.json.");
|
|
953
953
|
process.exit(1);
|
|
@@ -5,22 +5,22 @@ import { i as resolveProjectPaths, n as readProjectPaths, t as assertNoRootSourc
|
|
|
5
5
|
import { a as scanQueuesSync, i as scanWebSocketRoutesSync, o as scanJobsSync, r as scanRoutes, s as findVoidAuthConfig } from "./scan-DYXkrasO.mjs";
|
|
6
6
|
import { t as cfAccessHeaders } from "./cf-access-Bqw81xAf.mjs";
|
|
7
7
|
import { C as ensureCloudflaredToken, S as writeProjectConfig, a as isExpiredTokenError, b as readProjectConfig, f as getToken, i as isCliOutdatedError, m as isStagingMode, n as PlatformClient, o as parsePlatformErrorBody, p as getTokenSource, t as PlatformApiError, u as getApiUrl } from "./client-Gb71-XkG.mjs";
|
|
8
|
-
import { c as getDatabaseDialect, f as readConfig, l as isNodeTarget, p as resolveBindingNames } from "./config-
|
|
8
|
+
import { c as getDatabaseDialect, f as readConfig, l as isNodeTarget, p as resolveBindingNames } from "./config-BkTvs43g.mjs";
|
|
9
9
|
import { i as inferProjectBindings, n as FRAMEWORK_SCAN_DIRS, r as detectFramework } from "./plugin-inference-DMeavIJ6.mjs";
|
|
10
10
|
import { o as validateSsrEntry } from "./entry-D7yy4xVH.mjs";
|
|
11
11
|
import { i as voidWarn, r as voidLog } from "./log-ChfPKsVd.mjs";
|
|
12
|
-
import { a as resolveProjectCommand, c as mergeAndExpand, i as hasBackendFiles, l as parseDotenvFile, n as detectPreset, o as resolveWranglerArgv, r as formatProjectCommand, t as FRAMEWORK_PRESETS, u as scanWranglerDotenvKeys } from "./preset-
|
|
12
|
+
import { a as resolveProjectCommand, c as mergeAndExpand, i as hasBackendFiles, l as parseDotenvFile, n as detectPreset, o as resolveWranglerArgv, r as formatProjectCommand, t as FRAMEWORK_PRESETS, u as scanWranglerDotenvKeys } from "./preset-BjyR3lzz.mjs";
|
|
13
13
|
import { t as discoverSchema } from "./discover-CJHyvYfR.mjs";
|
|
14
14
|
import { t as findEnvFile } from "./env-types-QBj-ndax.mjs";
|
|
15
|
-
import { a as collectPlaintextVarWarningsFromVars, d as getDeployEnvDefaults, f as readEmittedWorkerVars, i as SelfHostSecretListError, l as fetchRemoteSecretNames, m as validateProdEnv, n as SelfHostFirstDeployError, o as deriveSelfHostEnvContextFromVars, p as selfHostSchemaFailureMessage, r as SelfHostSchemaError, s as dischargeSelfHostEnvContext, t as SelfHostEnvValidationError, u as formatEnvReport } from "./env-validation-
|
|
15
|
+
import { a as collectPlaintextVarWarningsFromVars, d as getDeployEnvDefaults, f as readEmittedWorkerVars, i as SelfHostSecretListError, l as fetchRemoteSecretNames, m as validateProdEnv, n as SelfHostFirstDeployError, o as deriveSelfHostEnvContextFromVars, p as selfHostSchemaFailureMessage, r as SelfHostSchemaError, s as dischargeSelfHostEnvContext, t as SelfHostEnvValidationError, u as formatEnvReport } from "./env-validation-Dea3v3ej.mjs";
|
|
16
16
|
import { n as writeDrizzleConfig } from "./config-CutEMNGJ.mjs";
|
|
17
17
|
import { a as buildMigrationPlanBundle, c as collectMigrations, r as validateMigrations, t as assertJournalCoherence } from "./validate-Cw_RLeTj.mjs";
|
|
18
18
|
import { t as scanPages } from "./scan-DEwlM_Xy.mjs";
|
|
19
19
|
import { n as STAGING_PROXY_URL, t as DEFAULT_PROXY_URL } from "./proxy-D-3_D-Gl.mjs";
|
|
20
20
|
import { i as promptProjectSetupAction, n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-DsYvl3TB.mjs";
|
|
21
21
|
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BBMtLLV9.mjs";
|
|
22
|
-
import { t as collectGitDeployMetadata } from "./git-metadata-
|
|
23
|
-
import { n as lintDuplicateSources, r as mergeRoutingRules, t as lintDestinationSplats } from "./headers-
|
|
22
|
+
import { t as collectGitDeployMetadata } from "./git-metadata-D-gurjzG.mjs";
|
|
23
|
+
import { n as lintDuplicateSources, r as mergeRoutingRules, t as lintDestinationSplats } from "./headers-nsHIFixA.mjs";
|
|
24
24
|
import { t as promptForLoginToken } from "./login-BT3H8PN3.mjs";
|
|
25
25
|
import { createRequire } from "node:module";
|
|
26
26
|
import { copyFileSync, cpSync, createWriteStream, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
|
|
@@ -56,24 +56,26 @@ const VOID_INTERNAL_WORKER_FIRST = ["/__void", "/__void/*"];
|
|
|
56
56
|
function resolveAssetRoutingPolicy(inputs) {
|
|
57
57
|
const workerFirst = workerOwnsHtmlRouting(inputs);
|
|
58
58
|
const apiWorkerFirst = !workerFirst && (inputs.hasApiRoutes === true || inputs.authEnabled === true);
|
|
59
|
+
const assetConfig = workerFirst ? {
|
|
60
|
+
not_found_handling: "none",
|
|
61
|
+
run_worker_first: ["/**"]
|
|
62
|
+
} : apiWorkerFirst ? {
|
|
63
|
+
not_found_handling: "single-page-application",
|
|
64
|
+
run_worker_first: [
|
|
65
|
+
"/api",
|
|
66
|
+
"/api/*",
|
|
67
|
+
...VOID_INTERNAL_WORKER_FIRST
|
|
68
|
+
]
|
|
69
|
+
} : {
|
|
70
|
+
not_found_handling: "single-page-application",
|
|
71
|
+
run_worker_first: [...VOID_INTERNAL_WORKER_FIRST]
|
|
72
|
+
};
|
|
73
|
+
if (inputs.notFound !== void 0) assetConfig.not_found_handling = inputs.notFound;
|
|
59
74
|
return {
|
|
60
|
-
assetConfig
|
|
61
|
-
not_found_handling: "none",
|
|
62
|
-
run_worker_first: ["/**"]
|
|
63
|
-
} : apiWorkerFirst ? {
|
|
64
|
-
not_found_handling: "single-page-application",
|
|
65
|
-
run_worker_first: [
|
|
66
|
-
"/api",
|
|
67
|
-
"/api/*",
|
|
68
|
-
...VOID_INTERNAL_WORKER_FIRST
|
|
69
|
-
]
|
|
70
|
-
} : {
|
|
71
|
-
not_found_handling: "single-page-application",
|
|
72
|
-
run_worker_first: [...VOID_INTERNAL_WORKER_FIRST]
|
|
73
|
-
},
|
|
75
|
+
assetConfig,
|
|
74
76
|
apiWorkerFirst,
|
|
75
77
|
workerFirst,
|
|
76
|
-
workerSpaFallback: workerFirst && !inputs.isSsr && !inputs.hasPages
|
|
78
|
+
workerSpaFallback: workerFirst && !inputs.isSsr && !inputs.hasPages && (inputs.notFound === void 0 || inputs.notFound === "single-page-application")
|
|
77
79
|
};
|
|
78
80
|
}
|
|
79
81
|
const SANDBOX_MIGRATION_TAG = "void-sandbox-v1";
|
|
@@ -2469,11 +2471,24 @@ function stripDevOnlyRuleFields(rules) {
|
|
|
2469
2471
|
*
|
|
2470
2472
|
* When the user has no fallbacks configured, the platform-level SPA switch
|
|
2471
2473
|
* is left intact (zero worker-side overhead for the common case).
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
+
*
|
|
2475
|
+
* `notFound` is the explicit `routing.notFound` from void.json. It overrides
|
|
2476
|
+
* the value this function would otherwise infer from `appType`, mirroring
|
|
2477
|
+
* `resolveAssetRoutingPolicy` on the worker-with-assets path. It is resolved
|
|
2478
|
+
* *before* the SPA branch, not patched onto the result afterwards: an override
|
|
2479
|
+
* away from `single-page-application` must also skip the synthetic
|
|
2480
|
+
* `/* -> /index.html` rule below, otherwise the SPA shell would still be
|
|
2481
|
+
* served — just through a fallback rule instead of the platform switch — and
|
|
2482
|
+
* the override would be a no-op. This matters because `detectPreset`
|
|
2483
|
+
* classifies any Vite project without backend files as `spa`, so a plain Vite
|
|
2484
|
+
* MPA lands on `appType: 'spa'` and `routing.notFound: '404-page'` is its only
|
|
2485
|
+
* escape hatch.
|
|
2486
|
+
*/
|
|
2487
|
+
function resolveSpaFallbackChain(appType, fallbackRules, notFound) {
|
|
2474
2488
|
const userRules = fallbackRules && fallbackRules.length > 0 ? fallbackRules : void 0;
|
|
2475
|
-
|
|
2476
|
-
|
|
2489
|
+
const handling = notFound ?? (appType === "spa" ? "single-page-application" : appType === "static" ? "404-page" : "none");
|
|
2490
|
+
if (handling !== "single-page-application") return {
|
|
2491
|
+
assetConfig: { not_found_handling: handling },
|
|
2477
2492
|
fallbackRules: userRules
|
|
2478
2493
|
};
|
|
2479
2494
|
if (!userRules) return {
|
|
@@ -2724,17 +2739,21 @@ function toLiveManifest(live) {
|
|
|
2724
2739
|
};
|
|
2725
2740
|
}
|
|
2726
2741
|
/**
|
|
2727
|
-
* If the user configured `routing.fallbacks` on
|
|
2728
|
-
*
|
|
2729
|
-
*
|
|
2742
|
+
* If the user configured `routing.fallbacks` on an app whose resolved
|
|
2743
|
+
* `not_found_handling` is not `single-page-application`, the platform still
|
|
2744
|
+
* applies the rules but no `/* -> /index.html` SPA shell is synthesised —
|
|
2745
|
+
* unmatched paths fall through to the platform 404. Returns the warning
|
|
2730
2746
|
* message string when that mismatch is detected, or `null` otherwise. Pure
|
|
2731
2747
|
* function; callers decide whether/how to surface the message (CLI progress,
|
|
2732
2748
|
* `console.warn`, etc.).
|
|
2749
|
+
*
|
|
2750
|
+
* The message names `not_found_handling` rather than the app type because an
|
|
2751
|
+
* explicit `routing.notFound` can land here too — the app may well be a SPA.
|
|
2733
2752
|
*/
|
|
2734
2753
|
function detectNonSpaFallbackWarning(assetConfig, fallbackRules) {
|
|
2735
2754
|
if (assetConfig?.not_found_handling === "single-page-application") return null;
|
|
2736
2755
|
if (!fallbackRules || fallbackRules.length === 0) return null;
|
|
2737
|
-
return "routing.fallbacks is set but
|
|
2756
|
+
return "routing.fallbacks is set but not_found_handling is not \"single-page-application\"; fallbacks will be applied, but no \"/* -> /index.html\" SPA shell fallback is synthesised — unmatched paths fall through to the platform 404.";
|
|
2738
2757
|
}
|
|
2739
2758
|
/**
|
|
2740
2759
|
* Build a Void-app deploy manifest from the inferred bindings + per-feature
|
|
@@ -2839,8 +2858,8 @@ function collectWorkerFiles(workerDir) {
|
|
|
2839
2858
|
* Build a static-deploy manifest. Pure shape transformation — no I/O.
|
|
2840
2859
|
*/
|
|
2841
2860
|
function buildStaticManifest(opts) {
|
|
2842
|
-
const { appType, hashedAssetsPrefix, headerRules, redirectRules, fallbackRules } = opts;
|
|
2843
|
-
const { assetConfig, fallbackRules: resolvedFallbackRules } = resolveSpaFallbackChain(appType, fallbackRules);
|
|
2861
|
+
const { appType, hashedAssetsPrefix, headerRules, redirectRules, fallbackRules, notFound } = opts;
|
|
2862
|
+
const { assetConfig, fallbackRules: resolvedFallbackRules } = resolveSpaFallbackChain(appType, fallbackRules, notFound);
|
|
2844
2863
|
const manifest = {
|
|
2845
2864
|
version: 3,
|
|
2846
2865
|
assetManifestVersion: 2,
|
|
@@ -3335,6 +3354,7 @@ var deploy_exports = /* @__PURE__ */ __exportAll({
|
|
|
3335
3354
|
ensurePreviouslyDeployedLiveBindingConfig: () => ensurePreviouslyDeployedLiveBindingConfig,
|
|
3336
3355
|
generateDeployWrapperIfNeeded: () => generateDeployWrapperIfNeeded,
|
|
3337
3356
|
hasDeploySchemaDrift: () => hasDeploySchemaDrift,
|
|
3357
|
+
hasPrerenderSources: () => hasPrerenderSources,
|
|
3338
3358
|
hashWranglerUploader: () => hashWranglerUploader,
|
|
3339
3359
|
loadDeployEnv: () => loadDeployEnv,
|
|
3340
3360
|
parseRootWranglerConfig: () => parseRootWranglerConfig,
|
|
@@ -3344,6 +3364,7 @@ var deploy_exports = /* @__PURE__ */ __exportAll({
|
|
|
3344
3364
|
resolveDeployWorkerMain: () => resolveDeployWorkerMain,
|
|
3345
3365
|
resolveDeployWranglerCompat: () => resolveDeployWranglerCompat,
|
|
3346
3366
|
resolveDistDir: () => resolveDistDir,
|
|
3367
|
+
resolveFullDeployBuildCommand: () => resolveFullDeployBuildCommand,
|
|
3347
3368
|
resolveStaticBuildCommand: () => resolveStaticBuildCommand,
|
|
3348
3369
|
resolveStaticDeployPreset: () => resolveStaticDeployPreset,
|
|
3349
3370
|
resolveWorkerDirName: () => resolveWorkerDirName,
|
|
@@ -3356,6 +3377,7 @@ var deploy_exports = /* @__PURE__ */ __exportAll({
|
|
|
3356
3377
|
streamDeployEvents: () => streamDeployEvents,
|
|
3357
3378
|
validateAuthMigrationSchema: () => validateAuthMigrationSchema,
|
|
3358
3379
|
verifyGeneratedDeployConfig: () => verifyGeneratedDeployConfig,
|
|
3380
|
+
warnIgnoredNotFoundForFramework: () => warnIgnoredNotFoundForFramework,
|
|
3359
3381
|
warnRedundantForceOn3xx: () => warnRedundantForceOn3xx,
|
|
3360
3382
|
warnUnpublishedRouting: () => warnUnpublishedRouting
|
|
3361
3383
|
});
|
|
@@ -3368,7 +3390,7 @@ let loadedProvisionModule;
|
|
|
3368
3390
|
* so a managed deploy never imports it — and thus never loads `proper-lockfile`.
|
|
3369
3391
|
*/
|
|
3370
3392
|
async function loadProvisionModule() {
|
|
3371
|
-
loadedProvisionModule ??= await import("./provision-
|
|
3393
|
+
loadedProvisionModule ??= await import("./provision-rShh6MKY.mjs");
|
|
3372
3394
|
return loadedProvisionModule;
|
|
3373
3395
|
}
|
|
3374
3396
|
/**
|
|
@@ -3512,14 +3534,44 @@ async function runDeploy(root, options) {
|
|
|
3512
3534
|
* `cfAccessHeaders(process.env)` / the cloudflared pair-guard AFTER the build
|
|
3513
3535
|
* step. Only the service-token pair is scrubbed; the cloudflared
|
|
3514
3536
|
* `CF_ACCESS_TOKEN` JWT (dev path) is left untouched.
|
|
3515
|
-
|
|
3516
|
-
|
|
3537
|
+
*
|
|
3538
|
+
* `localBinRoot` is an explicit OPT-IN, not a default. Build commands are run
|
|
3539
|
+
* through a shell (`execSync`) and a user-configured `inference.build` (e.g.
|
|
3540
|
+
* `vitepress build && vite build`) names bare binaries that only exist in the
|
|
3541
|
+
* project's own `node_modules/.bin`; under the build container's
|
|
3542
|
+
* `npx --yes void deploy` that happens to work — npx prepends every ancestor
|
|
3543
|
+
* `.bin` itself — but a directly invoked `node_modules/.bin/void deploy` or a
|
|
3544
|
+
* globally installed `void` inherits no such PATH and the bare binary fails to
|
|
3545
|
+
* resolve. Passing it makes the project's bin dir shadow the system one for
|
|
3546
|
+
* that child, so it belongs ONLY on the three build execs. The other callers
|
|
3547
|
+
* (`getGitCommit`, the drizzle-kit spawn) exec a system binary or an absolute
|
|
3548
|
+
* path and must not hand a dependency-shipped `node_modules/.bin/git` a child
|
|
3549
|
+
* process holding `VOID_TOKEN`.
|
|
3550
|
+
*/
|
|
3551
|
+
function buildEnv(extra, options) {
|
|
3517
3552
|
const env = {
|
|
3518
3553
|
...process.env,
|
|
3519
3554
|
...extra
|
|
3520
3555
|
};
|
|
3521
3556
|
delete env.CF_ACCESS_CLIENT_ID;
|
|
3522
3557
|
delete env.CF_ACCESS_CLIENT_SECRET;
|
|
3558
|
+
return options?.localBinRoot === void 0 ? env : prependLocalBinToPath(env, options.localBinRoot);
|
|
3559
|
+
}
|
|
3560
|
+
/**
|
|
3561
|
+
* Prepend `<root>/node_modules/.bin` to the child env's PATH, preserving
|
|
3562
|
+
* whatever was already there.
|
|
3563
|
+
*
|
|
3564
|
+
* PATH is looked up case-insensitively and written back under the SAME key the
|
|
3565
|
+
* env already used: Windows reports it as `Path`, and `{ ...process.env }`
|
|
3566
|
+
* drops the case-insensitive lookup that `process.env` itself provides, so
|
|
3567
|
+
* hardcoding `PATH` would leave the real variable untouched and add a dead one.
|
|
3568
|
+
*/
|
|
3569
|
+
function prependLocalBinToPath(env, root) {
|
|
3570
|
+
const binDir = join(root, "node_modules", ".bin");
|
|
3571
|
+
const delimiter = process.platform === "win32" ? ";" : ":";
|
|
3572
|
+
const pathKey = Object.keys(env).find((key) => key.toLowerCase() === "path") ?? "PATH";
|
|
3573
|
+
const existing = env[pathKey];
|
|
3574
|
+
env[pathKey] = existing ? `${binDir}${delimiter}${existing}` : binDir;
|
|
3523
3575
|
return env;
|
|
3524
3576
|
}
|
|
3525
3577
|
/**
|
|
@@ -5847,7 +5899,7 @@ async function runDeployInner(root, options, cliLog) {
|
|
|
5847
5899
|
name: detected.name,
|
|
5848
5900
|
class: detected.class
|
|
5849
5901
|
});
|
|
5850
|
-
const gitMetadata = collectGitDeployMetadata(root, options?.skipBuild ? null : getGitCommit(root));
|
|
5902
|
+
const gitMetadata = collectGitDeployMetadata(root, options?.skipBuild ? null : getGitCommit(root), process.env, buildEnv());
|
|
5851
5903
|
const fwPreset = FRAMEWORK_PRESETS[detected.name];
|
|
5852
5904
|
if (detected.class === "b" || detected.class === "c") {
|
|
5853
5905
|
if (!fwPreset) {
|
|
@@ -5855,18 +5907,21 @@ async function runDeployInner(root, options, cliLog) {
|
|
|
5855
5907
|
process.exit(1);
|
|
5856
5908
|
}
|
|
5857
5909
|
await runFrameworkDeploy(root, config, client, detected, fwPreset, voidConfig, options?.skipBuild, gitMetadata, cliLog);
|
|
5858
|
-
} else await runFullDeploy(root, config, client, fwPreset, options?.skipBuild, gitMetadata, detected, cliLog);
|
|
5910
|
+
} else await runFullDeploy(root, config, client, voidConfig, fwPreset, options?.skipBuild, gitMetadata, detected, cliLog);
|
|
5859
5911
|
return;
|
|
5860
5912
|
}
|
|
5861
|
-
if (!preset && !voidConfig.inference?.appType) preset = detectPreset(root, {
|
|
5862
|
-
|
|
5913
|
+
if (!preset && !voidConfig.inference?.appType) preset = detectPreset(root, {
|
|
5914
|
+
spa: options?.spa,
|
|
5915
|
+
strictBackend: true
|
|
5916
|
+
});
|
|
5917
|
+
const gitMetadata = collectGitDeployMetadata(root, options?.skipBuild ? null : getGitCommit(root), process.env, buildEnv());
|
|
5863
5918
|
if (preset) {
|
|
5864
5919
|
preset = {
|
|
5865
5920
|
...preset,
|
|
5866
5921
|
buildCommand: resolveStaticBuildCommand(preset, voidConfig.inference?.build, Boolean(options?.dir))
|
|
5867
5922
|
};
|
|
5868
5923
|
await runStaticDeploy(root, config, client, preset, options?.skipBuild, gitMetadata, void 0, void 0, void 0, void 0, voidConfig.routing, cliLog);
|
|
5869
|
-
} else await runFullDeploy(root, config, client, void 0, options?.skipBuild, gitMetadata, void 0, cliLog);
|
|
5924
|
+
} else await runFullDeploy(root, config, client, voidConfig, void 0, options?.skipBuild, gitMetadata, void 0, cliLog);
|
|
5870
5925
|
return;
|
|
5871
5926
|
} catch (error) {
|
|
5872
5927
|
if (isExpiredTokenError(error)) {
|
|
@@ -5905,6 +5960,57 @@ function resolveStaticBuildCommand(preset, buildOverride, hasExplicitDir = false
|
|
|
5905
5960
|
if (hasExplicitDir) return null;
|
|
5906
5961
|
return buildOverride ?? preset.buildCommand;
|
|
5907
5962
|
}
|
|
5963
|
+
/**
|
|
5964
|
+
* Resolve the build command for a FULL (Class A / Void app) deploy.
|
|
5965
|
+
*
|
|
5966
|
+
* `inference.build` wins when set, matching `runFrameworkDeploy` and the static
|
|
5967
|
+
* path's `resolveStaticBuildCommand`. Without it the full path was the only
|
|
5968
|
+
* deploy mode that ignored the config and hardcoded `vite build`, so an app that
|
|
5969
|
+
* needs more than one build step — an SSG that emits the site, then Void's build
|
|
5970
|
+
* packaging it via `publicDir` alongside the worker — had no way to express it
|
|
5971
|
+
* and died on the missing `index.html` entry.
|
|
5972
|
+
*
|
|
5973
|
+
* The two returned strings are deliberately different for the FALLBACK: `label`
|
|
5974
|
+
* goes to the user (`formatProjectCommand` rewrites `vite` → `vp` without
|
|
5975
|
+
* expanding an absolute bin path), `command` is what actually runs
|
|
5976
|
+
* (`resolveProjectCommand` expands to the local bin). A configured command is
|
|
5977
|
+
* the user's own text and is used verbatim for both, so what is printed is
|
|
5978
|
+
* exactly what is executed.
|
|
5979
|
+
*/
|
|
5980
|
+
function resolveFullDeployBuildCommand(root, buildOverride) {
|
|
5981
|
+
if (buildOverride) return {
|
|
5982
|
+
label: buildOverride,
|
|
5983
|
+
command: buildOverride
|
|
5984
|
+
};
|
|
5985
|
+
return {
|
|
5986
|
+
label: formatProjectCommand(root, "vite build"),
|
|
5987
|
+
command: resolveProjectCommand(root, "vite build")
|
|
5988
|
+
};
|
|
5989
|
+
}
|
|
5990
|
+
/**
|
|
5991
|
+
* Whether the built worker's `__voidCollectPrerenderPaths` can return anything
|
|
5992
|
+
* at all. When it cannot, booting it is pure cost and the deploy skips it.
|
|
5993
|
+
*
|
|
5994
|
+
* These three are exactly — and only — the sources `compilePrerenderCollector`
|
|
5995
|
+
* (`router/compile.ts`) emits a `paths.push(...)` for:
|
|
5996
|
+
* 1. `scan.pages.pages` — static patterns + dynamic pages' `getPrerenderPaths()`
|
|
5997
|
+
* 2. the custom SSR entry's top-level `getPrerenderPaths()` (`ssr` argument)
|
|
5998
|
+
* 3. `options.explicitPrerenderPaths` — void.json `routing.prerender`
|
|
5999
|
+
* With none of them present the collector is a generated function whose body
|
|
6000
|
+
* returns `[...new Set([])]`, so skipping is result-identical.
|
|
6001
|
+
*
|
|
6002
|
+
* Skipping matters beyond speed. `collectPrerenderPaths` boots the worker in
|
|
6003
|
+
* Miniflare with bindings from `wranglerVars + loadEnv('production', root, '')`
|
|
6004
|
+
* only, and the generated fetch handler validates the `env.ts` schema at boot.
|
|
6005
|
+
* An app whose secrets live on the platform (never in a committed `.env`) gets
|
|
6006
|
+
* an HTTP 500 there and the deploy dies — for an app that had nothing to
|
|
6007
|
+
* prerender in the first place. The only workaround was moving the secret into
|
|
6008
|
+
* `.env.production`, which `loadDeployEnv` then publishes as a plaintext
|
|
6009
|
+
* manifest var. So this guard also removes a real incentive to leak secrets.
|
|
6010
|
+
*/
|
|
6011
|
+
function hasPrerenderSources(inputs) {
|
|
6012
|
+
return inputs.hasPages || inputs.hasSsrEntry || (inputs.explicitPrerenderPaths?.length ?? 0) > 0;
|
|
6013
|
+
}
|
|
5908
6014
|
function resolveStaticDeployPreset(root, voidConfig, options) {
|
|
5909
6015
|
if (options?.dir) return detectPreset(root, {
|
|
5910
6016
|
dir: options.dir,
|
|
@@ -6165,7 +6271,7 @@ function assembleVoidManifest(pageScan, isFrameworkMode, opts, revalidateConfig)
|
|
|
6165
6271
|
pathRevalidate: isFrameworkMode || revalidateConfig == null || typeof revalidateConfig !== "object" ? void 0 : revalidateConfig
|
|
6166
6272
|
});
|
|
6167
6273
|
}
|
|
6168
|
-
async function runStaticDeploy(root, config, client, preset, skipBuild, gitMetadata, hashedAssetsPrefix, headerRules, redirectRules, fallbackRules, routing, cliLog) {
|
|
6274
|
+
async function runStaticDeploy(root, config, client, preset, skipBuild, gitMetadata, hashedAssetsPrefix, headerRules, redirectRules, fallbackRules, routing, cliLog, notFound) {
|
|
6169
6275
|
const typeLabel = preset.appType === "spa" ? "Static SPA" : "Static Site";
|
|
6170
6276
|
log.info(`${typeLabel} deploy`);
|
|
6171
6277
|
cliLog?.info("deploy_mode", {
|
|
@@ -6179,7 +6285,7 @@ async function runStaticDeploy(root, config, client, preset, skipBuild, gitMetad
|
|
|
6179
6285
|
execSync(preset.buildCommand, {
|
|
6180
6286
|
cwd: root,
|
|
6181
6287
|
stdio: "inherit",
|
|
6182
|
-
env: buildEnv()
|
|
6288
|
+
env: buildEnv(void 0, { localBinRoot: root })
|
|
6183
6289
|
});
|
|
6184
6290
|
cliLog?.info("build_end", { durationMs: Date.now() - buildStartedAt });
|
|
6185
6291
|
} else if (skipBuild) cliLog?.info("build_skipped", { reason: "skipBuild" });
|
|
@@ -6223,7 +6329,8 @@ async function runStaticDeploy(root, config, client, preset, skipBuild, gitMetad
|
|
|
6223
6329
|
hashedAssetsPrefix: hashedAssetsPrefix ?? "assets",
|
|
6224
6330
|
headerRules,
|
|
6225
6331
|
redirectRules,
|
|
6226
|
-
fallbackRules
|
|
6332
|
+
fallbackRules,
|
|
6333
|
+
notFound: notFound ?? routing?.notFound
|
|
6227
6334
|
});
|
|
6228
6335
|
cliLog?.info("package_end", {
|
|
6229
6336
|
mode: "static",
|
|
@@ -6257,6 +6364,27 @@ function warnRedundantForceOn3xx(count) {
|
|
|
6257
6364
|
log.warn(`Found ${count} redundant "!" on 3xx entries in _redirects (these always force by nature; safe to remove).`);
|
|
6258
6365
|
}
|
|
6259
6366
|
/**
|
|
6367
|
+
* Class B/C framework deploys pin `not_found_handling: 'none'`, so
|
|
6368
|
+
* `routing.notFound` does nothing there — say so instead of dropping it
|
|
6369
|
+
* silently.
|
|
6370
|
+
*
|
|
6371
|
+
* These presets emit no `run_worker_first`, so Cloudflare's default applies and
|
|
6372
|
+
* the asset layer answers before the framework worker: real prerendered files
|
|
6373
|
+
* already win. `not_found_handling` only governs what the framework's own
|
|
6374
|
+
* `env.ASSETS.fetch()` delegation returns, which is framework-internal
|
|
6375
|
+
* plumbing. Honoring the override there would be a behavior change, not a fix —
|
|
6376
|
+
* `single-page-application` makes an unmatched delegation return
|
|
6377
|
+
* `dist/client/index.html` at **200** (Astro/SvelteKit hybrid builds commonly
|
|
6378
|
+
* prerender the root, so real 404s silently become the home page), and
|
|
6379
|
+
* `404-page` steals the 404 from the framework's own error route.
|
|
6380
|
+
*
|
|
6381
|
+
* Silenced when unset.
|
|
6382
|
+
*/
|
|
6383
|
+
function warnIgnoredNotFoundForFramework(notFound, frameworkName) {
|
|
6384
|
+
if (notFound === void 0) return;
|
|
6385
|
+
log.warn(`"routing.notFound" in void.json is ignored for ${frameworkName} deploys (not_found_handling is pinned to "none" — the framework's own worker owns unmatched HTML).`);
|
|
6386
|
+
}
|
|
6387
|
+
/**
|
|
6260
6388
|
* Class B/C framework deploy: build with framework CLI, package with preset output paths.
|
|
6261
6389
|
*/
|
|
6262
6390
|
async function runFrameworkDeploy(root, config, client, detected, fwPreset, voidConfig, skipBuild, gitMetadata, cliLog) {
|
|
@@ -6274,7 +6402,7 @@ async function runFrameworkDeploy(root, config, client, detected, fwPreset, void
|
|
|
6274
6402
|
execSync(voidConfig.inference?.build ?? resolveProjectCommand(root, fwPreset.buildCommand), {
|
|
6275
6403
|
cwd: root,
|
|
6276
6404
|
stdio: "inherit",
|
|
6277
|
-
env: buildEnv()
|
|
6405
|
+
env: buildEnv(void 0, { localBinRoot: root })
|
|
6278
6406
|
});
|
|
6279
6407
|
cliLog?.info("build_end", { durationMs: Date.now() - buildStartedAt });
|
|
6280
6408
|
} else cliLog?.info("build_skipped", { reason: "skipBuild" });
|
|
@@ -6286,6 +6414,7 @@ async function runFrameworkDeploy(root, config, client, detected, fwPreset, void
|
|
|
6286
6414
|
routing: voidConfig.routing
|
|
6287
6415
|
});
|
|
6288
6416
|
warnRedundantForceOn3xx(redundantForceOn3xx);
|
|
6417
|
+
warnIgnoredNotFoundForFramework(voidConfig.routing?.notFound, detected.name);
|
|
6289
6418
|
lintDuplicateSources(redirectRules, "redirects/rewrites (pre-asset)");
|
|
6290
6419
|
lintDuplicateSources(fallbackRules, "fallbacks (post-asset)");
|
|
6291
6420
|
lintDestinationSplats(redirectRules, "redirects/rewrites (pre-asset)");
|
|
@@ -6454,21 +6583,21 @@ async function runFrameworkDeploy(root, config, client, detected, fwPreset, void
|
|
|
6454
6583
|
warnUnpublishedRouting(result);
|
|
6455
6584
|
outro("Done!");
|
|
6456
6585
|
}
|
|
6457
|
-
async function runFullDeploy(root, config, client, fwPreset, skipBuild, gitMetadata, detected, cliLog) {
|
|
6586
|
+
async function runFullDeploy(root, config, client, voidConfig, fwPreset, skipBuild, gitMetadata, detected, cliLog) {
|
|
6458
6587
|
cliLog?.info("deploy_mode", {
|
|
6459
6588
|
mode: "full",
|
|
6460
6589
|
framework: detected?.name
|
|
6461
6590
|
});
|
|
6462
6591
|
if (!skipBuild) {
|
|
6463
|
-
const buildCmd =
|
|
6592
|
+
const { label: buildCmd, command: buildExec } = resolveFullDeployBuildCommand(root, voidConfig.inference?.build);
|
|
6464
6593
|
log.step(`Building (${buildCmd})...`);
|
|
6465
6594
|
cliLog?.info("build_start", { command: buildCmd });
|
|
6466
6595
|
const buildStartedAt = Date.now();
|
|
6467
6596
|
try {
|
|
6468
|
-
execSync(
|
|
6597
|
+
execSync(buildExec, {
|
|
6469
6598
|
cwd: root,
|
|
6470
6599
|
stdio: "inherit",
|
|
6471
|
-
env: buildEnv({ VOID_DEPLOY_PROJECT_ID: config.projectId })
|
|
6600
|
+
env: buildEnv({ VOID_DEPLOY_PROJECT_ID: config.projectId }, { localBinRoot: root })
|
|
6472
6601
|
});
|
|
6473
6602
|
cliLog?.info("build_end", { durationMs: Date.now() - buildStartedAt });
|
|
6474
6603
|
} catch (err) {
|
|
@@ -6489,7 +6618,7 @@ async function runFullDeploy(root, config, client, fwPreset, skipBuild, gitMetad
|
|
|
6489
6618
|
}
|
|
6490
6619
|
}
|
|
6491
6620
|
const isFrameworkMode = detected != null;
|
|
6492
|
-
const deployConfig =
|
|
6621
|
+
const deployConfig = voidConfig;
|
|
6493
6622
|
const paths = resolveProjectPaths(root, deployConfig);
|
|
6494
6623
|
const dialect = getDatabaseDialect(deployConfig);
|
|
6495
6624
|
const deployScanDirs = deployConfig.inference?.scanDirs ?? (isFrameworkMode ? FRAMEWORK_SCAN_DIRS : void 0);
|
|
@@ -6600,7 +6729,8 @@ async function runFullDeploy(root, config, client, fwPreset, skipBuild, gitMetad
|
|
|
6600
6729
|
const hasDocumentRoutes$1 = hasDocumentRoutes(routeScan.routes);
|
|
6601
6730
|
const hasMiddleware = routeScan.middleware.length > 0;
|
|
6602
6731
|
const hasWebSockets = webSockets.length > 0;
|
|
6603
|
-
const
|
|
6732
|
+
const ssrEntry = isFrameworkMode ? null : validateSsrEntry(root, paths);
|
|
6733
|
+
const isSsr = isFrameworkMode ? true : Boolean(ssrEntry) || hasPages && deployConfig.output !== "static";
|
|
6604
6734
|
const pageScan = existsSync(paths.pagesDir) ? routeScan.pages.pages.length > 0 ? routeScan.pages : await scanPages(root, {
|
|
6605
6735
|
output: deployConfig.output,
|
|
6606
6736
|
paths
|
|
@@ -6614,10 +6744,15 @@ async function runFullDeploy(root, config, client, fwPreset, skipBuild, gitMetad
|
|
|
6614
6744
|
buildCommand: null,
|
|
6615
6745
|
outputDir: clientDir,
|
|
6616
6746
|
appType: "static"
|
|
6617
|
-
}, true, gitMetadata, assetsPrefix, headerRules, redirectRules, fallbackRules, void 0, cliLog);
|
|
6747
|
+
}, true, gitMetadata, assetsPrefix, headerRules, redirectRules, fallbackRules, void 0, cliLog, deployConfig.routing?.notFound);
|
|
6618
6748
|
}
|
|
6619
6749
|
}
|
|
6620
|
-
const
|
|
6750
|
+
const prerenderSourcesPresent = hasPrerenderSources({
|
|
6751
|
+
hasPages,
|
|
6752
|
+
hasSsrEntry: ssrEntry !== null,
|
|
6753
|
+
explicitPrerenderPaths: deployConfig.routing?.prerender
|
|
6754
|
+
});
|
|
6755
|
+
const uniquePrerenderPaths = deployConfig.output === "static" || isFrameworkMode || !prerenderSourcesPresent ? [] : isNodeTarget(deployConfig.target) ? await collectPrerenderPathsNode({
|
|
6621
6756
|
root,
|
|
6622
6757
|
ssrDir: join(distDir, "ssr"),
|
|
6623
6758
|
clientDir
|
|
@@ -6648,7 +6783,8 @@ async function runFullDeploy(root, config, client, fwPreset, skipBuild, gitMetad
|
|
|
6648
6783
|
hasMiddleware,
|
|
6649
6784
|
hasWebSockets: hasDocumentRoutes(webSockets),
|
|
6650
6785
|
authEnabled,
|
|
6651
|
-
liveEnabled: liveConfig !== void 0
|
|
6786
|
+
liveEnabled: liveConfig !== void 0,
|
|
6787
|
+
notFound: deployConfig.routing?.notFound
|
|
6652
6788
|
});
|
|
6653
6789
|
s.start("Checking for changes...");
|
|
6654
6790
|
cliLog?.info("preflight_start", { dir: clientDir });
|
|
@@ -2,7 +2,7 @@ import { a as join } from "./dist-DaKKDf8D.mjs";
|
|
|
2
2
|
import { D as outro, E as note, T as log, a as cliTitle, w as intro } from "./agents-CtgBYqld.mjs";
|
|
3
3
|
import { b as readProjectConfig, f as getToken, n as PlatformClient } from "./client-Gb71-XkG.mjs";
|
|
4
4
|
import { r as generateEnvTypes, t as findEnvFile } from "./env-types-QBj-ndax.mjs";
|
|
5
|
-
import { h as loadUserEnvFile, l as fetchRemoteSecretNames, m as validateProdEnv, u as formatEnvReport } from "./env-validation-
|
|
5
|
+
import { h as loadUserEnvFile, l as fetchRemoteSecretNames, m as validateProdEnv, u as formatEnvReport } from "./env-validation-Dea3v3ej.mjs";
|
|
6
6
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
7
7
|
//#region src/cli/env-example.ts
|
|
8
8
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as __exportAll } from "./rolldown-runtime-DJK8HYOj.mjs";
|
|
2
2
|
import { a as join, c as resolve, n as dirname } from "./dist-DaKKDf8D.mjs";
|
|
3
3
|
import { i as voidWarn } from "./log-ChfPKsVd.mjs";
|
|
4
|
-
import { c as mergeAndExpand, l as parseDotenvFile, o as resolveWranglerArgv } from "./preset-
|
|
4
|
+
import { c as mergeAndExpand, l as parseDotenvFile, o as resolveWranglerArgv } from "./preset-BjyR3lzz.mjs";
|
|
5
5
|
import { t as findEnvFile } from "./env-types-QBj-ndax.mjs";
|
|
6
6
|
import { getSecretOverride } from "./runtime/env-helpers.mjs";
|
|
7
7
|
import { t as isLikelySecretKey } from "./env-mask-Dd47NbR6.mjs";
|
|
@@ -2,7 +2,7 @@ import { a as join, n as dirname, s as relative } from "./dist-DaKKDf8D.mjs";
|
|
|
2
2
|
import { D as outro, T as log, a as cliTitle, j as isCancel, k as select, w as intro, x as cancel } from "./agents-CtgBYqld.mjs";
|
|
3
3
|
import { n as readProjectPaths } from "./project-paths-BQd7OmIo.mjs";
|
|
4
4
|
import { n as ensureProjectTsconfig } from "./project-tsconfig-B-QtXjLQ.mjs";
|
|
5
|
-
import { c as getDatabaseDialect, f as readConfig } from "./config-
|
|
5
|
+
import { c as getDatabaseDialect, f as readConfig } from "./config-BkTvs43g.mjs";
|
|
6
6
|
import { n as writeDrizzleConfig } from "./config-CutEMNGJ.mjs";
|
|
7
7
|
import { c as collectMigrations, n as listDrizzleArtifacts, t as assertJournalCoherence, u as readJournal } from "./validate-Cw_RLeTj.mjs";
|
|
8
8
|
import { t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-DJn3SAHF.mjs";
|