@voltro/cli 0.53.0 → 0.54.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 (181) hide show
  1. package/CHANGELOG.md +195 -0
  2. package/dist/{agentsMd-0l980yhL.js → agentsMd-BaLC10Na.js} +110 -82
  3. package/dist/agentsMd-DCY1RSs8.js +2 -0
  4. package/dist/apiBuild-CeUN55uk.js +2 -0
  5. package/dist/{apiBuild-CaPfoWku.js → apiBuild-DTWp0S_q.js} +2 -2
  6. package/dist/bin.js +1 -1
  7. package/dist/{build-D-OnvNMf.js → build-D4ygSbnV.js} +114 -114
  8. package/dist/{checkCommand-C5elt0tW.js → checkCommand-Dg1G7Gwd.js} +6 -6
  9. package/dist/{checkCommand-D2ZduVlh.js → checkCommand-L7DTlpIF.js} +1 -1
  10. package/dist/{cloudCmd-QUXh-b5w.js → cloudCmd-DzKcSYuy.js} +1 -1
  11. package/dist/{codegen-FEk8AZHb.js → codegen-DSLM8Su9.js} +2 -2
  12. package/dist/codegen-DjgxEOnD.js +2 -0
  13. package/dist/codegenCommand-CG_Vx4lc.js +41 -0
  14. package/dist/{codemodRunner-BjtB2lq6.js → codemodRunner-Cd4xkC6u.js} +9 -9
  15. package/dist/{commands-DyxAmhP0.js → commands-6Kzi92Np.js} +96 -73
  16. package/dist/{dashboardCommand-BdKTyT13.js → dashboardCommand-Cq1PWvI1.js} +3 -3
  17. package/dist/{dataCommand-Bab9X7s8.js → dataCommand-DYzW8vkv.js} +3 -3
  18. package/dist/{dbCommand-06O2finM.js → dbCommand-B4NWZtGL.js} +3 -3
  19. package/dist/dbCommand-CSFWs9ev.js +2 -0
  20. package/dist/{dev-C6LGF4iY.js → dev-CmuvUKRq.js} +2236 -2219
  21. package/dist/{dev-GjJWAYo2.js → dev-cKUiZZsB.js} +1 -1
  22. package/dist/{doctorCommand-etMkflRc.js → doctorCommand-DCiFVMtZ.js} +21 -21
  23. package/dist/doctorCommand-J3qu4E0Y.js +2 -0
  24. package/dist/{dormancyCommand-UwZ1AZzB.js → dormancyCommand-w1TrmgYP.js} +1 -1
  25. package/dist/{embeddingsCommand-C70zWHwo.js → embeddingsCommand-CMgPyRTr.js} +1 -1
  26. package/dist/{envCommand-dSyKvRkM.js → envCommand-Cyynmcfa.js} +15 -15
  27. package/dist/{evolveCommand-CG0_ebO5.js → evolveCommand-BwvQ8dVH.js} +2 -2
  28. package/dist/fileConventions-l-RIXbx8.js +36 -0
  29. package/dist/{fileTaxonomy-B7uxipWS.js → fileTaxonomy-CbyMQYx_.js} +37 -37
  30. package/dist/{frameworkTableAssembly-DKx3ba3S.js → frameworkTableAssembly-D7LJuALW.js} +5 -5
  31. package/dist/frameworkTableAssembly-IPD1pUnZ.js +2 -0
  32. package/dist/index.js +2 -2
  33. package/dist/{infoCommand-_53iOc_j.js → infoCommand-DlYlUPqs.js} +1 -1
  34. package/dist/{metaCommands-Cn2oboG4.js → metaCommands-x7RCi2AF.js} +2 -2
  35. package/dist/{migrate-Cko9rswM.js → migrate-BK_Bbx-_.js} +2 -2
  36. package/dist/mobileCommand-D9O6iq3D.js +428 -0
  37. package/dist/mobileCommand-DAum7tsG.js +2 -0
  38. package/dist/{pageConvention-C938S8oC.js → pageConvention-CMpfDN6r.js} +1 -1
  39. package/dist/{privacyCommand-DWTQMC6R.js → privacyCommand-BCa2OoZG.js} +2 -2
  40. package/dist/{probeCommand-DkGGLknv.js → probeCommand-_C0YU207.js} +1 -1
  41. package/dist/{projectScaffold-EzlErR4E.js → projectScaffold-CJfP-xbT.js} +1 -1
  42. package/dist/{projectScaffold-B4dmTlwT.js → projectScaffold-CSN0OzBV.js} +2 -2
  43. package/dist/renderModeScan-43yQ2opo.js +147 -0
  44. package/dist/{renderProfile-CskIgAfn.js → renderProfile-DvrhVJHa.js} +2 -2
  45. package/dist/{runtimeTrace-c0APJz7E.js → runtimeTrace-CGWx1Q6l.js} +1 -1
  46. package/dist/{sdkgen-BiQCgIEr.js → sdkgen-CDGHQUFj.js} +1 -1
  47. package/dist/serveCommand-BiPe8BJm.js +2 -0
  48. package/dist/{serveCommand-CueKQgzl.js → serveCommand-Bje09q1v.js} +708 -708
  49. package/dist/serveEntry.js +1 -1
  50. package/dist/start-B0bnJgxI.js +3 -0
  51. package/dist/{start-ekPan8BT.js → start-Clz-1BHB.js} +511 -504
  52. package/dist/startEntry.js +1 -1
  53. package/dist/{staticCommand-xlSL-IWk.js → staticCommand-ey0kYmOT.js} +1 -1
  54. package/dist/{subcommandNames-DpYs3DXr.js → subcommandNames-CDzfEtKV.js} +3 -3
  55. package/dist/{templates-BR-fb4SP.js → templates-BTWZkJJT.js} +41 -9
  56. package/dist/{test-BWPQcRoB.js → test-D_kW4KMj.js} +1 -1
  57. package/dist/updateCommand-CIoVDKnj.js +2 -0
  58. package/dist/{updateCommand-C_8I8Rzo.js → updateCommand-CRJlAOaM.js} +1 -1
  59. package/dist/{webDev-oczpugbx.js → webDev-DSI9SOhs.js} +1127 -1090
  60. package/dist/{webDev-C7jWJ5dX.js → webDev-DlvZO30c.js} +1 -1
  61. package/dist/{webhooksCommand-4SVPDjKg.js → webhooksCommand-BvzXNHji.js} +1 -1
  62. package/dist/workspaceDeps-RKEkX92S.js +45 -0
  63. package/package.json +19 -19
  64. package/templates/AGENTS.core.md +2 -0
  65. package/templates/AGENTS.md +4 -2
  66. package/templates/agent-docs/_index.md +2 -2
  67. package/templates/agent-docs/_manifest.json +1 -1
  68. package/templates/agent-docs/ai.md +4 -4
  69. package/templates/agent-docs/authentication.md +72 -0
  70. package/templates/agent-docs/cli.md +4 -1
  71. package/templates/agent-docs/data.md +61 -12
  72. package/templates/agent-docs/database/advancedqueries.md +1 -1
  73. package/templates/agent-docs/database/migrations.md +1 -1
  74. package/templates/agent-docs/database/seedsdialects.md +64 -2
  75. package/templates/agent-docs/internationalization.md +2 -0
  76. package/templates/agent-docs/introduction.md +25 -0
  77. package/templates/agent-docs/local-first-mobile.md +139 -41
  78. package/templates/agent-docs/observability.md +4 -2
  79. package/templates/agent-docs/plugins/atlassian.md +2 -2
  80. package/templates/agent-docs/plugins/audit.md +2 -2
  81. package/templates/agent-docs/plugins/billing.md +1 -1
  82. package/templates/agent-docs/plugins/cdc-out.md +8 -3
  83. package/templates/agent-docs/plugins/comments.md +22 -0
  84. package/templates/agent-docs/plugins/presence.md +32 -3
  85. package/templates/agent-docs/plugins/prometheus.md +2 -0
  86. package/templates/agent-docs/plugins/queue.md +47 -4
  87. package/templates/agent-docs/plugins.md +6 -6
  88. package/templates/agent-docs/reference.md +20 -1
  89. package/templates/agent-docs/routing.md +63 -9
  90. package/templates/agent-docs/scheduling.md +1 -1
  91. package/templates/agent-docs/schema-driven-ui.md +12 -1
  92. package/templates/agent-docs/templates/appshells.md +36 -4
  93. package/templates/agent-docs/whats-new.md +109 -135
  94. package/templates/apps/api-ai/package.json +6 -6
  95. package/templates/apps/api-auth/package.json +8 -8
  96. package/templates/apps/api-backend/package.json +7 -7
  97. package/templates/apps/api-backend-deactivation/package.json +7 -7
  98. package/templates/apps/api-backend-mail/package.json +8 -8
  99. package/templates/apps/api-backend-mariadb/package.json +9 -9
  100. package/templates/apps/api-backend-sqlite/package.json +8 -8
  101. package/templates/apps/api-backend-storage/package.json +8 -8
  102. package/templates/apps/api-cms/package.json +9 -9
  103. package/templates/apps/api-collab/README.md +3 -3
  104. package/templates/apps/api-collab/app.config.ts +1 -1
  105. package/templates/apps/api-collab/database/schema.ts +12 -8
  106. package/templates/apps/api-collab/mutations/documents.create.mutation.server.ts +1 -1
  107. package/templates/apps/api-collab/mutations/documents.setBody.mutation.server.ts +1 -1
  108. package/templates/apps/api-collab/mutations/documents.setBody.mutation.ts +1 -1
  109. package/templates/apps/api-collab/package.json +8 -8
  110. package/templates/apps/api-collab/template.json +1 -1
  111. package/templates/apps/api-collab/tests/documents.setBody.test.ts +10 -2
  112. package/templates/apps/api-data-advanced/package.json +8 -8
  113. package/templates/apps/api-durable/package.json +8 -8
  114. package/templates/apps/api-feature-flags/package.json +9 -9
  115. package/templates/apps/api-governance/package.json +8 -8
  116. package/templates/apps/api-kv/package.json +8 -8
  117. package/templates/apps/api-moderation/package.json +8 -8
  118. package/templates/apps/api-observability/package.json +8 -8
  119. package/templates/apps/api-ratelimit/package.json +8 -8
  120. package/templates/apps/api-rbac/package.json +8 -8
  121. package/templates/apps/api-rest/package.json +7 -7
  122. package/templates/apps/api-row-history/package.json +8 -8
  123. package/templates/apps/api-saas/package.json +11 -10
  124. package/templates/apps/api-saas-starter/package.json +10 -10
  125. package/templates/apps/api-search/package.json +8 -8
  126. package/templates/apps/api-status/package.json +8 -8
  127. package/templates/apps/api-webhooks/package.json +9 -9
  128. package/templates/apps/changelog/package.json +7 -6
  129. package/templates/apps/edge-functions/package.json +2 -2
  130. package/templates/apps/frontend-admin/package.json +8 -8
  131. package/templates/apps/frontend-app/package.json +9 -9
  132. package/templates/apps/frontend-auth/package.json +8 -8
  133. package/templates/apps/frontend-blank/package.json +7 -7
  134. package/templates/apps/frontend-cms/package.json +9 -9
  135. package/templates/apps/frontend-collab/README.md +43 -24
  136. package/templates/apps/frontend-collab/app.config.ts +3 -3
  137. package/templates/apps/frontend-collab/package.json +14 -10
  138. package/templates/apps/frontend-collab/src/locales/de.ts +1 -2
  139. package/templates/apps/frontend-collab/src/locales/en.ts +1 -2
  140. package/templates/apps/frontend-collab/src/pages/page.test.tsx +72 -76
  141. package/templates/apps/frontend-collab/src/pages/page.tsx +45 -22
  142. package/templates/apps/frontend-collab/template.json +2 -2
  143. package/templates/apps/frontend-contact/package.json +7 -7
  144. package/templates/apps/frontend-dashboard/package.json +7 -7
  145. package/templates/apps/frontend-docs/package.json +8 -7
  146. package/templates/apps/frontend-i18n/package.json +6 -6
  147. package/templates/apps/frontend-landing/README.md +48 -0
  148. package/templates/apps/frontend-landing/app.config.ts +28 -0
  149. package/templates/apps/frontend-landing/package.json +7 -6
  150. package/templates/apps/frontend-landing/src/assets/hero.jpg +0 -0
  151. package/templates/apps/frontend-landing/src/fonts/Geist-Variable.woff2 +0 -0
  152. package/templates/apps/frontend-landing/src/fonts/LICENSE-Geist.txt +92 -0
  153. package/templates/apps/frontend-landing/src/globals.css +15 -0
  154. package/templates/apps/frontend-landing/src/globals.d.ts +17 -0
  155. package/templates/apps/frontend-landing/src/locales/de.ts +3 -2
  156. package/templates/apps/frontend-landing/src/locales/en.ts +5 -2
  157. package/templates/apps/frontend-landing/src/pages/page.test.tsx +79 -0
  158. package/templates/apps/frontend-landing/src/pages/page.tsx +26 -3
  159. package/templates/apps/frontend-landing/template.json +2 -2
  160. package/templates/apps/frontend-portal/package.json +8 -8
  161. package/templates/apps/frontend-saas/package.json +8 -8
  162. package/templates/apps/frontend-spa/package.json +7 -7
  163. package/templates/apps/frontend-ssr/package.json +7 -7
  164. package/templates/apps/frontend-ssr-api/package.json +8 -8
  165. package/templates/apps/frontend-static-blog/package.json +8 -7
  166. package/templates/apps/frontend-status/package.json +8 -8
  167. package/templates/apps/mobile-app/package.json +12 -11
  168. package/templates/apps/mobile-app/src/lib/deeplinks.ts +29 -17
  169. package/templates/apps/mobile-app/tests/deeplinks.test.ts +16 -0
  170. package/dist/agentsMd-SDDSkyl4.js +0 -2
  171. package/dist/apiBuild-DHtLXYx9.js +0 -2
  172. package/dist/codegen-BWpt3VgF.js +0 -2
  173. package/dist/codegenCommand-BOiWQ5hz.js +0 -137
  174. package/dist/dbCommand-B1EXBC6f.js +0 -2
  175. package/dist/doctorCommand-B0hX0tdz.js +0 -2
  176. package/dist/fileConventions-DASGEmj-.js +0 -35
  177. package/dist/frameworkTableAssembly-C_7Z-rMs.js +0 -2
  178. package/dist/renderModeScan-CUbOeOAg.js +0 -122
  179. package/dist/serveCommand-DsnrVN3U.js +0 -2
  180. package/dist/start-BJzZLbt8.js +0 -3
  181. package/dist/updateCommand-Bqql_rsQ.js +0 -2
