@voltro/cli 0.39.0 → 0.40.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 (106) hide show
  1. package/CHANGELOG.md +210 -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-BIyGkym8.js +2 -0
  5. package/dist/{apiBuild-DGalUk9v.js → apiBuild-C8xBEYbL.js} +2 -2
  6. package/dist/bin.js +1 -1
  7. package/dist/{build-CfF6t0UM.js → build-CkhFGnKA.js} +168 -165
  8. package/dist/{checkCommand-CBtynBKW.js → checkCommand-BcXJa2IS.js} +3 -3
  9. package/dist/{checkCommand-BV56Pcc1.js → checkCommand-QbHshOac.js} +1 -1
  10. package/dist/{cloudCmd-C42gaO8s.js → cloudCmd-F4YJeqM3.js} +1 -1
  11. package/dist/{codegenCommand-W7SDdiAQ.js → codegenCommand-DF2OJh3O.js} +2 -2
  12. package/dist/{codemodRunner-D-jTyvWo.js → codemodRunner-BcOvi4A2.js} +103 -0
  13. package/dist/{commands-BD9eBRY3.js → commands-7Z7-HOE3.js} +30 -30
  14. package/dist/{dashboardCommand-7qGylm0F.js → dashboardCommand-CUycH6dR.js} +5 -5
  15. package/dist/{dataCommand-C_F2DYxe.js → dataCommand-By78lscK.js} +1 -1
  16. package/dist/{dev-alhkKoEX.js → dev-D8JSKlBM.js} +1 -1
  17. package/dist/{dev-gqpnzVhI.js → dev-Dh1NuYx1.js} +1569 -1569
  18. package/dist/{doctorCommand-Bvs-BQrM.js → doctorCommand-C-8-Z9D6.js} +55 -42
  19. package/dist/doctorCommand-FhQ7EVYL.js +2 -0
  20. package/dist/{dormancyCommand-B-PPHc9Q.js → dormancyCommand-A79Odglm.js} +1 -1
  21. package/dist/{embeddingsCommand-OKY6XjUf.js → embeddingsCommand-CoiyHfkY.js} +1 -1
  22. package/dist/{envCommand-B1-Zm85H.js → envCommand-B6d0s-jZ.js} +8 -8
  23. package/dist/{evolveCommand-C4-NlFbd.js → evolveCommand-BC5a9lxX.js} +2 -2
  24. package/dist/frameworkTableAssembly-DgylYh9_.js +2 -0
  25. package/dist/index.js +1 -1
  26. package/dist/{infoCommand-CTo8Jnhq.js → infoCommand-ZqSVzJZ4.js} +1 -1
  27. package/dist/{metaCommands-DUYR--Ts.js → metaCommands-CfRLra0s.js} +1 -1
  28. package/dist/{projectScaffold-BEhhHjPr.js → projectScaffold-BIl97_E6.js} +1 -1
  29. package/dist/{projectScaffold-BvhLOrLq.js → projectScaffold-mIX_DpSe.js} +1 -1
  30. package/dist/{runtimeTrace-DzZOCd94.js → runtimeTrace-BslKJjDY.js} +1 -1
  31. package/dist/{sdkgen-C4roLErM.js → sdkgen-DQ8uEmmn.js} +1 -1
  32. package/dist/serveCommand-BmvEQCMS.js +2 -0
  33. package/dist/{serveCommand-B6TATyCj.js → serveCommand-Dqb9Ku1-.js} +657 -657
  34. package/dist/serveEntry.js +1 -1
  35. package/dist/{start-BNuTWdRd.js → start-BA7txHhY.js} +1 -1
  36. package/dist/{start-ft_KzFTd.js → start-dkNYKtgQ.js} +342 -318
  37. package/dist/startEntry.js +1 -1
  38. package/dist/updateCommand-BauSVxPp.js +2 -0
  39. package/dist/{updateCommand-CHBmCB17.js → updateCommand-eoGpZr3E.js} +1 -1
  40. package/dist/webDev-CBbKs4dZ.js +2 -0
  41. package/dist/{webDev-CTpSY-e_.js → webDev-bybjZA0o.js} +240 -186
  42. package/dist/{webhooksCommand-BVvOtZ1B.js → webhooksCommand-DubZWNOx.js} +1 -1
  43. package/package.json +29 -17
  44. package/templates/AGENTS.md +1 -1
  45. package/templates/agent-docs/_index.md +1 -1
  46. package/templates/agent-docs/authentication.md +13 -4
  47. package/templates/agent-docs/data.md +43 -0
  48. package/templates/agent-docs/routing.md +40 -0
  49. package/templates/agent-docs/whats-new.md +91 -157
  50. package/templates/apps/api-ai/package.json +7 -7
  51. package/templates/apps/api-auth/package.json +8 -8
  52. package/templates/apps/api-backend/package.json +7 -7
  53. package/templates/apps/api-backend-deactivation/package.json +7 -7
  54. package/templates/apps/api-backend-mail/package.json +8 -8
  55. package/templates/apps/api-backend-mariadb/package.json +9 -9
  56. package/templates/apps/api-backend-sqlite/package.json +8 -8
  57. package/templates/apps/api-backend-storage/package.json +8 -8
  58. package/templates/apps/api-cms/package.json +10 -10
  59. package/templates/apps/api-collab/package.json +8 -8
  60. package/templates/apps/api-data-advanced/package.json +8 -8
  61. package/templates/apps/api-durable/package.json +8 -8
  62. package/templates/apps/api-durable/startup/warm.startup.tsx +16 -2
  63. package/templates/apps/api-durable/tests/orders.place.test.ts +17 -4
  64. package/templates/apps/api-feature-flags/package.json +9 -9
  65. package/templates/apps/api-governance/package.json +8 -8
  66. package/templates/apps/api-kv/package.json +8 -8
  67. package/templates/apps/api-moderation/package.json +8 -8
  68. package/templates/apps/api-observability/package.json +8 -8
  69. package/templates/apps/api-ratelimit/package.json +8 -8
  70. package/templates/apps/api-rbac/package.json +8 -8
  71. package/templates/apps/api-rest/package.json +7 -7
  72. package/templates/apps/api-saas/package.json +11 -11
  73. package/templates/apps/api-saas-starter/package.json +10 -10
  74. package/templates/apps/api-search/package.json +8 -8
  75. package/templates/apps/api-status/package.json +8 -8
  76. package/templates/apps/api-versioning/package.json +8 -8
  77. package/templates/apps/api-webhooks/package.json +9 -9
  78. package/templates/apps/changelog/package.json +6 -6
  79. package/templates/apps/changelog/src/pages/[slug]/page.test.tsx +8 -1
  80. package/templates/apps/edge-functions/package.json +2 -2
  81. package/templates/apps/frontend-admin/package.json +8 -8
  82. package/templates/apps/frontend-app/package.json +9 -9
  83. package/templates/apps/frontend-auth/package.json +8 -8
  84. package/templates/apps/frontend-blank/package.json +7 -7
  85. package/templates/apps/frontend-cms/package.json +9 -9
  86. package/templates/apps/frontend-collab/package.json +10 -10
  87. package/templates/apps/frontend-contact/package.json +7 -7
  88. package/templates/apps/frontend-dashboard/package.json +7 -7
  89. package/templates/apps/frontend-docs/package.json +7 -7
  90. package/templates/apps/frontend-i18n/package.json +6 -6
  91. package/templates/apps/frontend-landing/package.json +7 -7
  92. package/templates/apps/frontend-portal/package.json +8 -8
  93. package/templates/apps/frontend-saas/package.json +8 -8
  94. package/templates/apps/frontend-spa/package.json +7 -7
  95. package/templates/apps/frontend-ssr/package.json +7 -7
  96. package/templates/apps/frontend-ssr-api/package.json +8 -8
  97. package/templates/apps/frontend-static-blog/package.json +6 -6
  98. package/templates/apps/frontend-status/package.json +8 -8
  99. package/templates/apps/mobile-app/package.json +4 -4
  100. package/dist/agentsMd-BFCXh2gl.js +0 -2
  101. package/dist/apiBuild-2GvK8CUB.js +0 -2
  102. package/dist/doctorCommand-CVXfRrng.js +0 -2
  103. package/dist/frameworkTableAssembly-YyVe32Cb.js +0 -2
  104. package/dist/serveCommand-CNR0gI9V.js +0 -2
  105. package/dist/updateCommand-6FMU2klq.js +0 -2
  106. package/dist/webDev-id3I5PvG.js +0 -2
@@ -4,19 +4,19 @@ import { t as n } from "./bootRefusal-pgvDxlrU.js";
4
4
  import { r } from "./appPort-B_HpJ_ck.js";
5
5
  import { A as i, _ as a, g as o, h as s, m as c, o as l } from "./fileConventions-Cof68_BL.js";
6
6
  import { A as u, D as d, a as f, h as p, j as m, k as h } from "./inspect-B7U7Cl_Z.js";
7
- import { n as g } from "./agentsMd-7zI2h5l9.js";
7
+ import { n as g } from "./agentsMd-D6yD7IQv.js";
8
8
  import { c as _, p as v, t as y } from "./renderModeScan-D7J1B7Kw.js";
9
9
  import { t as b } from "./pageConvention-cEiRxdab.js";
10
10
  import { i as x, n as S, r as C, t as w } from "./runtimeRegistry-DMeKfTHP.js";
11
11
  import { n as T } from "./logFileSink-B4uP8pvf.js";
12
12
  import { basename as E, dirname as D, join as O, relative as k, resolve as A } from "node:path";
