@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.
Files changed (173) hide show
  1. package/CHANGELOG.md +276 -0
  2. package/THIRD-PARTY-NOTICES.md +80 -45
  3. package/dist/{addCommand-BNeoeSxe.js → addCommand-C05L9tZh.js} +2 -2
  4. package/dist/addCommand-C3MdJG-a.js +2 -0
  5. package/dist/{agentsMd-mhQMF1bx.js → agentsMd-7zI2h5l9.js} +3 -3
  6. package/dist/agentsMd-BFCXh2gl.js +2 -0
  7. package/dist/apiBuild-BmR_bIxN.js +2 -0
  8. package/dist/{apiBuild-CvacV4zA.js → apiBuild-D9FB13_2.js} +3 -3
  9. package/dist/baselineCommand-CXv680Dc.js +2 -0
  10. package/dist/{baselineCommand-C6NMt-oa.js → baselineCommand-Ck2Xm8M7.js} +18 -18
  11. package/dist/bin.js +1 -1
  12. package/dist/{build-_LoTC1s0.js → build-DORV5mLM.js} +107 -100
  13. package/dist/{capabilitiesCommand-nq_pz5xd.js → capabilitiesCommand-D5gucwYa.js} +8 -8
  14. package/dist/{checkCommand-Pjk5sBl2.js → checkCommand-Bf6oMao4.js} +35 -35
  15. package/dist/{checkCommand-wibtQx-N.js → checkCommand-D9qK_gtA.js} +1 -1
  16. package/dist/{cloudCmd-NQSwe_Qk.js → cloudCmd-C42gaO8s.js} +16 -16
  17. package/dist/{clusterCmd-D5wsCmA_.js → clusterCmd-DrVFCzSj.js} +8 -4
  18. package/dist/{codegen-GYYcdpCg.js → codegen-CbpGCWLG.js} +1 -1
  19. package/dist/codegen-i8QGcHsi.js +2 -0
  20. package/dist/codegenCommand-CxOyKmc1.js +129 -0
  21. package/dist/{codemodRunner-CXgQ-ecJ.js → codemodRunner-D-jTyvWo.js} +622 -551
  22. package/dist/{commands-DaZVi9wi.js → commands-D6aW_6AR.js} +48 -48
  23. package/dist/{connectionConfig-UFlIEiys.js → connectionConfig-Bk9IC7D0.js} +1 -1
  24. package/dist/{dashboardCommand-Dxy_kmoW.js → dashboardCommand-CwTZh-XZ.js} +3 -3
  25. package/dist/{dataCommand-D6-Ha2lf.js → dataCommand-Cc9RiLQZ.js} +14 -11
  26. package/dist/{dbCommand-C4UW8cVN.js → dbCommand-DSwGv9wS.js} +50 -49
  27. package/dist/dbCommand-DcqEyxju.js +2 -0
  28. package/dist/{dev-E7Eo5GHc.js → dev-3mgc8c-H.js} +2260 -2184
  29. package/dist/dev-CjJAasDs.js +3 -0
  30. package/dist/{dialectDriver-CgXnDfec.js → dialectDriver-czCHYpeH.js} +2 -1
  31. package/dist/doctorCommand-Cghssndo.js +2 -0
  32. package/dist/{doctorCommand-gmDyALFL.js → doctorCommand-oLuzc-aC.js} +261 -244
  33. package/dist/{dormancyCommand-CE6wG8lj.js → dormancyCommand-Bxe4WtHU.js} +1 -1
  34. package/dist/{e2eCmd-BRabZww-.js → e2eCmd-uFHig1hV.js} +8 -2
  35. package/dist/{embeddingsCommand-C3uAuf6N.js → embeddingsCommand-CyNQkFIc.js} +6 -6
  36. package/dist/{envCommand-DzuWh8ya.js → envCommand-CAkSgBbh.js} +19 -19
  37. package/dist/{evolveCommand-DPLqcYb2.js → evolveCommand-CWhBoe_P.js} +6 -8
  38. package/dist/frameworkTableAssembly-DgylYh9_.js +2 -0
  39. package/dist/{generateCommand-DbgcUpGw.js → generateCommand-CcyvH2ve.js} +1 -1
  40. package/dist/index.js +1 -1
  41. package/dist/{infoCommand-CmczGj_l.js → infoCommand-CTo8Jnhq.js} +7 -7
  42. package/dist/inspect-B7U7Cl_Z.js +1192 -0
  43. package/dist/inspect-DUze25t0.js +2 -0
  44. package/dist/{inspectCmd-EHFZ9yYu.js → inspectCmd-niF97fAq.js} +5 -5
  45. package/dist/inspectGateHint-BjnFubmH.js +7 -0
  46. package/dist/{logFileSink-C_D2wRN1.js → logFileSink-B4uP8pvf.js} +1 -1
  47. package/dist/{logsCmd-D36xK7Zu.js → logsCmd-B6oNsfaZ.js} +10 -7
  48. package/dist/{manifestBuild-hpPLaGxV.js → manifestBuild-BK42hu0k.js} +1 -1
  49. package/dist/manifestBuild-j0n109tt.js +2 -0
  50. package/dist/{metaCommands-CIoQNlaQ.js → metaCommands-DUYR--Ts.js} +1 -1
  51. package/dist/{migrate-RwgUWXfc.js → migrate-BnPw2zC8.js} +7 -4
  52. package/dist/{packageCommand-Cug_3Ogl.js → packageCommand-9SVyvsSo.js} +3 -2
  53. package/dist/{probeCommand-BPEpwT32.js → probeCommand-C9gazU0H.js} +35 -24
  54. package/dist/{projectScaffold-CxgtJvlb.js → projectScaffold-BEhhHjPr.js} +1 -1
  55. package/dist/{projectScaffold-DDgWbNLe.js → projectScaffold-BvhLOrLq.js} +17 -15
  56. package/dist/{runtimeTrace-6jfznSzr.js → runtimeTrace-gNXeLf6H.js} +1 -1
  57. package/dist/{scheduleManifestCmd-D2x0CTTY.js → scheduleManifestCmd-kmWzrO_w.js} +6 -9
  58. package/dist/{sdkgen-CEJZZQUA.js → sdkgen-C8zz10-X.js} +4 -4
  59. package/dist/{seedRunner-ZmLSqNe2.js → seedRunner-IdHEprqf.js} +1 -4
  60. package/dist/serveCommand-BpK8-m1N.js +1770 -0
  61. package/dist/serveCommand-CW-goXvh.js +2 -0
  62. package/dist/serveEntry.js +2 -2
  63. package/dist/{serverlessCommand-CfJZy6dS.js → serverlessCommand-DbJ7Plg9.js} +3 -3
  64. package/dist/{start-CidwCcjl.js → start-BNuTWdRd.js} +1 -1
  65. package/dist/{start-RCh6qKFe.js → start-ft_KzFTd.js} +257 -254
  66. package/dist/startEntry.js +1 -1
  67. package/dist/{test-DIQ0jlkQ.js → test-CLYXrZ2F.js} +1 -1
  68. package/dist/{tracesCmd-DStmCJPi.js → tracesCmd-DgtgOUdi.js} +7 -4
  69. package/dist/{typecheckCommand-BlsWiCNq.js → typecheckCommand-BuCtT92o.js} +7 -7
  70. package/dist/updateCommand-6FMU2klq.js +2 -0
  71. package/dist/{updateCommand-CmksX7m_.js → updateCommand-CHBmCB17.js} +5 -3
  72. package/dist/{webDev-BKdD7c_a.js → webDev-CTpSY-e_.js} +813 -775
  73. package/dist/webDev-id3I5PvG.js +2 -0
  74. package/dist/{webhookDiscovery-D7VaeMlz.js → webhookDiscovery-CphsQe59.js} +4 -6
  75. package/dist/{webhookDiscovery-CrGAfhIG.js → webhookDiscovery-il9ti-HE.js} +1 -1
  76. package/dist/{webhooksCommand-BHeaF1ZJ.js → webhooksCommand-EccPZQZ4.js} +1 -1
  77. package/package.json +27 -21
  78. package/templates/AGENTS.md +2 -2
  79. package/templates/agent-docs/_index.md +2 -2
  80. package/templates/agent-docs/_manifest.json +2 -2
  81. package/templates/agent-docs/authentication.md +43 -4
  82. package/templates/agent-docs/cli.md +17 -13
  83. package/templates/agent-docs/data.md +44 -1
  84. package/templates/agent-docs/database/migrations.md +2 -2
  85. package/templates/agent-docs/database/seedsdialects.md +2 -2
  86. package/templates/agent-docs/deployment.md +21 -7
  87. package/templates/agent-docs/internationalization.md +10 -3
  88. package/templates/agent-docs/local-first-mobile.md +141 -20
  89. package/templates/agent-docs/plugins/mail.md +1 -1
  90. package/templates/agent-docs/plugins/ratelimit.md +1 -1
  91. package/templates/agent-docs/plugins.md +3 -1
  92. package/templates/agent-docs/releases.md +130 -1
  93. package/templates/agent-docs/routing.md +34 -2
  94. package/templates/agent-docs/templates/apibackends.md +1 -1
  95. package/templates/agent-docs/templates/mobile.md +1 -1
  96. package/templates/agent-docs/whats-new.md +26 -66
  97. package/templates/apps/api-ai/package.json +7 -7
  98. package/templates/apps/api-auth/package.json +8 -8
  99. package/templates/apps/api-backend/package.json +7 -7
  100. package/templates/apps/api-backend-deactivation/package.json +7 -7
  101. package/templates/apps/api-backend-mail/package.json +8 -8
  102. package/templates/apps/api-backend-mariadb/package.json +9 -9
  103. package/templates/apps/api-backend-sqlite/package.json +8 -8
  104. package/templates/apps/api-backend-storage/package.json +8 -8
  105. package/templates/apps/api-cms/package.json +10 -10
  106. package/templates/apps/api-collab/package.json +8 -8
  107. package/templates/apps/api-data-advanced/package.json +8 -8
  108. package/templates/apps/api-durable/package.json +8 -8
  109. package/templates/apps/api-durable/startup/warm.startup.tsx +16 -2
  110. package/templates/apps/api-feature-flags/package.json +9 -9
  111. package/templates/apps/api-governance/package.json +8 -8
  112. package/templates/apps/api-kv/package.json +8 -8
  113. package/templates/apps/api-moderation/package.json +8 -8
  114. package/templates/apps/api-observability/package.json +8 -8
  115. package/templates/apps/api-ratelimit/package.json +8 -8
  116. package/templates/apps/api-rbac/authz.ts +16 -1
  117. package/templates/apps/api-rbac/package.json +8 -8
  118. package/templates/apps/api-rest/package.json +7 -7
  119. package/templates/apps/api-saas/package.json +11 -11
  120. package/templates/apps/api-saas-starter/package.json +10 -10
  121. package/templates/apps/api-search/package.json +8 -8
  122. package/templates/apps/api-status/package.json +8 -8
  123. package/templates/apps/api-versioning/package.json +8 -8
  124. package/templates/apps/api-webhooks/package.json +9 -9
  125. package/templates/apps/changelog/package.json +6 -6
  126. package/templates/apps/edge-functions/package.json +2 -2
  127. package/templates/apps/frontend-admin/package.json +8 -8
  128. package/templates/apps/frontend-app/package.json +9 -9
  129. package/templates/apps/frontend-auth/package.json +8 -8
  130. package/templates/apps/frontend-blank/package.json +7 -7
  131. package/templates/apps/frontend-cms/package.json +9 -9
  132. package/templates/apps/frontend-collab/package.json +10 -10
  133. package/templates/apps/frontend-contact/package.json +7 -7
  134. package/templates/apps/frontend-dashboard/package.json +7 -7
  135. package/templates/apps/frontend-docs/package.json +7 -7
  136. package/templates/apps/frontend-i18n/package.json +6 -6
  137. package/templates/apps/frontend-landing/package.json +7 -7
  138. package/templates/apps/frontend-portal/package.json +8 -8
  139. package/templates/apps/frontend-saas/package.json +8 -8
  140. package/templates/apps/frontend-spa/package.json +7 -7
  141. package/templates/apps/frontend-ssr/package.json +7 -7
  142. package/templates/apps/frontend-ssr-api/package.json +8 -8
  143. package/templates/apps/frontend-static-blog/package.json +6 -6
  144. package/templates/apps/frontend-status/package.json +8 -8
  145. package/templates/apps/mobile-app/README.md +41 -17
  146. package/templates/apps/mobile-app/app.config.ts +1 -1
  147. package/templates/apps/mobile-app/package.json +15 -11
  148. package/templates/apps/mobile-app/src/app/_layout.tsx +44 -13
  149. package/templates/apps/mobile-app/src/app/index.tsx +1 -1
  150. package/templates/apps/mobile-app/src/app/settings.tsx +4 -1
  151. package/templates/apps/mobile-app/src/client.ts +74 -57
  152. package/templates/apps/mobile-app/src/lib/api.ts +4 -4
  153. package/templates/apps/mobile-app/src/lib/deeplinks.ts +6 -6
  154. package/templates/apps/mobile-app/src/persistence.ts +24 -3
  155. package/templates/apps/mobile-app/tsconfig.json +17 -3
  156. package/dist/addCommand-aXSQveak.js +0 -2
  157. package/dist/agentsMd-BTchIZku.js +0 -2
  158. package/dist/apiBuild-ttSDDOGp.js +0 -2
  159. package/dist/baselineCommand-Cfw2Afwm.js +0 -2
  160. package/dist/codegen-uYrrDzQv.js +0 -2
  161. package/dist/codegenCommand-C60m_LCp.js +0 -30
  162. package/dist/dbCommand-CC-qNzpz.js +0 -2
  163. package/dist/dev-CAOoXOkc.js +0 -3
  164. package/dist/doctorCommand-Cjl8Yii8.js +0 -2
  165. package/dist/frameworkTableAssembly-YyVe32Cb.js +0 -2
  166. package/dist/inspect-CjTYzAs_.js +0 -1190
  167. package/dist/inspect-P4pxoMaV.js +0 -2
  168. package/dist/inspectGateHint-BF6608UT.js +0 -4
  169. package/dist/manifestBuild-COkJoyAr.js +0 -2
  170. package/dist/serveCommand-DNRF2nDI.js +0 -2
  171. package/dist/serveCommand-DnY4VS3D.js +0 -1767
  172. package/dist/updateCommand-B0J_T9Vs.js +0 -2
  173. package/dist/webDev-CcJfdSjl2.js +0 -2