@@ -1,11 +1,11 @@
1
- import { yn as e } from "./dev-C6LGF4iY.js";
2
- import { B as t, C as n, Ct as r, Dt as i, Et as a, Mt as o, St as s, V as c, Wt as l, _t as u, a as d, at as f, b as p, bt as m, ct as h, gt as g, it as _, l as v, lt as y, m as b, p as x, qt as S, rt as C, s as w, ut as T, vt as E, wt as D, x as O, xt as k, yt as A, z as j } from "./webDev-oczpugbx.js";
1
+ import { bn as e } from "./dev-CmuvUKRq.js";
2
+ import { B as t, C as n, Ct as r, Dt as i, Et as a, J as o, Kt as s, Nt as c, St as l, Ut as u, V as d, Y as f, _t as p, a as m, b as h, bt as g, dt as _, ft as v, gt as y, l as b, m as x, p as S, q as C, s as w, ut as T, vt as E, wt as D, x as O, xt as k, yt as A, z as j } from "./webDev-DSI9SOhs.js";
3
3
  import { t as M } from "./cliRuntime-Dh7UDinH.js";
4
- import { a as N } from "./renderModeScan-CUbOeOAg.js";
4
+ import { a as N } from "./renderModeScan-43yQ2opo.js";
5
5
  import { o as P } from "./imagePipeline-CBZmjT4i.js";