13
- import { existsSync as j, promises as M, readFileSync as N, readdirSync as P, statSync as F, unwatchFile as I, watchFile as L } from "node:fs";
14
- import { fileURLToPath as R, pathToFileURL as z } from "node:url";
15
- import { addSink as B, createLogger as V, printReadyBlock as ee } from "@voltro/logger";
16
- import { createRequire as te } from "node:module";
17
- import { homedir as H } from "node:os";
18
- import { currentTraceContext as U, resolveSecret as W } from "@voltro/runtime";
19
- import { FRAMEWORK_ENV_CATALOG as ne, appEnvEntries as G, checkEnvNaming as re, formatEnvErrors as ie, installEnvSnapshot as K, isEnvContract as ae, pluginEnvEntries as oe, renderDotEnvExample as se, resolveEnv as ce } from "@voltro/env";
13
+ import { existsSync as j, promises as M, readFileSync as N, readdirSync as P, statSync as F, unwatchFile as ee, watchFile as I } from "node:fs";
14
+ import { fileURLToPath as L, pathToFileURL as R } from "node:url";
15
+ import { addSink as te, createLogger as z, printReadyBlock as B } from "@voltro/logger";
16
+ import { createRequire as V } from "node:module";
17
+ import { homedir as ne } from "node:os";
18
+ import { currentTraceContext as H, resolveSecret as U } from "@voltro/runtime";
19
+ import { FRAMEWORK_ENV_CATALOG as W, appEnvEntries as re, checkEnvNaming as G, formatEnvErrors as ie, installEnvSnapshot as K, isEnvContract as ae, pluginEnvEntries as oe, renderDotEnvExample as se, resolveEnv as ce } from "@voltro/env";
20
20
  import { __installPublicEnv as le } from "@voltro/env/public";
21
21
  import { mkdir as ue, writeFile as de } from "node:fs/promises";
22
22
  import { createHash as q } from "node:crypto";
@@ -68,8 +68,8 @@ __installPublicEnv(publicEnvValues)
68
68
  }, Se = async (e) => {
69
69
  let t = ae(e.rawEnv) ? e.rawEnv : void 0, n = await ce({
70
70
  contract: t,
71
- resolveSecret: W
72
- }), r = [...n.errors, ...re(t, e.appType)];
71
+ resolveSecret: U
72
+ }), r = [...n.errors, ...G(t, e.appType)];
73
73
  if (r.length > 0) throw Error(ie(r));
74
74
  K(n.values), e.appType === "web" && le(n.publicValues);
75
75
  let i = t ? Object.keys(t.vars).length : 0;
@@ -88,7 +88,7 @@ __installPublicEnv(publicEnvValues)
88
88
  contract: t
89
89
  };
90
90
  }, Ce = (e) => {
91
- let t = G(e.contract), n = (e.plugins ?? []).flatMap((e) => oe(e.name, e.declaredEnv)), r = e.includeFramework === !1 ? [] : ne, i = /* @__PURE__ */ new Set(), a = [];
91
+ let t = re(e.contract), n = (e.plugins ?? []).flatMap((e) => oe(e.name, e.declaredEnv)), r = e.includeFramework === !1 ? [] : W, i = /* @__PURE__ */ new Set(), a = [];
92
92
  for (let e of [
93
93
  ...t,
94
94
  ...n,
@@ -179,14 +179,14 @@ __installPublicEnv(publicEnvValues)
179
179
  });
180
180
  }));
181
181
  };
