@voltro/cli 0.39.1 → 0.41.0

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 (110) hide show
  1. package/CHANGELOG.md +232 -0
  2. package/dist/agentsMd-Bu_XQgVf.js +2 -0
  3. package/dist/{agentsMd-7zI2h5l9.js → agentsMd-D6yD7IQv.js} +31 -14
  4. package/dist/{apiBuild-D9FB13_2.js → apiBuild-B_iH24qf.js} +2 -2
  5. package/dist/apiBuild-RM5W5YXk.js +2 -0
  6. package/dist/bin.js +1 -1
  7. package/dist/{build-DORV5mLM.js → build-DUdi6F_Q.js} +100 -97
  8. package/dist/{checkCommand-D9qK_gtA.js → checkCommand-B2RWrpWi.js} +1 -1
  9. package/dist/{checkCommand-Bf6oMao4.js → checkCommand-DWL2_PPR.js} +2 -2
  10. package/dist/{cloudCmd-C42gaO8s.js → cloudCmd-F4YJeqM3.js} +1 -1
  11. package/dist/{codegenCommand-CxOyKmc1.js → codegenCommand-DkjoJ30Q.js} +2 -2
  12. package/dist/{codemodRunner-D-jTyvWo.js → codemodRunner-sFuWDETH.js} +520 -357
  13. package/dist/{commands-D6aW_6AR.js → commands-D0VR1yBB.js} +32 -32
  14. package/dist/{dashboardCommand-CwTZh-XZ.js → dashboardCommand-Bro7Jwts.js} +3 -3
  15. package/dist/{dataCommand-Cc9RiLQZ.js → dataCommand-OKC5FscP.js} +183 -172
  16. package/dist/{dbCommand-DSwGv9wS.js → dbCommand-BHRamDsy.js} +441 -414
  17. package/dist/dbCommand-C9iE1pd9.js +2 -0
  18. package/dist/{dev-3mgc8c-H.js → dev-D4l_YOzI.js} +1570 -1570
  19. package/dist/{dev-CjJAasDs.js → dev-DuqBJC7g.js} +1 -1
  20. package/dist/doctorCommand-Bw3V4L1j.js +2 -0
  21. package/dist/{doctorCommand-oLuzc-aC.js → doctorCommand-TmZTAepc.js} +386 -280
  22. package/dist/{dormancyCommand-Bxe4WtHU.js → dormancyCommand-CUKhRmGG.js} +1 -1
  23. package/dist/{embeddingsCommand-CyNQkFIc.js → embeddingsCommand-Db-iQM3l.js} +1 -1
  24. package/dist/{envCommand-CAkSgBbh.js → envCommand-DQ_URZq9.js} +14 -14
  25. package/dist/{evolveCommand-CWhBoe_P.js → evolveCommand-CghRPrGO.js} +2 -2
  26. package/dist/index.js +1 -1
  27. package/dist/{infoCommand-CTo8Jnhq.js → infoCommand-BCs_ZFnl.js} +1 -1
  28. package/dist/{metaCommands-DUYR--Ts.js → metaCommands-CfRLra0s.js} +1 -1
  29. package/dist/{migrate-BnPw2zC8.js → migrate-DLtPv2_D.js} +1 -1
  30. package/dist/{projectScaffold-BEhhHjPr.js → projectScaffold-BIl97_E6.js} +1 -1
  31. package/dist/{projectScaffold-BvhLOrLq.js → projectScaffold-mIX_DpSe.js} +1 -1
  32. package/dist/{runtimeTrace-gNXeLf6H.js → runtimeTrace-jFKvOPBz.js} +1 -1
  33. package/dist/{sdkgen-C8zz10-X.js → sdkgen-COQqHB9V.js} +1 -1
  34. package/dist/{serveCommand-BpK8-m1N.js → serveCommand-Cba_M2Su.js} +656 -656
  35. package/dist/serveCommand-DRbYK646.js +2 -0
  36. package/dist/serveEntry.js +1 -1
  37. package/dist/{start-ft_KzFTd.js → start-BjcuFME_.js} +421 -361
  38. package/dist/{start-BNuTWdRd.js → start-fifc0xpW.js} +1 -1
  39. package/dist/startEntry.js +1 -1
  40. package/dist/updateCommand-B2alql9k.js +2 -0
  41. package/dist/{updateCommand-CHBmCB17.js → updateCommand-HZQVBU3T.js} +1 -1
  42. package/dist/webDev-D6QeXw3P.js +2 -0
  43. package/dist/{webDev-CTpSY-e_.js → webDev-Dk8lFUzf.js} +672 -501
  44. package/dist/{webhooksCommand-EccPZQZ4.js → webhooksCommand-D7ZpH7w0.js} +1 -1
  45. package/package.json +35 -17
  46. package/templates/AGENTS.md +1 -1
  47. package/templates/agent-docs/_index.md +1 -1
  48. package/templates/agent-docs/_manifest.json +1 -1
  49. package/templates/agent-docs/cli.md +6 -0
  50. package/templates/agent-docs/data.md +43 -0
  51. package/templates/agent-docs/plugins/governance.md +8 -0
  52. package/templates/agent-docs/routing.md +153 -0
  53. package/templates/agent-docs/security.md +24 -0
  54. package/templates/agent-docs/whats-new.md +49 -27
  55. package/templates/apps/api-ai/package.json +7 -7
  56. package/templates/apps/api-auth/package.json +8 -8
  57. package/templates/apps/api-backend/package.json +7 -7
  58. package/templates/apps/api-backend-deactivation/package.json +7 -7
  59. package/templates/apps/api-backend-mail/package.json +8 -8
  60. package/templates/apps/api-backend-mariadb/package.json +9 -9
  61. package/templates/apps/api-backend-sqlite/package.json +8 -8
  62. package/templates/apps/api-backend-storage/package.json +8 -8
  63. package/templates/apps/api-cms/package.json +10 -10
  64. package/templates/apps/api-collab/package.json +8 -8
  65. package/templates/apps/api-data-advanced/package.json +8 -8
  66. package/templates/apps/api-durable/package.json +8 -8
  67. package/templates/apps/api-durable/tests/orders.place.test.ts +17 -4
  68. package/templates/apps/api-feature-flags/package.json +9 -9
  69. package/templates/apps/api-governance/package.json +8 -8
  70. package/templates/apps/api-kv/package.json +8 -8
  71. package/templates/apps/api-moderation/package.json +8 -8
  72. package/templates/apps/api-observability/package.json +8 -8
  73. package/templates/apps/api-ratelimit/package.json +8 -8
  74. package/templates/apps/api-rbac/package.json +8 -8
  75. package/templates/apps/api-rest/package.json +7 -7
  76. package/templates/apps/api-saas/package.json +11 -11
  77. package/templates/apps/api-saas-starter/package.json +10 -10
  78. package/templates/apps/api-search/package.json +8 -8
  79. package/templates/apps/api-status/package.json +8 -8
  80. package/templates/apps/api-versioning/package.json +8 -8
  81. package/templates/apps/api-webhooks/package.json +9 -9
  82. package/templates/apps/changelog/package.json +6 -6
  83. package/templates/apps/changelog/src/pages/[slug]/page.test.tsx +8 -1
  84. package/templates/apps/edge-functions/package.json +2 -2
  85. package/templates/apps/frontend-admin/package.json +8 -8
  86. package/templates/apps/frontend-app/package.json +9 -9
  87. package/templates/apps/frontend-auth/package.json +8 -8
  88. package/templates/apps/frontend-blank/package.json +7 -7
  89. package/templates/apps/frontend-cms/package.json +9 -9
  90. package/templates/apps/frontend-collab/package.json +10 -10
  91. package/templates/apps/frontend-contact/package.json +7 -7
  92. package/templates/apps/frontend-dashboard/package.json +7 -7
  93. package/templates/apps/frontend-docs/package.json +7 -7
  94. package/templates/apps/frontend-i18n/package.json +6 -6
  95. package/templates/apps/frontend-landing/package.json +7 -7
  96. package/templates/apps/frontend-portal/package.json +8 -8
  97. package/templates/apps/frontend-saas/package.json +8 -8
  98. package/templates/apps/frontend-spa/package.json +7 -7
  99. package/templates/apps/frontend-ssr/package.json +7 -7
  100. package/templates/apps/frontend-ssr-api/package.json +8 -8
  101. package/templates/apps/frontend-static-blog/package.json +6 -6
  102. package/templates/apps/frontend-status/package.json +8 -8
  103. package/templates/apps/mobile-app/package.json +4 -4
  104. package/dist/agentsMd-BFCXh2gl.js +0 -2
  105. package/dist/apiBuild-BmR_bIxN.js +0 -2
  106. package/dist/dbCommand-DcqEyxju.js +0 -2
  107. package/dist/doctorCommand-Cghssndo.js +0 -2
  108. package/dist/serveCommand-CW-goXvh.js +0 -2
  109. package/dist/updateCommand-6FMU2klq.js +0 -2
  110. package/dist/webDev-id3I5PvG.js +0 -2
