@voltro/cli 0.38.0 → 0.39.1
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/CHANGELOG.md +276 -0
- package/THIRD-PARTY-NOTICES.md +80 -45
- package/dist/{addCommand-BNeoeSxe.js → addCommand-C05L9tZh.js} +2 -2
- package/dist/addCommand-C3MdJG-a.js +2 -0
- package/dist/{agentsMd-mhQMF1bx.js → agentsMd-7zI2h5l9.js} +3 -3
- package/dist/agentsMd-BFCXh2gl.js +2 -0
- package/dist/apiBuild-BmR_bIxN.js +2 -0
- package/dist/{apiBuild-CvacV4zA.js → apiBuild-D9FB13_2.js} +3 -3
- package/dist/baselineCommand-CXv680Dc.js +2 -0
- package/dist/{baselineCommand-C6NMt-oa.js → baselineCommand-Ck2Xm8M7.js} +18 -18
- package/dist/bin.js +1 -1
- package/dist/{build-_LoTC1s0.js → build-DORV5mLM.js} +107 -100
- package/dist/{capabilitiesCommand-nq_pz5xd.js → capabilitiesCommand-D5gucwYa.js} +8 -8
- package/dist/{checkCommand-Pjk5sBl2.js → checkCommand-Bf6oMao4.js} +35 -35
- package/dist/{checkCommand-wibtQx-N.js → checkCommand-D9qK_gtA.js} +1 -1
- package/dist/{cloudCmd-NQSwe_Qk.js → cloudCmd-C42gaO8s.js} +16 -16
- package/dist/{clusterCmd-D5wsCmA_.js → clusterCmd-DrVFCzSj.js} +8 -4
- package/dist/{codegen-GYYcdpCg.js → codegen-CbpGCWLG.js} +1 -1
- package/dist/codegen-i8QGcHsi.js +2 -0
- package/dist/codegenCommand-CxOyKmc1.js +129 -0
- package/dist/{codemodRunner-CXgQ-ecJ.js → codemodRunner-D-jTyvWo.js} +622 -551
- package/dist/{commands-DaZVi9wi.js → commands-D6aW_6AR.js} +48 -48
- package/dist/{connectionConfig-UFlIEiys.js → connectionConfig-Bk9IC7D0.js} +1 -1
- package/dist/{dashboardCommand-Dxy_kmoW.js → dashboardCommand-CwTZh-XZ.js} +3 -3
- package/dist/{dataCommand-D6-Ha2lf.js → dataCommand-Cc9RiLQZ.js} +14 -11
- package/dist/{dbCommand-C4UW8cVN.js → dbCommand-DSwGv9wS.js} +50 -49
- package/dist/dbCommand-DcqEyxju.js +2 -0
- package/dist/{dev-E7Eo5GHc.js → dev-3mgc8c-H.js} +2260 -2184
- package/dist/dev-CjJAasDs.js +3 -0
- package/dist/{dialectDriver-CgXnDfec.js → dialectDriver-czCHYpeH.js} +2 -1
- package/dist/doctorCommand-Cghssndo.js +2 -0
- package/dist/{doctorCommand-gmDyALFL.js → doctorCommand-oLuzc-aC.js} +261 -244
- package/dist/{dormancyCommand-CE6wG8lj.js → dormancyCommand-Bxe4WtHU.js} +1 -1
- package/dist/{e2eCmd-BRabZww-.js → e2eCmd-uFHig1hV.js} +8 -2
- package/dist/{embeddingsCommand-C3uAuf6N.js → embeddingsCommand-CyNQkFIc.js} +6 -6
- package/dist/{envCommand-DzuWh8ya.js → envCommand-CAkSgBbh.js} +19 -19
- package/dist/{evolveCommand-DPLqcYb2.js → evolveCommand-CWhBoe_P.js} +6 -8
- package/dist/frameworkTableAssembly-DgylYh9_.js +2 -0
- package/dist/{generateCommand-DbgcUpGw.js → generateCommand-CcyvH2ve.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{infoCommand-CmczGj_l.js → infoCommand-CTo8Jnhq.js} +7 -7
- package/dist/inspect-B7U7Cl_Z.js +1192 -0
- package/dist/inspect-DUze25t0.js +2 -0
- package/dist/{inspectCmd-EHFZ9yYu.js → inspectCmd-niF97fAq.js} +5 -5
- package/dist/inspectGateHint-BjnFubmH.js +7 -0
- package/dist/{logFileSink-C_D2wRN1.js → logFileSink-B4uP8pvf.js} +1 -1
- package/dist/{logsCmd-D36xK7Zu.js → logsCmd-B6oNsfaZ.js} +10 -7
- package/dist/{manifestBuild-hpPLaGxV.js → manifestBuild-BK42hu0k.js} +1 -1
- package/dist/manifestBuild-j0n109tt.js +2 -0
- package/dist/{metaCommands-CIoQNlaQ.js → metaCommands-DUYR--Ts.js} +1 -1
- package/dist/{migrate-RwgUWXfc.js → migrate-BnPw2zC8.js} +7 -4
- package/dist/{packageCommand-Cug_3Ogl.js → packageCommand-9SVyvsSo.js} +3 -2
- package/dist/{probeCommand-BPEpwT32.js → probeCommand-C9gazU0H.js} +35 -24
- package/dist/{projectScaffold-CxgtJvlb.js → projectScaffold-BEhhHjPr.js} +1 -1
- package/dist/{projectScaffold-DDgWbNLe.js → projectScaffold-BvhLOrLq.js} +17 -15
- package/dist/{runtimeTrace-6jfznSzr.js → runtimeTrace-gNXeLf6H.js} +1 -1
- package/dist/{scheduleManifestCmd-D2x0CTTY.js → scheduleManifestCmd-kmWzrO_w.js} +6 -9
- package/dist/{sdkgen-CEJZZQUA.js → sdkgen-C8zz10-X.js} +4 -4
- package/dist/{seedRunner-ZmLSqNe2.js → seedRunner-IdHEprqf.js} +1 -4
- package/dist/serveCommand-BpK8-m1N.js +1770 -0
- package/dist/serveCommand-CW-goXvh.js +2 -0
- package/dist/serveEntry.js +2 -2
- package/dist/{serverlessCommand-CfJZy6dS.js → serverlessCommand-DbJ7Plg9.js} +3 -3
- package/dist/{start-CidwCcjl.js → start-BNuTWdRd.js} +1 -1
- package/dist/{start-RCh6qKFe.js → start-ft_KzFTd.js} +257 -254
- package/dist/startEntry.js +1 -1
- package/dist/{test-DIQ0jlkQ.js → test-CLYXrZ2F.js} +1 -1
- package/dist/{tracesCmd-DStmCJPi.js → tracesCmd-DgtgOUdi.js} +7 -4
- package/dist/{typecheckCommand-BlsWiCNq.js → typecheckCommand-BuCtT92o.js} +7 -7
- package/dist/updateCommand-6FMU2klq.js +2 -0
- package/dist/{updateCommand-CmksX7m_.js → updateCommand-CHBmCB17.js} +5 -3
- package/dist/{webDev-BKdD7c_a.js → webDev-CTpSY-e_.js} +813 -775
- package/dist/webDev-id3I5PvG.js +2 -0
- package/dist/{webhookDiscovery-D7VaeMlz.js → webhookDiscovery-CphsQe59.js} +4 -6
- package/dist/{webhookDiscovery-CrGAfhIG.js → webhookDiscovery-il9ti-HE.js} +1 -1
- package/dist/{webhooksCommand-BHeaF1ZJ.js → webhooksCommand-EccPZQZ4.js} +1 -1
- package/package.json +27 -21
- package/templates/AGENTS.md +2 -2
- package/templates/agent-docs/_index.md +2 -2
- package/templates/agent-docs/_manifest.json +2 -2
- package/templates/agent-docs/authentication.md +43 -4
- package/templates/agent-docs/cli.md +17 -13
- package/templates/agent-docs/data.md +44 -1
- package/templates/agent-docs/database/migrations.md +2 -2
- package/templates/agent-docs/database/seedsdialects.md +2 -2
- package/templates/agent-docs/deployment.md +21 -7
- package/templates/agent-docs/internationalization.md +10 -3
- package/templates/agent-docs/local-first-mobile.md +141 -20
- package/templates/agent-docs/plugins/mail.md +1 -1
- package/templates/agent-docs/plugins/ratelimit.md +1 -1
- package/templates/agent-docs/plugins.md +3 -1
- package/templates/agent-docs/releases.md +130 -1
- package/templates/agent-docs/routing.md +34 -2
- package/templates/agent-docs/templates/apibackends.md +1 -1
- package/templates/agent-docs/templates/mobile.md +1 -1
- package/templates/agent-docs/whats-new.md +26 -66
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +10 -10
- package/templates/apps/api-collab/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-durable/startup/warm.startup.tsx +16 -2
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/authz.ts +16 -1
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +9 -9
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +10 -10
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/README.md +41 -17
- package/templates/apps/mobile-app/app.config.ts +1 -1
- package/templates/apps/mobile-app/package.json +15 -11
- package/templates/apps/mobile-app/src/app/_layout.tsx +44 -13
- package/templates/apps/mobile-app/src/app/index.tsx +1 -1
- package/templates/apps/mobile-app/src/app/settings.tsx +4 -1
- package/templates/apps/mobile-app/src/client.ts +74 -57
- package/templates/apps/mobile-app/src/lib/api.ts +4 -4
- package/templates/apps/mobile-app/src/lib/deeplinks.ts +6 -6
- package/templates/apps/mobile-app/src/persistence.ts +24 -3
- package/templates/apps/mobile-app/tsconfig.json +17 -3
- package/dist/addCommand-aXSQveak.js +0 -2
- package/dist/agentsMd-BTchIZku.js +0 -2
- package/dist/apiBuild-ttSDDOGp.js +0 -2
- package/dist/baselineCommand-Cfw2Afwm.js +0 -2
- package/dist/codegen-uYrrDzQv.js +0 -2
- package/dist/codegenCommand-C60m_LCp.js +0 -30
- package/dist/dbCommand-CC-qNzpz.js +0 -2
- package/dist/dev-CAOoXOkc.js +0 -3
- package/dist/doctorCommand-Cjl8Yii8.js +0 -2
- package/dist/frameworkTableAssembly-YyVe32Cb.js +0 -2
- package/dist/inspect-CjTYzAs_.js +0 -1190
- package/dist/inspect-P4pxoMaV.js +0 -2
- package/dist/inspectGateHint-BF6608UT.js +0 -4
- package/dist/manifestBuild-COkJoyAr.js +0 -2
- package/dist/serveCommand-DNRF2nDI.js +0 -2
- package/dist/serveCommand-DnY4VS3D.js +0 -1767
- package/dist/updateCommand-B0J_T9Vs.js +0 -2
- package/dist/webDev-CcJfdSjl2.js +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { D as t, G as n, K as r, O as i, S as a, W as o, Y as s, a as c, b as l, d as u, f as d, k as f,
|
|
1
|
+
import { hn as e } from "./dev-3mgc8c-H.js";
|
|
2
|
+
import { D as t, G as n, K as r, O as i, S as a, W as o, Y as s, a as c, b as l, d as u, f as d, k as f, s as p, st as m, ut as h, v as g, x as _, y as v } from "./webDev-CTpSY-e_.js";
|
|
3
3
|
import { t as y } from "./cliRuntime-Dh7UDinH.js";
|
|
4
4
|
import { a as b } from "./renderModeScan-D7J1B7Kw.js";
|
|
5
|
-
import { i as x, o as S, s as C } from "./apiBuild-
|
|
5
|
+
import { i as x, o as S, s as C } from "./apiBuild-D9FB13_2.js";
|
|
6
6
|
import { n as w } from "./renderProfile-1OWWAAtx.js";
|
|
7
7
|
import { dirname as T, join as E, resolve as D } from "node:path";
|
|
8
8
|
import { existsSync as O, promises as k } from "node:fs";
|
|
@@ -12,7 +12,7 @@ import { Effect as j } from "effect";
|
|
|
12
12
|
import { createRequire as M } from "node:module";
|
|
13
13
|
//#region src/webStartBundle.ts
|
|
14
14
|
var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
15
|
-
let t = await
|
|
15
|
+
let t = await h("esbuild", () => import("esbuild")), n = E(e, ".framework"), r = E(n, "dist-web", "startBundle");
|
|
16
16
|
await k.mkdir(n, { recursive: !0 });
|
|
17
17
|
let i = Date.now(), a = E(e, "tsconfig.json"), o = /* @__PURE__ */ new Set(), s = E(n, "startEntry.ts");
|
|
18
18
|
await k.writeFile(s, [
|
|
@@ -91,7 +91,11 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
91
91
|
r.push(a);
|
|
92
92
|
} else r.push(i);
|
|
93
93
|
return r.length === 0 ? "/" : "/" + r.join("/");
|
|
94
|
-
}, z = (e, t) =>
|
|
94
|
+
}, z = (e, t) => {
|
|
95
|
+
if (t === "/" || t === "") return E(e, "index.html");
|
|
96
|
+
let n = t.replace(/^\//, "").split("/");
|
|
97
|
+
return E(e, ...n, "index.html");
|
|
98
|
+
}, B = (e) => e.replace(/<script\b(?=[^>]*\btype="module")(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<script\b(?=[^>]*\bsrc=)(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<link\b[^>]*\brel="modulepreload"[^>]*>/gi, ""), V = (e, t) => {
|
|
95
99
|
let n = e.replace("<div id=\"root\"></div>", `<div id="root">${t.body}</div>`), r = [
|
|
96
100
|
t.metaHtml,
|
|
97
101
|
`<meta name="voltro-interactive" content="${t.interactive}" />`,
|
|
@@ -156,7 +160,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
156
160
|
}, U = async (e) => {
|
|
157
161
|
let { root: t, distDir: n, pages: r, dirs: i, vite: a } = e, o = E(n, "index.html"), l = await k.readFile(o, "utf8"), u = E(n, "_voltro", "shell.html");
|
|
158
162
|
await k.mkdir(T(u), { recursive: !0 }), await k.writeFile(u, l, "utf8");
|
|
159
|
-
let d = E(t, "node_modules", "@voltro", "ui-shadcn"), f = O(E(d, "package.json")) ? d : null,
|
|
163
|
+
let d = E(t, "node_modules", "@voltro", "ui-shadcn"), f = O(E(d, "package.json")) ? d : null, m = [...f ? [
|
|
160
164
|
{
|
|
161
165
|
find: "@voltro/ui-shadcn/tokens.css",
|
|
162
166
|
replacement: E(f, "src/tokens.css")
|
|
@@ -173,12 +177,12 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
173
177
|
find: "@voltro/ui-shadcn",
|
|
174
178
|
replacement: E(f, "src/index.ts")
|
|
175
179
|
}
|
|
176
|
-
] : [], ...s(t)],
|
|
180
|
+
] : [], ...s(t)], h = await a.createServer({
|
|
177
181
|
root: E(t, ".framework"),
|
|
178
182
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
179
183
|
plugins: [(await import("@vitejs/plugin-react")).default(), (await import("@tailwindcss/vite")).default()],
|
|
180
184
|
resolve: {
|
|
181
|
-
alias:
|
|
185
|
+
alias: m,
|
|
182
186
|
dedupe: [
|
|
183
187
|
"react",
|
|
184
188
|
"react-dom",
|
|
@@ -194,31 +198,32 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
194
198
|
},
|
|
195
199
|
appType: "custom",
|
|
196
200
|
logLevel: "warn"
|
|
197
|
-
}), g = await
|
|
201
|
+
}), g = await h.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: v, renderMetaToHtml: y, renderRouterStateScript: x, isDeferredLoaderResult: S, assertDeferralSupported: C, beginStoreSeeds: w, seedPreloadedSubscription: D, seedPreloadedSubscriptionFailure: A } = g, j = /* @__PURE__ */ new Map();
|
|
198
202
|
if (e.locales && e.locales.length > 0 && e.defaultLocale) try {
|
|
199
|
-
let n = (await
|
|
203
|
+
let n = (await h.ssrLoadModule("@voltro/i18n")).makeSsgWrap;
|
|
200
204
|
if (typeof n != "function") throw Error("@voltro/i18n is installed but missing the `makeSsgWrap` export — upgrade @voltro/i18n to a version that ships SSG support.");
|
|
201
205
|
for (let r of e.locales) try {
|
|
202
|
-
let i = await
|
|
203
|
-
|
|
206
|
+
let i = await h.ssrLoadModule(E(t, "src", "locales", `${r}.ts`)), a = i.default ?? i;
|
|
207
|
+
j.set(r, n(r, a, e.defaultLocale));
|
|
204
208
|
} catch (e) {
|
|
205
209
|
F.warn(`i18n catalog missing for locale '${r}' — pages rendered at /${r}/* will crash. Add src/locales/${r}.ts.`, {}, e);
|
|
206
210
|
}
|
|
207
211
|
} catch (e) {
|
|
208
212
|
F.warn("i18n wrapper unavailable for SSG — pages that call useT() will fail. Check that @voltro/i18n is installed.", {}, e);
|
|
209
213
|
}
|
|
210
|
-
let
|
|
214
|
+
let M = [], N = {}, P = (e) => e.dir === "" ? E(t, "src", "pages") : E(t, "src", "pages", e.dir), I = async (e) => await h.ssrLoadModule(E(P(e), "layout.tsx")), B = async (e) => await h.ssrLoadModule(E(P(e), "error.tsx")), U = async (e) => await h.ssrLoadModule(E(P(e), "loading.tsx")), W = (e, t) => ({
|
|
211
215
|
params: e.params,
|
|
212
216
|
pathname: e.pathname,
|
|
213
217
|
search: "",
|
|
214
218
|
signal: t,
|
|
215
219
|
headers: {},
|
|
216
|
-
query: void 0
|
|
220
|
+
query: void 0,
|
|
221
|
+
isServer: !0
|
|
217
222
|
});
|
|
218
223
|
for (let a of r) {
|
|
219
|
-
let r = `${E(t, "src", "pages", a.file)}`, o = await
|
|
220
|
-
|
|
221
|
-
let u = s.renderMode, d =
|
|
224
|
+
let r = `${E(t, "src", "pages", a.file)}`, o = await h.ssrLoadModule(r), s = b(o, E("src", "pages", a.file));
|
|
225
|
+
N[a.pattern] = s;
|
|
226
|
+
let u = s.renderMode, d = p(i, a.dirChain);
|
|
222
227
|
if (u === "spa") {
|
|
223
228
|
let t = await H({
|
|
224
229
|
page: a,
|
|
@@ -227,17 +232,17 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
227
232
|
shellTemplate: l,
|
|
228
233
|
distDir: n,
|
|
229
234
|
helpers: g,
|
|
230
|
-
loadLayout:
|
|
231
|
-
loadError:
|
|
232
|
-
loadPending:
|
|
233
|
-
ctx:
|
|
235
|
+
loadLayout: I,
|
|
236
|
+
loadError: B,
|
|
237
|
+
loadPending: U,
|
|
238
|
+
ctx: W({
|
|
234
239
|
params: {},
|
|
235
240
|
pathname: a.pattern
|
|
236
241
|
}, new AbortController().signal),
|
|
237
|
-
outerWrap:
|
|
242
|
+
outerWrap: j.get(e.defaultLocale ?? ""),
|
|
238
243
|
locale: e.defaultLocale
|
|
239
244
|
});
|
|
240
|
-
t &&
|
|
245
|
+
t && M.push(t);
|
|
241
246
|
continue;
|
|
242
247
|
}
|
|
243
248
|
if (u !== "static") {
|
|
@@ -281,17 +286,17 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
281
286
|
params: {},
|
|
282
287
|
pathname: a.pattern
|
|
283
288
|
}];
|
|
284
|
-
let
|
|
289
|
+
let m = o.interactive ?? "full";
|
|
285
290
|
for (let t of f) {
|
|
286
291
|
w();
|
|
287
292
|
let r, i, s = new AbortController();
|
|
288
293
|
try {
|
|
289
294
|
({chain: r, segmentLoaderData: i} = await c({
|
|
290
295
|
entries: d,
|
|
291
|
-
loadLayout:
|
|
292
|
-
loadError:
|
|
293
|
-
loadPending:
|
|
294
|
-
ctx:
|
|
296
|
+
loadLayout: I,
|
|
297
|
+
loadError: B,
|
|
298
|
+
loadPending: U,
|
|
299
|
+
ctx: W(t, s.signal)
|
|
295
300
|
}));
|
|
296
301
|
} catch (e) {
|
|
297
302
|
let n = e?._voltroControl;
|
|
@@ -302,10 +307,10 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
302
307
|
}
|
|
303
308
|
F.warn("layout loader threw, falling back to no layout data", { pathname: t.pathname }, e), {chain: r, segmentLoaderData: i} = await c({
|
|
304
309
|
entries: d,
|
|
305
|
-
loadLayout: async (e) => ({ default: (await
|
|
306
|
-
loadError:
|
|
307
|
-
loadPending:
|
|
308
|
-
ctx:
|
|
310
|
+
loadLayout: async (e) => ({ default: (await I(e)).default }),
|
|
311
|
+
loadError: B,
|
|
312
|
+
loadPending: U,
|
|
313
|
+
ctx: W(t, s.signal)
|
|
309
314
|
});
|
|
310
315
|
}
|
|
311
316
|
let f = {
|
|
@@ -317,14 +322,15 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
317
322
|
Pending: o.Pending,
|
|
318
323
|
renderMode: u,
|
|
319
324
|
chain: r
|
|
320
|
-
},
|
|
325
|
+
}, p = null;
|
|
321
326
|
if (typeof o.loader == "function") {
|
|
322
327
|
let e = new AbortController();
|
|
323
328
|
try {
|
|
324
|
-
|
|
329
|
+
p = await o.loader({
|
|
325
330
|
params: t.params,
|
|
326
331
|
pathname: t.pathname,
|
|
327
|
-
signal: e.signal
|
|
332
|
+
signal: e.signal,
|
|
333
|
+
isServer: !0
|
|
328
334
|
});
|
|
329
335
|
} catch (e) {
|
|
330
336
|
if (e instanceof Error && e._voltroControl === "redirect") throw Error(`Static page "${t.pathname}" threw RedirectError at build time. Static pages can't redirect per-request — switch it to renderMode 'ssr'.`);
|
|
@@ -335,28 +341,29 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
335
341
|
F.warn("loader threw, falling back to null", { pathname: t.pathname }, e);
|
|
336
342
|
}
|
|
337
343
|
}
|
|
338
|
-
S(
|
|
344
|
+
S(p) && C({
|
|
339
345
|
page: t.pathname,
|
|
340
346
|
renderMode: u,
|
|
341
|
-
interactive:
|
|
347
|
+
interactive: m
|
|
342
348
|
});
|
|
343
349
|
for (let e of Object.values(i)) S(e) && C({
|
|
344
350
|
page: t.pathname,
|
|
345
351
|
renderMode: u,
|
|
346
|
-
interactive:
|
|
352
|
+
interactive: m
|
|
347
353
|
});
|
|
348
354
|
await _({
|
|
349
355
|
pageMod: o,
|
|
350
356
|
params: t.params,
|
|
351
357
|
query: void 0,
|
|
352
358
|
apiName: void 0,
|
|
353
|
-
seed: D
|
|
359
|
+
seed: D,
|
|
360
|
+
seedFailure: A
|
|
354
361
|
});
|
|
355
|
-
let h = t.params.locale ?? e.defaultLocale ?? "en", g =
|
|
362
|
+
let h = t.params.locale ?? e.defaultLocale ?? "en", g = j.get(h) ?? j.get(e.defaultLocale ?? ""), { html: b, meta: E } = v({
|
|
356
363
|
descriptor: f,
|
|
357
364
|
params: t.params,
|
|
358
365
|
pathname: t.pathname,
|
|
359
|
-
loaderData:
|
|
366
|
+
loaderData: p,
|
|
360
367
|
segmentLoaderData: i,
|
|
361
368
|
...g ? { outerWrap: g } : {},
|
|
362
369
|
locale: h
|
|
@@ -365,22 +372,22 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
365
372
|
metaHtml: y(E),
|
|
366
373
|
stateScript: x({
|
|
367
374
|
path: t.pathname,
|
|
368
|
-
loaderData:
|
|
375
|
+
loaderData: p,
|
|
369
376
|
segmentLoaderData: i,
|
|
370
377
|
pageLoaderRan: typeof o.loader == "function"
|
|
371
378
|
}),
|
|
372
|
-
interactive:
|
|
373
|
-
}),
|
|
374
|
-
await k.mkdir(T(
|
|
379
|
+
interactive: m
|
|
380
|
+
}), N = z(n, t.pathname);
|
|
381
|
+
await k.mkdir(T(N), { recursive: !0 }), await k.writeFile(N, O, "utf8"), M.push({
|
|
375
382
|
pattern: t.pathname,
|
|
376
|
-
outPath:
|
|
383
|
+
outPath: N,
|
|
377
384
|
...E?.noIndex ? { noIndex: !0 } : {}
|
|
378
385
|
});
|
|
379
386
|
}
|
|
380
387
|
}
|
|
381
|
-
return await
|
|
382
|
-
rendered:
|
|
383
|
-
pageMeta:
|
|
388
|
+
return await h.close(), {
|
|
389
|
+
rendered: M,
|
|
390
|
+
pageMeta: N
|
|
384
391
|
};
|
|
385
392
|
}, W = async (e, t, n, r, i, a) => {
|
|
386
393
|
let o = E(e, ".framework"), s = [];
|
|
@@ -461,13 +468,13 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
461
468
|
].join("\n"), b = E(o, "ssrEntry.ts");
|
|
462
469
|
return await k.writeFile(b, y, "utf8"), b;
|
|
463
470
|
}, G = async (e) => {
|
|
464
|
-
let { checkRpcGroupFreshness: t } = await import("./codegen-
|
|
471
|
+
let { checkRpcGroupFreshness: t } = await import("./codegen-i8QGcHsi.js"), n = await t(e);
|
|
465
472
|
if (n.kind === "fresh") return;
|
|
466
473
|
n.kind === "stale" && F.info("rpcGroup.generated.ts is stale — regenerating", {
|
|
467
474
|
file: n.file,
|
|
468
475
|
reason: n.reason
|
|
469
476
|
});
|
|
470
|
-
let { regenerateRpcGroup: r } = await import("./codegenCommand-
|
|
477
|
+
let { regenerateRpcGroup: r } = await import("./codegenCommand-CxOyKmc1.js"), i = await r(e);
|
|
471
478
|
if (i.kind === "refused") {
|
|
472
479
|
F.warn("could not regenerate the rpc group — building against what is on disk", { reason: i.reason });
|
|
473
480
|
return;
|
|
@@ -479,10 +486,10 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
479
486
|
}, K = async (e) => {
|
|
480
487
|
let t = await u(e);
|
|
481
488
|
if (!t) {
|
|
482
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
489
|
+
let { loadApiConfig: t } = await import("./dev-CjJAasDs.js"), n = await t(e);
|
|
483
490
|
if (n) {
|
|
484
491
|
F.info("building api app", { app: n.name ?? "(unnamed)" }), await G(e);
|
|
485
|
-
let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-
|
|
492
|
+
let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-BmR_bIxN.js");
|
|
486
493
|
await t(e);
|
|
487
494
|
try {
|
|
488
495
|
await r(e);
|
|
@@ -509,40 +516,40 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
509
516
|
root: e,
|
|
510
517
|
log: F,
|
|
511
518
|
generateTypes: !0
|
|
512
|
-
});
|
|
513
|
-
await l(e, t,
|
|
514
|
-
let { pages:
|
|
519
|
+
}), a = await d(e, t);
|
|
520
|
+
await l(e, t, a, i.publicValues);
|
|
521
|
+
let { pages: c } = await v(E(e, "src", "pages"));
|
|
515
522
|
await r({
|
|
516
523
|
appRoot: e,
|
|
517
|
-
pages:
|
|
524
|
+
pages: c,
|
|
518
525
|
mode: "prod"
|
|
519
526
|
});
|
|
520
|
-
let
|
|
527
|
+
let f = E(e, ".framework"), p = E(f, "dist"), _ = E(e, "node_modules", "@voltro", "ui-shadcn"), y = O(E(_, "package.json")) ? _ : null, b = [...y ? [
|
|
521
528
|
{
|
|
522
529
|
find: "@voltro/ui-shadcn/tokens.css",
|
|
523
|
-
replacement: E(
|
|
530
|
+
replacement: E(y, "src/tokens.css")
|
|
524
531
|
},
|
|
525
532
|
{
|
|
526
533
|
find: "@voltro/ui-shadcn/cn",
|
|
527
|
-
replacement: E(
|
|
534
|
+
replacement: E(y, "src/cn.ts")
|
|
528
535
|
},
|
|
529
536
|
{
|
|
530
537
|
find: "@voltro/ui-shadcn/brand",
|
|
531
|
-
replacement: E(
|
|
538
|
+
replacement: E(y, "src/brand/voltroLogo.tsx")
|
|
532
539
|
},
|
|
533
540
|
{
|
|
534
541
|
find: "@voltro/ui-shadcn",
|
|
535
|
-
replacement: E(
|
|
542
|
+
replacement: E(y, "src/index.ts")
|
|
536
543
|
}
|
|
537
544
|
] : [], ...s(e)];
|
|
538
545
|
F.info("running vite build");
|
|
539
|
-
let
|
|
540
|
-
await
|
|
541
|
-
root:
|
|
546
|
+
let x = await h("vite", () => import("vite")), C = (await import("@vitejs/plugin-react")).default, T = (await import("@tailwindcss/vite")).default;
|
|
547
|
+
await x.build({
|
|
548
|
+
root: f,
|
|
542
549
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
543
|
-
plugins: [
|
|
550
|
+
plugins: [C(), T()],
|
|
544
551
|
resolve: {
|
|
545
|
-
alias:
|
|
552
|
+
alias: b,
|
|
546
553
|
dedupe: [
|
|
547
554
|
"react",
|
|
548
555
|
"react-dom",
|
|
@@ -558,36 +565,36 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
558
565
|
},
|
|
559
566
|
logLevel: "warn"
|
|
560
567
|
});
|
|
561
|
-
let
|
|
562
|
-
if (
|
|
563
|
-
pagesDir:
|
|
564
|
-
distDir:
|
|
568
|
+
let D = E(e, "src", "pages"), { pages: A, dirs: j } = await v(D);
|
|
569
|
+
if (A.length === 0) return F.info("no pages found — client-only bundle written", {
|
|
570
|
+
pagesDir: D,
|
|
571
|
+
distDir: p
|
|
565
572
|
}), {
|
|
566
573
|
ran: !0,
|
|
567
574
|
exitCode: 0
|
|
568
575
|
};
|
|
569
|
-
let { rendered:
|
|
576
|
+
let { rendered: M, pageMeta: N } = await U({
|
|
570
577
|
root: e,
|
|
571
|
-
distDir:
|
|
572
|
-
pages:
|
|
573
|
-
dirs:
|
|
574
|
-
vite:
|
|
578
|
+
distDir: p,
|
|
579
|
+
pages: A,
|
|
580
|
+
dirs: j,
|
|
581
|
+
vite: x,
|
|
575
582
|
...t.locales ? { locales: t.locales } : {},
|
|
576
583
|
...t.defaultLocale ? { defaultLocale: t.defaultLocale } : {}
|
|
577
584
|
});
|
|
578
|
-
F.info("generating .framework/ssrEntry.ts"), await W(e,
|
|
579
|
-
let
|
|
585
|
+
F.info("generating .framework/ssrEntry.ts"), await W(e, A, j, t.locales, t.defaultLocale, N), F.info("vite build --ssr → dist/server/");
|
|
586
|
+
let L = /* @__PURE__ */ new Set();
|
|
580
587
|
try {
|
|
581
|
-
await
|
|
582
|
-
root:
|
|
588
|
+
await x.build({
|
|
589
|
+
root: f,
|
|
583
590
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
584
591
|
plugins: [
|
|
585
|
-
x(),
|
|
586
592
|
C(),
|
|
587
|
-
|
|
593
|
+
T(),
|
|
594
|
+
I(e, L)
|
|
588
595
|
],
|
|
589
596
|
resolve: {
|
|
590
|
-
alias:
|
|
597
|
+
alias: b,
|
|
591
598
|
dedupe: [
|
|
592
599
|
"react",
|
|
593
600
|
"react-dom",
|
|
@@ -605,7 +612,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
605
612
|
logLevel: "warn"
|
|
606
613
|
}), F.info("SSR bundle ready", {
|
|
607
614
|
path: "dist/server/ssrEntry.js",
|
|
608
|
-
...
|
|
615
|
+
...L.size > 0 ? { externalizedOptionalPeers: [...L].join(", ") } : {}
|
|
609
616
|
});
|
|
610
617
|
} catch (e) {
|
|
611
618
|
return F.fatal("SSR bundle build FAILED — refusing to ship a bundle-less image. Fix the error above (production renders from the SSR bundle, never by compiling on demand).", {}, e), {
|
|
@@ -613,13 +620,13 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
613
620
|
exitCode: 1
|
|
614
621
|
};
|
|
615
622
|
}
|
|
616
|
-
let
|
|
617
|
-
if (O(
|
|
623
|
+
let R = E(e, "app.config.ts");
|
|
624
|
+
if (O(R)) {
|
|
618
625
|
F.info("precompiling app.config.ts → dist/server/appConfig.js");
|
|
619
626
|
try {
|
|
620
|
-
await (await
|
|
621
|
-
entryPoints: [
|
|
622
|
-
outfile: E(
|
|
627
|
+
await (await h("esbuild", () => import("esbuild"))).build({
|
|
628
|
+
entryPoints: [R],
|
|
629
|
+
outfile: E(p, "server", "appConfig.js"),
|
|
623
630
|
bundle: !0,
|
|
624
631
|
format: "esm",
|
|
625
632
|
platform: "node",
|
|
@@ -644,14 +651,14 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
644
651
|
} catch (e) {
|
|
645
652
|
F.warn("start bundle build failed — `voltro start` will use the slower per-module boot", {}, e);
|
|
646
653
|
}
|
|
647
|
-
F.info(`pre-rendered ${
|
|
648
|
-
count:
|
|
649
|
-
routes:
|
|
654
|
+
F.info(`pre-rendered ${M.length} static route(s)`, {
|
|
655
|
+
count: M.length,
|
|
656
|
+
routes: M.map((e) => e.pattern)
|
|
650
657
|
});
|
|
651
658
|
try {
|
|
652
659
|
let e = process.env.VOLTRO_SEO_NOINDEX !== "1", r = t.seo?.siteUrl, i = t.locales ?? [], a = t.defaultLocale ?? i[0];
|
|
653
|
-
if (r && !O(E(
|
|
654
|
-
let t = new Set(i.filter((e) => e !== a)), o =
|
|
660
|
+
if (r && !O(E(p, "sitemap.xml"))) {
|
|
661
|
+
let t = new Set(i.filter((e) => e !== a)), o = M.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
|
|
655
662
|
let n = e.split("/").filter(Boolean)[0];
|
|
656
663
|
return n === void 0 || !t.has(n);
|
|
657
664
|
}).filter((e) => !e.includes("[")).map((e) => ({ path: e })), s = n({
|
|
@@ -660,25 +667,25 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
660
667
|
...i.length > 1 ? { locales: i } : {},
|
|
661
668
|
...a ? { defaultLocale: a } : {}
|
|
662
669
|
});
|
|
663
|
-
await k.writeFile(E(
|
|
670
|
+
await k.writeFile(E(p, "sitemap.xml"), s, "utf8"), F.info("wrote dist/sitemap.xml", {
|
|
664
671
|
urls: o.length,
|
|
665
672
|
indexable: e
|
|
666
673
|
});
|
|
667
674
|
}
|
|
668
|
-
if (!O(E(
|
|
675
|
+
if (!O(E(p, "robots.txt"))) {
|
|
669
676
|
let n = o({
|
|
670
677
|
indexable: e,
|
|
671
678
|
...e && r ? { sitemapUrl: `${r.replace(/\/$/, "")}/sitemap.xml` } : {},
|
|
672
679
|
...t.seo?.disallow ? { disallow: t.seo.disallow } : {}
|
|
673
680
|
});
|
|
674
|
-
await k.writeFile(E(
|
|
681
|
+
await k.writeFile(E(p, "robots.txt"), n, "utf8"), F.info("wrote dist/robots.txt", { indexable: e });
|
|
675
682
|
}
|
|
676
683
|
} catch (e) {
|
|
677
684
|
F.warn("SEO artefact generation failed (non-fatal)", {}, e);
|
|
678
685
|
}
|
|
679
686
|
try {
|
|
680
687
|
let t = await w(e);
|
|
681
|
-
await k.writeFile(E(
|
|
688
|
+
await k.writeFile(E(p, ".voltro-build.json"), JSON.stringify({
|
|
682
689
|
version: 1,
|
|
683
690
|
profile: t
|
|
684
691
|
}, null, 2), "utf8"), F.info("wrote deploy profile manifest", {
|
|
@@ -689,7 +696,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
689
696
|
} catch (e) {
|
|
690
697
|
F.warn("could not write .voltro-build.json deploy manifest", {}, e);
|
|
691
698
|
}
|
|
692
|
-
return F.info("build complete", { distDir:
|
|
699
|
+
return F.info("build complete", { distDir: p }), {
|
|
693
700
|
ran: !0,
|
|
694
701
|
exitCode: 0
|
|
695
702
|
};
|
|
@@ -701,7 +708,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
701
708
|
return t.ran ? t.exitCode : (yield* j.logError("no web app found at this path", { hint: "looked for app.config.ts with `type: 'web'`" }), 1);
|
|
702
709
|
}), J = async (t) => {
|
|
703
710
|
if (t.includes("--target")) {
|
|
704
|
-
let { runSdkBuildCommand: e } = await import("./sdkgen-
|
|
711
|
+
let { runSdkBuildCommand: e } = await import("./sdkgen-C8zz10-X.js");
|
|
705
712
|
return e(t);
|
|
706
713
|
}
|
|
707
714
|
let n = t.find((e) => !e.startsWith("-")) ?? process.cwd(), r = await y(q(n), { scope: "voltro:build" }), i = e(n);
|
|
@@ -102,19 +102,19 @@ var l = (e, t) => t ? "type" : e.startsWith("define") ? "primitive" : /^use[A-Z]
|
|
|
102
102
|
], h = async (r) => {
|
|
103
103
|
let a = t(r);
|
|
104
104
|
a && n();
|
|
105
|
-
let o =
|
|
106
|
-
if (a) return e(
|
|
107
|
-
if (
|
|
108
|
-
console.log(`voltro capabilities — ${
|
|
109
|
-
for (let e of
|
|
105
|
+
let o = r.find((e) => !e.startsWith("-")), s = i(o ?? process.cwd()), c = p(s);
|
|
106
|
+
if (a) return e(c), 0;
|
|
107
|
+
if (c.voltroPackages === 0) return console.log(`voltro capabilities — no @voltro packages found under ${s}/node_modules.`), console.log(" Run this from an app root with dependencies installed."), 0;
|
|
108
|
+
console.log(`voltro capabilities — ${c.totalSymbols} exported symbols across ${c.voltroPackages} packages`);
|
|
109
|
+
for (let e of c.packages) {
|
|
110
110
|
let t = m.map((t) => [t, e.symbols.filter((e) => e.kind === t).length]).filter(([, e]) => e > 0).map(([e, t]) => `${t} ${e}${t === 1 ? "" : "s"}`).join(", ");
|
|
111
111
|
console.log(` ${e.name}@${e.version} — ${t}`);
|
|
112
112
|
let n = e.symbols.filter((e) => e.kind === "primitive" || e.kind === "hook");
|
|
113
113
|
n.length > 0 && console.log(` ${n.map((e) => e.name + (e.documented ? "" : " *")).join(", ")}`);
|
|
114
114
|
}
|
|
115
|
-
if (
|
|
116
|
-
console.log(""), console.log(` * ${
|
|
117
|
-
for (let e of
|
|
115
|
+
if (c.undocumented.length > 0) {
|
|
116
|
+
console.log(""), console.log(` * ${c.undocumented.length} primitive(s)/hook(s) appear nowhere in this project's agent guide:`);
|
|
117
|
+
for (let e of c.undocumented) console.log(` ${e}`);
|
|
118
118
|
console.log(" Run `voltro agents-md --force` to refresh it, or read that package README.");
|
|
119
119
|
}
|
|
120
120
|
return console.log(""), console.log(" --json emits the full machine-readable surface (every symbol, kind, and documented flag)."), 0;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as e } from "./cliArgs-D4p8n7EE.js";
|
|
2
|
-
import { c as t, i as n } from "./codegen-
|
|
2
|
+
import { c as t, i as n } from "./codegen-CbpGCWLG.js";
|
|
3
3
|
import { r } from "./appGraph-KGDPTuTy.js";
|
|
4
4
|
import { n as i } from "./cliOutput-D1tSBoRM.js";
|
|
5
5
|
import { n as a, o, r as s, t as c } from "./inspectFetch-EMuhTG_9.js";
|
|
6
6
|
import { r as l } from "./fileTaxonomy-CJfgOllU.js";
|
|
7
|
-
import { x as u } from "./doctorCommand-
|
|
7
|
+
import { x as u } from "./doctorCommand-oLuzc-aC.js";
|
|
8
8
|
import { resolve as d } from "node:path";
|
|
9
9
|
import { readdirSync as f, statSync as p } from "node:fs";
|
|
10
10
|
//#region src/observedDiff.ts
|
|
@@ -141,12 +141,12 @@ var m = (e) => e === void 0 ? [] : typeof e == "string" ? [e] : e, h = /* @__PUR
|
|
|
141
141
|
let t = e.severity === "error" ? "✗ error" : "⚠ warn", n = e.file ? ` (${e.file})` : "";
|
|
142
142
|
return `${t} ${e.rule} ${e.node}${n}\n ${e.breaks.join("; ")}\n fix: ${e.fix}`;
|
|
143
143
|
}).join("\n"), C = async (e) => {
|
|
144
|
-
let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-
|
|
144
|
+
let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-CjJAasDs.js"), { buildRpcEntry: i } = await import("./manifestBuild-j0n109tt.js"), { buildCapabilityManifest: a } = await import("./inspect-DUze25t0.js"), { relative: o } = await import("node:path"), s = await n(await t(e)), c = (t, n, r) => i(t, n, o(e, r)), l = [
|
|
145
145
|
...s.queries.map((e) => c(e.descriptor, "query", e.file)),
|
|
146
146
|
...s.mutations.map((e) => c(e.descriptor, "mutation", e.file)),
|
|
147
147
|
...s.actions.map((e) => c(e.descriptor, "action", e.file)),
|
|
148
148
|
...s.streams.map((e) => c(e.descriptor, "stream", e.file))
|
|
149
|
-
], { assembleFrameworkTables: u } = await import("./frameworkTableAssembly-
|
|
149
|
+
], { assembleFrameworkTables: u } = await import("./frameworkTableAssembly-DgylYh9_.js"), d = await u({ root: e }).catch((e) => (console.warn(`\n⚠ plugin tables could not be collected — this report is INCOMPLETE.\n ${e instanceof Error ? e.message.split("\n")[0] : String(e)}\n`), [])), f = new Set(s.tables.map((e) => e.tableName)), p = [...[...f].map((e) => ({ name: e })), ...d.map((e) => e.tableName).filter((e) => !f.has(e)).map((e) => ({
|
|
150
150
|
name: e,
|
|
151
151
|
framework: !0
|
|
152
152
|
}))], m = await r(e).then((e) => e?.plugins ?? []).catch(() => []);
|
|
@@ -158,75 +158,75 @@ var m = (e) => e === void 0 ? [] : typeof e == "string" ? [e] : e, h = /* @__PUR
|
|
|
158
158
|
tables: { tables: p }
|
|
159
159
|
};
|
|
160
160
|
}, w = async (n) => {
|
|
161
|
-
let f =
|
|
162
|
-
if ("error" in
|
|
163
|
-
let { process:
|
|
164
|
-
for (let e = 0; e <
|
|
165
|
-
let [t, n] = (
|
|
166
|
-
if (t === "removeTable" && n)
|
|
161
|
+
let f = n.flatMap((e) => e === "--json" ? ["--format", "json"] : [e]), p = a(f);
|
|
162
|
+
if ("error" in p) return console.error(`voltro check: ${p.error}`), 1;
|
|
163
|
+
let { process: m, target: h, rest: v } = s(p.rest), w;
|
|
164
|
+
for (let e = 0; e < v.length; e++) if (v[e] === "--diff") {
|
|
165
|
+
let [t, n] = (v[++e] ?? "").split(":");
|
|
166
|
+
if (t === "removeTable" && n) w = {
|
|
167
167
|
kind: "removeTable",
|
|
168
168
|
name: n
|
|
169
169
|
};
|
|
170
|
-
else if (t === "removeProcedure" && n)
|
|
170
|
+
else if (t === "removeProcedure" && n) w = {
|
|
171
171
|
kind: "removeProcedure",
|
|
172
172
|
tag: n
|
|
173
173
|
};
|
|
174
|
-
else if (t === "removeScope" && n)
|
|
174
|
+
else if (t === "removeScope" && n) w = {
|
|
175
175
|
kind: "removeScope",
|
|
176
176
|
name: n
|
|
177
177
|
};
|
|
178
178
|
else return console.error("voltro check --diff: expected removeTable:<name> | removeProcedure:<tag> | removeScope:<name>"), 1;
|
|
179
179
|
}
|
|
180
|
-
let
|
|
181
|
-
if (
|
|
182
|
-
if (!
|
|
180
|
+
let T = e(v, ["--diff"]) ?? process.cwd(), E = v.includes("--offline"), D = E ? [] : await o(m, h), O, k;
|
|
181
|
+
if (D.length === 0) {
|
|
182
|
+
if (!E && h !== void 0) return console.error("voltro check: --url given but no api reachable there."), 1;
|
|
183
183
|
try {
|
|
184
|
-
let e = await C(d(
|
|
185
|
-
|
|
184
|
+
let e = await C(d(T));
|
|
185
|
+
O = e.manifest, k = e.tables;
|
|
186
186
|
} catch (e) {
|
|
187
187
|
return console.error(`voltro check: could not assemble the graph from source: ${e.message}`), console.error(" Start `voltro dev` to check against a running api instead."), 1;
|
|
188
188
|
}
|
|
189
189
|
} else {
|
|
190
|
-
let e =
|
|
190
|
+
let e = D[0], [t, n] = await Promise.all([c(e, "/_voltro/inspect/manifest"), c(e, "/_voltro/inspect/data/tables")]);
|
|
191
191
|
if (t.kind === "err") return console.error(`voltro check: manifest fetch failed: ${t.error}`), 1;
|
|
192
|
-
|
|
192
|
+
O = t.data, k = n.kind === "ok" ? n.data : { tables: [] };
|
|
193
193
|
}
|
|
194
|
-
let
|
|
194
|
+
let A = x(O, k), j = r(A, w), M = [...l(T).findings.map((e) => ({
|
|
195
195
|
rule: e.rule,
|
|
196
196
|
node: e.file,
|
|
197
197
|
file: e.file,
|
|
198
198
|
breaks: [e.detail],
|
|
199
199
|
fix: e.fix,
|
|
200
200
|
severity: e.severity
|
|
201
|
-
})), ...u(
|
|
201
|
+
})), ...u(T).map((e) => ({
|
|
202
202
|
rule: `page/${e.kind}`,
|
|
203
203
|
node: e.file,
|
|
204
204
|
file: e.file,
|
|
205
205
|
breaks: [e.kind === "suffixed-outside-pages" ? "a page.tsx outside src/pages/ never routes" : "no test beside it"],
|
|
206
206
|
fix: e.kind === "suffixed-outside-pages" ? "move it under src/pages/ into the directory whose route it serves, or rename it — page.tsx is reserved" : "write the test with the file — the name is derivable",
|
|
207
207
|
severity: e.kind === "suffixed-outside-pages" ? "error" : "warn"
|
|
208
|
-
}))],
|
|
208
|
+
}))], N = (await t(T, _(T))).map((e) => ({
|
|
209
209
|
rule: "client/not-browser-safe",
|
|
210
210
|
node: e.file,
|
|
211
211
|
file: e.file,
|
|
212
212
|
breaks: [`reaches the server-only '${e.violation.specifier}' — chain: ${e.violation.chain.join(" → ")}`],
|
|
213
213
|
fix: "move the server-only code behind a *.server.ts, or drop the .client suffix — an unmarked file makes no claim",
|
|
214
214
|
severity: "error"
|
|
215
|
-
})),
|
|
216
|
-
...
|
|
215
|
+
})), P = [
|
|
216
|
+
...j.diagnostics,
|
|
217
|
+
...M,
|
|
218
|
+
...N
|
|
219
|
+
], F = j.ok && !M.some((e) => e.severity === "error") && N.length === 0, I = await y(d(T)), L = I === null ? null : g(A.procedures, I);
|
|
220
|
+
return p.format === "json" ? i(L === null ? {
|
|
217
221
|
...j,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
return f.format === "json" ? i(I === null ? {
|
|
221
|
-
...A,
|
|
222
|
-
ok: P,
|
|
223
|
-
diagnostics: N
|
|
222
|
+
ok: F,
|
|
223
|
+
diagnostics: P
|
|
224
224
|
} : {
|
|
225
|
-
...
|
|
226
|
-
ok:
|
|
227
|
-
diagnostics:
|
|
228
|
-
observed:
|
|
229
|
-
}) : (console.log(S(
|
|
225
|
+
...j,
|
|
226
|
+
ok: F,
|
|
227
|
+
diagnostics: P,
|
|
228
|
+
observed: L
|
|
229
|
+
}) : (console.log(S(P)), L !== null && console.log(b(L)), console.log(F ? "\nvoltro check: OK" : "\nvoltro check: FAILED (errors above)")), +!F;
|
|
230
230
|
};
|
|
231
231
|
//#endregion
|
|
232
232
|
export { w as n, x as r, C as t };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, r as t, t as n } from "./checkCommand-
|
|
1
|
+
import { n as e, r as t, t as n } from "./checkCommand-Bf6oMao4.js";
|
|
2
2
|
export { n as offlineManifest, e as runCheckCommand, t as toInput };
|