182
- for (let t of e) L(t, { interval: Oe }, (e, n) => {
182
+ for (let t of e) I(t, { interval: Oe }, (e, n) => {
183
183
  e.mtimeMs !== n.mtimeMs && a(t);
184
184
  });
185
185
  return t.info("watching .env files for changes", {
186
186
  files: e.map(r),
187
187
  intervalMs: Oe
188
188
  }), () => {
189
- for (let t of e) I(t);
189
+ for (let t of e) ee(t);
190
190
  };
191
191
  }, Ae = [{
192
192
  host: "127.0.0.1",
@@ -417,7 +417,7 @@ __installPublicEnv(publicEnvValues)
417
417
  behind: n.behind.map((e) => `${e.pkg}@${e.version}`),
418
418
  fix: "the framework ships in lockstep; bump the listed packages and reinstall"
419
419
  });
420
- }, Ke = V({ scope: "vite" }), qe = /\x1b\[[0-9;]*m/g, Je = /^\s*\[?vite\]?\s*(\([a-z-]+\)\s*)?/, Ye = (e) => e.replace(qe, "").replace(Je, "").trim(), Xe = /proxy error/i, Ze = [
420
+ }, Ke = z({ scope: "vite" }), qe = /\x1b\[[0-9;]*m/g, Je = /^\s*\[?vite\]?\s*(\([a-z-]+\)\s*)?/, Ye = (e) => e.replace(qe, "").replace(Je, "").trim(), Xe = /proxy error/i, Ze = [
421
421
  "ECONNREFUSED",
422
422
  "ECONNRESET",
423
423
  "ECONNABORTED",
@@ -780,7 +780,7 @@ __installPublicEnv(publicEnvValues)
780
780
  if (Bt(t[i], a), !r) {
781
781
  r = !0;
782
782
  try {
783
- let t = a.length > 0 ? Lt(a[0]) : "", r = t.length > 500 ? t.slice(0, 500) + "…" : t, o = U();
783
+ let t = a.length > 0 ? Lt(a[0]) : "", r = t.length > 500 ? t.slice(0, 500) + "…" : t, o = H();
784
784
  e.emit("log", {
785
785
  level: i,
786
786
  message: r,
@@ -807,7 +807,7 @@ __installPublicEnv(publicEnvValues)
807
807
  }
808
808
  };
809
809
  console.log = i("log"), console.info = i("info"), console.warn = i("warn"), console.error = i("error"), console.debug = i("debug");
810
- let a = B((t) => {
810
+ let a = te((t) => {
811
811
  if (!r) {
812
812
  r = !0;
813
813
  try {
@@ -818,7 +818,7 @@ __installPublicEnv(publicEnvValues)
818
818
  argsCount: 1,
819
819
  ...t.scope === void 0 ? {} : { scope: t.scope }
820
820
  });
821
- let a = U(), o = a !== void 0 && t.fields.traceId === void 0 ? {
821
+ let a = H(), o = a !== void 0 && t.fields.traceId === void 0 ? {
822
822
  ...t.fields,
823
823
  traceId: a.traceId
824
824
  } : t.fields;
@@ -845,7 +845,7 @@ __installPublicEnv(publicEnvValues)
845
845
  case "debug": return "debug";
846
846
  default: return "info";
847
847
  }
848
- }, qt = V({ scope: "client" }), Jt = (e, t) => {
848
+ }, qt = z({ scope: "client" }), Jt = (e, t) => {
849
849
  let n;
850
850
  try {
851
851
  n = JSON.parse(e);
@@ -1016,7 +1016,7 @@ __installPublicEnv(publicEnvValues)
1016
1016
  let e = {
1017
1017
  warn: console.warn.bind(console),
1018
1018
  error: console.error.bind(console)
1019
- }, t = V({ scope: "babel" }), n = !1, r = (r) => (...i) => {
1019
+ }, t = z({ scope: "babel" }), n = !1, r = (r) => (...i) => {
1020
1020
  if (!n) {
1021
1021
  for (let e of cn) if (e.match(i[0])) {
1022
1022
  n = !0;
@@ -1166,7 +1166,7 @@ import {
1166
1166
  map: null
1167
1167
  };
1168
1168
  }
1169
- }), xn = V({ scope: "voltro:dashboard" }), Sn = te(import.meta.url), Cn = 5179, wn = (e) => {
1169
+ }), xn = z({ scope: "voltro:dashboard" }), Sn = V(import.meta.url), Cn = 5179, wn = (e) => {
1170
1170
  let t = process.env.VOLTRO_DASHBOARD_PATH;
1171
1171
  if (t && j(O(A(t), "app.config.ts"))) return A(t);
1172
1172
  try {
@@ -1190,7 +1190,7 @@ import {
1190
1190
  a || (a = !0, i.destroy(), r(e));
1191
1191
  };
1192
1192
  i.once("connect", () => o(!0)), i.once("error", () => o(!1)), setTimeout(() => o(!1), n);
1193
- }), Dn = () => !!(process.env.VOLTRO_DASHBOARD === "off" || process.argv.includes("--disable-dashboard")), On = () => process.env[Tn] === "1", kn = () => process.stdout.isTTY === !0, An = O(H(), ".voltro", "dashboard-launch.lock"), jn = 1e4, Mn = async () => {
1193
+ }), Dn = () => !!(process.env.VOLTRO_DASHBOARD === "off" || process.argv.includes("--disable-dashboard")), On = () => process.env[Tn] === "1", kn = () => process.stdout.isTTY === !0, An = O(ne(), ".voltro", "dashboard-launch.lock"), jn = 1e4, Mn = async () => {
1194
1194
  try {
1195
1195
  await M.mkdir(D(An), { recursive: !0 });
1196
1196
  let e = await M.open(An, "wx");
@@ -1535,23 +1535,66 @@ import {
1535
1535
  let t = [];
1536
1536
  for (let n of [...e].sort()) t.push(await fr(n));
1537
1537
  return q("sha1").update(t.join("\0")).digest("hex");
1538
- }, Z = V({ scope: "voltro:dev:web" }), mr = V({ scope: "vite" }), hr = await (async () => {
1538
+ }, mr = (e) => {
1539
+ let t = {};
1540
+ if (!e) return t;
1541
+ for (let n of e.split(";")) {
1542
+ let e = n.indexOf("=");
1543
+ if (e <= 0) continue;
1544
+ let r = n.slice(0, e).trim();
1545
+ if (r !== "") try {
1546
+ t[r] = decodeURIComponent(n.slice(e + 1).trim());
1547
+ } catch {
1548
+ t[r] = n.slice(e + 1).trim();
1549
+ }
1550
+ }
1551
+ return t;
1552
+ }, hr = (e) => {
1553
+ let t = [`${e.name}=${encodeURIComponent(e.value)}`];
1554
+ return t.push(`Path=${e.path ?? "/"}`), e.maxAge !== void 0 && t.push(`Max-Age=${Math.trunc(e.maxAge)}`), e.httpOnly !== !1 && t.push("HttpOnly"), e.secure === !0 && t.push("Secure"), t.push(`SameSite=${e.sameSite ?? "lax"}`), t.join("; ");
1555
+ }, gr = async (e, t = (e) => import(R(e).href)) => {
1556
+ for (let n of ["middleware.ts", "middleware.tsx"]) try {
1557
+ let r = (await t(O(e, n)))?.default;
1558
+ if (typeof r == "function") return r;
1559
+ if (r !== void 0) throw Error(`${n} must default-export a function; got ${typeof r}. It receives the request and returns \`{ headers?, setCookies? }\`.`);
1560
+ } catch (e) {
1561
+ let t = e?.code;
1562
+ if (t === "ERR_MODULE_NOT_FOUND" || t === "MODULE_NOT_FOUND") continue;
1563
+ throw e;
1564
+ }
1565
+ }, _r = async (e, t) => {
1566
+ if (e === void 0) return {
1567
+ headers: t.headers,
1568
+ setCookies: []
1569
+ };
1570
+ let n = await e(t);
1571
+ return n ? {
1572
+ headers: n.headers ? {
1573
+ ...t.headers,
1574
+ ...n.headers
1575
+ } : t.headers,
1576
+ setCookies: n.setCookies ?? []
1577
+ } : {
1578
+ headers: t.headers,
1579
+ setCookies: []
1580
+ };
1581
+ }, Z = z({ scope: "voltro:dev:web" }), vr = z({ scope: "vite" }), yr = await (async () => {
1539
1582
  try {
1540
- let e = O(D(R(import.meta.url)), "..", "package.json"), t = await M.readFile(e, "utf8");
1583
+ let e = O(D(L(import.meta.url)), "..", "package.json"), t = await M.readFile(e, "utf8");
1541
1584
  return JSON.parse(t).version ?? "0.0.0";
1542
1585
  } catch {
1543
1586
  return "0.0.0";
1544
1587
  }
1545
- })(), gr = async () => {
1588
+ })(), br = async () => {
1546
1589
  try {
1547
- let e = D(R(import.meta.url)), t = A(e, "..", "..", "devtools");
1590
+ let e = D(L(import.meta.url)), t = A(e, "..", "..", "devtools");
1548
1591
  if (j(O(t, "package.json"))) return t;
1549
1592
  let n = A(e, "..", "..", "..", "devtools");
1550
1593
  return j(O(n, "package.json")) ? n : null;
1551
1594
  } catch {
1552
1595
  return null;
1553
1596
  }
1554
- }, _r = (e, t) => e.disableDevtools || !t ? [] : [
1597
+ }, xr = (e, t) => e.disableDevtools || !t ? [] : [
1555
1598
  "",
1556
1599
  "// Dev-only in-page devtools overlay. The `import.meta.env.DEV` guard is a",
1557
1600
  "// compile-time constant, so prod builds strip this whole `if` block — the",
@@ -1561,12 +1604,12 @@ import {
1561
1604
  " await import('@voltro/devtools/styles.css')",
1562
1605
  " Devtools = (await import('@voltro/devtools')).VoltroDevtools",
1563
1606
  "}"
1564
- ], vr = (e, t) => e.disableDevtools || !t ? [] : [" ...(Devtools ? { Devtools } : {}),"], yr = (e) => e.sentry ? ["import { initSentryBrowser } from '@voltro/plugin-sentry/web'"] : [], br = (e) => e.sentry ? [
1607
+ ], Sr = (e, t) => e.disableDevtools || !t ? [] : [" ...(Devtools ? { Devtools } : {}),"], Cr = (e) => e.sentry ? ["import { initSentryBrowser } from '@voltro/plugin-sentry/web'"] : [], wr = (e) => e.sentry ? [
1565
1608
  "",
1566
1609
  "// Browser-side Sentry (frontend half of the deep integration). Errors +",
1567
1610
  "// browser rpc spans flow to Sentry, sharing the server transactions' trace.",
1568
1611
  `await initSentryBrowser(${JSON.stringify(e.sentry)})`
1569
- ] : [], xr = (e) => e.env ? ["import './env.public'"] : [], Sr = (e) => {
1612
+ ] : [], Tr = (e) => e.env ? ["import './env.public'"] : [], Er = (e) => {
1570
1613
  let t = [], n = A(e);
1571
1614
  for (;;) {
1572
1615
  j(O(n, "pnpm-workspace.yaml")) && t.push(n);
@@ -1575,14 +1618,14 @@ import {
1575
1618
  n = e;
1576
1619
  }
1577
1620
  return t;
1578
- }, Cr = b, wr = (e) => {
1621
+ }, Dr = b, Or = (e) => {
1579
1622
  if (/\/node_modules\/(?:\.pnpm\/[^/]+\/node_modules\/)?(?:react|react-dom|scheduler)\//.test(e)) return "react";
1580
1623
  let t = /\/([^/]+)\.island\.tsx?$/.exec(e);
1581
1624
  if (t) return `island-${t[1]}`;
1582
- }, Tr = /export\s+(?:async\s+)?(?:const|function|let|var)\s+loader\b/, Er = (e) => e.startsWith("(") && e.endsWith(")"), Dr = (e) => e.filter((e) => !Er(e)), Or = (e) => {
1583
- let t = e.replace(c, "").split("/").filter(Boolean).filter((e) => !Er(e));
1625
+ }, kr = /export\s+(?:async\s+)?(?:const|function|let|var)\s+loader\b/, Ar = (e) => e.startsWith("(") && e.endsWith(")"), jr = (e) => e.filter((e) => !Ar(e)), Mr = (e) => {
1626
+ let t = e.replace(c, "").split("/").filter(Boolean).filter((e) => !Ar(e));
1584
1627
  return t.length === 0 ? "/" : "/" + t.join("/");
1585
- }, kr = (e) => `${e.replace(c, "").split("/").filter(Boolean).map((e) => e.replace(/[()]/g, "").replace(/\[\.\.\./g, "_rest_").replace(/[[\]]/g, "_")).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("").replace(/[^A-Za-z0-9_]/g, "_") || "Index"}Page`, Q = (e, t) => e === "" ? `Root${t}` : `${e.split("/").filter(Boolean).map((e) => e.replace(/[()]/g, "").replace(/\[\.\.\./g, "_rest_").replace(/[[\]]/g, "_")).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("").replace(/[^A-Za-z0-9_]/g, "_") || "Root"}${t}`, $ = async (e) => {
1628
+ }, Nr = (e) => `${e.replace(c, "").split("/").filter(Boolean).map((e) => e.replace(/[()]/g, "").replace(/\[\.\.\./g, "_rest_").replace(/[[\]]/g, "_")).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("").replace(/[^A-Za-z0-9_]/g, "_") || "Index"}Page`, Q = (e, t) => e === "" ? `Root${t}` : `${e.split("/").filter(Boolean).map((e) => e.replace(/[()]/g, "").replace(/\[\.\.\./g, "_rest_").replace(/[[\]]/g, "_")).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("").replace(/[^A-Za-z0-9_]/g, "_") || "Root"}${t}`, $ = async (e) => {
1586
1629
  let t = [], n = [], r = async (e, i) => {
1587
1630
  let a = [];
1588
1631
  try {
@@ -1590,17 +1633,17 @@ import {
1590
1633
  } catch {
1591
1634
  return;
1592
1635
  }
1593
- let o = a.filter((e) => e.isDirectory()).map((e) => e.name).sort(), l = a.filter((e) => e.isFile() && e.name.endsWith(".tsx") && !Cr(e.name)).map((e) => e.name).sort(), u = new Set(l), d = i.join("/");
1636
+ let o = a.filter((e) => e.isDirectory()).map((e) => e.name).sort(), l = a.filter((e) => e.isFile() && e.name.endsWith(".tsx") && !Dr(e.name)).map((e) => e.name).sort(), u = new Set(l), d = i.join("/");
1594
1637
  if (l.some((e) => s.has(e))) {
1595
1638
  let t = u.has("layout.tsx"), r = !1;
1596
1639
  if (t) try {
1597
1640
  let t = await M.readFile(O(e, "layout.tsx"), "utf8");
1598
- r = Tr.test(t);
1641
+ r = kr.test(t);
1599
1642
  } catch {}
1600
1643
  n.push({
1601
1644
  dir: d,
1602
1645
  chain: i,
1603
- contributesToUrl: i.length === 0 || !Er(i[i.length - 1]),
1646
+ contributesToUrl: i.length === 0 || !Ar(i[i.length - 1]),
1604
1647
  hasLayout: t,
1605
1648
  hasLayoutLoader: r,
1606
1649
  hasError: u.has("error.tsx"),
@@ -1614,8 +1657,8 @@ import {
1614
1657
  let n = d ? `${d}/${e}` : e;
1615
1658
  t.push({
1616
1659
  file: n,
1617
- pattern: Or(n),
1618
- ident: kr(n),
1660
+ pattern: Mr(n),
1661
+ ident: Nr(n),
1619
1662
  dirChain: i
1620
1663
  });
1621
1664
  }
@@ -1634,14 +1677,14 @@ import {
1634
1677
  dirs: a,
1635
1678
  orphanedSpecials: o
1636
1679
  };
1637
- }, Ar = (e, t) => {
1680
+ }, Pr = (e, t) => {
1638
1681
  let n = [];
1639
1682
  for (let r = 0; r <= t.length; r++) {
1640
1683
  let i = t.slice(0, r).join("/"), a = e.find((e) => e.dir === i);
1641
1684
  a && n.push(a);
1642
1685
  }
1643
1686
  return n;
1644
- }, jr = async (e) => {
1687
+ }, Fr = async (e) => {
1645
1688
  let { entries: t, loadLayout: n, loadError: r, loadPending: i, ctx: a } = e, o = {};
1646
1689
  return {
1647
1690
  chain: await Promise.all(t.map(async (e, t) => {
@@ -1665,10 +1708,10 @@ import {
1665
1708
  })),
1666
1709
  segmentLoaderData: o
1667
1710
  };
1668
- }, Mr = (e) => {
1669
- let t = Dr(e);
1711
+ }, Ir = (e) => {
1712
+ let t = jr(e);
1670
1713
  return t.length === 0 ? "" : "/" + t.join("/");
1671
- }, Nr = [
1714
+ }, Lr = [
1672
1715
  "// Hot-reload bridge: keep SSR-injected <link rel=\"stylesheet\"> tags",
1673
1716
  "// in sync with Vite's CSS HMR. Without this, edits to .css files",
1674
1717
  "// only update the JS-injected <style> overlay; the underlying <link>",
@@ -1761,7 +1804,7 @@ import {
1761
1804
  " _vdtErrorStart('Build error')",
1762
1805
  " })",
1763
1806
  "}"
1764
- ].join("\n"), Pr = (e) => {
1807
+ ].join("\n"), Rr = (e) => {
1765
1808
  let t = [], n = 0, r = e.split("/").filter(Boolean), i = [];
1766
1809
  for (let e of r) e.startsWith("[[...") && e.endsWith("]]") ? (i.push("(.*)"), t.push(e.slice(5, -2)), n += 2) : e.startsWith("[...") && e.endsWith("]") ? (i.push("(.+)"), t.push(e.slice(4, -1)), n += 3) : e.startsWith("[") && e.endsWith("]") ? (i.push("([^/]+)"), t.push(e.slice(1, -1)), n += 1) : i.push(e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
1767
1810
  let a = i.join("/");
@@ -1770,8 +1813,8 @@ import {
1770
1813
  paramNames: t,
1771
1814
  priority: n
1772
1815
  };
1773
- }, Fr = (e) => e.map((e) => {
1774
- let { regex: t, paramNames: n, priority: r } = Pr(e.pattern);
1816
+ }, zr = (e) => e.map((e) => {
1817
+ let { regex: t, paramNames: n, priority: r } = Rr(e.pattern);
1775
1818
  return {
1776
1819
  pattern: e.pattern,
1777
1820
  file: e.file,
@@ -1780,7 +1823,7 @@ import {
1780
1823
  paramNames: n,
1781
1824
  priority: r
1782
1825
  };
1783
- }).slice().sort((e, t) => e.priority - t.priority), Ir = (e, t) => {
1826
+ }).slice().sort((e, t) => e.priority - t.priority), Br = (e, t) => {
1784
1827
  for (let n of t) {
1785
1828
  let t = n.regex.exec(e);
1786
1829
  if (!t) continue;
@@ -1792,9 +1835,9 @@ import {
1792
1835
  };
1793
1836
  }
1794
1837
  return null;
1795
- }, Lr = Ee, Rr = async (e) => {
1838
+ }, Vr = Ee, Hr = async (e) => {
1796
1839
  try {
1797
- let t = await import(z(O(e, "app.config.ts")).href), n = t.default?.port, i = r({
1840
+ let t = await import(R(O(e, "app.config.ts")).href), n = t.default?.port, i = r({
1798
1841
  kind: "api",
1799
1842
  configPort: typeof n == "number" ? n : void 0,
1800
1843
  env: {}
@@ -1808,7 +1851,7 @@ import {
1808
1851
  kind: "api",
1809
1852
  env: {}
1810
1853
  }).port };
1811
- }, zr = (e, t) => ({
1854
+ }, Ur = (e, t) => ({
1812
1855
  name: e,
1813
1856
  pkg: t.package,
1814
1857
  browserWsUrl: t.url,
@@ -1816,7 +1859,7 @@ import {
1816
1859
  ...t.serverUrl ? { serverOrigin: t.serverUrl } : {},
1817
1860
  ...t.headers ? { headers: t.headers } : {},
1818
1861
  ...t.authHeaders ? { hasAuthHeaders: !0 } : {}
1819
- }), Br = (e, t, n) => {
1862
+ }), Wr = (e, t, n) => {
1820
1863
  let r = t.transport?.wsPath ?? n.wsPath;
1821
1864
  return {
1822
1865
  name: e,
@@ -1828,7 +1871,7 @@ import {
1828
1871
  ...t.headers ? { headers: t.headers } : {},
1829
1872
  ...t.authHeaders ? { hasAuthHeaders: !0 } : {}
1830
1873
  };
1831
- }, Vr = (e) => {
1874
+ }, Gr = (e) => {
1832
1875
  let t = /* @__PURE__ */ new Map();
1833
1876
  for (let n of e) {
1834
1877
  if (n.proxyTarget === void 0) continue;
@@ -1836,43 +1879,43 @@ import {
1836
1879
  if (e) throw Error(`[voltro] api ${JSON.stringify(n.name)} and ${JSON.stringify(e)} both resolve the same-origin WS path ${JSON.stringify(n.browserWsUrl)}. A custom transport.wsPath must be unique per origin (one api per origin may use a fixed path). Give each a distinct wsPath, or drop the override to use the default /ws/<name>.`);
1837
1880
  t.set(n.browserWsUrl, n.name);
1838
1881
  }
1839
- }, Hr = async (e, t) => {
1882
+ }, Kr = async (e, t) => {
1840
1883
  let n = Object.entries(t.apis ?? {}), r = [];
1841
1884
  for (let [t, i] of n) {
1842
1885
  if (i.url) {
1843
- r.push(zr(t, i));
1886
+ r.push(Ur(t, i));
1844
1887
  continue;
1845
1888
  }
1846
- let n = await Lr(e, i.package);
1889
+ let n = await Vr(e, i.package);
1847
1890
  if (!n) throw Error(`[voltro dev] api ${JSON.stringify(t)} (package ${JSON.stringify(i.package)}) is not a workspace dep and has no \`url\` set in app.config.ts. External apis need an explicit \`url\` because the framework can't discover their dev port.`);
1848
- r.push(Br(t, i, await Rr(n)));
1891
+ r.push(Wr(t, i, await Hr(n)));
1849
1892
  }
1850
- return Vr(r), r;
1851
- }, Ur = (e) => {
1893
+ return Gr(r), r;
1894
+ }, qr = (e) => {
1852
1895
  if (!(!/^wss?:\/\//.test(e) && !/^https?:\/\//.test(e))) try {
1853
1896
  let t = new URL(e);
1854
1897
  return t.protocol = t.protocol === "wss:" || t.protocol === "https:" ? "https:" : "http:", `${t.protocol}//${t.host}`;
1855
1898
  } catch {
1856
1899
  return;
1857
1900
  }
1858
- }, Wr = (e) => `VOLTRO_API_ORIGIN_${e.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, Gr = (e) => process.env[Wr(e)] ?? process.env.VOLTRO_API_ORIGIN, Kr = (e, t) => {
1901
+ }, Jr = (e) => `VOLTRO_API_ORIGIN_${e.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, Yr = (e) => process.env[Jr(e)] ?? process.env.VOLTRO_API_ORIGIN, Xr = (e, t) => {
1859
1902
  if (!e) return;
1860
- let n = Gr(e.name) ?? e.serverOrigin;
1903
+ let n = Yr(e.name) ?? e.serverOrigin;
1861
1904
  if (n) {
1862
- let e = Ur(n);
1905
+ let e = qr(n);
1863
1906
  if (e) return e;
1864
1907
  }
1865
1908
  if (t?.allowDevProxy && e.proxyTarget) {
1866
- let t = Ur(e.proxyTarget);
1909
+ let t = qr(e.proxyTarget);
1867
1910
  if (t) return t;
1868
1911
  }
1869
- if (!e.proxyTarget && /^wss?:\/\//.test(e.browserWsUrl)) return Ur(e.browserWsUrl);
1870
- }, qr = (e, t, n) => {
1912
+ if (!e.proxyTarget && /^wss?:\/\//.test(e.browserWsUrl)) return qr(e.browserWsUrl);
1913
+ }, Zr = (e, t, n) => {
1871
1914
  if (!e) {
1872
1915
  if (n?.apiName === void 0) return;
1873
1916
  let e = n.apiName;
1874
1917
  return async () => {
1875
- throw Error(`[loader.query] api '${e}' has no server-side origin for SSR. In a split web/api deployment the web pod reaches the api by internal DNS, not the browser's relative wsPath — set ${Wr(e)} (or VOLTRO_API_ORIGIN, or apis.${e}.serverUrl in app.config.ts) to the api's internal origin, e.g. http://api.<namespace>.svc.cluster.local. The browser transport is unaffected.`);
1918
+ throw Error(`[loader.query] api '${e}' has no server-side origin for SSR. In a split web/api deployment the web pod reaches the api by internal DNS, not the browser's relative wsPath — set ${Jr(e)} (or VOLTRO_API_ORIGIN, or apis.${e}.serverUrl in app.config.ts) to the api's internal origin, e.g. http://api.<namespace>.svc.cluster.local. The browser transport is unaffected.`);
1876
1919
  };
1877
1920
  }
1878
1921
  return async (r, i) => {
@@ -1888,13 +1931,14 @@ import {
1888
1931
  method: "POST",
1889
1932
  headers: {
1890
1933
  "content-type": "application/json",
1891
- ...t ? { cookie: t } : {}
1934
+ ...t ? { cookie: t } : {},
1935
+ ...Object.fromEntries(Object.entries(n?.headers ?? {}).filter(([e]) => e === "authorization" || e.startsWith("x-voltro-") || e === "x-tenant"))
1892
1936
  },
1893
1937
  body: JSON.stringify(a)
1894
1938
  });
1895
1939
  } catch (t) {
1896
1940
  let i = t?.cause?.code ?? String(t?.message ?? t);
1897
- throw Error(`[loader.query] ${r}: could not reach the api at ${e}/rpc (${i}). ${n?.apiName ? `Set ${Wr(n.apiName)} / VOLTRO_API_ORIGIN` : "Set the api server origin"} to the api's SSR-reachable origin (internal cluster DNS in a split deployment).`, { cause: t });
1941
+ throw Error(`[loader.query] ${r}: could not reach the api at ${e}/rpc (${i}). ${n?.apiName ? `Set ${Jr(n.apiName)} / VOLTRO_API_ORIGIN` : "Set the api server origin"} to the api's SSR-reachable origin (internal cluster DNS in a split deployment).`, { cause: t });
1898
1942
  }
1899
1943
  if (!o.ok) throw Error(`[loader.query] ${r}: HTTP ${o.status} ${await o.text()}`);
1900
1944
  let s = await o.json();
@@ -1924,8 +1968,8 @@ import {
1924
1968
  }
1925
1969
  if (u) return l;
1926
1970
  };
1927
- }, Jr = async (e, t, n, r = {}) => {
1928
- let i = t.title ?? t.name ?? "app", a = t.theme === "dark" ? " class=\"dark\"" : t.theme === "light" ? " class=\"light\"" : "", o = j(O(e, "node_modules", "@voltro", "devtools", "package.json")) || await gr() !== null, s = t.theme === "system" ? [
1971
+ }, Qr = async (e, t, n, r = {}) => {
1972
+ let i = t.title ?? t.name ?? "app", a = t.theme === "dark" ? " class=\"dark\"" : t.theme === "light" ? " class=\"light\"" : "", o = j(O(e, "node_modules", "@voltro", "devtools", "package.json")) || await br() !== null, s = t.theme === "system" ? [
1929
1973
  " <script>",
1930
1974
  " (function () {",
1931
1975
  " var root = document.documentElement",
@@ -1979,13 +2023,13 @@ import {
1979
2023
  e.hasLayout && e.hasLayoutLoader ? r.push(`import * as ${Q(e.dir, "Layout")}Mod from '${t}/layout.tsx'`) : e.hasLayout && r.push(`import ${Q(e.dir, "Layout")} from '${t}/layout.tsx'`), e.hasError && r.push(`import ${Q(e.dir, "Error")} from '${t}/error.tsx'`), e.hasPending && r.push(`import ${Q(e.dir, "Pending")} from '${t}/loading.tsx'`), e.hasNotFound && r.push(`import ${Q(e.dir, "NotFound")} from '${t}/not-found.tsx'`);
1980
2024
  }
1981
2025
  let i = u.map((e) => {
1982
- let t = Ar(d, e.dirChain).map((e) => {
2026
+ let t = Pr(d, e.dirChain).map((e) => {
1983
2027
  let t = [`id: ${JSON.stringify(e.dir || "/")}`], n = JSON.stringify(e.dir);
1984
2028
  return e.hasLayout && t.push(`Layout: refs.layouts[${n}]`), e.hasLayoutLoader && t.push(`loader: refs.layoutLoaders[${n}]`), e.hasError && t.push(`Error: refs.errors[${n}]`), e.hasPending && t.push(`Pending: refs.pendings[${n}]`), ` { ${t.join(", ")} }`;
1985
2029
  }).join(",\n");
1986
2030
  return ` makePageRoute(${JSON.stringify(e.pattern)}, ${t.length > 0 ? `[\n${t},\n ]` : "undefined"}),`;
1987
2031
  }), a = d.filter((e) => e.hasNotFound).map((e) => {
1988
- let t = Mr(e.chain), n = Ar(d, e.chain).map((e) => {
2032
+ let t = Ir(e.chain), n = Pr(d, e.chain).map((e) => {
1989
2033
  let t = [`id: ${JSON.stringify(e.dir || "/")}`], n = JSON.stringify(e.dir);
1990
2034
  return e.hasLayout && t.push(`Layout: refs.layouts[${n}]`), e.hasError && t.push(`Error: refs.errors[${n}]`), ` { ${t.join(", ")} }`;
1991
2035
  }).join(",\n"), r = n.length > 0 ? `\n chain: [\n${n},\n ],` : "";
@@ -2241,14 +2285,14 @@ import {
2241
2285
  "// resolved apis map. Side-effect only — no local component definitions —",
2242
2286
  "// so downstream invalidations (user page edits) terminate at app.tsx.",
2243
2287
  "",
2244
- ...xr(t),
2288
+ ...Tr(t),
2245
2289
  "import { mount } from '@voltro/web'",
2246
2290
  ...h,
2247
2291
  "import { App } from './app'",
2248
2292
  "import { preloadCurrentRoute } from './routeTable'",
2249
- ...yr(t),
2250
- ..._r(t, o),
2251
- ...br(t),
2293
+ ...Cr(t),
2294
+ ...xr(t, o),
2295
+ ...wr(t),
2252
2296
  "",
2253
2297
  "// Preload the current route's page chunk BEFORE hydration so the first",
2254
2298
  "// client render matches the SSG/SSR-prerendered HTML. Without it, a lazy",
@@ -2265,10 +2309,10 @@ import {
2265
2309
  " apis: {",
2266
2310
  ...g,
2267
2311
  " },",
2268
- ...vr(t, o),
2312
+ ...Sr(t, o),
2269
2313
  "})",
2270
2314
  "",
2271
- Nr
2315
+ Lr
2272
2316
  ].join("\n");
2273
2317
  } else _ = "", v = "", b = [
2274
2318
  "// GENERATED BY `voltro dev` — do not edit; will be overwritten on next boot.",
@@ -2276,22 +2320,22 @@ import {
2276
2320
  "// and calls mount(). Side-effect only, no component definitions, so the",
2277
2321
  "// user's component file remains the Fast Refresh boundary.",
2278
2322
  "",
2279
- ...xr(t),
2323
+ ...Tr(t),
2280
2324
  "import { mount } from '@voltro/web'",
2281
2325
  ...h,
2282
2326
  "import App from '../src/App'",
2283
- ...yr(t),
2284
- ..._r(t, o),
2285
- ...br(t),
2327
+ ...Cr(t),
2328
+ ...xr(t, o),
2329
+ ...wr(t),
2286
2330
  "",
2287
2331
  "mount(App, {",
2288
2332
  " apis: {",
2289
2333
  ...g,
2290
2334
  " },",
2291
- ...vr(t, o),
2335
+ ...Sr(t, o),
2292
2336
  "})",
2293
2337
  "",
2294
- Nr
2338
+ Lr
2295
2339
  ].join("\n");
2296
2340
  let x = O(e, ".framework");
2297
2341
  await M.mkdir(x, { recursive: !0 }), t.env ? await xe(x, r) : await M.rm(O(x, "env.public.ts"), { force: !0 }), await M.writeFile(O(x, "index.html"), c, "utf8"), await M.writeFile(O(x, "main.tsx"), b, "utf8"), _ ? (await M.writeFile(O(x, "app.tsx"), _, "utf8"), await M.writeFile(O(x, "routeTable.ts"), v, "utf8")) : (await M.rm(O(x, "app.tsx"), { force: !0 }), await M.rm(O(x, "routeTable.ts"), { force: !0 }));
@@ -2308,7 +2352,7 @@ import {
2308
2352
  Z.warn(`could not add ${E.join(", ")} to ${S} — add it by hand so the generated directory stays out of git. The build is unaffected.`, { reason: e?.message ?? String(e) });
2309
2353
  }
2310
2354
  }
2311
- }, Yr = async (e, t) => {
2355
+ }, $r = async (e, t) => {
2312
2356
  try {
2313
2357
  let n = D(e), r = O(n, "project.json");
2314
2358
  if (!j(r)) return;
@@ -2321,16 +2365,16 @@ import {
2321
2365
  projectJson: r
2322
2366
  });
2323
2367
  } catch {}
2324
- }, Xr = (e) => O(e, ".framework", "dist", "server", "appConfig.js"), Zr = async (e, t = {}) => {
2325
- let n = Xr(e), r = t.preferSource !== !0 && j(n) ? n : O(e, "app.config.ts");
2368
+ }, ei = (e) => O(e, ".framework", "dist", "server", "appConfig.js"), ti = async (e, t = {}) => {
2369
+ let n = ei(e), r = t.preferSource !== !0 && j(n) ? n : O(e, "app.config.ts");
2326
2370
  try {
2327
- let e = (await import(z(r).href)).default;
2371
+ let e = (await import(R(r).href)).default;
2328
2372
  return typeof e == "object" && e && "type" in e && e.type === "web" ? e : null;
2329
2373
  } catch {
2330
2374
  return null;
2331
2375
  }
2332
- }, Qr = async (e) => {
2333
- let n = await Zr(e, { preferSource: !0 });
2376
+ }, ni = async (e) => {
2377
+ let n = await ti(e, { preferSource: !0 });
2334
2378
  if (!n) return {
2335
2379
  ran: !1,
2336
2380
  exitCode: 0
@@ -2338,7 +2382,7 @@ import {
2338
2382
  ln();
2339
2383
  let i = Ct();
2340
2384
  Vt(i), Z.info("booting voltro dev (web)", { app: n.name ?? "(unnamed)" }), Ge(e, Z);
2341
- let a = await Hr(e, n);
2385
+ let a = await Kr(e, n);
2342
2386
  for (let e of a) Z.info("api wired", {
2343
2387
  name: e.name,
2344
2388
  pkg: e.pkg,
@@ -2357,7 +2401,7 @@ import {
2357
2401
  log: Z,
2358
2402
  generateTypes: !0
2359
2403
  }), s = o.publicValues;
2360
- await Jr(e, n, a, s), Z.debug("generated framework entry files", { files: [
2404
+ await Qr(e, n, a, s), Z.debug("generated framework entry files", { files: [
2361
2405
  "index.html",
2362
2406
  ".framework/main.tsx",
2363
2407
  ...n.env ? [".framework/env.public.ts"] : []
@@ -2378,22 +2422,22 @@ import {
2378
2422
  pid: process.pid,
2379
2423
  status: "booting",
2380
2424
  logFile: D.path
2381
- }).catch(() => {}), await Yr(e, l);
2425
+ }).catch(() => {}), await $r(e, l);
2382
2426
  let { pages: N, dirs: P } = await $(O(e, "src", "pages")), F = {
2383
2427
  dirs: P,
2384
- ssrRoutes: Fr(N)
2385
- }, I = P.map((e) => ({
2428
+ ssrRoutes: zr(N)
2429
+ }, ee = P.map((e) => ({
2386
2430
  dir: e.dir,
2387
2431
  hasLayout: e.hasLayout,
2388
2432
  hasError: e.hasError,
2389
2433
  hasPending: e.hasPending,
2390
2434
  hasNotFound: e.hasNotFound
2391
- })), L = await ht({
2435
+ })), I = await ht({
2392
2436
  appRoot: e,
2393
2437
  pages: N
2394
2438
  });
2395
- L.wrote && Z.debug("routes codegen wrote", { path: k(e, L.path) });
2396
- let R = await he("vite", () => import("vite")), z = (await import("@vitejs/plugin-react")).default, B = (await import("@tailwindcss/vite")).default, V = O(e, ".framework"), te = O(e, "src"), H = /* @__PURE__ */ new Set([
2439
+ I.wrote && Z.debug("routes codegen wrote", { path: k(e, I.path) });
2440
+ let L = await he("vite", () => import("vite")), R = (await import("@vitejs/plugin-react")).default, te = (await import("@tailwindcss/vite")).default, z = O(e, ".framework"), V = O(e, "src"), ne = /* @__PURE__ */ new Set([
2397
2441
  ".framework",
2398
2442
  "node_modules",
2399
2443
  "dist",
@@ -2401,27 +2445,27 @@ import {
2401
2445
  ".vite",
2402
2446
  ".turbo",
2403
2447
  ".cache"
2404
- ]), U = {
2448
+ ]), H = {
2405
2449
  name: "framework:watch-app-sources",
2406
2450
  async configureServer(t) {
2407
2451
  try {
2408
- let n = (await M.readdir(e, { withFileTypes: !0 })).filter((e) => e.isDirectory() && !H.has(e.name));
2452
+ let n = (await M.readdir(e, { withFileTypes: !0 })).filter((e) => e.isDirectory() && !ne.has(e.name));
2409
2453
  for (let r of n) t.watcher.add(O(e, r.name));
2410
- n.length === 0 && t.watcher.add(te);
2454
+ n.length === 0 && t.watcher.add(V);
2411
2455
  } catch {
2412
- t.watcher.add(te);
2456
+ t.watcher.add(V);
2413
2457
  }
2414
2458
  for (let n of await De(e)) t.watcher.add(n.dir);
2415
2459
  }
2416
- }, W = O(e, "src", "pages"), ne = (e) => e.endsWith(".tsx") && (e === W || e.startsWith(W + "/")), G = (e) => e === W || e.startsWith(W + "/"), re = async (t) => {
2460
+ }, U = O(e, "src", "pages"), W = (e) => e.endsWith(".tsx") && (e === U || e.startsWith(U + "/")), re = (e) => e === U || e.startsWith(U + "/"), G = async (t) => {
2417
2461
  try {
2418
2462
  let r = Date.now();
2419
- await Jr(e, n, a, s);
2420
- let { pages: i, dirs: o } = await $(W);
2463
+ await Qr(e, n, a, s);
2464
+ let { pages: i, dirs: o } = await $(U);
2421
2465
  await ht({
2422
2466
  appRoot: e,
2423
2467
  pages: i
2424
- }), F.dirs = o, F.ssrRoutes = Fr(i), Z.info("page tree regenerated", {
2468
+ }), F.dirs = o, F.ssrRoutes = zr(i), Z.info("page tree regenerated", {
2425
2469
  reason: t,
2426
2470
  ms: Date.now() - r,
2427
2471
  routes: F.ssrRoutes.length
@@ -2436,17 +2480,17 @@ import {
2436
2480
  r.push(e), n && clearTimeout(n), n = setTimeout(() => {
2437
2481
  n = null;
2438
2482
  let e = r.length === 1 ? r[0] : `${r.length} events (${r[0]}, …)`;
2439
- r.length = 0, re(e);
2483
+ r.length = 0, G(e);
2440
2484
  }, 50);
2441
2485
  };
2442
2486
  t.watcher.on("add", (t) => {
2443
- ne(t) && i(`add ${k(e, t)}`);
2487
+ W(t) && i(`add ${k(e, t)}`);
2444
2488
  }), t.watcher.on("unlink", (t) => {
2445
- ne(t) && i(`unlink ${k(e, t)}`);
2489
+ W(t) && i(`unlink ${k(e, t)}`);
2446
2490
  }), t.watcher.on("addDir", (t) => {
2447
- G(t) && i(`addDir ${k(e, t)}`);
2491
+ re(t) && i(`addDir ${k(e, t)}`);
2448
2492
  }), t.watcher.on("unlinkDir", (t) => {
2449
- G(t) && i(`unlinkDir ${k(e, t)}`);
2493
+ re(t) && i(`unlinkDir ${k(e, t)}`);
2450
2494
  });
2451
2495
  }
2452
2496
  }, K = O(e, "app.config.ts"), oe = (e) => {
@@ -2511,7 +2555,7 @@ import {
2511
2555
  }
2512
2556
  try {
2513
2557
  let r = Date.now();
2514
- await Jr(e, t, await Hr(e, t)), ce = t, n.ws && n.ws.send({
2558
+ await Qr(e, t, await Kr(e, t)), ce = t, n.ws && n.ws.send({
2515
2559
  type: "full-reload",
2516
2560
  path: "*"
2517
2561
  }), Z.info("app.config.ts soft-regen", {
@@ -2550,7 +2594,7 @@ import {
2550
2594
  async configureServer(t) {
2551
2595
  let n = [];
2552
2596
  for (let r of a) {
2553
- let i = await Lr(e, r.pkg);
2597
+ let i = await Vr(e, r.pkg);
2554
2598
  if (i) {
2555
2599
  n.push(i);
2556
2600
  try {
@@ -2568,7 +2612,7 @@ import {
2568
2612
  if (e !== void 0 && e !== r) {
2569
2613
  r = e, o = !0, Z.info("the api surface changed — re-bundling the api client + reloading (descriptor edits propagate automatically; no manual restart needed)");
2570
2614
  try {
2571
- await M.rm(O(V, ".vite", "deps"), {
2615
+ await M.rm(O(z, ".vite", "deps"), {
2572
2616
  recursive: !0,
2573
2617
  force: !0
2574
2618
  }), await t.restart(!0);
@@ -2830,7 +2874,7 @@ import {
2830
2874
  kind: "web",
2831
2875
  meta: {
2832
2876
  name: n.name ?? "(unnamed)",
2833
- voltroVersion: hr,
2877
+ voltroVersion: yr,
2834
2878
  port: l,
2835
2879
  mode: "dev",
2836
2880
  apis: Object.entries(n.apis ?? {}).map(([e, t]) => {
@@ -2842,7 +2886,7 @@ import {
2842
2886
  })
2843
2887
  },
2844
2888
  routes: await a(),
2845
- dirs: I,
2889
+ dirs: ee,
2846
2890
  cache: () => ({
2847
2891
  backend: "memory",
2848
2892
  size: 0,
@@ -2938,7 +2982,7 @@ import {
2938
2982
  u.indexOf("?");
2939
2983
  let { pathname: d, search: f } = Hn(u);
2940
2984
  if (d.startsWith("/@") || d.startsWith("/node_modules/") || d.startsWith("/.framework/") || d.startsWith("/_voltro/") || d === "/main.tsx" || d === "/index.html" || d === "/sw.js" || d === "/favicon.ico" || d === "/robots.txt" || /\.[a-z0-9]+$/i.test(d)) return l();
2941
- let p = Ir(d, F.ssrRoutes);
2985
+ let p = Br(d, F.ssrRoutes);
2942
2986
  if (!p) return l();
2943
2987
  let m = !ye.has(p.route.pattern), h = Date.now();
2944
2988
  m && Z.info(`ssr compiling ${p.route.pattern}`, {
@@ -2960,15 +3004,25 @@ import {
2960
3004
  }
2961
3005
  }, b = !1;
2962
3006
  try {
2963
- let x = await v("loadPage", async () => await r(O(e, "src", "pages", p.route.file))), S = _(x, O("src", "pages", p.route.file)), C = Ar(F.dirs, p.route.dirChain), w = S === "spa" && C.some((e) => e.hasLayout);
3007
+ let x = await v("loadPage", async () => await r(O(e, "src", "pages", p.route.file))), S = _(x, O("src", "pages", p.route.file)), C = Pr(F.dirs, p.route.dirChain), w = S === "spa" && C.some((e) => e.hasLayout);
2964
3008
  if (S !== "ssr" && S !== "isr" && !w) return l();
2965
3009
  let T = {};
2966
3010
  for (let [e, t] of Object.entries(i.headers ?? {})) typeof t == "string" ? T[e] = t : Array.isArray(t) && (T[e] = t.join(", "));
2967
- let E = qr(Kr(a[0], { allowDevProxy: !0 }), T.cookie, { apiName: a[0]?.name }), D = new AbortController(), k = () => D.abort();
2968
- c.once("close", k);
2969
- let A = null, j = [], M = {};
3011
+ let E = await _r(Le, {
3012
+ pathname: d,
3013
+ search: f,
3014
+ headers: T,
3015
+ cookies: mr(T.cookie)
3016
+ });
3017
+ for (let e of E.setCookies) c.appendHeader?.("set-cookie", hr(e));
3018
+ let D = Zr(Xr(a[0], { allowDevProxy: !0 }), E.headers.cookie, {
3019
+ apiName: a[0]?.name,
3020
+ headers: E.headers
3021
+ }), k = new AbortController(), A = () => k.abort();
3022
+ c.once("close", A);
3023
+ let j = null, M = [], N = {};
2970
3024
  try {
2971
- (await r("@voltro/web/ssr")).beginStoreSeeds(), {chain: j, segmentLoaderData: M} = await v("loadChain", () => jr({
3025
+ (await r("@voltro/web/ssr")).beginStoreSeeds(), {chain: M, segmentLoaderData: N} = await v("loadChain", () => Fr({
2972
3026
  entries: C,
2973
3027
  loadLayout: (t) => r(O(e, "src", "pages", t.dir, "layout.tsx")),
2974
3028
  loadError: (t) => r(O(e, "src", "pages", t.dir, "error.tsx")),
@@ -2977,40 +3031,40 @@ import {
2977
3031
  params: p.params,
2978
3032
  pathname: d,
2979
3033
  search: f,
2980
- signal: D.signal,
3034
+ signal: k.signal,
2981
3035
  headers: T,
2982
- query: E,
3036
+ query: D,
2983
3037
  isServer: !0
2984
3038
  }
2985
3039
  }));
2986
3040
  let t = x.loader;
2987
- typeof t == "function" && !w && (A = await v("loader", () => t({
3041
+ typeof t == "function" && !w && (j = await v("loader", () => t({
2988
3042
  params: p.params,
2989
3043
  pathname: d,
2990
3044
  search: f,
2991
- signal: D.signal,
3045
+ signal: k.signal,
2992
3046
  headers: T,
2993
- query: E,
3047
+ query: D,
2994
3048
  isServer: !0
2995
3049
  })));
2996
3050
  } finally {
2997
- c.off("close", k);
3051
+ c.off("close", A);
2998
3052
  }
2999
- let N = await v("loadSsrHelpers", async () => await r("@voltro/web/ssr"));
3053
+ let P = await v("loadSsrHelpers", async () => await r("@voltro/web/ssr"));
3000
3054
  w || await cr({
3001
3055
  pageMod: x,
3002
3056
  params: p.params,
3003
- query: E,
3057
+ query: D,
3004
3058
  apiName: a[0]?.name,
3005
- seed: N.seedPreloadedSubscription,
3006
- seedFailure: N.seedPreloadedSubscriptionFailure,
3059
+ seed: P.seedPreloadedSubscription,
3060
+ seedFailure: P.seedPreloadedSubscriptionFailure,
3007
3061
  onError: ({ tag: e, apiName: t }, n) => Z.warn("preload seed failed", {
3008
3062
  tag: e,
3009
3063
  apiName: t,
3010
3064
  pathname: d
3011
3065
  }, n)
3012
3066
  });
3013
- let P = {
3067
+ let ee = {
3014
3068
  pattern: p.route.pattern,
3015
3069
  Component: x.default,
3016
3070
  meta: x.meta,
@@ -3018,40 +3072,40 @@ import {
3018
3072
  ErrorBoundary: x.ErrorBoundary,
3019
3073
  Pending: x.Pending,
3020
3074
  renderMode: S,
3021
- chain: j
3075
+ chain: M
3022
3076
  }, I = {
3023
- cookies: N.parseCookieHeader(T.cookie),
3077
+ cookies: P.parseCookieHeader(T.cookie),
3024
3078
  headers: T,
3025
3079
  url: u
3026
3080
  }, L = x.interactive ?? "full", R = (await s())(T.cookie, T["accept-language"]);
3027
3081
  b = R !== void 0 && o;
3028
- let z = R ? {
3082
+ let te = R ? {
3029
3083
  outerWrap: R.outerWrap,
3030
3084
  locale: R.locale
3031
- } : {}, B = w ? zn({
3032
- helpers: N,
3085
+ } : {}, z = w ? zn({
3086
+ helpers: P,
3033
3087
  page: `src/pages/${p.route.file}`,
3034
3088
  interactive: L,
3035
3089
  delivery: "stream",
3036
3090
  renderInput: {
3037
- descriptor: P,
3091
+ descriptor: ee,
3038
3092
  params: p.params,
3039
3093
  pathname: d,
3040
3094
  search: f,
3041
- segmentLoaderData: M,
3095
+ segmentLoaderData: N,
3042
3096
  requestContext: I,
3043
- ...z
3097
+ ...te
3044
3098
  }
3045
- }) : null, V = w ? null : Rn({
3046
- helpers: N,
3099
+ }) : null, B = w ? null : Rn({
3100
+ helpers: P,
3047
3101
  page: `src/pages/${p.route.file}`,
3048
3102
  pathname: d,
3049
3103
  renderMode: S,
3050
3104
  interactive: L,
3051
- loaderData: A,
3052
- segmentLoaderData: M,
3105
+ loaderData: j,
3106
+ segmentLoaderData: N,
3053
3107
  pageLoaderRan: typeof x.loader == "function"
3054
- }), ee = [];
3108
+ }), V = [];
3055
3109
  await v("collectCss", async () => {
3056
3110
  let t = /* @__PURE__ */ new Set(), n = [
3057
3111
  O(e, "src", "pages", p.route.file),
@@ -3062,18 +3116,18 @@ import {
3062
3116
  ]),
3063
3117
  O(e, ".framework", "main.tsx")
3064
3118
  ];
3065
- for (let e of n) await y(e, t, ee);
3119
+ for (let e of n) await y(e, t, V);
3066
3120
  });
3067
- let te = await v("readShell", Ee), H = await v("transformShell", () => t.transformIndexHtml(u, te)), U = ee.map((e) => `<link rel="stylesheet" href="${e}?direct" />`).join("\n "), W = R?.locale ?? I.cookies["voltro:locale"] ?? n.defaultLocale ?? (n.locales ?? [])[0] ?? "en", ne = Date.now();
3068
- if (B) {
3121
+ let ne = await v("readShell", Ee), H = await v("transformShell", () => t.transformIndexHtml(u, ne)), U = V.map((e) => `<link rel="stylesheet" href="${e}?direct" />`).join("\n "), W = R?.locale ?? I.cookies["voltro:locale"] ?? n.defaultLocale ?? (n.locales ?? [])[0] ?? "en", re = Date.now();
3122
+ if (z) {
3069
3123
  let e = (e) => Vn({
3070
- helpers: N,
3071
- prepared: B,
3124
+ helpers: P,
3125
+ prepared: z,
3072
3126
  meta: e,
3073
3127
  interactive: L,
3074
3128
  extra: [U]
3075
3129
  });
3076
- if (B.hasDeferred) ar({
3130
+ if (z.hasDeferred) ar({
3077
3131
  res: c,
3078
3132
  shell: nr({
3079
3133
  shell: H,
@@ -3085,8 +3139,8 @@ import {
3085
3139
  "x-voltro-rendered-by": "spa-shell-dev"
3086
3140
  },
3087
3141
  headInjection: e,
3088
- render: (e) => N.renderPageToStream({
3089
- ...B.renderInput,
3142
+ render: (e) => P.renderPageToStream({
3143
+ ...z.renderInput,
3090
3144
  ...e
3091
3145
  }),
3092
3146
  onShellError: (e) => {
@@ -3095,27 +3149,27 @@ import {
3095
3149
  });
3096
3150
  else {
3097
3151
  let t = Bn({
3098
- helpers: N,
3099
- prepared: B
3152
+ helpers: P,
3153
+ prepared: z
3100
3154
  }), n = H.replace("<div id=\"root\"></div>", `<div id="root">${t.body}</div>`).replace("</head>", ` ${e(t.meta)}\n </head>`).replace(/<html(\s+lang="[^"]*")?/i, `<html lang="${W}"`);
3101
3155
  c.statusCode = 200, c.setHeader("content-type", "text/html; charset=utf-8"), c.setHeader("x-voltro-rendered-by", "spa-shell-dev"), c.end(n);
3102
3156
  }
3103
- } else if (V) {
3157
+ } else if (B) {
3104
3158
  let e = (e) => [
3105
3159
  U,
3106
- N.renderMetaToHtml(e),
3160
+ P.renderMetaToHtml(e),
3107
3161
  `<meta name="voltro-interactive" content="${L}" />`,
3108
- ...V.hasDeferred ? [N.renderDeferredRegistryScript()] : [],
3109
- N.renderRouterStateScript(V.stateInput)
3162
+ ...B.hasDeferred ? [P.renderDeferredRegistryScript()] : [],
3163
+ P.renderRouterStateScript(B.stateInput)
3110
3164
  ].filter((e) => e.length > 0).join("\n "), t = {
3111
- descriptor: P,
3165
+ descriptor: ee,
3112
3166
  params: p.params,
3113
3167
  pathname: d,
3114
3168
  search: f,
3115
- loaderData: V.loaderData,
3116
- segmentLoaderData: V.segmentLoaderData,
3169
+ loaderData: B.loaderData,
3170
+ segmentLoaderData: B.segmentLoaderData,
3117
3171
  requestContext: I,
3118
- ...z
3172
+ ...te
3119
3173
  };
3120
3174
  if (S === "ssr" && L === "full") ar({
3121
3175
  res: c,
@@ -3129,7 +3183,7 @@ import {
3129
3183
  "x-voltro-rendered-by": "ssr-dev"
3130
3184
  },
3131
3185
  headInjection: e,
3132
- render: (e) => N.renderPageToStream({
3186
+ render: (e) => P.renderPageToStream({
3133
3187
  ...t,
3134
3188
  ...e
3135
3189
  }),
@@ -3138,11 +3192,11 @@ import {
3138
3192
  }
3139
3193
  });
3140
3194
  else {
3141
- let { html: n, meta: r } = N.renderPageToHtml(t), i = H.replace("<div id=\"root\"></div>", `<div id="root">${n}</div>`).replace("</head>", ` ${e(r)}\n </head>`).replace(/<html(\s+lang="[^"]*")?/i, `<html lang="${W}"`);
3195
+ let { html: n, meta: r } = P.renderPageToHtml(t), i = H.replace("<div id=\"root\"></div>", `<div id="root">${n}</div>`).replace("</head>", ` ${e(r)}\n </head>`).replace(/<html(\s+lang="[^"]*")?/i, `<html lang="${W}"`);
3142
3196
  c.statusCode = 200, c.setHeader("content-type", "text/html; charset=utf-8"), c.setHeader("x-voltro-rendered-by", "ssr-dev"), c.end(i);
3143
3197
  }
3144
3198
  }
3145
- g.render = Date.now() - ne;
3199
+ g.render = Date.now() - re;
3146
3200
  let G = Date.now() - h;
3147
3201
  m ? (ye.add(p.route.pattern), Z.info(`ssr compiled ${p.route.pattern} in ${G}ms`, {
3148
3202
  pattern: p.route.pattern,
@@ -3176,15 +3230,15 @@ import {
3176
3230
  }
3177
3231
  });
3178
3232
  }
3179
- }, Ae = Date.now(), je = R.version ?? "?", Me = await gr(), Ne = O(e, "node_modules", "@voltro", "ui-shadcn"), Y = j(O(Ne, "package.json")) ? Ne : null, Fe = [], Ie = await (async () => {
3233
+ }, Ae = Date.now(), je = L.version ?? "?", Me = await br(), Ne = O(e, "node_modules", "@voltro", "ui-shadcn"), Y = j(O(Ne, "package.json")) ? Ne : null, Fe = [], Ie = await (async () => {
3180
3234
  let t = [];
3181
3235
  for (let n of a) {
3182
- let r = await Lr(e, n.pkg);
3236
+ let r = await Vr(e, n.pkg);
3183
3237
  r && t.push(r);
3184
3238
  }
3185
3239
  let n = await pr(t);
3186
3240
  if (n === void 0) return !1;
3187
- let r = O(V, ".voltro-rpcgroup-optimize"), i = "";
3241
+ let r = O(z, ".voltro-rpcgroup-optimize"), i = "";
3188
3242
  try {
3189
3243
  i = (await M.readFile(r, "utf8")).trim();
3190
3244
  } catch {}
@@ -3193,15 +3247,15 @@ import {
3193
3247
  await M.writeFile(r, n);
3194
3248
  } catch {}
3195
3249
  return !0;
3196
- })();
3197
- Ie && Z.info("rpcGroup changed since last boot — forcing a dep re-optimize so the browser loads the current api client");
3250
+ })(), Le = await gr(e);
3251
+ Le !== void 0 && Z.info("middleware.ts loaded — renews credentials before each SSR render"), Ie && Z.info("rpcGroup changed since last boot — forcing a dep re-optimize so the browser loads the current api client");
3198
3252
  try {
3199
3253
  await Pe(l, "voltro dev (web)");
3200
3254
  } catch (e) {
3201
3255
  Z.error(String(e.message ?? e)), process.exit(1);
3202
3256
  }
3203
- await (await R.createServer({
3204
- root: V,
3257
+ await (await L.createServer({
3258
+ root: z,
3205
3259
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
3206
3260
  ssr: { noExternal: ["react-intl", "@voltro/i18n"] },
3207
3261
  resolve: {
@@ -3247,9 +3301,9 @@ import {
3247
3301
  customLogger: et(),
3248
3302
  plugins: [
3249
3303
  bn(O(e, "src", "pages")),
3250
- z(),
3251
- B(),
3252
- U,
3304
+ R(),
3305
+ te(),
3306
+ H,
3253
3307
  ie,
3254
3308
  ue,
3255
3309
  pe,
@@ -3264,12 +3318,12 @@ import {
3264
3318
  host: !0,
3265
3319
  allowedHosts: n.allowedHosts === !0 || [...n.allowedHosts ?? []],
3266
3320
  proxy: J,
3267
- fs: { allow: [e, ...Sr(e)] }
3321
+ fs: { allow: [e, ...Er(e)] }
3268
3322
  },
3269
3323
  appType: "spa",
3270
- cacheDir: O(V, ".vite"),
3324
+ cacheDir: O(z, ".vite"),
3271
3325
  publicDir: O(e, "public")
3272
- })).listen(), mr.info(`v${je} ready in ${Date.now() - Ae}ms`, {
3326
+ })).listen(), vr.info(`v${je} ready in ${Date.now() - Ae}ms`, {
3273
3327
  version: je,
3274
3328
  bootMs: Date.now() - Ae
3275
3329
  }), Z.info(`listening on http://localhost:${l}`, {
@@ -3313,27 +3367,27 @@ import {
3313
3367
  } catch (e) {
3314
3368
  Z.warn("runtime-registry write failed", {}, e);
3315
3369
  }
3316
- return ee({
3370
+ return B({
3317
3371
  app: n.name ?? "unnamed",
3318
3372
  kind: "web",
3319
3373
  url: `http://localhost:${l}`,
3320
3374
  bootMs: Date.now() - Ae
3321
3375
  }), new Promise(() => {});
3322
- }, $r = async (t) => {
3376
+ }, ri = async (t) => {
3323
3377
  e("serve");
3324
- let n = await Zr(t);
3378
+ let n = await ti(t);
3325
3379
  if (!n) return {
3326
3380
  ran: !1,
3327
3381
  exitCode: 0
3328
3382
  };
3329
3383
  let i = Date.now(), a = Z.child("serve");
3330
3384
  a.info("booting voltro serve (preview)", { app: n.name ?? "(unnamed)" });
3331
- let o = await Hr(t, n);
3385
+ let o = await Kr(t, n);
3332
3386
  for (let e of o) a.info("api wired", {
3333
3387
  name: e.name,
3334
3388
  pkg: e.pkg
3335
3389
  });
3336
- await Jr(t, n, o);
3390
+ await Qr(t, n, o);
3337
3391
  {
3338
3392
  let { pages: e } = await $(O(t, "src", "pages"));
3339
3393
  await ht({
@@ -3359,7 +3413,7 @@ import {
3359
3413
  ] },
3360
3414
  build: {
3361
3415
  outDir: "dist",
3362
- rollupOptions: { output: { manualChunks: wr } }
3416
+ rollupOptions: { output: { manualChunks: Or } }
3363
3417
  },
3364
3418
  publicDir: O(t, "public")
3365
3419
  });
@@ -3372,7 +3426,7 @@ import {
3372
3426
  label: "Local",
3373
3427
  url: e
3374
3428
  })) ?? [];
3375
- return ee({
3429
+ return B({
3376
3430
  app: n.name ?? "unnamed",
3377
3431
  kind: "preview",
3378
3432
  url: f,
@@ -3381,4 +3435,4 @@ import {
3381
3435
  }), new Promise(() => {});
3382
3436
  };
3383
3437
  //#endregion
3384
- export { We as $, Hn as A, It as B, nr as C, zn as D, Rn as E, on as F, bt as G, Ct as H, en as I, rt as J, ht as K, Xt as L, Cn as M, Pn as N, Bn as O, wn as P, He as Q, Jt as R, rr as S, In as T, Tt as U, wt as V, xt as W, Ve as X, nt as Y, Ue as Z, $r as _, jr as a, we as at, Jr as b, Or as c, be as ct, Zr as d, Ge as et, Hr as f, Qr as g, Wr as h, qr as i, De as it, Tn as j, Vn as k, Q as l, ye as lt, Br as m, Kr as n, ke as nt, Xr as o, Te as ot, zr as p, at as q, Vr as r, Ee as rt, Ar as s, Se as st, Tr as t, Pe as tt, kr as u, he as ut, wr as v, ar as w, cr as x, $ as y, Vt as z };
3438
+ export { nt as $, Rn as A, en as B, _r as C, nr as D, rr as E, Tn as F, wt as G, Jt as H, Cn as I, xt as J, Ct as K, Pn as L, Bn as M, Vn as N, ar as O, Hn as P, rt as Q, wn as R, mr as S, cr as T, Vt as U, Xt as V, It as W, ht as X, bt as Y, at as Z, ri as _, Fr as a, Pe as at, Qr as b, Mr as c, De as ct, ti as d, Se as dt, Ve as et, Kr as f, be as ft, ni as g, Jr as h, Zr as i, Ge as it, zn as j, In as k, Q as l, we as lt, Wr as m, he as mt, Xr as n, He as nt, ei as o, ke as ot, Ur as p, ye as pt, Tt as q, Gr as r, We as rt, Pr as s, Ee as st, kr as t, Ue as tt, Nr as u, Te as ut, Or as v, hr as w, gr as x, $ as y, on as z };