@@ -1,8 +1,8 @@
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";
1
+ import { hn as e } from "./dev-D4l_YOzI.js";
2
+ import { $ as t, A as n, F as r, I as i, L as a, Q as o, a as s, b as c, d as l, et as u, f as d, ht as f, k as p, rt as m, s as h, v as g, vt as _, y as v } from "./webDev-Dk8lFUzf.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-D9FB13_2.js";
5
+ import { i as x, o as S, s as C } from "./apiBuild-B_iH24qf.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 h("esbuild", () => import("esbuild")), n = E(e, ".framework"), r = E(n, "dist-web", "startBundle");
15
+ let t = await _("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, [
@@ -96,93 +96,93 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
96
96
  let n = t.replace(/^\//, "").split("/");
97
97
  return E(e, ...n, "index.html");
98
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) => {
99
- let n = e.replace("<div id=\"root\"></div>", `<div id="root">${t.body}</div>`), r = [
99
+ let r = e.replace("<div id=\"root\"></div>", `<div id="root">${t.body}</div>`), i = [
100
100
  t.metaHtml,
101
101
  `<meta name="voltro-interactive" content="${t.interactive}" />`,
102
102
  t.stateScript
103
103
  ].filter((e) => e.length > 0).join("\n ");
104
- return n = a(n, r), t.interactive === "none" && (n = B(n)), n;
104
+ return r = n(r, i), t.interactive === "none" && (r = B(r)), r;
105
105
  }, H = async (e) => {
106
- let { page: n, chainEntries: r, pageMod: o, helpers: s } = e, l = r.filter((e) => e.hasLayout);
107
- if (l.length === 0) return F.debug("skip page", {
108
- pattern: n.pattern,
106
+ let { page: t, chainEntries: o, pageMod: c, helpers: l } = e, u = o.filter((e) => e.hasLayout);
107
+ if (u.length === 0) return F.debug("skip page", {
108
+ pattern: t.pattern,
109
109
  reason: "renderMode=spa with no layout — nothing to shell"
110
110
  }), null;
111
- if (L(n.pattern)) return F.debug("skip page", {
112
- pattern: n.pattern,
111
+ if (L(t.pattern)) return F.debug("skip page", {
112
+ pattern: t.pattern,
113
113
  reason: "renderMode=spa with a dynamic pattern"
114
114
  }), null;
115
- let u = await Promise.all(l.map(e.loadLayout)), d = l.filter((e, t) => typeof u[t]?.loader == "function").map((e) => e.dir || "/");
116
- if (d.length > 0) return F.info(`spa shell for ${n.pattern} left to on-demand rendering — its layout chain has a loader (${d.join(", ")}), whose output may be per-request`, {
117
- pattern: n.pattern,
118
- layouts: d
115
+ let d = await Promise.all(u.map(e.loadLayout)), f = u.filter((e, t) => typeof d[t]?.loader == "function").map((e) => e.dir || "/");
116
+ if (f.length > 0) return F.info(`spa shell for ${t.pattern} left to on-demand rendering — its layout chain has a loader (${f.join(", ")}), whose output may be per-request`, {
117
+ pattern: t.pattern,
118
+ layouts: f
119
119
  }), null;
120
- let { chain: p, segmentLoaderData: m } = await c({
121
- entries: r,
120
+ let { chain: p, segmentLoaderData: m } = await s({
121
+ entries: o,
122
122
  loadLayout: e.loadLayout,
123
123
  loadError: e.loadError,
124
124
  loadPending: e.loadPending,
125
125
  ctx: e.ctx
126
126
  }), h = {
127
- pattern: n.pattern,
128
- Component: o.default,
129
- meta: o.meta,
130
- ErrorBoundary: o.ErrorBoundary,
131
- Pending: o.Pending,
127
+ pattern: t.pattern,
128
+ Component: c.default,
129
+ meta: c.meta,
130
+ ErrorBoundary: c.ErrorBoundary,
131
+ Pending: c.Pending,
132
132
  renderMode: "spa",
133
133
  chain: p
134
- }, g = o.interactive ?? "full", _ = t({
135
- helpers: s,
136
- page: n.pattern,
134
+ }, g = c.interactive ?? "full", _ = r({
135
+ helpers: l,
136
+ page: t.pattern,
137
137
  interactive: g,
138
138
  delivery: "artefact",
139
139
  renderInput: {
140
140
  descriptor: h,
141
141
  params: {},
142
- pathname: n.pattern,
142
+ pathname: t.pattern,
143
143
  segmentLoaderData: m,
144
144
  ...e.outerWrap ? { outerWrap: e.outerWrap } : {},
145
145
  ...e.locale ? { locale: e.locale } : {}
146
146
  }
147
147
  }), v = i({
148
- helpers: s,
148
+ helpers: l,
149
149
  prepared: _
150
- }), y = f({
151
- helpers: s,
150
+ }), y = a({
151
+ helpers: l,
152
152
  prepared: _,
153
153
  meta: v.meta,
154
154
  interactive: g
155
- }), b = a(e.shellTemplate.replace("<div id=\"root\"></div>", `<div id="root">${v.body}</div>`), y), x = z(e.distDir, n.pattern);
156
- return await k.mkdir(T(x), { recursive: !0 }), await k.writeFile(x, b, "utf8"), F.debug("prerendered spa layout shell", { pattern: n.pattern }), {
157
- pattern: n.pattern,
155
+ }), b = n(e.shellTemplate.replace("<div id=\"root\"></div>", `<div id="root">${v.body}</div>`), y), x = z(e.distDir, t.pattern);
156
+ return await k.mkdir(T(x), { recursive: !0 }), await k.writeFile(x, b, "utf8"), F.debug("prerendered spa layout shell", { pattern: t.pattern }), {
157
+ pattern: t.pattern,
158
158
  outPath: x
159
159
  };
160
160
  }, U = async (e) => {
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");
162
- await k.mkdir(T(u), { recursive: !0 }), await k.writeFile(u, l, "utf8");
163
- let d = E(t, "node_modules", "@voltro", "ui-shadcn"), f = O(E(d, "package.json")) ? d : null, m = [...f ? [
161
+ let { root: t, distDir: n, pages: r, dirs: i, vite: a } = e, o = E(n, "index.html"), c = await k.readFile(o, "utf8"), l = E(n, "_voltro", "shell.html");
162
+ await k.mkdir(T(l), { recursive: !0 }), await k.writeFile(l, c, "utf8");
163
+ let u = E(t, "node_modules", "@voltro", "ui-shadcn"), d = O(E(u, "package.json")) ? u : null, f = [...d ? [
164
164
  {
165
165
  find: "@voltro/ui-shadcn/tokens.css",
166
- replacement: E(f, "src/tokens.css")
166
+ replacement: E(d, "src/tokens.css")
167
167
  },
168
168
  {
169
169
  find: "@voltro/ui-shadcn/cn",
170
- replacement: E(f, "src/cn.ts")
170
+ replacement: E(d, "src/cn.ts")
171
171
  },
172
172
  {
173
173
  find: "@voltro/ui-shadcn/brand",
174
- replacement: E(f, "src/brand/voltroLogo.tsx")
174
+ replacement: E(d, "src/brand/voltroLogo.tsx")
175
175
  },
176
176
  {
177
177
  find: "@voltro/ui-shadcn",
178
- replacement: E(f, "src/index.ts")
178
+ replacement: E(d, "src/index.ts")
179
179
  }
180
- ] : [], ...s(t)], h = await a.createServer({
180
+ ] : [], ...m(t)], g = await a.createServer({
181
181
  root: E(t, ".framework"),
182
182
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
183
183
  plugins: [(await import("@vitejs/plugin-react")).default(), (await import("@tailwindcss/vite")).default()],
184
184
  resolve: {
185
- alias: m,
185
+ alias: f,
186
186
  dedupe: [
187
187
  "react",
188
188
  "react-dom",
@@ -198,12 +198,12 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
198
198
  },
199
199
  appType: "custom",
200
200
  logLevel: "warn"
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();
201
+ }), _ = await g.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: v, renderMetaToHtml: y, renderRouterStateScript: x, isDeferredLoaderResult: S, assertDeferralSupported: C, beginStoreSeeds: w, seedPreloadedSubscription: D, seedPreloadedSubscriptionFailure: A } = _, j = /* @__PURE__ */ new Map();
202
202
  if (e.locales && e.locales.length > 0 && e.defaultLocale) try {
203
- let n = (await h.ssrLoadModule("@voltro/i18n")).makeSsgWrap;
203
+ let n = (await g.ssrLoadModule("@voltro/i18n")).makeSsgWrap;
204
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.");
205
205
  for (let r of e.locales) try {
206
- let i = await h.ssrLoadModule(E(t, "src", "locales", `${r}.ts`)), a = i.default ?? i;
206
+ let i = await g.ssrLoadModule(E(t, "src", "locales", `${r}.ts`)), a = i.default ?? i;
207
207
  j.set(r, n(r, a, e.defaultLocale));
208
208
  } catch (e) {
209
209
  F.warn(`i18n catalog missing for locale '${r}' — pages rendered at /${r}/* will crash. Add src/locales/${r}.ts.`, {}, e);
@@ -211,7 +211,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
211
211
  } catch (e) {
212
212
  F.warn("i18n wrapper unavailable for SSG — pages that call useT() will fail. Check that @voltro/i18n is installed.", {}, e);
213
213
  }
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) => ({
214
+ let M = [], N = {}, P = (e) => e.dir === "" ? E(t, "src", "pages") : E(t, "src", "pages", e.dir), I = async (e) => await g.ssrLoadModule(E(P(e), "layout.tsx")), B = async (e) => await g.ssrLoadModule(E(P(e), "error.tsx")), U = async (e) => await g.ssrLoadModule(E(P(e), "loading.tsx")), W = (e, t) => ({
215
215
  params: e.params,
216
216
  pathname: e.pathname,
217
217
  search: "",
@@ -221,17 +221,17 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
221
221
  isServer: !0
222
222
  });
223
223
  for (let a of r) {
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);
224
+ let r = `${E(t, "src", "pages", a.file)}`, o = await g.ssrLoadModule(r), l = b(o, E("src", "pages", a.file));
225
+ N[a.pattern] = l;
226
+ let u = l.renderMode, d = h(i, a.dirChain);
227
227
  if (u === "spa") {
228
228
  let t = await H({
229
229
  page: a,
230
230
  chainEntries: d,
231
231
  pageMod: o,
232
- shellTemplate: l,
232
+ shellTemplate: c,
233
233
  distDir: n,
234
- helpers: g,
234
+ helpers: _,
235
235
  loadLayout: I,
236
236
  loadError: B,
237
237
  loadPending: U,
@@ -289,14 +289,14 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
289
289
  let m = o.interactive ?? "full";
290
290
  for (let t of f) {
291
291
  w();
292
- let r, i, s = new AbortController();
292
+ let r, i, l = new AbortController();
293
293
  try {
294
- ({chain: r, segmentLoaderData: i} = await c({
294
+ ({chain: r, segmentLoaderData: i} = await s({
295
295
  entries: d,
296
296
  loadLayout: I,
297
297
  loadError: B,
298
298
  loadPending: U,
299
- ctx: W(t, s.signal)
299
+ ctx: W(t, l.signal)
300
300
  }));
301
301
  } catch (e) {
302
302
  let n = e?._voltroControl;
@@ -305,12 +305,12 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
305
305
  F.warn("layout loader threw NotFoundError at build time — skipping artifact", { pathname: t.pathname });
306
306
  continue;
307
307
  }
308
- F.warn("layout loader threw, falling back to no layout data", { pathname: t.pathname }, e), {chain: r, segmentLoaderData: i} = await c({
308
+ F.warn("layout loader threw, falling back to no layout data", { pathname: t.pathname }, e), {chain: r, segmentLoaderData: i} = await s({
309
309
  entries: d,
310
310
  loadLayout: async (e) => ({ default: (await I(e)).default }),
311
311
  loadError: B,
312
312
  loadPending: U,
313
- ctx: W(t, s.signal)
313
+ ctx: W(t, l.signal)
314
314
  });
315
315
  }
316
316
  let f = {
@@ -322,13 +322,16 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
322
322
  Pending: o.Pending,
323
323
  renderMode: u,
324
324
  chain: r
325
- }, p = null;
325
+ }, h = null;
326
326
  if (typeof o.loader == "function") {
327
327
  let e = new AbortController();
328
328
  try {
329
- p = await o.loader({
329
+ h = await o.loader({
330
330
  params: t.params,
331
331
  pathname: t.pathname,
332
+ search: "",
333
+ headers: {},
334
+ query: void 0,
332
335
  signal: e.signal,
333
336
  isServer: !0
334
337
  });
@@ -341,7 +344,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
341
344
  F.warn("loader threw, falling back to null", { pathname: t.pathname }, e);
342
345
  }
343
346
  }
344
- S(p) && C({
347
+ S(h) && C({
345
348
  page: t.pathname,
346
349
  renderMode: u,
347
350
  interactive: m
@@ -351,7 +354,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
351
354
  renderMode: u,
352
355
  interactive: m
353
356
  });
354
- await _({
357
+ await p({
355
358
  pageMod: o,
356
359
  params: t.params,
357
360
  query: void 0,
@@ -359,20 +362,20 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
359
362
  seed: D,
360
363
  seedFailure: A
361
364
  });
362
- let h = t.params.locale ?? e.defaultLocale ?? "en", g = j.get(h) ?? j.get(e.defaultLocale ?? ""), { html: b, meta: E } = v({
365
+ let g = t.params.locale ?? e.defaultLocale ?? "en", _ = j.get(g) ?? j.get(e.defaultLocale ?? ""), { html: b, meta: E } = v({
363
366
  descriptor: f,
364
367
  params: t.params,
365
368
  pathname: t.pathname,
366
- loaderData: p,
369
+ loaderData: h,
367
370
  segmentLoaderData: i,
368
- ...g ? { outerWrap: g } : {},
369
- locale: h
370
- }), O = V(l, {
371
+ ..._ ? { outerWrap: _ } : {},
372
+ locale: g
373
+ }), O = V(c, {
371
374
  body: b,
372
375
  metaHtml: y(E),
373
376
  stateScript: x({
374
377
  path: t.pathname,
375
- loaderData: p,
378
+ loaderData: h,
376
379
  segmentLoaderData: i,
377
380
  pageLoaderRan: typeof o.loader == "function"
378
381
  }),
@@ -385,7 +388,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
385
388
  });
386
389
  }
387
390
  }
388
- return await h.close(), {
391
+ return await g.close(), {
389
392
  rendered: M,
390
393
  pageMeta: N
391
394
  };
@@ -474,7 +477,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
474
477
  file: n.file,
475
478
  reason: n.reason
476
479
  });
477
- let { regenerateRpcGroup: r } = await import("./codegenCommand-CxOyKmc1.js"), i = await r(e);
480
+ let { regenerateRpcGroup: r } = await import("./codegenCommand-DkjoJ30Q.js"), i = await r(e);
478
481
  if (i.kind === "refused") {
479
482
  F.warn("could not regenerate the rpc group — building against what is on disk", { reason: i.reason });
480
483
  return;
@@ -484,12 +487,12 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
484
487
  routes: i.routes
485
488
  });
486
489
  }, K = async (e) => {
487
- let t = await u(e);
488
- if (!t) {
489
- let { loadApiConfig: t } = await import("./dev-CjJAasDs.js"), n = await t(e);
490
+ let n = await l(e);
491
+ if (!n) {
492
+ let { loadApiConfig: t } = await import("./dev-DuqBJC7g.js"), n = await t(e);
490
493
  if (n) {
491
494
  F.info("building api app", { app: n.name ?? "(unnamed)" }), await G(e);
492
- let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-BmR_bIxN.js");
495
+ let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-RM5W5YXk.js");
493
496
  await t(e);
494
497
  try {
495
498
  await r(e);
@@ -509,22 +512,22 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
509
512
  exitCode: 0
510
513
  };
511
514
  }
512
- F.info("building web app", { app: t.name ?? "(unnamed)" });
513
- let { resolved: i } = await m({
514
- rawEnv: t.env,
515
+ F.info("building web app", { app: n.name ?? "(unnamed)" });
516
+ let { resolved: r } = await f({
517
+ rawEnv: n.env,
515
518
  appType: "web",
516
519
  root: e,
517
520
  log: F,
518
521
  generateTypes: !0
519
- }), a = await d(e, t);
520
- await l(e, t, a, i.publicValues);
521
- let { pages: c } = await v(E(e, "src", "pages"));
522
- await r({
522
+ }), i = await d(e, n);
523
+ await c(e, n, i, r.publicValues);
524
+ let { pages: a } = await v(E(e, "src", "pages"));
525
+ await u({
523
526
  appRoot: e,
524
- pages: c,
527
+ pages: a,
525
528
  mode: "prod"
526
529
  });
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 ? [
530
+ let s = E(e, ".framework"), p = E(s, "dist"), h = E(e, "node_modules", "@voltro", "ui-shadcn"), y = O(E(h, "package.json")) ? h : null, b = [...y ? [
528
531
  {
529
532
  find: "@voltro/ui-shadcn/tokens.css",
530
533
  replacement: E(y, "src/tokens.css")
@@ -541,11 +544,11 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
541
544
  find: "@voltro/ui-shadcn",
542
545
  replacement: E(y, "src/index.ts")
543
546
  }
544
- ] : [], ...s(e)];
547
+ ] : [], ...m(e)];
545
548
  F.info("running vite build");
546
- let x = await h("vite", () => import("vite")), C = (await import("@vitejs/plugin-react")).default, T = (await import("@tailwindcss/vite")).default;
549
+ let x = await _("vite", () => import("vite")), C = (await import("@vitejs/plugin-react")).default, T = (await import("@tailwindcss/vite")).default;
547
550
  await x.build({
548
- root: f,
551
+ root: s,
549
552
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
550
553
  plugins: [C(), T()],
551
554
  resolve: {
@@ -579,14 +582,14 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
579
582
  pages: A,
580
583
  dirs: j,
581
584
  vite: x,
582
- ...t.locales ? { locales: t.locales } : {},
583
- ...t.defaultLocale ? { defaultLocale: t.defaultLocale } : {}
585
+ ...n.locales ? { locales: n.locales } : {},
586
+ ...n.defaultLocale ? { defaultLocale: n.defaultLocale } : {}
584
587
  });
585
- F.info("generating .framework/ssrEntry.ts"), await W(e, A, j, t.locales, t.defaultLocale, N), F.info("vite build --ssr → dist/server/");
588
+ F.info("generating .framework/ssrEntry.ts"), await W(e, A, j, n.locales, n.defaultLocale, N), F.info("vite build --ssr → dist/server/");
586
589
  let L = /* @__PURE__ */ new Set();
587
590
  try {
588
591
  await x.build({
589
- root: f,
592
+ root: s,
590
593
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
591
594
  plugins: [
592
595
  C(),
@@ -624,7 +627,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
624
627
  if (O(R)) {
625
628
  F.info("precompiling app.config.ts → dist/server/appConfig.js");
626
629
  try {
627
- await (await h("esbuild", () => import("esbuild"))).build({
630
+ await (await _("esbuild", () => import("esbuild"))).build({
628
631
  entryPoints: [R],
629
632
  outfile: E(p, "server", "appConfig.js"),
630
633
  bundle: !0,
@@ -656,12 +659,12 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
656
659
  routes: M.map((e) => e.pattern)
657
660
  });
658
661
  try {
659
- let e = process.env.VOLTRO_SEO_NOINDEX !== "1", r = t.seo?.siteUrl, i = t.locales ?? [], a = t.defaultLocale ?? i[0];
662
+ let e = process.env.VOLTRO_SEO_NOINDEX !== "1", r = n.seo?.siteUrl, i = n.locales ?? [], a = n.defaultLocale ?? i[0];
660
663
  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) => {
662
- let n = e.split("/").filter(Boolean)[0];
663
- return n === void 0 || !t.has(n);
664
- }).filter((e) => !e.includes("[")).map((e) => ({ path: e })), s = n({
664
+ let n = new Set(i.filter((e) => e !== a)), o = M.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
665
+ let t = e.split("/").filter(Boolean)[0];
666
+ return t === void 0 || !n.has(t);
667
+ }).filter((e) => !e.includes("[")).map((e) => ({ path: e })), s = t({
665
668
  siteUrl: r,
666
669
  entries: o,
667
670
  ...i.length > 1 ? { locales: i } : {},
@@ -673,12 +676,12 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
673
676
  });
674
677
  }
675
678
  if (!O(E(p, "robots.txt"))) {
676
- let n = o({
679
+ let t = o({
677
680
  indexable: e,
678
681
  ...e && r ? { sitemapUrl: `${r.replace(/\/$/, "")}/sitemap.xml` } : {},
679
- ...t.seo?.disallow ? { disallow: t.seo.disallow } : {}
682
+ ...n.seo?.disallow ? { disallow: n.seo.disallow } : {}
680
683
  });
681
- await k.writeFile(E(p, "robots.txt"), n, "utf8"), F.info("wrote dist/robots.txt", { indexable: e });
684
+ await k.writeFile(E(p, "robots.txt"), t, "utf8"), F.info("wrote dist/robots.txt", { indexable: e });
682
685
  }
683
686
  } catch (e) {
684
687
  F.warn("SEO artefact generation failed (non-fatal)", {}, e);
@@ -708,7 +711,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
708
711
  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);
709
712
  }), J = async (t) => {
710
713
  if (t.includes("--target")) {
711
- let { runSdkBuildCommand: e } = await import("./sdkgen-C8zz10-X.js");
714
+ let { runSdkBuildCommand: e } = await import("./sdkgen-COQqHB9V.js");
712
715
  return e(t);
713
716
  }
714
717
  let n = t.find((e) => !e.startsWith("-")) ?? process.cwd(), r = await y(q(n), { scope: "voltro:build" }), i = e(n);
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "./checkCommand-Bf6oMao4.js";
1
+ import { n as e, r as t, t as n } from "./checkCommand-DWL2_PPR.js";
2
2
  export { n as offlineManifest, e as runCheckCommand, t as toInput };
@@ -4,7 +4,7 @@ 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-oLuzc-aC.js";
7
+ import { x as u } from "./doctorCommand-TmZTAepc.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,7 +141,7 @@ 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-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 = [
144
+ let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-DuqBJC7g.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)),
@@ -1,7 +1,7 @@
1
1
  import { a as e, t } from "./cliArgs-D4p8n7EE.js";
2
2
  import { a as n, i as r, n as i, r as a, t as o } from "./cloudClient-DWL-Hw_T.js";
3
3
  import { n as s } from "./cliOutput-D1tSBoRM.js";
4
- import { d as c, f as l, o as u } from "./projectScaffold-BvhLOrLq.js";
4
+ import { d as c, f as l, o as u } from "./projectScaffold-mIX_DpSe.js";
5
5
  import { basename as d, join as f, resolve as p } from "node:path";
6
6
  import { promises as m } from "node:fs";
7
7
  import { ansi as h } from "@voltro/logger";
@@ -1,5 +1,5 @@
1
- import { l as e, z as t } from "./dev-3mgc8c-H.js";
2
- import { rt as n } from "./webDev-CTpSY-e_.js";
1
+ import { l as e, z as t } from "./dev-D4l_YOzI.js";
2
+ import { dt as n } from "./webDev-Dk8lFUzf.js";
3
3
  import { r } from "./codegen-CbpGCWLG.js";
4
4
  import { basename as i, join as a, relative as o, resolve as s } from "node:path";
5
5
  import { promises as c } from "node:fs";