void 0.10.10 → 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/AGENT_PROMPT.md +4 -0
- package/README.md +1 -1
- package/dist/{agents-Bmr5tFFb.mjs → agents-CtgBYqld.mjs} +1 -1
- package/dist/{auth-cmd-Cw1edJdZ.mjs → auth-cmd-BqsdZJp5.mjs} +3 -3
- package/dist/{better-auth-shared-BvnM9px6.d.mts → better-auth-shared-DealXecJ.d.mts} +1 -1
- package/dist/{build-cmd-C6kNDJBv.mjs → build-cmd-Bujrv5q-.mjs} +3 -3
- package/dist/{cache-DIUSnIjJ.mjs → cache-C11V8Fxq.mjs} +3 -3
- package/dist/{cancel-deploy-BosnzEHC.mjs → cancel-deploy-fwFYF04b.mjs} +2 -2
- package/dist/cli/cli.mjs +124 -41
- package/dist/cli/env-schema-probe.d.mts +96 -0
- package/dist/cli/env-schema-probe.mjs +272 -0
- package/dist/{client-C9FG6Vzc.mjs → client-Gb71-XkG.mjs} +12 -2
- package/dist/{config-BcAeIPe3.mjs → config-BkTvs43g.mjs} +15 -2
- package/dist/{config-BdUctCZD.mjs → config-CutEMNGJ.mjs} +3 -3
- package/dist/{create-project-CjYX23M_.mjs → create-project-DsYvl3TB.mjs} +3 -3
- package/dist/{db-BvKV34IK.mjs → db-DOiJMRt2.mjs} +27 -27
- package/dist/{delete-CThKLXfi.mjs → delete-mh6p-zkQ.mjs} +3 -3
- package/dist/deploy-u7Rv9q_q.mjs +7126 -0
- package/dist/{discover-BuVVSAum.mjs → discover-CJHyvYfR.mjs} +2 -2
- package/dist/dist-DaKKDf8D.mjs +41 -0
- package/dist/{domain-DMrBabBQ.mjs → domain-DiaNQbrl.mjs} +2 -2
- package/dist/entry-D7yy4xVH.mjs +100 -0
- package/dist/{env-BfG7O71F.mjs → env-CZy5MorI.mjs} +5 -5
- package/dist/env-mask-Dd47NbR6.mjs +90 -0
- package/dist/env-public-BfiLcMBk.d.mts +140 -0
- package/dist/{env-types-D51bnR-c.mjs → env-types-QBj-ndax.mjs} +2 -2
- package/dist/env-validation-Dea3v3ej.mjs +1069 -0
- package/dist/{gen-Bee261SV.mjs → gen-o_w-8yI8.mjs} +8 -8
- package/dist/{git-metadata-CBKaL0v5.mjs → git-metadata-D-gurjzG.mjs} +6 -5
- package/dist/{github-cmd-DfeFEasr.mjs → github-cmd-DKcGUNsj.mjs} +4 -4
- package/dist/{handler-imD0UVDT.d.mts → handler-Cjh8uM3Y.d.mts} +1 -1
- package/dist/{headers-CTAjX-UO.mjs → headers-nsHIFixA.mjs} +2 -2
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +98 -52
- package/dist/{init-xfwW7cLp.mjs → init-3rgHKBVi.mjs} +13 -14
- package/dist/{link-Co136MEs.mjs → link-CdGHSIy-.mjs} +4 -4
- package/dist/{list-BKDjA3M5.mjs → list-CPwFDZ_c.mjs} +3 -3
- package/dist/{login-CrOTnR_6.mjs → login-BT3H8PN3.mjs} +2 -2
- package/dist/{logs-DlAg25ww.mjs → logs-Bt313ax7.mjs} +3 -2
- package/dist/{mcp-BNjMGMB0.mjs → mcp-DoM3_nhd.mjs} +7 -2
- package/dist/{node-CnE-SZCk.mjs → node-Da0UcsGA.mjs} +5 -5
- package/dist/{package-json-B0NuUWGd.mjs → package-json-Cx1osYo6.mjs} +1 -1
- package/dist/pages/client.d.mts +1 -1
- package/dist/pages/index.d.mts +1 -23
- package/dist/pages/index.mjs +5 -5
- package/dist/pages/islands-plugin.mjs +2 -2
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/{plugin-inference-CJxi_fWI.mjs → plugin-inference-DMeavIJ6.mjs} +4 -98
- package/dist/{prepare-BRyC4TCC.mjs → prepare-BoKHgMNx.mjs} +10 -10
- package/dist/preset-BjyR3lzz.mjs +592 -0
- package/dist/{project-cmd-B2bcKefD.mjs → project-cmd-D_w-4w5B.mjs} +13 -9
- package/dist/{project-paths-tpdR1mJR.mjs → project-paths-BQd7OmIo.mjs} +1 -1
- package/dist/project-paths-GpziKeQQ.d.mts +25 -0
- package/dist/{project-tsconfig-D9uSVVpA.mjs → project-tsconfig-B-QtXjLQ.mjs} +2 -2
- package/dist/{protocol-6hTJ04T1.d.mts → protocol-Bnb0LFp3.d.mts} +1 -1
- package/dist/provision-rShh6MKY.mjs +2557 -0
- package/dist/requests-B8sZxaFM.mjs +50 -0
- package/dist/{resolve-project-D2HI3TrG.mjs → resolve-project-BBMtLLV9.mjs} +1 -1
- package/dist/{rollback-9dfmB-YZ.mjs → rollback-CkvTFXx5.mjs} +2 -2
- package/dist/{route-types-CfKfhbIg.mjs → route-types-COI2DsZv.mjs} +2 -2
- package/dist/{runner-h272wcPj.mjs → runner-kapo9aPs.mjs} +3 -3
- package/dist/{runner-pg-waxJOnBb.mjs → runner-pg-CHM76xuC.mjs} +1 -1
- package/dist/runtime/better-auth-pg.d.mts +1 -1
- package/dist/runtime/better-auth.d.mts +1 -1
- package/dist/runtime/env-public.d.mts +1 -139
- package/dist/runtime/env-public.mjs +2 -90
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +1 -1
- package/dist/runtime/ws.d.mts +2 -2
- package/dist/{scan-Dp_Gyzs3.mjs → scan-DEwlM_Xy.mjs} +2 -2
- package/dist/{scan-i7Yz54fv.mjs → scan-DYXkrasO.mjs} +4 -4
- package/dist/{secret-DeMnMcV0.mjs → secret-Dt32J6RI.mjs} +3 -3
- package/dist/{skills-DsdNDtX3.mjs → skills-CLjN0uUO.mjs} +2 -2
- package/dist/{subcommand-prompt-DtES-oP6.mjs → subcommand-prompt-BzV8iQZo.mjs} +1 -1
- package/dist/sveltekit.mjs +1 -1
- package/dist/{validate-DT7nFMlf.mjs → validate-Cw_RLeTj.mjs} +1 -1
- package/dist/{yarn-pnp-CW8LB6g_.mjs → yarn-pnp-DJn3SAHF.mjs} +1 -1
- package/getting-started-prompt.txt +3 -1
- package/package.json +5 -3
- package/schema.json +5 -0
- package/skills/void/SKILL.md +34 -33
- package/skills/void/docs/guide/app-types.md +43 -0
- package/skills/void/docs/guide/auth.md +8 -0
- package/skills/void/docs/guide/deployment.md +1 -1
- package/skills/void/docs/guide/edge/static-assets.md +23 -0
- package/skills/void/docs/guide/env-vars.md +14 -6
- package/skills/void/docs/guide/queues.md +4 -0
- package/skills/void/docs/integrations/cloudflare.md +64 -5
- package/skills/void/docs/integrations/frameworks/overview.md +1 -0
- package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +4 -0
- package/skills/void/docs/node_modules/void/README.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/@types/proper-lockfile/README.md +51 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathslash/README.md +64 -0
- package/skills/void/docs/node_modules/void/node_modules/pathslash/README.md +64 -0
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/CHANGELOG.md +108 -0
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/README.md +183 -0
- package/skills/void/docs/node_modules/void/skills/void/SKILL.md +34 -33
- package/skills/void/docs/node_modules/void/test/e2e/README.md +85 -0
- package/skills/void/docs/reference/cli.md +74 -14
- package/skills/void/docs/reference/config.md +27 -1
- package/dist/deploy-B02JyKP9.mjs +0 -3748
- package/dist/dotenv-D_UbC_vc.mjs +0 -173
- package/dist/env-validation-CeC2FL66.mjs +0 -163
- package/dist/pathe.M-eThtNZ-CQzLbt4c.mjs +0 -150
- package/dist/preset-CVvwCeIy.mjs +0 -208
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathe/README.md +0 -73
- package/skills/void/docs/node_modules/void/node_modules/pathe/README.md +0 -73
package/AGENT_PROMPT.md
CHANGED
|
@@ -12,4 +12,8 @@ Rewrites and redirects: declare static rules in `void.json` under `routing.redir
|
|
|
12
12
|
|
|
13
13
|
Logs: surface app-level errors that should show up under `void project logs --level error` via `import { logger } from "void/log"` and `logger.error(msg, fields?)` (also `.warn` / `.info`). Anything caught and only persisted to your own DB is invisible to Cloudflare Tail; route it through `logger.*` or `console.*` so the platform can see it.
|
|
14
14
|
|
|
15
|
+
Requests: `void project logs` only has rows when a worker actually ran. 5xx generated by the edge router, and every request to a static/SPA project, produce no log line at all. Use `void project requests --status 5xx --range 12h` to see those — it lists status, method, and duration for every request the edge served, whether or not a worker was invoked.
|
|
16
|
+
|
|
17
|
+
Self-host deploy: `void deploy` targets the Void platform; to deploy to the user's OWN Cloudflare account instead, use `void deploy --backend cloudflare` (add `--provision` on the first deploy to create the D1/KV/R2/Queues/Hyperdrive resources the source needs). It uses local wrangler auth, so pin an account (`account_id` in `wrangler.jsonc` or `CLOUDFLARE_ACCOUNT_ID`) and keep real secrets in `wrangler secret put` — every `.env*` file this backend loads (`.env`, `.env.local`, `.env.production`, `.env.production.local`) ships as plaintext worker vars, `.local` included. Provisioning a Hyperdrive config reads `DATABASE_URL` from the shell, not from `.env*`. v1 supports full Void apps on the Cloudflare Workers target only (D1/KV/R2/Queues/Hyperdrive; auth and ISR on D1/SQLite); framework SSR of every kind (TanStack Start, React Router, vinext, SvelteKit, Nuxt, Analog, Astro), static/SPA/SSG apps (including `output: "static"`), WebSocket/Durable Object apps (`*.ws.ts`), a custom `migrations_pattern`, node/bun/deno targets, and PostgreSQL apps with auth all fail closed with guidance. Auth apps must ship checked-in migrations that produce the Better Auth schema. `--provision` is a single-operator, dev-machine step and is disabled in CI.
|
|
18
|
+
|
|
15
19
|
Full docs are in `node_modules/void/docs/`. If you have the `void` skill available, use it for a complete API reference covering project structure, routing, pages mode, database, auth, typed fetch, KV, storage, queues, cron jobs, CLI, configuration, and deployment.
|
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ export default defineConfig({
|
|
|
42
42
|
- `void auth login` — platform auth
|
|
43
43
|
- `void deploy` — build and deploy
|
|
44
44
|
- `void db *` — local DB and migration commands
|
|
45
|
-
- `void project *` — link, status, logs, rollback, delete
|
|
45
|
+
- `void project *` — link, status, logs, requests, rollback, delete
|
|
46
46
|
|
|
47
47
|
Runtime helpers include:
|
|
48
48
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __exportAll, r as __toESM, t as __commonJSMin } from "./rolldown-runtime-DJK8HYOj.mjs";
|
|
2
|
-
import { a as join } from "./
|
|
2
|
+
import { a as join } from "./dist-DaKKDf8D.mjs";
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { styleText } from "node:util";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { T as log } from "./agents-
|
|
2
|
-
import { f as getToken, g as removeToken, n as PlatformClient } from "./client-
|
|
3
|
-
import { n as runLoginCommand } from "./login-
|
|
1
|
+
import { T as log } from "./agents-CtgBYqld.mjs";
|
|
2
|
+
import { f as getToken, g as removeToken, n as PlatformClient } from "./client-Gb71-XkG.mjs";
|
|
3
|
+
import { n as runLoginCommand } from "./login-BT3H8PN3.mjs";
|
|
4
4
|
import { execSync } from "node:child_process";
|
|
5
5
|
//#region src/cli/auth-cmd.ts
|
|
6
6
|
async function runAuthCommand(root, args) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as VoidAuthConfig, n as AuthState } from "./auth-qgMlYp7Z.mjs";
|
|
2
1
|
import { t as VoidAuthProvider } from "./providers-BNKRacMr.mjs";
|
|
2
|
+
import { i as VoidAuthConfig, n as AuthState } from "./auth-qgMlYp7Z.mjs";
|
|
3
3
|
import { DBFieldAttribute } from "better-auth/db";
|
|
4
4
|
import { BetterAuthOptions, betterAuth } from "better-auth";
|
|
5
5
|
import { Context } from "hono";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { D as outro, T as log, a as cliTitle, s as dim, u as import_picocolors, w as intro } from "./agents-
|
|
2
|
-
import { b as readProjectConfig, f as getToken, n as PlatformClient, t as PlatformApiError } from "./client-
|
|
3
|
-
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-
|
|
1
|
+
import { D as outro, T as log, a as cliTitle, s as dim, u as import_picocolors, w as intro } from "./agents-CtgBYqld.mjs";
|
|
2
|
+
import { b as readProjectConfig, f as getToken, n as PlatformClient, t as PlatformApiError } from "./client-Gb71-XkG.mjs";
|
|
3
|
+
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BBMtLLV9.mjs";
|
|
4
4
|
import { appendFileSync, writeFileSync } from "node:fs";
|
|
5
5
|
//#region src/cli/build-cmd.ts
|
|
6
6
|
const POLL_MS = 1e3;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { D as outro, T as log, a as cliTitle, o as createSpinner, s as dim, w as intro } from "./agents-
|
|
2
|
-
import { b as readProjectConfig, f as getToken, n as PlatformClient } from "./client-
|
|
3
|
-
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-
|
|
1
|
+
import { D as outro, T as log, a as cliTitle, o as createSpinner, s as dim, w as intro } from "./agents-CtgBYqld.mjs";
|
|
2
|
+
import { b as readProjectConfig, f as getToken, n as PlatformClient } from "./client-Gb71-XkG.mjs";
|
|
3
|
+
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BBMtLLV9.mjs";
|
|
4
4
|
//#region src/cli/cache.ts
|
|
5
5
|
async function runPurgeCacheCommand(root, projectSlug) {
|
|
6
6
|
console.log();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { D as outro, S as confirm, T as log, a as cliTitle, j as isCancel, w as intro } from "./agents-
|
|
2
|
-
import { b as readProjectConfig, f as getToken, n as PlatformClient } from "./client-
|
|
1
|
+
import { D as outro, S as confirm, T as log, a as cliTitle, j as isCancel, w as intro } from "./agents-CtgBYqld.mjs";
|
|
2
|
+
import { b as readProjectConfig, f as getToken, n as PlatformClient } from "./client-Gb71-XkG.mjs";
|
|
3
3
|
//#region src/cli/cancel-deploy.ts
|
|
4
4
|
const ACTIVE_STATUSES = /* @__PURE__ */ new Set([
|
|
5
5
|
"pending",
|
package/dist/cli/cli.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as join } from "../
|
|
3
|
-
import { D as outro, E as note, T as log, d as sectionTitle, i as categoryTitle, l as helpLine, r as getPackageDir, u as import_picocolors } from "../agents-
|
|
2
|
+
import { a as join } from "../dist-DaKKDf8D.mjs";
|
|
3
|
+
import { D as outro, E as note, T as log, d as sectionTitle, i as categoryTitle, l as helpLine, r as getPackageDir, u as import_picocolors } from "../agents-CtgBYqld.mjs";
|
|
4
4
|
import { readFileSync } from "node:fs";
|
|
5
5
|
import { parseArgs } from "node:util";
|
|
6
6
|
//#region src/cli/args.ts
|
|
@@ -14,7 +14,9 @@ function parseDeployArgs(args) {
|
|
|
14
14
|
dir: { type: "string" },
|
|
15
15
|
spa: { type: "boolean" },
|
|
16
16
|
"skip-build": { type: "boolean" },
|
|
17
|
-
debug: { type: "boolean" }
|
|
17
|
+
debug: { type: "boolean" },
|
|
18
|
+
backend: { type: "string" },
|
|
19
|
+
provision: { type: "boolean" }
|
|
18
20
|
},
|
|
19
21
|
allowPositionals: true,
|
|
20
22
|
strict: true,
|
|
@@ -22,22 +24,43 @@ function parseDeployArgs(args) {
|
|
|
22
24
|
});
|
|
23
25
|
} catch (error) {
|
|
24
26
|
const message = error instanceof Error ? error.message : String(error);
|
|
25
|
-
if (message.includes("argument missing") || message.includes("argument is ambiguous"))
|
|
27
|
+
if (message.includes("argument missing") || message.includes("argument is ambiguous")) {
|
|
28
|
+
if (message.match(/Option '(--[a-z-]+)/)?.[1] === "--backend") throw new Error("deploy: --backend requires a value ('cloudflare').");
|
|
29
|
+
throw new Error("deploy: --project requires a slug.");
|
|
30
|
+
}
|
|
26
31
|
const unknownOptionMatch = message.match(/Unknown option '([^']+)'/);
|
|
27
32
|
if (unknownOptionMatch) throw new Error(`deploy: Unknown option '${unknownOptionMatch[1]}'.`);
|
|
28
33
|
throw new Error(`deploy: ${message}.`);
|
|
29
34
|
}
|
|
30
|
-
|
|
35
|
+
const tokens = parsed.tokens ?? [];
|
|
36
|
+
if (tokens.filter((token) => token.kind === "option" && token.name === "project").length > 1) throw new Error("deploy: --project can only be specified once.");
|
|
37
|
+
if (tokens.filter((token) => token.kind === "option" && token.name === "backend").length > 1) throw new Error("deploy: --backend can only be specified once.");
|
|
31
38
|
if (parsed.positionals.length > 0) throw new Error(`deploy: Unexpected argument '${parsed.positionals[0]}'.`);
|
|
32
39
|
const projectValue = parsed.values.project;
|
|
33
40
|
const projectSlug = typeof projectValue === "string" ? projectValue : void 0;
|
|
34
41
|
if (typeof projectSlug === "string" && projectSlug.startsWith("-")) throw new Error("deploy: --project requires a slug.");
|
|
42
|
+
const dir = typeof parsed.values.dir === "string" ? parsed.values.dir : void 0;
|
|
43
|
+
const spa = parsed.values.spa === true ? true : void 0;
|
|
44
|
+
const skipBuild = parsed.values["skip-build"] === true ? true : void 0;
|
|
45
|
+
const debug = parsed.values.debug === true ? true : void 0;
|
|
46
|
+
const backendValue = typeof parsed.values.backend === "string" ? parsed.values.backend : void 0;
|
|
47
|
+
if (backendValue !== void 0 && backendValue !== "cloudflare") throw new Error("deploy: --backend must be 'cloudflare'.");
|
|
48
|
+
const backend = backendValue;
|
|
49
|
+
const provision = parsed.values.provision === true ? true : void 0;
|
|
50
|
+
if (provision && backend !== "cloudflare") throw new Error("deploy: --provision requires --backend cloudflare.");
|
|
51
|
+
if (backend === "cloudflare") {
|
|
52
|
+
if (projectSlug !== void 0) throw new Error("deploy: --project is not supported with --backend cloudflare — this backend deploys to your own Cloudflare account and no Void project is involved.");
|
|
53
|
+
if (dir !== void 0) throw new Error("deploy: --dir is not supported with --backend cloudflare — this backend uploads the worker your build emits, not a static directory.");
|
|
54
|
+
if (spa) throw new Error("deploy: --spa is not supported with --backend cloudflare — this backend uploads the worker your build emits, not a static SPA.");
|
|
55
|
+
}
|
|
35
56
|
return {
|
|
36
57
|
projectSlug,
|
|
37
|
-
dir
|
|
38
|
-
spa
|
|
39
|
-
skipBuild
|
|
40
|
-
debug
|
|
58
|
+
dir,
|
|
59
|
+
spa,
|
|
60
|
+
skipBuild,
|
|
61
|
+
debug,
|
|
62
|
+
backend,
|
|
63
|
+
provision
|
|
41
64
|
};
|
|
42
65
|
}
|
|
43
66
|
//#endregion
|
|
@@ -884,7 +907,15 @@ const HELP_TREE = {
|
|
|
884
907
|
},
|
|
885
908
|
{
|
|
886
909
|
command: "--skip-build",
|
|
887
|
-
description: "Skip the build step and use existing output"
|
|
910
|
+
description: "Skip the build step and use existing output (not with --backend cloudflare)"
|
|
911
|
+
},
|
|
912
|
+
{
|
|
913
|
+
command: "--backend cloudflare",
|
|
914
|
+
description: "Deploy to your own Cloudflare account instead of the Void platform"
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
command: "--provision",
|
|
918
|
+
description: "Create missing D1/KV/R2/Queue/Hyperdrive resources (with --backend cloudflare)"
|
|
888
919
|
},
|
|
889
920
|
{
|
|
890
921
|
command: "--debug",
|
|
@@ -903,6 +934,14 @@ const HELP_TREE = {
|
|
|
903
934
|
{
|
|
904
935
|
command: "void deploy --dir dist --spa",
|
|
905
936
|
description: "Deploy a static SPA directory"
|
|
937
|
+
},
|
|
938
|
+
{
|
|
939
|
+
command: "void deploy --backend cloudflare",
|
|
940
|
+
description: "Deploy to your own Cloudflare account"
|
|
941
|
+
},
|
|
942
|
+
{
|
|
943
|
+
command: "void deploy --backend cloudflare --provision",
|
|
944
|
+
description: "Provision missing resources, then deploy to Cloudflare"
|
|
906
945
|
}
|
|
907
946
|
]
|
|
908
947
|
},
|
|
@@ -954,6 +993,10 @@ const HELP_TREE = {
|
|
|
954
993
|
command: "logs",
|
|
955
994
|
description: "Show runtime logs from the deployed project"
|
|
956
995
|
},
|
|
996
|
+
{
|
|
997
|
+
command: "requests",
|
|
998
|
+
description: "Show request-level traffic (status, method, timing)"
|
|
999
|
+
},
|
|
957
1000
|
{
|
|
958
1001
|
command: "rollback [deployId]",
|
|
959
1002
|
description: "Roll back to a previous deployment"
|
|
@@ -1011,6 +1054,24 @@ const HELP_TREE = {
|
|
|
1011
1054
|
}
|
|
1012
1055
|
]
|
|
1013
1056
|
},
|
|
1057
|
+
requests: {
|
|
1058
|
+
summary: "Show request-level traffic (status, method, type, timing). Surfaces 5xx that the edge router generated itself and requests to static/SPA projects that never invoke a worker — neither of which appears in `project logs`.",
|
|
1059
|
+
usage: ["void project requests [options]"],
|
|
1060
|
+
options: [{
|
|
1061
|
+
command: "--status <filter>",
|
|
1062
|
+
description: "Filter by status: a class like 5xx or an exact code like 500"
|
|
1063
|
+
}, {
|
|
1064
|
+
command: "--range <range>",
|
|
1065
|
+
description: "Time range to query (default: 1h)"
|
|
1066
|
+
}],
|
|
1067
|
+
examples: [{
|
|
1068
|
+
command: "void project requests --status 5xx",
|
|
1069
|
+
description: "Show recent server-error responses, including edge-generated ones"
|
|
1070
|
+
}, {
|
|
1071
|
+
command: "void project requests --range 24h",
|
|
1072
|
+
description: "Show all request traffic in the last day"
|
|
1073
|
+
}]
|
|
1074
|
+
},
|
|
1014
1075
|
rollback: basicSubcommand("Roll back to a previous deployment.", "void project rollback [deployId]"),
|
|
1015
1076
|
cancel: basicSubcommand("Cancel an active deployment.", "void project cancel [deployId]"),
|
|
1016
1077
|
delete: {
|
|
@@ -1741,6 +1802,7 @@ const LOG_LEVELS = /* @__PURE__ */ new Set([
|
|
|
1741
1802
|
"debug",
|
|
1742
1803
|
"all"
|
|
1743
1804
|
]);
|
|
1805
|
+
const STATUS_FILTER = /^([1-5]xx|[1-5]\d{2}|all)$/;
|
|
1744
1806
|
const projectSubcommands = [
|
|
1745
1807
|
{
|
|
1746
1808
|
name: "status",
|
|
@@ -1760,6 +1822,10 @@ const projectSubcommands = [
|
|
|
1760
1822
|
name: "logs",
|
|
1761
1823
|
description: "Show runtime logs from the deployed project"
|
|
1762
1824
|
},
|
|
1825
|
+
{
|
|
1826
|
+
name: "requests",
|
|
1827
|
+
description: "Show request-level traffic (status, method, timing)"
|
|
1828
|
+
},
|
|
1763
1829
|
{
|
|
1764
1830
|
name: "rollback",
|
|
1765
1831
|
arg: "[deployId]",
|
|
@@ -1825,6 +1891,21 @@ function parseProjectArgs(args) {
|
|
|
1825
1891
|
level
|
|
1826
1892
|
};
|
|
1827
1893
|
}
|
|
1894
|
+
if (subcommand === "requests") {
|
|
1895
|
+
let status = "";
|
|
1896
|
+
let range = "1h";
|
|
1897
|
+
for (let i = 0; i < rest.length; i++) if (rest[i] === "--status" && rest[i + 1]) {
|
|
1898
|
+
const value = rest[++i];
|
|
1899
|
+
if (!STATUS_FILTER.test(value)) throw new Error(`project: Invalid --status '${value}'. Use a class like 5xx or an exact code like 500.`);
|
|
1900
|
+
status = value;
|
|
1901
|
+
} else if (rest[i] === "--range" && rest[i + 1]) range = rest[++i];
|
|
1902
|
+
else throw new Error(`project: Unexpected argument '${rest[i]}'.`);
|
|
1903
|
+
return {
|
|
1904
|
+
subcommand,
|
|
1905
|
+
status,
|
|
1906
|
+
range
|
|
1907
|
+
};
|
|
1908
|
+
}
|
|
1828
1909
|
if (subcommand === "rollback") {
|
|
1829
1910
|
const [deployId, extra] = rest;
|
|
1830
1911
|
if (deployId?.startsWith("-")) throw new Error(`project: Unknown flag '${deployId}'.`);
|
|
@@ -1865,7 +1946,7 @@ function parseProjectArgs(args) {
|
|
|
1865
1946
|
projectSlug
|
|
1866
1947
|
};
|
|
1867
1948
|
}
|
|
1868
|
-
throw new Error("project: Usage: void project <status|link|list|logs|rollback|cancel|delete|purge-cache>.");
|
|
1949
|
+
throw new Error("project: Usage: void project <status|link|list|logs|requests|rollback|cancel|delete|purge-cache>.");
|
|
1869
1950
|
}
|
|
1870
1951
|
//#endregion
|
|
1871
1952
|
//#region src/cli/secret-args.ts
|
|
@@ -1968,7 +2049,7 @@ async function runSubcommandGroup(command, subcommands, parse, run) {
|
|
|
1968
2049
|
const sub = args[1];
|
|
1969
2050
|
try {
|
|
1970
2051
|
if ((!sub || sub.startsWith("-")) && process.stdin.isTTY) {
|
|
1971
|
-
const { promptSubcommand } = await import("../subcommand-prompt-
|
|
2052
|
+
const { promptSubcommand } = await import("../subcommand-prompt-BzV8iQZo.mjs");
|
|
1972
2053
|
const result = await promptSubcommand(command, subcommands);
|
|
1973
2054
|
if (!result) process.exit(0);
|
|
1974
2055
|
await run(root, parse(buildArgs(result, args.slice(1))));
|
|
@@ -1997,27 +2078,29 @@ else if (command === "deploy") {
|
|
|
1997
2078
|
log.error(err instanceof Error ? err.message : String(err));
|
|
1998
2079
|
process.exit(1);
|
|
1999
2080
|
}
|
|
2000
|
-
import("../deploy-
|
|
2081
|
+
import("../deploy-u7Rv9q_q.mjs").then((n) => n.t).then(({ runDeploy }) => {
|
|
2001
2082
|
runDeploy(root, {
|
|
2002
2083
|
projectSlug: deployArgs.projectSlug,
|
|
2003
2084
|
dir: deployArgs.dir,
|
|
2004
2085
|
spa: deployArgs.spa,
|
|
2005
2086
|
skipBuild: deployArgs.skipBuild,
|
|
2006
|
-
debug: deployArgs.debug
|
|
2087
|
+
debug: deployArgs.debug,
|
|
2088
|
+
backend: deployArgs.backend,
|
|
2089
|
+
provision: deployArgs.provision
|
|
2007
2090
|
}).catch((err) => {
|
|
2008
2091
|
log.error(err.message ?? err);
|
|
2009
2092
|
process.exit(1);
|
|
2010
2093
|
});
|
|
2011
2094
|
});
|
|
2012
|
-
} else if (command === "auth") runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (root, parsed) => import("../auth-cmd-
|
|
2013
|
-
else if (command === "project") runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (root, parsed) => import("../project-cmd-
|
|
2014
|
-
else if (command === "secret") runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (root, parsed) => import("../secret-
|
|
2015
|
-
else if (command === "domain") runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (root, parsed) => import("../domain-
|
|
2016
|
-
else if (command === "db") runSubcommandGroup("db", dbSubcommands, parseDbArgs, (root, parsed) => import("../db-
|
|
2017
|
-
else if (command === "env") runSubcommandGroup("env", envSubcommands, parseEnvArgs, (root, parsed) => import("../env-
|
|
2018
|
-
else if (command === "gen") runSubcommandGroup("gen", genSubcommands, parseGenArgs, (root, parsed) => import("../gen-
|
|
2019
|
-
else if (command === "github") runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (root, parsed) => import("../github-cmd-
|
|
2020
|
-
else if (command === "build") runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (root, parsed) => import("../build-cmd-
|
|
2095
|
+
} else if (command === "auth") runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (root, parsed) => import("../auth-cmd-BqsdZJp5.mjs").then(({ runAuthCommand }) => runAuthCommand(root, parsed)));
|
|
2096
|
+
else if (command === "project") runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (root, parsed) => import("../project-cmd-D_w-4w5B.mjs").then(({ runProjectCommand }) => runProjectCommand(root, parsed)));
|
|
2097
|
+
else if (command === "secret") runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (root, parsed) => import("../secret-Dt32J6RI.mjs").then(({ runSecretCommand }) => runSecretCommand(root, parsed)));
|
|
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-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
|
+
else if (command === "build") runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (root, parsed) => import("../build-cmd-Bujrv5q-.mjs").then(({ runBuildCommand }) => runBuildCommand(root, parsed)));
|
|
2021
2104
|
else if (command === "prepare") {
|
|
2022
2105
|
const root = process.cwd();
|
|
2023
2106
|
let prepareArgs;
|
|
@@ -2027,7 +2110,7 @@ else if (command === "prepare") {
|
|
|
2027
2110
|
log.error(err instanceof Error ? err.message : String(err));
|
|
2028
2111
|
process.exit(1);
|
|
2029
2112
|
}
|
|
2030
|
-
import("../prepare-
|
|
2113
|
+
import("../prepare-BoKHgMNx.mjs").then(({ runPrepareCommand }) => {
|
|
2031
2114
|
runPrepareCommand(root, prepareArgs).catch((err) => {
|
|
2032
2115
|
log.error(err.message ?? err);
|
|
2033
2116
|
process.exit(1);
|
|
@@ -2035,7 +2118,7 @@ else if (command === "prepare") {
|
|
|
2035
2118
|
});
|
|
2036
2119
|
} else if (command === "init") {
|
|
2037
2120
|
const root = process.cwd();
|
|
2038
|
-
import("../init-
|
|
2121
|
+
import("../init-3rgHKBVi.mjs").then(({ runInitCommand, parseInitArgs }) => {
|
|
2039
2122
|
let initArgs;
|
|
2040
2123
|
try {
|
|
2041
2124
|
initArgs = parseInitArgs(args.slice(1));
|
|
@@ -2048,7 +2131,7 @@ else if (command === "prepare") {
|
|
|
2048
2131
|
process.exit(1);
|
|
2049
2132
|
});
|
|
2050
2133
|
});
|
|
2051
|
-
} else if (command === "mcp") import("../mcp-
|
|
2134
|
+
} else if (command === "mcp") import("../mcp-DoM3_nhd.mjs").then(({ runMcp }) => {
|
|
2052
2135
|
runMcp();
|
|
2053
2136
|
});
|
|
2054
2137
|
else if (command === "-v" || command === "--version") {
|
|
@@ -2074,7 +2157,7 @@ else if (command === "-v" || command === "--version") {
|
|
|
2074
2157
|
},
|
|
2075
2158
|
{
|
|
2076
2159
|
name: "project",
|
|
2077
|
-
hint: "status | link | list | logs | rollback | cancel | delete | purge-cache",
|
|
2160
|
+
hint: "status | link | list | logs | requests | rollback | cancel | delete | purge-cache",
|
|
2078
2161
|
description: "Manage projects and deployments"
|
|
2079
2162
|
},
|
|
2080
2163
|
{
|
|
@@ -2127,38 +2210,38 @@ else if (command === "-v" || command === "--version") {
|
|
|
2127
2210
|
];
|
|
2128
2211
|
(async () => {
|
|
2129
2212
|
printVoidHeader();
|
|
2130
|
-
const { promptSubcommand } = await import("../subcommand-prompt-
|
|
2213
|
+
const { promptSubcommand } = await import("../subcommand-prompt-BzV8iQZo.mjs");
|
|
2131
2214
|
const result = await promptSubcommand("", topLevelCommands);
|
|
2132
2215
|
if (!result) process.exit(0);
|
|
2133
2216
|
const cmd = result.subcommand;
|
|
2134
2217
|
const root = process.cwd();
|
|
2135
2218
|
switch (cmd) {
|
|
2136
2219
|
case "init": {
|
|
2137
|
-
const { runInitCommand, parseInitArgs } = await import("../init-
|
|
2220
|
+
const { runInitCommand, parseInitArgs } = await import("../init-3rgHKBVi.mjs");
|
|
2138
2221
|
await runInitCommand(root, parseInitArgs([]));
|
|
2139
2222
|
return;
|
|
2140
2223
|
}
|
|
2141
2224
|
case "deploy": {
|
|
2142
|
-
const { runDeploy } = await import("../deploy-
|
|
2225
|
+
const { runDeploy } = await import("../deploy-u7Rv9q_q.mjs").then((n) => n.t);
|
|
2143
2226
|
await runDeploy(root);
|
|
2144
2227
|
return;
|
|
2145
2228
|
}
|
|
2146
2229
|
case "mcp": {
|
|
2147
|
-
const { runMcp } = await import("../mcp-
|
|
2230
|
+
const { runMcp } = await import("../mcp-DoM3_nhd.mjs");
|
|
2148
2231
|
runMcp();
|
|
2149
2232
|
return;
|
|
2150
2233
|
}
|
|
2151
|
-
case "auth": return runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (r, p) => import("../auth-cmd-
|
|
2152
|
-
case "project": return runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (r, p) => import("../project-cmd-
|
|
2153
|
-
case "secret": return runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (r, p) => import("../secret-
|
|
2154
|
-
case "domain": return runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (r, p) => import("../domain-
|
|
2155
|
-
case "github": return runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (r, p) => import("../github-cmd-
|
|
2156
|
-
case "build": return runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (r, p) => import("../build-cmd-
|
|
2157
|
-
case "db": return runSubcommandGroup("db", dbSubcommands, parseDbArgs, (r, p) => import("../db-
|
|
2158
|
-
case "env": return runSubcommandGroup("env", envSubcommands, parseEnvArgs, (r, p) => import("../env-
|
|
2159
|
-
case "gen": return runSubcommandGroup("gen", genSubcommands, parseGenArgs, (r, p) => import("../gen-
|
|
2234
|
+
case "auth": return runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (r, p) => import("../auth-cmd-BqsdZJp5.mjs").then(({ runAuthCommand }) => runAuthCommand(r, p)));
|
|
2235
|
+
case "project": return runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (r, p) => import("../project-cmd-D_w-4w5B.mjs").then(({ runProjectCommand }) => runProjectCommand(r, p)));
|
|
2236
|
+
case "secret": return runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (r, p) => import("../secret-Dt32J6RI.mjs").then(({ runSecretCommand }) => runSecretCommand(r, p)));
|
|
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-DKcGUNsj.mjs").then(({ runGithubCommand }) => runGithubCommand(r, p)));
|
|
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-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)));
|
|
2160
2243
|
case "prepare": {
|
|
2161
|
-
const { runPrepareCommand } = await import("../prepare-
|
|
2244
|
+
const { runPrepareCommand } = await import("../prepare-BoKHgMNx.mjs");
|
|
2162
2245
|
await runPrepareCommand(root, parsePrepareArgs([]));
|
|
2163
2246
|
return;
|
|
2164
2247
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
//#region src/cli/env-validation.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The stable, values-free classification of a self-host schema failure.
|
|
4
|
+
* env.ts evaluation and Standard-Schema validators run ARBITRARY user code that
|
|
5
|
+
* can embed an env value in a thrown/rejected error (its `message`, `stack`, or
|
|
6
|
+
* `cause`), and `VOID_ENV_UNMASK` disables redaction — so the original error is
|
|
7
|
+
* never surfaced. Every {@link SelfHostSchemaError} instead carries only one of
|
|
8
|
+
* these codes plus fixed text, so neither its message, its `reason` field, nor
|
|
9
|
+
* its JSON serialization can echo a value.
|
|
10
|
+
* - `schema-load-failed` — importing/evaluating the user's env.ts threw.
|
|
11
|
+
* - `schema-validation-error` — a registered validator threw or rejected while
|
|
12
|
+
* checking a production value.
|
|
13
|
+
*/
|
|
14
|
+
type SelfHostSchemaFailureReason = "schema-load-failed" | "schema-validation-error";
|
|
15
|
+
/**
|
|
16
|
+
* The env-INSENSITIVE structural facts the self-host secret gate needs from the
|
|
17
|
+
* project's env schema: whether a schema is registered, the REQUIRED key names (a
|
|
18
|
+
* validator that rejects the ABSENT value — {@link requiredSchemaKeys}), and the
|
|
19
|
+
* keys the schema flags `.secret()` ({@link getSecretOverride} === 'secret').
|
|
20
|
+
* NONE of these depend on which `.env` file the build reads — they are fixed by
|
|
21
|
+
* env.ts's structure — so this needs no `loadEnv` and no build env, and the result
|
|
22
|
+
* is the SAME regardless of the build's mode/envDir. That is precisely why the old
|
|
23
|
+
* probe-vs-build divergence class is gone: nothing derived here can diverge from
|
|
24
|
+
* the build over which `.env*` set was loaded.
|
|
25
|
+
*/
|
|
26
|
+
type SelfHostSchemaFacts = {
|
|
27
|
+
/** Whether the project registered an env schema at all (no schema → nothing to gate). */hasSchema: boolean; /** Required key NAMES — validator rejects `undefined`. Values-free. */
|
|
28
|
+
requiredKeys: Array<string>; /** Keys the schema flags `.secret()`. Values-free. */
|
|
29
|
+
secretKeys: Array<string>;
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/cli/env-schema-probe.d.ts
|
|
33
|
+
/** Input handed to the child (JSON in argv[3]). Path only — no env values cross here. */
|
|
34
|
+
type EnvSchemaProbeInput = {
|
|
35
|
+
root: string;
|
|
36
|
+
};
|
|
37
|
+
/** The reason the `facts` probe rejected the app as unsupported (values-free). */
|
|
38
|
+
type EnvSchemaProbeRejectReason = "custom-envdir" | "non-production-mode";
|
|
39
|
+
/**
|
|
40
|
+
* The structured result of the `facts` operation. `ok` carries the env-insensitive
|
|
41
|
+
* schema facts; `reject` fails the deploy closed pre-account with clear v1-scope
|
|
42
|
+
* guidance; `schema-error` surfaces a values-free env.ts/validator failure.
|
|
43
|
+
*
|
|
44
|
+
* `reject` crosses the process boundary as a FIXED reason CODE only — never the raw
|
|
45
|
+
* resolved `mode` / `envDir` strings. Those are arbitrary Vite-config-derived values
|
|
46
|
+
* (a config could set `envDir`/`mode` from any inherited secret), so echoing them
|
|
47
|
+
* over fd 3 or into a parent log would break the values-free boundary; the parent
|
|
48
|
+
* renders fixed guidance from the code alone.
|
|
49
|
+
*/
|
|
50
|
+
type EnvSchemaProbeResult = {
|
|
51
|
+
kind: "ok";
|
|
52
|
+
facts: SelfHostSchemaFacts;
|
|
53
|
+
} | {
|
|
54
|
+
kind: "reject";
|
|
55
|
+
reason: EnvSchemaProbeRejectReason;
|
|
56
|
+
} | {
|
|
57
|
+
kind: "schema-error";
|
|
58
|
+
reason: SelfHostSchemaFailureReason;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* The structured result of the `validate-emitted` operation. `invalid-keys` carries
|
|
62
|
+
* the FAILING key NAMES only (never a value); `schema-error` surfaces a values-free
|
|
63
|
+
* env.ts/validator failure.
|
|
64
|
+
*/
|
|
65
|
+
type EnvSchemaValidateResult = {
|
|
66
|
+
kind: "invalid-keys";
|
|
67
|
+
invalidKeys: Array<string>;
|
|
68
|
+
} | {
|
|
69
|
+
kind: "schema-error";
|
|
70
|
+
reason: SelfHostSchemaFailureReason;
|
|
71
|
+
};
|
|
72
|
+
/** Minimal structural shape of a `spawnSync`-style result (injectable in tests). */
|
|
73
|
+
type EnvSchemaProbeSpawnResult = {
|
|
74
|
+
status: number | null; /** The fd-3 buffer (the framed result) — dedicated so stdout noise can't truncate it. */
|
|
75
|
+
fd3: string | null;
|
|
76
|
+
error?: Error | null;
|
|
77
|
+
signal?: NodeJS.Signals | null;
|
|
78
|
+
};
|
|
79
|
+
type EnvSchemaProbeSpawn = (command: string, args: Array<string>, options: {
|
|
80
|
+
cwd: string;
|
|
81
|
+
env: NodeJS.ProcessEnv;
|
|
82
|
+
}) => EnvSchemaProbeSpawnResult;
|
|
83
|
+
/**
|
|
84
|
+
* PARENT side (`facts`): return the env-insensitive schema facts + the v1 envDir/mode
|
|
85
|
+
* narrowing. Runs pre-build so a custom envDir / non-production mode / broken env.ts
|
|
86
|
+
* fails fast, before any account op.
|
|
87
|
+
*/
|
|
88
|
+
declare function resolveEnvSchemaFactsViaSubprocess(input: EnvSchemaProbeInput, env: NodeJS.ProcessEnv, spawn?: EnvSchemaProbeSpawn): Promise<EnvSchemaProbeResult>;
|
|
89
|
+
/**
|
|
90
|
+
* PARENT side (`validate-emitted`): validate the REAL emitted worker `vars` against
|
|
91
|
+
* the schema validators and return the FAILING key NAMES only. Runs post-build so
|
|
92
|
+
* the values validated are exactly what the worker ships.
|
|
93
|
+
*/
|
|
94
|
+
declare function validateEmittedVarsViaSubprocess(input: EnvSchemaProbeInput, env: NodeJS.ProcessEnv, spawn?: EnvSchemaProbeSpawn): Promise<EnvSchemaValidateResult>;
|
|
95
|
+
//#endregion
|
|
96
|
+
export { EnvSchemaProbeInput, EnvSchemaProbeRejectReason, EnvSchemaProbeResult, EnvSchemaProbeSpawn, EnvSchemaProbeSpawnResult, EnvSchemaValidateResult, resolveEnvSchemaFactsViaSubprocess, validateEmittedVarsViaSubprocess };
|