6
6
  import { a as F } from "./fontPipeline-Tsh8kZfA.js";
7
- import { i as I, o as L, s as R } from "./apiBuild-CaPfoWku.js";
8
- import { n as z } from "./renderProfile-CskIgAfn.js";
7
+ import { i as I, o as L, s as R } from "./apiBuild-DTWp0S_q.js";
8
+ import { n as z } from "./renderProfile-DvrhVJHa.js";
9
9
  import { dirname as B, join as V, resolve as H } from "node:path";
10
10
  import { existsSync as U, promises as W } from "node:fs";
11
11
  import "node:url";
@@ -14,10 +14,10 @@ import { Effect as K } from "effect";
14
14
  import { createRequire as q } from "node:module";
15
15
  //#region src/webStartBundle.ts
16
16
  var J = G({ scope: "voltro:build" }), ee = async (e) => {
17
- let t = await S("esbuild", () => import("esbuild")), n = V(e, ".framework"), r = V(n, "dist-web", "startBundle");
17
+ let t = await s("esbuild", () => import("esbuild")), n = V(e, ".framework"), r = V(n, "dist-web", "startBundle");
18
18
  await W.mkdir(n, { recursive: !0 });
19
- let i = Date.now(), a = V(e, "tsconfig.json"), o = /* @__PURE__ */ new Set(), s = V(n, "startEntry.ts");
20
- await W.writeFile(s, [
19
+ let i = Date.now(), a = V(e, "tsconfig.json"), o = /* @__PURE__ */ new Set(), c = V(n, "startEntry.ts");
20
+ await W.writeFile(c, [
21
21
  "// GENERATED BY `voltro build` — do not edit; overwritten on next build.",
22
22
  "import { runStartCommand as __run, loadDotEnv } from '@voltro/cli/startEntry'",
23
23
  "import { pathToFileURL, fileURLToPath } from 'node:url'",
@@ -41,7 +41,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
41
41
  "}",
42
42
  ""
43
43
  ].join("\n"), "utf8"), await t.build({
44
- entryPoints: [s],
44
+ entryPoints: [c],
45
45
  bundle: !0,
46
46
  format: "esm",
47
47
  platform: "node",
@@ -58,11 +58,11 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
58
58
  alias: I("startEntry"),
59
59
  ...U(a) ? { tsconfig: a } : {}
60
60
  });
61
- let c = await R(r, i);
61
+ let l = await R(r, i);
62
62
  return J.info("web build: start bundle written", {
63
63
  out: V(".framework", "dist-web", "startBundle", "startEntry.js"),
64
64
  ...o.size > 0 ? { externalizedOptionalPeers: [...o].join(", ") } : {},
65
- ...c > 0 ? { prunedStaleChunks: c } : {}
65
+ ...l > 0 ? { prunedStaleChunks: l } : {}
66
66
  }), V(r, "startEntry.js");
67
67
  }, Y = G({ scope: "voltro:build" }), X = () => ({
68
68
  name: "voltro:stub-engine-devtools",
@@ -107,7 +107,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
107
107
  `<meta name="voltro-interactive" content="${n.interactive}" />`,
108
108
  n.stateScript
109
109
  ].filter((e) => e.length > 0).join("\n ");
110
- return r = t(c(r, i), n.documentAttrs), n.interactive === "none" && (r = ne(r)), r;
110
+ return r = t(d(r, i), n.documentAttrs), n.interactive === "none" && (r = ne(r)), r;
111
111
  }, ie = async (e) => {
112
112
  let { page: t, chainEntries: n, pageMod: r, helpers: i } = e, a = n.filter((e) => e.hasLayout);
113
113
  if (a.length === 0) return Y.debug("skip page", {
@@ -118,10 +118,10 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
118
118
  pattern: t.pattern,
119
119
  reason: "renderMode=spa with a dynamic pattern"
120
120
  }), null;
121
- let o = await Promise.all(a.map(e.loadLayout)), s = a.filter((e, t) => typeof o[t]?.loader == "function").map((e) => e.dir || "/");
122
- if (s.length > 0) return Y.info(`spa shell for ${t.pattern} left to on-demand rendering — its layout chain has a loader (${s.join(", ")}), whose output may be per-request`, {
121
+ let s = await Promise.all(a.map(e.loadLayout)), c = a.filter((e, t) => typeof s[t]?.loader == "function").map((e) => e.dir || "/");
122
+ if (c.length > 0) return Y.info(`spa shell for ${t.pattern} left to on-demand rendering — its layout chain has a loader (${c.join(", ")}), whose output may be per-request`, {
123
123
  pattern: t.pattern,
124
- layouts: s
124
+ layouts: c
125
125
  }), null;
126
126
  let { chain: l, segmentLoaderData: u } = await w({
127
127
  entries: n,
@@ -129,7 +129,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
129
129
  loadError: e.loadError,
130
130
  loadPending: e.loadPending,
131
131
  ctx: e.ctx
132
- }), d = {
132
+ }), p = {
133
133
  pattern: t.pattern,
134
134
  Component: r.default,
135
135
  meta: r.meta,
@@ -137,41 +137,41 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
137
137
  Pending: r.Pending,
138
138
  renderMode: "spa",
139
139
  chain: l
140
- }, f = r.interactive ?? "full", p = h({
140
+ }, m = r.interactive ?? "full", h = C({
141
141
  helpers: i,
142
142
  page: t.pattern,
143
- interactive: f,
143
+ interactive: m,
144
144
  delivery: "artefact",
145
145
  renderInput: {
146
- descriptor: d,
146
+ descriptor: p,
147
147
  params: {},
148
148
  pathname: t.pattern,
149
149
  segmentLoaderData: u,
150
150
  ...e.outerWrap ? { outerWrap: e.outerWrap } : {},
151
151
  ...e.locale ? { locale: e.locale } : {}
152
152
  }
153
- }), m = y({
153
+ }), g = o({
154
154
  helpers: i,
155
- prepared: p
156
- }), g = T({
155
+ prepared: h
156
+ }), _ = f({
157
157
  helpers: i,
158
- prepared: p,
159
- meta: m.meta,
160
- interactive: f
161
- }), _ = c(e.shellTemplate.replace("<div id=\"root\"></div>", `<div id="root">${m.body}</div>`), g), v = $(e.distDir, t.pattern);
162
- return await W.mkdir(B(v), { recursive: !0 }), await W.writeFile(v, _, "utf8"), Y.debug("prerendered spa layout shell", { pattern: t.pattern }), {
158
+ prepared: h,
159
+ meta: g.meta,
160
+ interactive: m
161
+ }), v = d(e.shellTemplate.replace("<div id=\"root\"></div>", `<div id="root">${g.body}</div>`), _), y = $(e.distDir, t.pattern);
162
+ return await W.mkdir(B(y), { recursive: !0 }), await W.writeFile(y, v, "utf8"), Y.debug("prerendered spa layout shell", { pattern: t.pattern }), {
163
163
  pattern: t.pattern,
164
- outPath: v
164
+ outPath: y
165
165
  };
166
166
  }, ae = async (e) => {
167
- let { root: t, distDir: n, pages: r, dirs: a, vite: c } = e, l = V(n, "index.html"), d = await W.readFile(l, "utf8"), f = V(n, "_voltro", "shell.html");
168
- await W.mkdir(B(f), { recursive: !0 }), await W.writeFile(f, d, "utf8");
169
- let p = /* @__PURE__ */ new Map();
167
+ let { root: t, distDir: n, pages: r, dirs: a, vite: o } = e, s = V(n, "index.html"), u = await W.readFile(s, "utf8"), d = V(n, "_voltro", "shell.html");
168
+ await W.mkdir(B(d), { recursive: !0 }), await W.writeFile(d, u, "utf8");
169
+ let f = /* @__PURE__ */ new Map();
170
170
  for (let t of e.islandsPlans ?? []) {
171
171
  let e = V(n, "island-shells", `${t.name}.html`);
172
172
  try {
173
- let n = i(await W.readFile(e, "utf8"), d);
174
- await W.writeFile(e, n, "utf8"), p.set(t.pattern, n);
173
+ let n = i(await W.readFile(e, "utf8"), u);
174
+ await W.writeFile(e, n, "utf8"), f.set(t.pattern, n);
175
175
  } catch {
176
176
  Y.warn("islands shell missing — page ships the full entry", {
177
177
  pattern: t.pattern,
@@ -179,7 +179,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
179
179
  });
180
180
  }
181
181
  }
182
- let m = V(t, "node_modules", "@voltro", "ui-shadcn"), h = U(V(m, "package.json")) ? m : null, _ = [...h ? [
182
+ let m = V(t, "node_modules", "@voltro", "ui-shadcn"), h = U(V(m, "package.json")) ? m : null, g = [...h ? [
183
183
  {
184
184
  find: "@voltro/ui-shadcn/tokens.css",
185
185
  replacement: V(h, "src/tokens.css")
@@ -196,13 +196,13 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
196
196
  find: "@voltro/ui-shadcn",
197
197
  replacement: V(h, "src/index.ts")
198
198
  }
199
- ] : [], ...o(t)], y = await c.createServer({
199
+ ] : [], ...c(t)], _ = await o.createServer({
200
200
  root: V(t, ".framework"),
201
201
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
202
202
  plugins: [
203
203
  (await import("@vitejs/plugin-react")).default(),
204
204
  (await import("@tailwindcss/vite")).default(),
205
- s({
205
+ l({
206
206
  root: t,
207
207
  config: P(e.images),
208
208
  urlMode: "build-urls"
@@ -210,7 +210,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
210
210
  X()
211
211
  ],
212
212
  resolve: {
213
- alias: _,
213
+ alias: g,
214
214
  dedupe: [
215
215
  "react",
216
216
  "react-dom",
@@ -226,11 +226,11 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
226
226
  },
227
227
  appType: "custom",
228
228
  logLevel: "warn"
229
- }), b = await y.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: x, renderMetaToHtml: S, renderRouterStateScript: C, isDeferredLoaderResult: T, assertDeferralSupported: E, beginStoreSeeds: D, seedPreloadedSubscription: O, seedPreloadedSubscriptionFailure: k } = b, A, M = /* @__PURE__ */ new Map();
229
+ }), v = await _.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: x, renderMetaToHtml: S, renderRouterStateScript: C, isDeferredLoaderResult: T, assertDeferralSupported: E, beginStoreSeeds: D, seedPreloadedSubscription: O, seedPreloadedSubscriptionFailure: k } = v, A, M = /* @__PURE__ */ new Map();
230
230
  if (e.locales && e.locales.length > 0 && e.defaultLocale) try {
231
- let n = await y.ssrLoadModule("@voltro/i18n");
231
+ let n = await _.ssrLoadModule("@voltro/i18n");
232
232
  try {
233
- A = (await y.ssrLoadModule("@voltro/i18n/server")).resolveTimeZone?.({
233
+ A = (await _.ssrLoadModule("@voltro/i18n/server")).resolveTimeZone?.({
234
234
  configured: e.timeZone ?? null,
235
235
  defaultTimeZone: e.defaultTimeZone ?? null
236
236
  });
@@ -238,7 +238,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
238
238
  let r = n.makeSsgWrap;
239
239
  if (typeof r != "function") throw Error("@voltro/i18n is installed but missing the `makeSsgWrap` export — upgrade @voltro/i18n to a version that ships SSG support.");
240
240
  for (let n of e.locales) try {
241
- let i = await y.ssrLoadModule(V(t, "src", "locales", `${n}.ts`)), a = i.default ?? i;
241
+ let i = await _.ssrLoadModule(V(t, "src", "locales", `${n}.ts`)), a = i.default ?? i;
242
242
  M.set(n, r(n, a, e.defaultLocale));
243
243
  } catch (e) {
244
244
  Y.warn(`i18n catalog missing for locale '${n}' — pages rendered at /${n}/* will crash. Add src/locales/${n}.ts.`, {}, e);
@@ -246,7 +246,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
246
246
  } catch (e) {
247
247
  Y.warn("i18n wrapper unavailable for SSG — pages that call useT() will fail. Check that @voltro/i18n is installed.", {}, e);
248
248
  }
249
- let I = [], L = {}, R = (e) => e.dir === "" ? V(t, "src", "pages") : V(t, "src", "pages", e.dir), z = async (e) => await y.ssrLoadModule(V(R(e), "layout.tsx")), H = async (e) => await y.ssrLoadModule(V(R(e), "error.tsx")), G = async (e) => await y.ssrLoadModule(V(R(e), "loading.tsx")), K = (e, t) => ({
249
+ let I = [], L = {}, R = (e) => e.dir === "" ? V(t, "src", "pages") : V(t, "src", "pages", e.dir), z = async (e) => await _.ssrLoadModule(V(R(e), "layout.tsx")), H = async (e) => await _.ssrLoadModule(V(R(e), "error.tsx")), G = async (e) => await _.ssrLoadModule(V(R(e), "loading.tsx")), K = (e, t) => ({
250
250
  params: e.params,
251
251
  pathname: e.pathname,
252
252
  search: "",
@@ -256,17 +256,17 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
256
256
  isServer: !0
257
257
  });
258
258
  for (let i of r) {
259
- let r = `${V(t, "src", "pages", i.file)}`, o = await y.ssrLoadModule(r), s = N(o, V("src", "pages", i.file));
259
+ let r = `${V(t, "src", "pages", i.file)}`, o = await _.ssrLoadModule(r), s = N(o, V("src", "pages", i.file));
260
260
  L[i.pattern] = s;
261
- let c = s.renderMode, l = v(a, i.dirChain);
261
+ let c = s.renderMode, l = b(a, i.dirChain);
262
262
  if (c === "spa") {
263
263
  let t = await ie({
264
264
  page: i,
265
265
  chainEntries: l,
266
266
  pageMod: o,
267
- shellTemplate: d,
267
+ shellTemplate: u,
268
268
  distDir: n,
269
- helpers: b,
269
+ helpers: v,
270
270
  loadLayout: z,
271
271
  loadError: H,
272
272
  loadPending: G,
@@ -287,7 +287,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
287
287
  });
288
288
  continue;
289
289
  }
290
- let f;
290
+ let d;
291
291
  if (Z(i.pattern)) {
292
292
  if (typeof o.getStaticPaths != "function") {
293
293
  Y.debug("skip page", {
@@ -302,7 +302,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
302
302
  Y.warn("skip page — getStaticPaths did not return an array", { pattern: i.pattern });
303
303
  continue;
304
304
  }
305
- f = e.map((e) => ({
305
+ d = e.map((e) => ({
306
306
  params: e.params,
307
307
  pathname: Q(i.pattern, e.params)
308
308
  }));
@@ -310,28 +310,28 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
310
310
  Y.warn("skip page — getStaticPaths threw", { pattern: i.pattern }, e);
311
311
  continue;
312
312
  }
313
- if (f.length === 0) {
313
+ if (d.length === 0) {
314
314
  Y.debug("skip page", {
315
315
  pattern: i.pattern,
316
316
  reason: "getStaticPaths returned []"
317
317
  });
318
318
  continue;
319
319
  }
320
- } else f = [{
320
+ } else d = [{
321
321
  params: {},
322
322
  pathname: i.pattern
323
323
  }];
324
324
  let m = o.interactive ?? "full";
325
- for (let r of f) {
325
+ for (let r of d) {
326
326
  D();
327
- let a, s, f = new AbortController();
327
+ let a, s, d = new AbortController();
328
328
  try {
329
329
  ({chain: a, segmentLoaderData: s} = await w({
330
330
  entries: l,
331
331
  loadLayout: z,
332
332
  loadError: H,
333
333
  loadPending: G,
334
- ctx: K(r, f.signal)
334
+ ctx: K(r, d.signal)
335
335
  }));
336
336
  } catch (e) {
337
337
  let t = e?._voltroControl;
@@ -351,11 +351,11 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
351
351
  Pending: o.Pending,
352
352
  renderMode: c,
353
353
  chain: a
354
- }, _ = null;
354
+ }, g = null;
355
355
  if (typeof o.loader == "function") {
356
356
  let e = new AbortController();
357
357
  try {
358
- _ = await o.loader({
358
+ g = await o.loader({
359
359
  params: r.params,
360
360
  pathname: r.pathname,
361
361
  search: "",
@@ -373,7 +373,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
373
373
  throw Error(`Static page "${r.pathname}": its loader threw at build time — the page would prerender EMPTY. Fix the loader (cause below) or throw NotFoundError to skip this path.\ncause: ${e instanceof Error ? e.stack ?? e.message : String(e)}`);
374
374
  }
375
375
  }
376
- T(_) && E({
376
+ T(g) && E({
377
377
  page: r.pathname,
378
378
  renderMode: c,
379
379
  interactive: m
@@ -391,24 +391,24 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
391
391
  seed: O,
392
392
  seedFailure: k
393
393
  });
394
- let v = r.params.locale ?? e.defaultLocale ?? "en", y = M.get(v) ?? M.get(e.defaultLocale ?? ""), b = Date.now(), N = y ? (e) => y(e, {
394
+ let _ = r.params.locale ?? e.defaultLocale ?? "en", v = M.get(_) ?? M.get(e.defaultLocale ?? ""), b = Date.now(), N = v ? (e) => v(e, {
395
395
  timeZone: A,
396
396
  renderedAt: b
397
397
  }) : void 0, { html: P, meta: L } = x({
398
398
  descriptor: h,
399
399
  params: r.params,
400
400
  pathname: r.pathname,
401
- loaderData: _,
401
+ loaderData: g,
402
402
  segmentLoaderData: s,
403
403
  ...N ? { outerWrap: N } : {},
404
- locale: v
404
+ locale: _
405
405
  }), R = "";
406
406
  if (typeof o.ogImage == "function") {
407
407
  let i = await o.ogImage({
408
408
  params: r.params,
409
- loaderData: _,
410
- locale: v
411
- }), a = await g(t, e.fonts), { png: s } = await u({
409
+ loaderData: g,
410
+ locale: _
411
+ }), a = await y(t, e.fonts), { png: s } = await p({
412
412
  element: i,
413
413
  fonts: a
414
414
  }), c = `assets/og/${F(s)}.png`;
@@ -416,20 +416,20 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
416
416
  let l = e.siteUrl === void 0 ? `/${c}` : `${e.siteUrl.replace(/\/$/, "")}/${c}`;
417
417
  R = S(L).includes("og:image") ? "" : `<meta property="og:image" content="${l}" /><meta name="twitter:image" content="${l}" /><meta name="twitter:card" content="summary_large_image" />`;
418
418
  }
419
- let U = m === "islands" ? p.get(i.pattern) : void 0;
419
+ let U = m === "islands" ? f.get(i.pattern) : void 0;
420
420
  m === "islands" && U === void 0 && Y.warn("islands page has no per-page entry (non-literal `interactive`?) — shipping the full app entry", { pattern: i.pattern });
421
- let q = re(U ?? d, {
421
+ let q = re(U ?? u, {
422
422
  body: P,
423
423
  metaHtml: S(L) + R,
424
424
  stateScript: C({
425
425
  path: r.pathname,
426
- loaderData: _,
426
+ loaderData: g,
427
427
  segmentLoaderData: s,
428
428
  pageLoaderRan: typeof o.loader == "function"
429
429
  }),
430
430
  interactive: m,
431
431
  documentAttrs: {
432
- lang: v,
432
+ lang: _,
433
433
  ...A === void 0 ? {} : { timeZone: A },
434
434
  renderedAt: b
435
435
  }
@@ -441,7 +441,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
441
441
  });
442
442
  }
443
443
  }
444
- return await y.close(), {
444
+ return await _.close(), {
445
445
  rendered: I,
446
446
  pageMeta: L
447
447
  };
@@ -503,7 +503,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
503
503
  " }),",
504
504
  " outerWrap: (children: unknown) => children,",
505
505
  "})"
506
- ] : [], y = (s ?? []).map((e) => `${JSON.stringify(e.name)}: () => import('${e.pkg}/rpcGroup').then((m) => m.appDescriptors)`).join(", "), b = y === "" ? "" : `, apiDescriptors: { ${y} }`, x = "renderPageToHtml, renderPageToStream, renderMetaToHtml, renderRouterStateScript, renderDeferredRegistryScript, prepareDeferredLoaderData, deferredSettleScript, deferredId, assertDeferralSupported, parseCookieHeader, withStoreSeeds, beginStoreSeeds", S = h || g ? `export const helpers = { ${x}, i18n: { resolve: __resolveI18n }${b} }` : `export const helpers = { ${x}${b} }`, C = [
506
+ ] : [], y = (s ?? []).map((e) => `${JSON.stringify(e.name)}: () => import('${e.pkg}/rpcGroup').then((m) => m.appDescriptors)`).join(", "), b = y === "" ? "" : `, apiDescriptors: { ${y} }`, x = "renderPageToHtml, renderPageToStream, renderMetaToHtml, renderRouterStateScript, renderDeferredRegistryScript, prepareDeferredLoaderData, deferredSettleScript, deferredId, assertDeferralSupported, parseCookieHeader, withStoreSeeds, beginStoreSeeds", S = h || g ? `export const helpers = { ${x}, i18n: { resolve: __resolveI18n, locales: __I18N_SUPPORTED }${b} }` : `export const helpers = { ${x}${b} }`, C = [
507
507
  "// GENERATED BY `voltro build` — do not edit; will be overwritten on next build.",
508
508
  "// Entry for the pre-built SSR bundle. Imported by `voltro start`'s",
509
509
  "// production runtime; bypasses Vite middleware-mode SSR loading.",
@@ -535,13 +535,13 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
535
535
  ].join("\n"), w = V(c, "ssrEntry.ts");
536
536
  return await W.writeFile(w, C, "utf8"), w;
537
537
  }, se = async (e) => {
538
- let { checkRpcGroupFreshness: t } = await import("./codegen-BWpt3VgF.js"), n = await t(e);
538
+ let { checkRpcGroupFreshness: t } = await import("./codegen-DjgxEOnD.js"), n = await t(e);
539
539
  if (n.kind === "fresh") return;
540
540
  n.kind === "stale" && Y.info("rpcGroup.generated.ts is stale — regenerating", {
541
541
  file: n.file,
542
542
  reason: n.reason
543
543
  });
544
- let { regenerateRpcGroup: r } = await import("./codegenCommand-BOiWQ5hz.js"), i = await r(e);
544
+ let { regenerateRpcGroup: r } = await import("./codegenCommand-CG_Vx4lc.js"), i = await r(e);
545
545
  if (i.kind === "refused") {
546
546
  Y.warn("could not regenerate the rpc group — building against what is on disk", { reason: i.reason });
547
547
  return;
@@ -551,12 +551,12 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
551
551
  routes: i.routes
552
552
  });
553
553
  }, ce = async (e) => {
554
- let t = await x(e);
554
+ let t = await S(e, { preferSource: !0 });
555
555
  if (!t) {
556
- let { loadApiConfig: t } = await import("./dev-GjJWAYo2.js"), n = await t(e);
556
+ let { loadApiConfig: t } = await import("./dev-cKUiZZsB.js"), n = await t(e);
557
557
  if (n) {
558
558
  Y.info("building api app", { app: n.name ?? "(unnamed)" }), await se(e);
559
- let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-DHtLXYx9.js");
559
+ let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-CeUN55uk.js");
560
560
  await t(e);
561
561
  try {
562
562
  await r(e);
@@ -577,37 +577,37 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
577
577
  };
578
578
  }
579
579
  Y.info("building web app", { app: t.name ?? "(unnamed)" });
580
- let { resolved: i } = await l({
580
+ let { resolved: i } = await u({
581
581
  rawEnv: t.env,
582
582
  appType: "web",
583
583
  root: e,
584
584
  log: Y,
585
585
  generateTypes: !0
586
- }), c = await b(e, t);
587
- await n(e, t, c, i.publicValues);
588
- let { pages: u } = await O(V(e, "src", "pages")), h = [];
589
- for (let t of u) {
586
+ }), o = await x(e, t);
587
+ await n(e, t, o, i.publicValues);
588
+ let { pages: d } = await O(V(e, "src", "pages")), f = [];
589
+ for (let t of d) {
590
590
  let n = await W.readFile(V(e, "src", "pages", t.file), "utf8").catch(() => ""), r = a(n);
591
- n.includes("<Script") && (r === "none" || r === "islands") && Y.warn(r === "none" ? `page '${t.pattern}' uses <Script> but declares interactive: 'none' — zero-JS strips every script, so it will NEVER load. Remove the <Script>, or raise the page to islands/full.` : `page '${t.pattern}' uses <Script> in its STATIC part (the page file) while interactive: 'islands' — outside an island nothing mounts, so it will NEVER load. Move the <Script> into an *.island.tsx component (it fires when that island hydrates).`), r === "islands" && h.push({
591
+ n.includes("<Script") && (r === "none" || r === "islands") && Y.warn(r === "none" ? `page '${t.pattern}' uses <Script> but declares interactive: 'none' — zero-JS strips every script, so it will NEVER load. Remove the <Script>, or raise the page to islands/full.` : `page '${t.pattern}' uses <Script> in its STATIC part (the page file) while interactive: 'islands' — outside an island nothing mounts, so it will NEVER load. Move the <Script> into an *.island.tsx component (it fires when that island hydrates).`), r === "islands" && f.push({
592
592
  pattern: t.pattern,
593
593
  file: t.file
594
594
  });
595
595
  }
596
- let g = d(c, "../../app.config"), v = await r({
596
+ let p = m(o, "../../app.config"), y = await r({
597
597
  webRoot: e,
598
- pages: h,
598
+ pages: f,
599
599
  headSnippets: D(await W.readFile(V(e, ".framework", "index.html"), "utf8").catch(() => "")),
600
- apiImports: g.imports,
601
- apiEntriesLiteral: `[\n${g.providerEntryLines.join("\n")}\n ]`
600
+ apiImports: p.imports,
601
+ apiEntriesLiteral: `[\n${p.providerEntryLines.join("\n")}\n ]`
602
602
  });
603
- v.length > 0 && Y.info("per-page islands entries", { pages: v.map((e) => `${e.pattern}${e.usesClient ? " (client boot)" : ""}`) });
604
- let { pages: y } = await O(V(e, "src", "pages"));
605
- await f({
603
+ y.length > 0 && Y.info("per-page islands entries", { pages: y.map((e) => `${e.pattern}${e.usesClient ? " (client boot)" : ""}`) });
604
+ let { pages: b } = await O(V(e, "src", "pages"));
605
+ await v({
606
606
  appRoot: e,
607
- pages: y,
607
+ pages: b,
608
608
  mode: "prod"
609
609
  });
610
- let w = V(e, ".framework"), T = V(w, "dist"), j = V(e, "node_modules", "@voltro", "ui-shadcn"), M = U(V(j, "package.json")) ? j : null, N = [...M ? [
610
+ let C = V(e, ".framework"), w = V(C, "dist"), j = V(e, "node_modules", "@voltro", "ui-shadcn"), M = U(V(j, "package.json")) ? j : null, N = [...M ? [
611
611
  {
612
612
  find: "@voltro/ui-shadcn/tokens.css",
613
613
  replacement: V(M, "src/tokens.css")
@@ -624,16 +624,16 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
624
624
  find: "@voltro/ui-shadcn",
625
625
  replacement: V(M, "src/index.ts")
626
626
  }
627
- ] : [], ...o(e)];
627
+ ] : [], ...c(e)];
628
628
  Y.info("running vite build");
629
- let F = await S("vite", () => import("vite")), I = (await import("@vitejs/plugin-react")).default, R = (await import("@tailwindcss/vite")).default;
629
+ let F = await s("vite", () => import("vite")), I = (await import("@vitejs/plugin-react")).default, R = (await import("@tailwindcss/vite")).default;
630
630
  await F.build({
631
- root: w,
631
+ root: C,
632
632
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
633
633
  plugins: [
634
634
  I(),
635
635
  R(),
636
- s({
636
+ l({
637
637
  root: e,
638
638
  config: P(t.images)
639
639
  }),
@@ -654,10 +654,10 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
654
654
  emptyOutDir: !0,
655
655
  rollupOptions: {
656
656
  input: {
657
- index: V(w, "index.html"),
658
- ...Object.fromEntries(v.map((e) => [`island_${e.name}`, V(w, e.htmlFile)]))
657
+ index: V(C, "index.html"),
658
+ ...Object.fromEntries(y.map((e) => [`island_${e.name}`, V(C, e.htmlFile)]))
659
659
  },
660
- output: { manualChunks: p }
660
+ output: { manualChunks: h }
661
661
  }
662
662
  },
663
663
  logLevel: "warn"
@@ -665,7 +665,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
665
665
  let H = V(e, "src", "pages"), { pages: G, dirs: K } = await O(H);
666
666
  if (G.length === 0) return Y.info("no pages found — client-only bundle written", {
667
667
  pagesDir: H,
668
- distDir: T
668
+ distDir: w
669
669
  }), {
670
670
  ran: !0,
671
671
  exitCode: 0
@@ -674,20 +674,20 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
674
674
  let n = await k(e, t.fonts);
675
675
  if (n !== null) {
676
676
  for (let e of n.files) {
677
- let t = V(T, e.fileName);
677
+ let t = V(w, e.fileName);
678
678
  await W.mkdir(B(t), { recursive: !0 }), await W.writeFile(t, Buffer.from(e.bytes));
679
679
  }
680
680
  Y.info(`fonts: ${n.files.length} hashed file(s) into dist/assets/fonts`);
681
681
  }
682
682
  }
683
- m(e);
683
+ g(e);
684
684
  let { rendered: q, pageMeta: J } = await ae({
685
685
  root: e,
686
- distDir: T,
686
+ distDir: w,
687
687
  pages: G,
688
688
  dirs: K,
689
689
  vite: F,
690
- islandsPlans: v,
690
+ islandsPlans: y,
691
691
  ...t.locales ? { locales: t.locales } : {},
692
692
  ...t.defaultLocale ? { defaultLocale: t.defaultLocale } : {},
693
693
  ...t.timeZone ? { timeZone: t.timeZone } : {},
@@ -696,22 +696,22 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
696
696
  ...t.fonts === void 0 ? {} : { fonts: t.fonts },
697
697
  ...t.seo?.siteUrl === void 0 ? {} : { siteUrl: t.seo.siteUrl }
698
698
  });
699
- await E(T), await A(T, t.feeds ?? [], t.seo?.siteUrl), Y.info("generating .framework/ssrEntry.ts"), await oe(e, G, K, t.locales, t.defaultLocale, J, {
699
+ await E(w), await A(w, t.feeds ?? [], t.seo?.siteUrl), Y.info("generating .framework/ssrEntry.ts"), await oe(e, G, K, t.locales, t.defaultLocale, J, {
700
700
  ...t.timeZone ? { timeZone: t.timeZone } : {},
701
701
  ...t.defaultTimeZone ? { defaultTimeZone: t.defaultTimeZone } : {}
702
- }, c.map((e) => ({
702
+ }, o.map((e) => ({
703
703
  name: e.name,
704
704
  pkg: e.pkg
705
705
  }))), Y.info("vite build --ssr → dist/server/");
706
706
  let Z = /* @__PURE__ */ new Set();
707
707
  try {
708
708
  await F.build({
709
- root: w,
709
+ root: C,
710
710
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
711
711
  plugins: [
712
712
  I(),
713
713
  R(),
714
- s({
714
+ l({
715
715
  root: e,
716
716
  config: P(t.images)
717
717
  }),
@@ -749,9 +749,9 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
749
749
  if (U(Q)) {
750
750
  Y.info("precompiling app.config.ts → dist/server/appConfig.js");
751
751
  try {
752
- await (await S("esbuild", () => import("esbuild"))).build({
752
+ await (await s("esbuild", () => import("esbuild"))).build({
753
753
  entryPoints: [Q],
754
- outfile: V(T, "server", "appConfig.js"),
754
+ outfile: V(w, "server", "appConfig.js"),
755
755
  bundle: !0,
756
756
  format: "esm",
757
757
  platform: "node",
@@ -782,7 +782,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
782
782
  });
783
783
  try {
784
784
  let e = process.env.VOLTRO_SEO_NOINDEX !== "1", n = t.seo?.siteUrl, r = t.locales ?? [], i = t.defaultLocale ?? r[0];
785
- if (n && !U(V(T, "sitemap.xml"))) {
785
+ if (n && !U(V(w, "sitemap.xml"))) {
786
786
  let t = new Set(r.filter((e) => e !== i)), a = q.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
787
787
  let n = e.split("/").filter(Boolean)[0];
788
788
  return n === void 0 || !t.has(n);
@@ -792,25 +792,25 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
792
792
  ...r.length > 1 ? { locales: r } : {},
793
793
  ...i ? { defaultLocale: i } : {}
794
794
  });
795
- await W.writeFile(V(T, "sitemap.xml"), o, "utf8"), Y.info("wrote dist/sitemap.xml", {
795
+ await W.writeFile(V(w, "sitemap.xml"), o, "utf8"), Y.info("wrote dist/sitemap.xml", {
796
796
  urls: a.length,
797
797
  indexable: e
798
798
  });
799
799
  }
800
- if (!U(V(T, "robots.txt"))) {
801
- let r = C({
800
+ if (!U(V(w, "robots.txt"))) {
801
+ let r = T({
802
802
  indexable: e,
803
803
  ...e && n ? { sitemapUrl: `${n.replace(/\/$/, "")}/sitemap.xml` } : {},
804
804
  ...t.seo?.disallow ? { disallow: t.seo.disallow } : {}
805
805
  });
806
- await W.writeFile(V(T, "robots.txt"), r, "utf8"), Y.info("wrote dist/robots.txt", { indexable: e });
806
+ await W.writeFile(V(w, "robots.txt"), r, "utf8"), Y.info("wrote dist/robots.txt", { indexable: e });
807
807
  }
808
808
  } catch (e) {
809
809
  Y.warn("SEO artefact generation failed (non-fatal)", {}, e);
810
810
  }
811
811
  try {
812
812
  let t = await z(e);
813
- await W.writeFile(V(T, ".voltro-build.json"), JSON.stringify({
813
+ await W.writeFile(V(w, ".voltro-build.json"), JSON.stringify({
814
814
  version: 1,
815
815
  profile: t
816
816
  }, null, 2), "utf8"), Y.info("wrote deploy profile manifest", {
@@ -821,7 +821,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
821
821
  } catch (e) {
822
822
  Y.warn("could not write .voltro-build.json deploy manifest", {}, e);
823
823
  }
824
- return Y.info("build complete", { distDir: T }), {
824
+ return Y.info("build complete", { distDir: w }), {
825
825
  ran: !0,
826
826
  exitCode: 0
827
827
  };
@@ -833,7 +833,7 @@ var J = G({ scope: "voltro:build" }), ee = async (e) => {
833
833
  return t.ran ? t.exitCode : (yield* K.logError("no web app found at this path", { hint: "looked for app.config.ts with `type: 'web'`" }), 1);
834
834
  }), ue = async (t) => {
835
835
  if (t.includes("--target")) {
836
- let { runSdkBuildCommand: e } = await import("./sdkgen-BiQCgIEr.js");
836
+ let { runSdkBuildCommand: e } = await import("./sdkgen-CDGHQUFj.js");
837
837
  return e(t);
838
838
  }
839
839
  let n = t.find((e) => !e.startsWith("-")) ?? process.cwd(), r = await M(le(n), { scope: "voltro:build" }), i = e(n);