@@ -1,8 +1,8 @@
1
- import { pn as e } from "./dev-E7Eo5GHc.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, lt as p, ot as m, s as h, v as g, x as _, y as v } from "./webDev-BKdD7c_a.js";
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-CvacV4zA.js";
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 p("esbuild", () => import("esbuild")), n = E(e, ".framework"), r = E(n, "dist-web", "startBundle");
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) => t === "/" || t === "" ? E(e, "index.html") : E(e, ...t.replace(/^\//, "").split("/"), "index.html"), 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) => {
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, p = [...f ? [
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)], m = await a.createServer({
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: p,
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 m.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: v, renderMetaToHtml: y, renderRouterStateScript: x, isDeferredLoaderResult: S, assertDeferralSupported: C, beginStoreSeeds: w, seedPreloadedSubscription: D } = g, A = /* @__PURE__ */ new Map();
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 m.ssrLoadModule("@voltro/i18n")).makeSsgWrap;
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 m.ssrLoadModule(E(t, "src", "locales", `${r}.ts`)), a = i.default ?? i;
203
- A.set(r, n(r, a, e.defaultLocale));
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 j = [], M = {}, N = (e) => e.dir === "" ? E(t, "src", "pages") : E(t, "src", "pages", e.dir), P = async (e) => await m.ssrLoadModule(E(N(e), "layout.tsx")), I = async (e) => await m.ssrLoadModule(E(N(e), "error.tsx")), B = async (e) => await m.ssrLoadModule(E(N(e), "loading.tsx")), U = (e, t) => ({
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 m.ssrLoadModule(r), s = b(o, E("src", "pages", a.file));
220
- M[a.pattern] = s;
221
- let u = s.renderMode, d = h(i, a.dirChain);
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: P,
231
- loadError: I,
232
- loadPending: B,
233
- ctx: U({
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: A.get(e.defaultLocale ?? ""),
242
+ outerWrap: j.get(e.defaultLocale ?? ""),
238
243
  locale: e.defaultLocale
239
244
  });
240
- t && j.push(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 p = o.interactive ?? "full";
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: P,
292
- loadError: I,
293
- loadPending: B,
294
- ctx: U(t, s.signal)
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 P(e)).default }),
306
- loadError: I,
307
- loadPending: B,
308
- ctx: U(t, s.signal)
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
- }, m = null;
325
+ }, p = null;
321
326
  if (typeof o.loader == "function") {
322
327
  let e = new AbortController();
323
328
  try {
324
- m = await o.loader({
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(m) && C({
344
+ S(p) && C({
339
345
  page: t.pathname,
340
346
  renderMode: u,
341
- interactive: p
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: p
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 = A.get(h) ?? A.get(e.defaultLocale ?? ""), { html: b, meta: E } = v({
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: m,
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: m,
375
+ loaderData: p,
369
376
  segmentLoaderData: i,
370
377
  pageLoaderRan: typeof o.loader == "function"
371
378
  }),
372
- interactive: p
373
- }), M = z(n, t.pathname);
374
- await k.mkdir(T(M), { recursive: !0 }), await k.writeFile(M, O, "utf8"), j.push({
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: M,
383
+ outPath: N,
377
384
  ...E?.noIndex ? { noIndex: !0 } : {}
378
385
  });
379
386
  }
380
387
  }
381
- return await m.close(), {
382
- rendered: j,
383
- pageMeta: M
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-uYrrDzQv.js"), n = await t(e);
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-C60m_LCp.js"), i = await r(e);
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-CAOoXOkc.js"), n = await t(e);
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-ttSDDOGp.js");
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, await d(e, t), i.publicValues);
514
- let { pages: a } = await v(E(e, "src", "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: a,
524
+ pages: c,
518
525
  mode: "prod"
519
526
  });
520
- let c = E(e, ".framework"), f = E(c, "dist"), h = E(e, "node_modules", "@voltro", "ui-shadcn"), _ = O(E(h, "package.json")) ? h : null, y = [..._ ? [
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(_, "src/tokens.css")
530
+ replacement: E(y, "src/tokens.css")
524
531
  },
525
532
  {
526
533
  find: "@voltro/ui-shadcn/cn",
527
- replacement: E(_, "src/cn.ts")
534
+ replacement: E(y, "src/cn.ts")
528
535
  },
529
536
  {
530
537
  find: "@voltro/ui-shadcn/brand",
531
- replacement: E(_, "src/brand/voltroLogo.tsx")
538
+ replacement: E(y, "src/brand/voltroLogo.tsx")
532
539
  },
533
540
  {
534
541
  find: "@voltro/ui-shadcn",
535
- replacement: E(_, "src/index.ts")
542
+ replacement: E(y, "src/index.ts")
536
543
  }
537
544
  ] : [], ...s(e)];
538
545
  F.info("running vite build");
539
- let b = await p("vite", () => import("vite")), x = (await import("@vitejs/plugin-react")).default, C = (await import("@tailwindcss/vite")).default;
540
- await b.build({
541
- root: c,
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: [x(), C()],
550
+ plugins: [C(), T()],
544
551
  resolve: {
545
- alias: y,
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 T = E(e, "src", "pages"), { pages: D, dirs: A } = await v(T);
562
- if (D.length === 0) return F.info("no pages found — client-only bundle written", {
563
- pagesDir: T,
564
- distDir: f
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: j, pageMeta: M } = await U({
576
+ let { rendered: M, pageMeta: N } = await U({
570
577
  root: e,
571
- distDir: f,
572
- pages: D,
573
- dirs: A,
574
- vite: b,
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, D, A, t.locales, t.defaultLocale, M), F.info("vite build --ssr → dist/server/");
579
- let N = /* @__PURE__ */ new Set();
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 b.build({
582
- root: c,
588
+ await x.build({
589
+ root: f,
583
590
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
584
591
  plugins: [
585
- x(),
586
592
  C(),
587
- I(e, N)
593
+ T(),
594
+ I(e, L)
588
595
  ],
589
596
  resolve: {
590
- alias: y,
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
- ...N.size > 0 ? { externalizedOptionalPeers: [...N].join(", ") } : {}
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 L = E(e, "app.config.ts");
617
- if (O(L)) {
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 p("esbuild", () => import("esbuild"))).build({
621
- entryPoints: [L],
622
- outfile: E(f, "server", "appConfig.js"),
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 ${j.length} static route(s)`, {
648
- count: j.length,
649
- routes: j.map((e) => e.pattern)
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(f, "sitemap.xml"))) {
654
- let t = new Set(i.filter((e) => e !== a)), o = j.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
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(f, "sitemap.xml"), s, "utf8"), F.info("wrote dist/sitemap.xml", {
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(f, "robots.txt"))) {
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(f, "robots.txt"), n, "utf8"), F.info("wrote dist/robots.txt", { indexable: 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(f, ".voltro-build.json"), JSON.stringify({
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: f }), {
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-CEJZZQUA.js");
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 = i(r.find((e) => !e.startsWith("-")) ?? process.cwd()), s = p(o);
106
- if (a) return e(s), 0;
107
- if (s.voltroPackages === 0) return console.log(`voltro capabilities — no @voltro packages found under ${o}/node_modules.`), console.log(" Run this from an app root with dependencies installed."), 0;
108
- console.log(`voltro capabilities — ${s.totalSymbols} exported symbols across ${s.voltroPackages} packages`);
109
- for (let e of s.packages) {
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 (s.undocumented.length > 0) {
116
- console.log(""), console.log(` * ${s.undocumented.length} primitive(s)/hook(s) appear nowhere in this project's agent guide:`);
117
- for (let e of s.undocumented) console.log(` ${e}`);
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-GYYcdpCg.js";
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-gmDyALFL.js";
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-CAOoXOkc.js"), { buildRpcEntry: i } = await import("./manifestBuild-COkJoyAr.js"), { buildCapabilityManifest: a } = await import("./inspect-P4pxoMaV.js"), { relative: o } = await import("node:path"), s = await n(await t(e)), c = (t, n, r) => i(t, n, o(e, r)), l = [
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-YyVe32Cb.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) => ({
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 = a(n.flatMap((e) => e === "--json" ? ["--format", "json"] : [e]));
162
- if ("error" in f) return console.error(`voltro check: ${f.error}`), 1;
163
- let { process: p, target: m, rest: h } = s(f.rest), v;
164
- for (let e = 0; e < h.length; e++) if (h[e] === "--diff") {
165
- let [t, n] = (h[++e] ?? "").split(":");
166
- if (t === "removeTable" && n) v = {
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) v = {
170
+ else if (t === "removeProcedure" && n) w = {
171
171
  kind: "removeProcedure",
172
172
  tag: n
173
173
  };
174
- else if (t === "removeScope" && n) v = {
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 w = e(h, ["--diff"]) ?? process.cwd(), T = h.includes("--offline"), E = T ? [] : await o(p, m), D, O;
181
- if (E.length === 0) {
182
- if (!T && m !== void 0) return console.error("voltro check: --url given but no api reachable there."), 1;
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(w));
185
- D = e.manifest, O = e.tables;
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 = E[0], [t, n] = await Promise.all([c(e, "/_voltro/inspect/manifest"), c(e, "/_voltro/inspect/data/tables")]);
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
- D = t.data, O = n.kind === "ok" ? n.data : { tables: [] };
192
+ O = t.data, k = n.kind === "ok" ? n.data : { tables: [] };
193
193
  }
194
- let k = x(D, O), A = r(k, v), j = [...l(w).findings.map((e) => ({
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(w).map((e) => ({
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
- }))], M = (await t(w, _(w))).map((e) => ({
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
- })), N = [
216
- ...A.diagnostics,
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
- ...M
219
- ], P = A.ok && !j.some((e) => e.severity === "error") && M.length === 0, F = await y(d(w)), I = F === null ? null : g(k.procedures, F);
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
- ...A,
226
- ok: P,
227
- diagnostics: N,
228
- observed: I
229
- }) : (console.log(S(N)), I !== null && console.log(b(I)), console.log(P ? "\nvoltro check: OK" : "\nvoltro check: FAILED (errors above)")), +!P;
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-Pjk5sBl2.js";
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 };