@voltro/cli 0.51.0 → 0.53.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 (233) hide show
  1. package/CHANGELOG.md +356 -0
  2. package/THIRD-PARTY-NOTICES.md +8311 -3318
  3. package/dist/{agentsMd-D6yD7IQv.js → agentsMd-0l980yhL.js} +4 -1
  4. package/dist/agentsMd-SDDSkyl4.js +2 -0
  5. package/dist/{apiBuild-CPDHXF72.js → apiBuild-CaPfoWku.js} +11 -5
  6. package/dist/apiBuild-DHtLXYx9.js +2 -0
  7. package/dist/bin.js +1 -1
  8. package/dist/build-D-OnvNMf.js +843 -0
  9. package/dist/{checkCommand-DNuPiWMc.js → checkCommand-C5elt0tW.js} +92 -46
  10. package/dist/checkCommand-D2ZduVlh.js +2 -0
  11. package/dist/{cloudCmd-F4YJeqM3.js → cloudCmd-QUXh-b5w.js} +1 -1
  12. package/dist/codegen-BWpt3VgF.js +2 -0
  13. package/dist/{codegen-CrMXs4hb.js → codegen-FEk8AZHb.js} +2 -2
  14. package/dist/{codegenCommand-BNBHcNNj.js → codegenCommand-BOiWQ5hz.js} +12 -12
  15. package/dist/{codemodRunner-BDVixlSw.js → codemodRunner-BjtB2lq6.js} +691 -545
  16. package/dist/{commands-B1OiS9bX.js → commands-DyxAmhP0.js} +36 -36
  17. package/dist/{dashboardCommand-C-vvPY1B.js → dashboardCommand-BdKTyT13.js} +3 -3
  18. package/dist/{dataCommand-C1GxXW5q.js → dataCommand-Bab9X7s8.js} +27 -27
  19. package/dist/{dbCommand-If4Y1xQ-.js → dbCommand-06O2finM.js} +277 -236
  20. package/dist/dbCommand-B1EXBC6f.js +2 -0
  21. package/dist/{dev-kdAg9Q7l.js → dev-C6LGF4iY.js} +2998 -2379
  22. package/dist/dev-GjJWAYo2.js +3 -0
  23. package/dist/doctorCommand-B0hX0tdz.js +2 -0
  24. package/dist/{doctorCommand-nKmeW78u.js → doctorCommand-etMkflRc.js} +332 -220
  25. package/dist/{dormancyCommand-CY3wa_SW.js → dormancyCommand-UwZ1AZzB.js} +1 -1
  26. package/dist/{embeddingsCommand-BDLIgje_.js → embeddingsCommand-C70zWHwo.js} +1 -1
  27. package/dist/{envCommand-C6V_xVlT.js → envCommand-dSyKvRkM.js} +15 -15
  28. package/dist/{evolveCommand-D3c4DSfN.js → evolveCommand-CG0_ebO5.js} +2 -2
  29. package/dist/fileConventions-DASGEmj-.js +35 -0
  30. package/dist/{fileTaxonomy-CJfgOllU.js → fileTaxonomy-B7uxipWS.js} +55 -55
  31. package/dist/fontPipeline-LxIHa1vo.js +2 -0
  32. package/dist/fontPipeline-Tsh8kZfA.js +152 -0
  33. package/dist/frameworkTableAssembly-C_7Z-rMs.js +2 -0
  34. package/dist/{frameworkTableAssembly-BwJVEKLr.js → frameworkTableAssembly-DKx3ba3S.js} +5 -5
  35. package/dist/imagePipeline-B_GVJgm6.js +2 -0
  36. package/dist/imagePipeline-CBZmjT4i.js +127 -0
  37. package/dist/index.js +1 -1
  38. package/dist/{infoCommand-BnRFEF1o.js → infoCommand-_53iOc_j.js} +1 -1
  39. package/dist/{inspect-CtL_xTbu.js → inspect-Bd8-9wsi.js} +1 -1
  40. package/dist/inspect-CuoDInfZ.js +2 -0
  41. package/dist/{inspectGateHint-BjnFubmH.js → inspectGateHint-4LxkNtrz.js} +1 -1
  42. package/dist/inspectMetrics-CGF94puw.js +143 -0
  43. package/dist/manifestBuild-C4-J1-m_.js +2 -0
  44. package/dist/{manifestBuild-CuU1VrSm.js → manifestBuild-Cqgsx2bM.js} +1 -1
  45. package/dist/{metaCommands-CfRLra0s.js → metaCommands-Cn2oboG4.js} +9 -3
  46. package/dist/{migrate-DehuBakM.js → migrate-Cko9rswM.js} +2 -2
  47. package/dist/{pageConvention-cEiRxdab.js → pageConvention-C938S8oC.js} +1 -1
  48. package/dist/{privacyCommand-XejDMvmu.js → privacyCommand-DWTQMC6R.js} +2 -2
  49. package/dist/{probeCommand-C9gazU0H.js → probeCommand-DkGGLknv.js} +83 -24
  50. package/dist/{projectScaffold-mIX_DpSe.js → projectScaffold-B4dmTlwT.js} +1 -1
  51. package/dist/{projectScaffold-BIl97_E6.js → projectScaffold-EzlErR4E.js} +1 -1
  52. package/dist/{renderModeScan-D7J1B7Kw.js → renderModeScan-CUbOeOAg.js} +28 -11
  53. package/dist/{renderProfile-1OWWAAtx.js → renderProfile-CskIgAfn.js} +2 -2
  54. package/dist/{runtimeTrace-ZsBU7Tkx.js → runtimeTrace-c0APJz7E.js} +1 -1
  55. package/dist/{sdkgen-O4XqWOjM.js → sdkgen-BiQCgIEr.js} +1 -1
  56. package/dist/serveCommand-CueKQgzl.js +2443 -0
  57. package/dist/serveCommand-DsnrVN3U.js +2 -0
  58. package/dist/serveEntry.js +1 -1
  59. package/dist/start-BJzZLbt8.js +3 -0
  60. package/dist/start-ekPan8BT.js +1510 -0
  61. package/dist/startEntry.js +1 -1
  62. package/dist/{staticCommand-Dr2M6tpU.js → staticCommand-xlSL-IWk.js} +1 -1
  63. package/dist/{test-rXFq4S76.js → test-BWPQcRoB.js} +1 -1
  64. package/dist/updateCommand-Bqql_rsQ.js +2 -0
  65. package/dist/{updateCommand-Bs322Q78.js → updateCommand-C_8I8Rzo.js} +139 -115
  66. package/dist/webDev-C7jWJ5dX.js +2 -0
  67. package/dist/{webDev-B-ubQEMX.js → webDev-oczpugbx.js} +1767 -913
  68. package/dist/{webhooksCommand-FLYY9IXh.js → webhooksCommand-4SVPDjKg.js} +1 -1
  69. package/package.json +72 -18
  70. package/templates/AGENTS.core.md +11 -0
  71. package/templates/AGENTS.md +19 -6
  72. package/templates/agent-docs/_index.md +8 -6
  73. package/templates/agent-docs/_manifest.json +31 -15
  74. package/templates/agent-docs/ai.md +2 -2
  75. package/templates/agent-docs/authentication.md +1 -1
  76. package/templates/agent-docs/cli.md +97 -15
  77. package/templates/agent-docs/configuration.md +17 -0
  78. package/templates/agent-docs/data.md +680 -33
  79. package/templates/agent-docs/database/advancedqueries.md +7 -7
  80. package/templates/agent-docs/database/columntypes.md +2 -2
  81. package/templates/agent-docs/database/querying.md +1 -1
  82. package/templates/agent-docs/database/schema.md +2 -2
  83. package/templates/agent-docs/database/seedsdialects.md +2 -2
  84. package/templates/agent-docs/database/transactions.md +3 -3
  85. package/templates/agent-docs/deployment.md +30 -3
  86. package/templates/agent-docs/internationalization.md +2 -2
  87. package/templates/agent-docs/introduction.md +52 -0
  88. package/templates/agent-docs/local-first-mobile.md +132 -7
  89. package/templates/agent-docs/observability.md +2 -0
  90. package/templates/agent-docs/plugins/ai-flows.md +1 -1
  91. package/templates/agent-docs/plugins/audit.md +5 -5
  92. package/templates/agent-docs/plugins/auth.md +1 -1
  93. package/templates/agent-docs/plugins/cdc-out.md +2 -2
  94. package/templates/agent-docs/plugins/comments.md +142 -0
  95. package/templates/agent-docs/plugins/notifications.md +47 -4
  96. package/templates/agent-docs/plugins/presence.md +16 -3
  97. package/templates/agent-docs/plugins/prometheus.md +1 -1
  98. package/templates/agent-docs/plugins/queue.md +129 -0
  99. package/templates/agent-docs/plugins/{versioning.md → row-history.md} +22 -22
  100. package/templates/agent-docs/plugins/storage.md +2 -2
  101. package/templates/agent-docs/plugins.md +38 -12
  102. package/templates/agent-docs/reference.md +54 -5
  103. package/templates/agent-docs/routing.md +868 -50
  104. package/templates/agent-docs/schema-driven-ui.md +292 -5
  105. package/templates/agent-docs/security.md +125 -8
  106. package/templates/agent-docs/templates/apibackends.md +14 -14
  107. package/templates/agent-docs/templates/overview.md +1 -1
  108. package/templates/agent-docs/whats-new.md +171 -54
  109. package/templates/apps/api-ai/package.json +6 -7
  110. package/templates/apps/api-ai/tests/summarize.test.ts +1 -1
  111. package/templates/apps/api-auth/package.json +8 -8
  112. package/templates/apps/api-backend/package.json +7 -7
  113. package/templates/apps/api-backend-deactivation/package.json +7 -7
  114. package/templates/apps/api-backend-mail/package.json +8 -8
  115. package/templates/apps/api-backend-mariadb/package.json +9 -9
  116. package/templates/apps/api-backend-sqlite/package.json +8 -8
  117. package/templates/apps/api-backend-storage/package.json +8 -8
  118. package/templates/apps/api-cms/package.json +9 -10
  119. package/templates/apps/api-collab/package.json +8 -8
  120. package/templates/apps/api-data-advanced/package.json +8 -8
  121. package/templates/apps/api-durable/package.json +8 -8
  122. package/templates/apps/api-feature-flags/package.json +9 -9
  123. package/templates/apps/api-governance/package.json +8 -8
  124. package/templates/apps/api-kv/package.json +8 -8
  125. package/templates/apps/api-moderation/package.json +8 -8
  126. package/templates/apps/api-observability/package.json +8 -8
  127. package/templates/apps/api-ratelimit/package.json +8 -8
  128. package/templates/apps/api-rbac/package.json +8 -8
  129. package/templates/apps/api-rest/package.json +7 -7
  130. package/templates/apps/{api-versioning → api-row-history}/README.md +3 -3
  131. package/templates/apps/{api-versioning → api-row-history}/actions/documents.asOf.action.server.ts +1 -1
  132. package/templates/apps/{api-versioning → api-row-history}/actions/documents.history.action.server.ts +1 -1
  133. package/templates/apps/{api-versioning → api-row-history}/app.config.ts +3 -3
  134. package/templates/apps/{api-versioning → api-row-history}/database/schema.ts +1 -1
  135. package/templates/apps/{api-versioning → api-row-history}/mutations/documents.create.mutation.server.ts +1 -1
  136. package/templates/apps/{api-versioning → api-row-history}/mutations/documents.create.mutation.ts +1 -1
  137. package/templates/apps/{api-versioning → api-row-history}/mutations/documents.update.mutation.ts +1 -1
  138. package/templates/apps/{api-versioning → api-row-history}/package.json +8 -8
  139. package/templates/apps/api-row-history/template.json +6 -0
  140. package/templates/apps/{api-versioning → api-row-history}/tests/documents.create.test.ts +1 -1
  141. package/templates/apps/api-saas/app.config.ts +1 -0
  142. package/templates/apps/api-saas/package.json +10 -11
  143. package/templates/apps/api-saas-starter/package.json +10 -10
  144. package/templates/apps/api-search/package.json +8 -8
  145. package/templates/apps/api-status/package.json +8 -8
  146. package/templates/apps/api-webhooks/package.json +9 -9
  147. package/templates/apps/changelog/app.config.ts +26 -2
  148. package/templates/apps/changelog/content/releases/{0.1.0.mdx → v0-1-0.mdx} +0 -1
  149. package/templates/apps/changelog/content/releases/{0.2.0.mdx → v0-2-0.mdx} +0 -1
  150. package/templates/apps/changelog/package.json +8 -8
  151. package/templates/apps/changelog/src/collections/releases.collection.ts +48 -0
  152. package/templates/apps/changelog/src/globals.d.ts +1 -1
  153. package/templates/apps/changelog/src/locales/de.ts +1 -1
  154. package/templates/apps/changelog/src/locales/en.ts +1 -1
  155. package/templates/apps/changelog/src/pages/[locale]/[slug]/page.tsx +7 -4
  156. package/templates/apps/changelog/src/pages/[locale]/mirrors.test.tsx +13 -41
  157. package/templates/apps/changelog/src/pages/[slug]/page.test.tsx +26 -51
  158. package/templates/apps/changelog/src/pages/[slug]/page.tsx +21 -19
  159. package/templates/apps/changelog/src/pages/page.test.tsx +14 -37
  160. package/templates/apps/changelog/src/pages/page.tsx +18 -12
  161. package/templates/apps/edge-functions/package.json +2 -2
  162. package/templates/apps/frontend-admin/package.json +8 -8
  163. package/templates/apps/frontend-app/package.json +9 -9
  164. package/templates/apps/frontend-auth/package.json +8 -8
  165. package/templates/apps/frontend-blank/package.json +7 -7
  166. package/templates/apps/frontend-cms/package.json +9 -9
  167. package/templates/apps/frontend-collab/package.json +10 -10
  168. package/templates/apps/frontend-collab/src/pages/page.test.tsx +10 -9
  169. package/templates/apps/frontend-collab/src/pages/page.tsx +42 -65
  170. package/templates/apps/frontend-contact/package.json +7 -7
  171. package/templates/apps/frontend-dashboard/package.json +7 -7
  172. package/templates/apps/frontend-docs/content/docs/de/guides/first-page.md +4 -0
  173. package/templates/apps/frontend-docs/content/docs/de/intro/getting-started.md +4 -0
  174. package/templates/apps/frontend-docs/content/docs/en/guides/first-page.md +4 -0
  175. package/templates/apps/frontend-docs/content/docs/en/intro/getting-started.md +4 -0
  176. package/templates/apps/frontend-docs/package.json +8 -7
  177. package/templates/apps/frontend-docs/src/collections/docs.collection.ts +21 -0
  178. package/templates/apps/frontend-docs/src/locales/de.ts +0 -5
  179. package/templates/apps/frontend-docs/src/locales/en.ts +0 -5
  180. package/templates/apps/frontend-docs/src/pages/[locale]/docs/[...slug]/page.tsx +17 -9
  181. package/templates/apps/frontend-docs/src/pages/[locale]/mirrors.test.tsx +10 -5
  182. package/templates/apps/frontend-docs/src/pages/[locale]/page.tsx +8 -0
  183. package/templates/apps/frontend-docs/src/pages/docs/[...slug]/page.test.tsx +53 -15
  184. package/templates/apps/frontend-docs/src/pages/docs/[...slug]/page.tsx +27 -33
  185. package/templates/apps/frontend-docs/src/pages/page.test.tsx +17 -3
  186. package/templates/apps/frontend-docs/src/pages/page.tsx +16 -12
  187. package/templates/apps/frontend-i18n/package.json +6 -6
  188. package/templates/apps/frontend-landing/package.json +6 -7
  189. package/templates/apps/frontend-portal/package.json +8 -8
  190. package/templates/apps/frontend-saas/package.json +8 -8
  191. package/templates/apps/frontend-spa/package.json +7 -7
  192. package/templates/apps/frontend-ssr/package.json +7 -7
  193. package/templates/apps/frontend-ssr-api/package.json +8 -8
  194. package/templates/apps/frontend-static-blog/content/posts/cms-to-ssg.md +12 -0
  195. package/templates/apps/frontend-static-blog/content/posts/hello-static.md +12 -0
  196. package/templates/apps/frontend-static-blog/content/posts/islands-not-hydration.md +14 -0
  197. package/templates/apps/frontend-static-blog/package.json +8 -6
  198. package/templates/apps/frontend-static-blog/src/collections/posts.collection.ts +27 -0
  199. package/templates/apps/frontend-static-blog/src/pages/[locale]/blog/[slug]/page.tsx +7 -4
  200. package/templates/apps/frontend-static-blog/src/pages/[locale]/mirrors.test.tsx +7 -1
  201. package/templates/apps/frontend-static-blog/src/pages/blog/[slug]/page.test.tsx +19 -9
  202. package/templates/apps/frontend-static-blog/src/pages/blog/[slug]/page.tsx +19 -21
  203. package/templates/apps/frontend-static-blog/src/pages/page.test.tsx +18 -5
  204. package/templates/apps/frontend-static-blog/src/pages/page.tsx +21 -14
  205. package/templates/apps/frontend-status/package.json +8 -8
  206. package/templates/apps/mobile-app/package.json +4 -4
  207. package/dist/agentsMd-Bu_XQgVf.js +0 -2
  208. package/dist/apiBuild-GDKuGOMV.js +0 -2
  209. package/dist/build-DETLZAFt.js +0 -752
  210. package/dist/checkCommand-CWcnDArJ.js +0 -2
  211. package/dist/codegen-DiMn2KkZ.js +0 -2
  212. package/dist/dbCommand-C27HIsGE.js +0 -2
  213. package/dist/dev-CK522MV5.js +0 -3
  214. package/dist/doctorCommand-BK4l18eG.js +0 -2
  215. package/dist/fileConventions-Cof68_BL.js +0 -33
  216. package/dist/frameworkTableAssembly-CVDB2hCq.js +0 -2
  217. package/dist/inspect-CuGDYES0.js +0 -2
  218. package/dist/inspectMetrics-CfdKLh6t.js +0 -72
  219. package/dist/manifestBuild-CPjhvM62.js +0 -2
  220. package/dist/serveCommand-BRnPCxVd.js +0 -2
  221. package/dist/serveCommand-DdiYNBBu.js +0 -2362
  222. package/dist/start-BLNmWkLa.js +0 -1154
  223. package/dist/start-Dzicuyw8.js +0 -3
  224. package/dist/updateCommand-eXB35SEv.js +0 -2
  225. package/dist/webDev-DposiF3j.js +0 -2
  226. package/templates/apps/api-versioning/template.json +0 -6
  227. package/templates/apps/changelog/scripts/generate-rss.mjs +0 -38
  228. package/templates/apps/changelog/src/lib/releases.ts +0 -21
  229. package/templates/apps/frontend-static-blog/src/content/posts.ts +0 -64
  230. /package/templates/apps/{api-versioning → api-row-history}/actions/documents.asOf.action.ts +0 -0
  231. /package/templates/apps/{api-versioning → api-row-history}/actions/documents.history.action.ts +0 -0
  232. /package/templates/apps/{api-versioning → api-row-history}/mutations/documents.update.mutation.server.ts +0 -0
  233. /package/templates/apps/{api-versioning → api-row-history}/tsconfig.json +0 -0
@@ -1,4 +1,4 @@
1
- import { c as e, i as t } from "./dev-kdAg9Q7l.js";
1
+ import { c as e, i as t } from "./dev-C6LGF4iY.js";
2
2
  import { n, t as r } from "./cliArgs-D4p8n7EE.js";
3
3
  import { r as i } from "./appPort-B_HpJ_ck.js";
4
4
  import { resolve as a } from "node:path";
@@ -1,4 +1,4 @@
1
- import { c as e, i as t } from "./dev-kdAg9Q7l.js";
1
+ import { c as e, i as t } from "./dev-C6LGF4iY.js";
2
2
  import { Effect as n } from "effect";
3
3
  import { embedMany as r } from "@voltro/ai";
4
4
  //#region src/embeddingsBackfill.ts
@@ -1,5 +1,5 @@
1
- import { c as e } from "./dev-kdAg9Q7l.js";
2
- import { _t as t, ht as n, mt as r, vt as i } from "./webDev-B-ubQEMX.js";
1
+ import { c as e } from "./dev-C6LGF4iY.js";
2
+ import { Gt as t, Ht as n, Kt as r, Ut as i } from "./webDev-oczpugbx.js";
3
3
  import { join as a } from "node:path";
4
4
  import { promises as o } from "node:fs";
5
5
  import { createLogger as s } from "@voltro/logger";
@@ -21,27 +21,27 @@ var u = s({ scope: "voltro:env" }), d = "# Environment for this app", f = async
21
21
  }, h = async (e) => {
22
22
  let t = await f(e);
23
23
  if (!t) return u.error("no app.config.ts found in the current directory"), 1;
24
- let n = r(t.name, t.input), i = `${p("KEY", 32)} ${p("OWNER", 16)} ${p("ACCESS", 8)} ${p("REQ", 4)} SET`;
25
- u.info(`env manifest — ${n.app} (${n.summary.total} vars, ${n.summary.set} set)`), m(i);
26
- for (let e of n.entries) {
24
+ let r = n(t.name, t.input), i = `${p("KEY", 32)} ${p("OWNER", 16)} ${p("ACCESS", 8)} ${p("REQ", 4)} SET`;
25
+ u.info(`env manifest — ${r.app} (${r.summary.total} vars, ${r.summary.set} set)`), m(i);
26
+ for (let e of r.entries) {
27
27
  let t = e.isSet ? "✓" : e.satisfied ? "·" : "✗";
28
28
  m(`${p(e.key, 32)} ${p(e.owner, 16)} ${p(e.access, 8)} ${p(e.required ? "yes" : "", 4)} ${t}`);
29
29
  }
30
- return n.summary.missingRequired > 0 ? (u.error(`${n.summary.missingRequired} required var(s) are unset`), 1) : 0;
30
+ return r.summary.missingRequired > 0 ? (u.error(`${r.summary.missingRequired} required var(s) are unset`), 1) : 0;
31
31
  }, g = async (e, t) => {
32
- let r = await f(e);
33
- if (!r) return u.error("no app.config.ts found in the current directory"), 1;
34
- let i = n(r.input, ["Environment for this app — generated from app.config.ts `env` + plugin declarations.", "Regenerate with `voltro env sync`. Copy to `.env` and fill in the blanks."]), s = a(e, ".env.example"), c = await o.readFile(s, "utf8").catch(() => null);
32
+ let n = await f(e);
33
+ if (!n) return u.error("no app.config.ts found in the current directory"), 1;
34
+ let r = i(n.input, ["Environment for this app — generated from app.config.ts `env` + plugin declarations.", "Regenerate with `voltro env sync`. Copy to `.env` and fill in the blanks."]), s = a(e, ".env.example"), c = await o.readFile(s, "utf8").catch(() => null);
35
35
  if (c !== null && !c.startsWith(d) && !t) {
36
36
  let t = a(e, ".env.example.generated");
37
- return await o.writeFile(t, i, "utf8"), u.warn(".env.example exists and is not framework-generated — wrote .env.example.generated instead", { hint: "merge it by hand, or pass --force to overwrite .env.example" }), 0;
37
+ return await o.writeFile(t, r, "utf8"), u.warn(".env.example exists and is not framework-generated — wrote .env.example.generated instead", { hint: "merge it by hand, or pass --force to overwrite .env.example" }), 0;
38
38
  }
39
- return await o.writeFile(s, i, "utf8"), u.info("wrote .env.example", { app: r.name }), 0;
39
+ return await o.writeFile(s, r, "utf8"), u.info("wrote .env.example", { app: n.name }), 0;
40
40
  }, _ = async (n) => {
41
- let r = await e(n).catch(() => null);
42
- if (!r) return u.error("no app.config.ts found in the current directory"), 1;
43
- let a = l(r.env) ? r.env : void 0;
44
- return a ? (r.type === "web" ? (await t(n, a), u.info("wrote src/voltro-env.d.ts (publicEnv augmentation)", { app: r.name ?? "app" })) : (await i(n, a), u.info("wrote env.generated.d.ts (serverEnv augmentation)", { app: r.name ?? "app" })), 0) : (u.warn("no `defineEnv` declared in app.config.ts — nothing to generate", { hint: "add `env: defineEnv({ ... })` to app.config.ts (see @voltro/env)" }), 0);
41
+ let i = await e(n).catch(() => null);
42
+ if (!i) return u.error("no app.config.ts found in the current directory"), 1;
43
+ let a = l(i.env) ? i.env : void 0;
44
+ return a ? (i.type === "web" ? (await t(n, a), u.info("wrote src/voltro-env.d.ts (publicEnv augmentation)", { app: i.name ?? "app" })) : (await r(n, a), u.info("wrote env.generated.d.ts (serverEnv augmentation)", { app: i.name ?? "app" })), 0) : (u.warn("no `defineEnv` declared in app.config.ts — nothing to generate", { hint: "add `env: defineEnv({ ... })` to app.config.ts (see @voltro/env)" }), 0);
45
45
  }, v = () => {
46
46
  let e = c();
47
47
  return u.info(`${e.length} framework env vars for turbo.json globalPassThroughEnv:`), m(JSON.stringify([...e].sort(), null, 2)), u.info("merge these into the workspace turbo.json `globalPassThroughEnv` array (+ your own app vars)."), 0;
@@ -1,6 +1,6 @@
1
1
  import { n as e } from "./cliOutput-D1tSBoRM.js";
2
- import { t } from "./checkCommand-DNuPiWMc.js";
3
- import { i as n, n as r } from "./codemodRunner-BDVixlSw.js";
2
+ import { i as t } from "./checkCommand-C5elt0tW.js";
3
+ import { i as n, n as r } from "./codemodRunner-BjtB2lq6.js";
4
4
  import { basename as i, join as a, resolve as o } from "node:path";
5
5
  import { branchNamespaceName as s, planBranchProvision as c } from "@voltro/database";
6
6
  import { readFile as l } from "node:fs/promises";
@@ -0,0 +1,35 @@
1
+ //#region src/fileConventions.ts
2
+ var e = /\.(query|mutation|action|stream)\.ts$/, t = /\.(query|mutation|action|stream)\.server\.ts$/, n = /\.event\.ts$/, r = /\.ws\.ts$/, i = /\.workflow\.tsx$/, a = /\.workflow\.server\.tsx$/, o = /\.workflow\.tsx?$/, s = /\.trigger\.tsx?$/, c = /\.cron\.tsx?$/, l = /\.webhook\.tsx?$/, u = /\.outbox\.tsx?$/, d = /\.consumer\.tsx?$/, f = /\.subscribe\.tsx?$/, p = /\.reaction\.tsx?$/, m = /\.aggregate\.tsx?$/, h = /\.expectation\.ts$/, g = /\.budget\.ts$/, _ = /\.experiment\.ts$/, v = /\.startup\.tsx?$/, y = /\.seed\.ts$/, b = /\.relations\.ts$/, x = /\.entity\.ts$|\.schema\.ts$|^schema\.ts$/, S = (e) => o.test(e) && !i.test(e) && !a.test(e), C = /(?:^|\/)page\.tsx$/, w = /\.island\.tsx?$/, T = /\.component\.tsx$/, E = /\.component\.ui\.tsx$/, D = /\.hook\.tsx?$/, O = /\.internal\.tsx?$/, k = /\.types\.tsx?$/, A = /\.fixture\.tsx?$/, j = /\.tracking\.tsx?$/, M = /\.store\.tsx?$/, N = /\.client\.tsx?$/, P = /\.(test|spec)\.tsx?$/, F = [
3
+ e,
4
+ t,
5
+ o,
6
+ a,
7
+ s,
8
+ c,
9
+ l,
10
+ u,
11
+ d,
12
+ f,
13
+ p,
14
+ m,
15
+ v,
16
+ h,
17
+ g,
18
+ _,
19
+ y,
20
+ b,
21
+ x,
22
+ /\.route\.tsx?$/,
23
+ n,
24
+ r,
25
+ M,
26
+ N,
27
+ /\.(agent|tool|email|connection|serverless|server|config|generated)\.tsx?$/
28
+ ], I = (e) => F.some((t) => t.test(e)), L = /* @__PURE__ */ new Set([
29
+ "layout.tsx",
30
+ "error.tsx",
31
+ "loading.tsx",
32
+ "not-found.tsx"
33
+ ]);
34
+ //#endregion
35
+ export { l as A, v as C, j as D, P as E, I as F, S as I, o as M, a as N, s as O, r as P, y as S, f as T, e as _, d as a, b, h as c, D as d, O as f, L as g, C as h, E as i, i as j, k, _ as l, u as m, g as n, c as o, w as p, T as r, n as s, m as t, A as u, t as v, M as w, x, p as y };
@@ -1,4 +1,4 @@
1
- import { C as e, E as t, O as n, T as r, d as i, h as a, i as o, l as s, m as c, r as l, u } from "./fileConventions-Cof68_BL.js";
1
+ import { D as e, E as t, d as n, f as r, g as i, h as a, i as o, k as s, r as c, u as l, w as u } from "./fileConventions-DASGEmj-.js";
2
2
  import { n as d, t as f } from "./tsconfigPaths-BWXBWgcl.js";
3
3
  import { dirname as p, join as m, relative as h, resolve as g, sep as _ } from "node:path";
4
4
  import { existsSync as v, readFileSync as y, readdirSync as b, statSync as x } from "node:fs";
@@ -43,40 +43,40 @@ var T = ".voltro-vendored", E = (e, t) => {
43
43
  },
44
44
  {
45
45
  id: "component",
46
- re: l,
46
+ re: c,
47
47
  needsTest: !0
48
48
  },
49
49
  {
50
50
  id: "hook",
51
- re: u,
51
+ re: n,
52
52
  needsTest: !0
53
53
  },
54
54
  {
55
55
  id: "tracking",
56
- re: t,
56
+ re: e,
57
57
  needsTest: !0
58
58
  },
59
59
  {
60
60
  id: "store",
61
- re: e,
61
+ re: u,
62
62
  needsTest: !0
63
63
  },
64
64
  {
65
65
  id: "internal",
66
- re: i,
66
+ re: r,
67
67
  needsTest: !0
68
68
  },
69
69
  {
70
70
  id: "fixture",
71
- re: s,
71
+ re: l,
72
72
  needsTest: !1
73
73
  },
74
74
  {
75
75
  id: "types",
76
- re: n,
76
+ re: s,
77
77
  needsTest: !1
78
78
  }
79
- ], A = (e) => k.find((t) => t.re.test(e))?.id ?? null, j = (e) => r.test(e), M = /* @__PURE__ */ new Set([
79
+ ], A = (e) => k.find((t) => t.re.test(e))?.id ?? null, j = (e) => t.test(e), M = /* @__PURE__ */ new Set([
80
80
  "useMutation",
81
81
  "useAction",
82
82
  "useUpload",
@@ -244,10 +244,10 @@ var T = ".voltro-vendored", E = (e, t) => {
244
244
  scanned: 0,
245
245
  vendored: n
246
246
  };
247
- let i = new C({
247
+ let o = new C({
248
248
  useInMemoryFileSystem: !0,
249
249
  skipAddingFilesFromTsConfig: !0
250
- }), o = [], s = (t) => h(e, t), l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
250
+ }), s = [], c = (t) => h(e, t), l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
251
251
  for (let t of r) {
252
252
  let n;
253
253
  try {
@@ -257,7 +257,7 @@ var T = ".voltro-vendored", E = (e, t) => {
257
257
  }
258
258
  let r;
259
259
  try {
260
- r = i.createSourceFile(t.endsWith("x") ? "/scan.tsx" : "/scan.ts", n, { overwrite: !0 });
260
+ r = o.createSourceFile(t.endsWith("x") ? "/scan.tsx" : "/scan.ts", n, { overwrite: !0 });
261
261
  } catch {
262
262
  continue;
263
263
  }
@@ -293,40 +293,40 @@ var T = ".voltro-vendored", E = (e, t) => {
293
293
  for (let e of r) {
294
294
  let t = A(e), n = l.get(e), r = u.get(e);
295
295
  if (n === void 0 || r === void 0) continue;
296
- let i = j(e);
297
- t !== null && !i && (g += 1);
296
+ let o = j(e);
297
+ t !== null && !o && (g += 1);
298
298
  let f = p.get(e) ?? [];
299
- if ((t === "component" || t === "component.ui") && !i) {
299
+ if ((t === "component" || t === "component.ui") && !o) {
300
300
  let t = J(n.components);
301
- (n.components.length === 0 || !t) && o.push({
301
+ (n.components.length === 0 || !t) && s.push({
302
302
  rule: "component/one-per-file",
303
- file: s(e),
303
+ file: c(e),
304
304
  severity: "error",
305
305
  detail: n.components.length === 0 ? "declares a component file but exports no component" : `exports ${n.components.length} unrelated components: ${n.components.join(", ")}`,
306
306
  fix: "a component file exports ONE component — or one NAMESPACED family sharing its name (`Card`, `CardHeader`, `CardTitle`), which is one component with parts. Types alongside are fine. Unrelated components belong in their own files"
307
- }), n.hooks.length > 0 && o.push({
307
+ }), n.hooks.length > 0 && s.push({
308
308
  rule: "component/no-hook-export",
309
- file: s(e),
309
+ file: c(e),
310
310
  severity: "error",
311
311
  detail: `also exports hook(s): ${n.hooks.join(", ")}`,
312
312
  fix: "move the hook into its own *.hook.ts — a file exporting both is two files wearing one name, and neither can be reused without dragging the other"
313
313
  });
314
314
  }
315
- if (t === "hook" && !i && (n.hooks.length !== 1 && o.push({
315
+ if (t === "hook" && !o && (n.hooks.length !== 1 && s.push({
316
316
  rule: "hook/one-per-file",
317
- file: s(e),
317
+ file: c(e),
318
318
  severity: "error",
319
319
  detail: n.hooks.length === 0 ? "declares a hook file but exports no use* hook" : `exports ${n.hooks.length} hooks: ${n.hooks.join(", ")}`,
320
320
  fix: "a hook file exports exactly ONE use* hook (types alongside are fine)"
321
- }), n.components.length > 0 && o.push({
321
+ }), n.components.length > 0 && s.push({
322
322
  rule: "hook/no-component-export",
323
- file: s(e),
323
+ file: c(e),
324
324
  severity: "error",
325
325
  detail: `also exports component(s): ${n.components.join(", ")}`,
326
326
  fix: "move the component into its own *.component.tsx"
327
- })), t === "types" && n.hasRuntimeExport && o.push({
327
+ })), t === "types" && n.hasRuntimeExport && s.push({
328
328
  rule: "types/runtime-export",
329
- file: s(e),
329
+ file: c(e),
330
330
  severity: "error",
331
331
  detail: `exports runtime value(s): ${[
332
332
  ...n.components,
@@ -336,80 +336,80 @@ var T = ".voltro-vendored", E = (e, t) => {
336
336
  fix: "a *.types.ts has NO runtime export. That is what makes importing it provably free AND makes it impossible for it to sit in a runtime import cycle — the guarantee is the point, so move the value to a sibling module"
337
337
  }), t === "internal") {
338
338
  let t = f.filter((t) => !Y(t, e));
339
- t.length > 0 && o.push({
339
+ t.length > 0 && s.push({
340
340
  rule: "internal/foreign-import",
341
- file: s(e),
341
+ file: c(e),
342
342
  severity: "error",
343
- detail: `imported from outside its own directory by: ${t.slice(0, 5).map(s).join(", ")}${t.length > 5 ? ` (+${t.length - 5})` : ""}`,
343
+ detail: `imported from outside its own directory by: ${t.slice(0, 5).map(c).join(", ")}${t.length > 5 ? ` (+${t.length - 5})` : ""}`,
344
344
  fix: "export it through the feature's public module, or move the importer inside. `.internal` is the promise that refactoring within this directory breaks nobody — a foreign import revokes it silently, which is how a feature boundary rots without a single review comment"
345
345
  });
346
346
  }
347
347
  if (t === "fixture") {
348
348
  let t = f.filter((e) => !j(e) && A(e) !== "fixture");
349
- t.length > 0 && o.push({
349
+ t.length > 0 && s.push({
350
350
  rule: "fixture/production-import",
351
- file: s(e),
351
+ file: c(e),
352
352
  severity: "error",
353
- detail: `imported by non-test file(s): ${t.slice(0, 5).map(s).join(", ")}`,
353
+ detail: `imported by non-test file(s): ${t.slice(0, 5).map(c).join(", ")}`,
354
354
  fix: "test material must not be reachable from a production path — it ships in the bundle, and it is written to be convenient rather than correct"
355
355
  });
356
356
  }
357
- if (t === "component.ui" && !i) {
357
+ if (t === "component.ui" && !o) {
358
358
  let t = [...r.namedBindings].filter((e) => M.has(e)).sort();
359
- t.length > 0 && o.push({
359
+ t.length > 0 && s.push({
360
360
  rule: "ui/no-write",
361
- file: s(e),
361
+ file: c(e),
362
362
  severity: "error",
363
363
  detail: `imports write hook(s): ${t.join(", ")}`,
364
364
  fix: "a *.component.ui.tsx renders; it does not write. Lift the mutation into the *.component.tsx that owns it and pass a handler down. Reading (useT / useCan / usePermissions) stays allowed — threading those through props is prop-drilling, not reusability"
365
365
  });
366
- let n = m(e), i = n.filter((e) => {
366
+ let n = m(e), o = n.filter((e) => {
367
367
  let t = A(e);
368
- return t === "component" || t === "component.ui" || c.test(e) || a.has(e.slice(e.lastIndexOf(_) + 1));
368
+ return t === "component" || t === "component.ui" || a.test(e) || i.has(e.slice(e.lastIndexOf(_) + 1));
369
369
  });
370
- n.length === 0 ? o.push({
370
+ n.length === 0 ? s.push({
371
371
  rule: "ui/orphaned",
372
- file: s(e),
372
+ file: c(e),
373
373
  severity: "warn",
374
374
  detail: "nothing imports it",
375
375
  fix: "render it from a *.component.tsx or a page, or delete it — an unrendered presentational component is carried, reviewed and refactored forever without reaching a user"
376
- }) : i.length === 0 && o.push({
376
+ }) : o.length === 0 && s.push({
377
377
  rule: "ui/unlinked",
378
- file: s(e),
378
+ file: c(e),
379
379
  severity: "warn",
380
- detail: `reached only by: ${n.slice(0, 5).map(s).join(", ")}${n.length > 5 ? ` (+${n.length - 5})` : ""} — barrels resolved through`,
380
+ detail: `reached only by: ${n.slice(0, 5).map(c).join(", ")}${n.length > 5 ? ` (+${n.length - 5})` : ""} — barrels resolved through`,
381
381
  fix: "a presentational component should be reached from a *.component.tsx, another *.component.ui.tsx, or a page"
382
382
  });
383
383
  }
384
- if (t === "store" && !i) {
384
+ if (t === "store" && !o) {
385
385
  let t = d.get(e)?.get("defineStore") ?? 0;
386
- t !== 1 && o.push({
386
+ t !== 1 && s.push({
387
387
  rule: "store/one-per-file",
388
- file: s(e),
388
+ file: c(e),
389
389
  severity: "error",
390
390
  detail: t === 0 ? "declares a store file but calls no defineStore()" : `declares ${t} stores`,
391
391
  fix: "a store file defines exactly ONE store — the SSR seed pass and devtools address stores by name, so two in a file makes both harder to find and neither easier to reason about"
392
392
  });
393
393
  let n = [...d.get(e)?.keys() ?? []].filter((e) => P.has(e)).sort();
394
- n.length > 0 && o.push({
394
+ n.length > 0 && s.push({
395
395
  rule: "store/mirrors-server-state",
396
- file: s(e),
396
+ file: c(e),
397
397
  severity: "error",
398
398
  detail: `reads server state here: ${n.join(", ")}`,
399
399
  fix: "a store holds CLIENT state. A subscription is already live server state; copying it into a store gives you a second copy that does not live, and the page then shows the stale one — a bug that reads as \"reactivity is broken\". Read the subscription where you render it"
400
400
  });
401
401
  }
402
- if (t !== "tracking" && !i) {
402
+ if (t !== "tracking" && !o) {
403
403
  let t = [...d.get(e)?.keys() ?? []].filter((e) => N.has(e)).sort();
404
- t.length > 0 && o.push({
404
+ t.length > 0 && s.push({
405
405
  rule: "tracking/outside-tracking-file",
406
- file: s(e),
406
+ file: c(e),
407
407
  severity: "error",
408
408
  detail: `calls ${t.join(", ")} outside a *.tracking.ts`,
409
409
  fix: "move the defineTracking(...) spec into a *.tracking.ts and import it here. The event catalogue — names, property bags, the decisions about what personal data goes out — belongs in one place you can list; calling useTracking with a spec from there is fine"
410
410
  });
411
411
  }
412
- if (k.find((e) => e.id === t)?.needsTest === !0 && !i) {
412
+ if (k.find((e) => e.id === t)?.needsTest === !0 && !o) {
413
413
  let t = e.replace(/\.tsx?$/, ""), n = e.endsWith("x") ? "tsx" : "ts";
414
414
  ["test", "spec"].flatMap((e) => [`${t}.${e}.ts`, `${t}.${e}.tsx`]).some((e) => {
415
415
  try {
@@ -417,17 +417,17 @@ var T = ".voltro-vendored", E = (e, t) => {
417
417
  } catch {
418
418
  return !1;
419
419
  }
420
- }) || o.push({
420
+ }) || s.push({
421
421
  rule: "convention/missing-test",
422
- file: s(e),
422
+ file: c(e),
423
423
  severity: "warn",
424
424
  detail: "no test beside it",
425
- fix: `add ${s(t)}.test.${n} — the name is derivable, so write it with the file. A shallow test earns its place: what it buys is that something MOUNTS the component, and a render loop, a crashing effect or a missing provider is invisible until then. One app wrote 251 of these and the first run found a render loop that made a page take 423 s and exhaust the heap — in a browser it had looked usable`
425
+ fix: `add ${c(t)}.test.${n} — the name is derivable, so write it with the file. A shallow test earns its place: what it buys is that something MOUNTS the component, and a render loop, a crashing effect or a missing provider is invisible until then. One app wrote 251 of these and the first run found a render loop that made a page take 423 s and exhaust the heap — in a browser it had looked usable`
426
426
  });
427
427
  }
428
428
  }
429
- return o.sort((e, t) => e.file === t.file ? e.rule.localeCompare(t.rule) : e.file.localeCompare(t.file)), {
430
- findings: o,
429
+ return s.sort((e, t) => e.file === t.file ? e.rule.localeCompare(t.rule) : e.file.localeCompare(t.file)), {
430
+ findings: s,
431
431
  declared: g,
432
432
  scanned: r.length,
433
433
  vendored: n
@@ -0,0 +1,2 @@
1
+ import { o as e, s as t } from "./fontPipeline-Tsh8kZfA.js";
2
+ export { e as loadFontkit, t as loadSubsetFont };
@@ -0,0 +1,152 @@
1
+ import { createHash as e } from "node:crypto";
2
+ //#region src/fontPipeline.ts
3
+ var t = (e) => e.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""), n, r = !1, i = async () => {
4
+ if (n !== void 0) return n;
5
+ try {
6
+ let e = await import("fontkit");
7
+ n = e.default ?? e;
8
+ } catch {
9
+ n = null;
10
+ }
11
+ return n;
12
+ }, a, o = !1, s = async () => {
13
+ if (a !== void 0) return a;
14
+ try {
15
+ let e = await import("subset-font");
16
+ a = e.default ?? e;
17
+ } catch {
18
+ a = null;
19
+ }
20
+ return a;
21
+ }, c = (e, t) => {
22
+ if (e === "fontkit") {
23
+ if (r) return;
24
+ r = !0, t.warn("font pipeline: fontkit is not loadable — fonts still self-host with @font-face + preload, but the size-adjusted fallback metrics (the CLS guard) are SKIPPED. It ships as an optional dependency of @voltro/cli; if your installer omitted optional deps, run `pnpm add -D fontkit`.");
25
+ } else {
26
+ if (o) return;
27
+ o = !0, t.warn("font pipeline: subset-font is not loadable — declared `subsets:` are SKIPPED and the full font files ship. Run `pnpm add -D subset-font` (optional dependency of @voltro/cli that your installer omitted).");
28
+ }
29
+ }, l = {
30
+ Arial: {
31
+ unitsPerEm: 2048,
32
+ ascent: 1854,
33
+ descent: 434,
34
+ lineGap: 67,
35
+ xWidthAvg: 913
36
+ },
37
+ "Times New Roman": {
38
+ unitsPerEm: 2048,
39
+ ascent: 1825,
40
+ descent: 443,
41
+ lineGap: 87,
42
+ xWidthAvg: 832
43
+ }
44
+ }, u = "etaoin shrdlu cmfwyp vbgkqj xz", d = async (e) => {
45
+ let t = await i();
46
+ if (t === null) return null;
47
+ try {
48
+ let n = t.create(Buffer.from(e)), r = n.layout(u).glyphs.map((e) => e.advanceWidth).filter((e) => Number.isFinite(e) && e > 0), i = r.length > 0 ? r.reduce((e, t) => e + t, 0) / r.length : 0;
49
+ return {
50
+ unitsPerEm: n.unitsPerEm,
51
+ ascent: Math.abs(n.ascent),
52
+ descent: Math.abs(n.descent),
53
+ lineGap: Math.abs(n.lineGap ?? 0),
54
+ xWidthAvg: i
55
+ };
56
+ } catch {
57
+ return null;
58
+ }
59
+ }, f = (e) => `${(e * 100).toFixed(4).replace(/\.?0+$/, "")}%`, p = (e, t, n) => {
60
+ let r = l[n];
61
+ if (t.xWidthAvg <= 0 || t.unitsPerEm <= 0) return null;
62
+ let i = t.xWidthAvg / t.unitsPerEm / (r.xWidthAvg / r.unitsPerEm);
63
+ if (!Number.isFinite(i) || i <= 0) return null;
64
+ let a = t.ascent / t.unitsPerEm / i, o = t.descent / t.unitsPerEm / i, s = t.lineGap / t.unitsPerEm / i;
65
+ return [
66
+ "@font-face {",
67
+ ` font-family: '${e} Fallback';`,
68
+ ` src: local('${n}');`,
69
+ ` size-adjust: ${f(i)};`,
70
+ ` ascent-override: ${f(a)};`,
71
+ ` descent-override: ${f(o)};`,
72
+ ` line-gap-override: ${f(s)};`,
73
+ "}"
74
+ ].join("\n");
75
+ }, m = {
76
+ latin: "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD",
77
+ "latin-ext": "U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF"
78
+ }, h = (e) => {
79
+ let t = [];
80
+ for (let n of e.split(",")) {
81
+ let e = /U\+([0-9A-F]{1,6})(?:-([0-9A-F]{1,6}))?/i.exec(n.trim());
82
+ if (!e) continue;
83
+ let r = parseInt(e[1], 16), i = e[2] === void 0 ? r : parseInt(e[2], 16);
84
+ for (let e = r; e <= i && e <= 65535; e += 1) t.push(String.fromCharCode(e));
85
+ }
86
+ return t.join("");
87
+ }, g = async (e, t) => {
88
+ let n = await s();
89
+ if (n === null) return null;
90
+ try {
91
+ let r = await n(Buffer.from(e), h(m[t]), { targetFormat: "woff2" });
92
+ return new Uint8Array(r);
93
+ } catch {
94
+ return null;
95
+ }
96
+ }, _ = (t) => e("sha256").update(t).digest("hex").slice(0, 12), v = (e) => e.endsWith(".woff2") ? "woff2" : e.endsWith(".woff") ? "woff" : e.endsWith(".otf") ? "opentype" : "truetype", y = async (e, n, r = {}) => {
97
+ let a = r.baseUrl ?? "/", o = [], s = [], c = [], l = [], u = /* @__PURE__ */ new Set();
98
+ for (let r of e) {
99
+ let e = r.display ?? "swap", f = r.fallback ?? "Arial", h = null, y = !0;
100
+ for (let t of r.src) {
101
+ let l = await n(t.path);
102
+ h === null && (h = await d(l), h === null && await i() === null && u.add("fontkit"));
103
+ let f = t.weight ?? 400, p = t.style ?? "normal", b = (t, n, i) => {
104
+ let l = n === "woff2" ? "woff2" : n === "woff" ? "woff" : n === "opentype" ? "otf" : "ttf", u = `assets/fonts/${_(t)}.${l}`;
105
+ s.push({
106
+ fileName: u,
107
+ bytes: t,
108
+ preload: y
109
+ }), y && c.push(`${a}${u}`), y = !1, o.push([
110
+ "@font-face {",
111
+ ` font-family: '${r.family}';`,
112
+ ` font-style: ${p};`,
113
+ ` font-weight: ${f};`,
114
+ ` font-display: ${e};`,
115
+ ` src: url('${a}${u}') format('${n}');`,
116
+ ...i === void 0 ? [] : [` unicode-range: ${i};`],
117
+ "}"
118
+ ].join("\n"));
119
+ };
120
+ if (r.subsets !== void 0 && r.subsets.length > 0) {
121
+ let e = !1;
122
+ for (let t of r.subsets) {
123
+ let n = await g(l, t);
124
+ if (n === null) {
125
+ u.add("subset-font");
126
+ break;
127
+ }
128
+ e = !0, b(n, "woff2", m[t]);
129
+ }
130
+ e || b(l, v(t.path));
131
+ } else b(l, v(t.path));
132
+ }
133
+ if (h !== null) {
134
+ let e = p(r.family, h, f);
135
+ e !== null && o.push(e);
136
+ }
137
+ let b = `--font-${t(r.family)}`;
138
+ l.push({
139
+ family: r.family,
140
+ variable: b
141
+ }), o.push(`:root { ${b}: '${r.family}', '${r.family} Fallback', ${f === "Arial" ? "Arial, sans-serif" : "'Times New Roman', serif"}; }`);
142
+ }
143
+ return {
144
+ css: o.join("\n"),
145
+ files: s,
146
+ preloads: c,
147
+ variables: l,
148
+ warnings: [...u]
149
+ };
150
+ };
151
+ //#endregion
152
+ export { _ as a, h as c, c as d, t as i, d as l, y as n, i as o, p as r, s, m as t, g as u };
@@ -0,0 +1,2 @@
1
+ import { c as e, n as t } from "./frameworkTableAssembly-DKx3ba3S.js";
2
+ export { t as assembleFrameworkTables, e as loadAppSchemaInputs };
@@ -1,6 +1,6 @@
1
1
  import { n as e } from "./appModuleLoader-C9r9mxZt.js";
2
2
  import { n as t } from "./declaredSchemaGates-BlcwObhb.js";
3
- import { D as n, a as r, j as i, k as a, x as o } from "./fileConventions-Cof68_BL.js";
3
+ import { A as n, M as r, O as i, S as a, o } from "./fileConventions-DASGEmj-.js";
4
4
  import { basename as s, join as c } from "node:path";
5
5
  import { existsSync as l, promises as u } from "node:fs";
6
6
  import { pathToFileURL as d } from "node:url";
@@ -407,20 +407,20 @@ var we = [
407
407
  connections: r.map((e) => `${e.definition.id} (${e.definition.kind})`),
408
408
  files: r.map((e) => He(s(e.file)))
409
409
  }), r;
410
- }, J = (e) => r.test(e) || o.test(e), Y = async (e) => {
411
- let t = !1, r = !1, o = !1, s = !1, l = !1, d = async (e) => {
410
+ }, J = (e) => o.test(e) || a.test(e), Y = async (e) => {
411
+ let t = !1, a = !1, o = !1, s = !1, l = !1, d = async (e) => {
412
412
  let f = await u.readdir(e, { withFileTypes: !0 }).catch(() => []);
413
413
  for (let u of f) if (u.isDirectory()) {
414
414
  if (u.name === "node_modules" || u.name === "dist" || u.name === ".framework" || u.name.startsWith(".")) continue;
415
415
  await d(c(e, u.name));
416
416
  } else {
417
417
  let e = u.name;
418
- (i.test(e) || n.test(e)) && (t = !0), J(e) && (r = !0), a.test(e) && (o = !0), W.test(e) && (s = !0), q.test(e) && (l = !0);
418
+ (r.test(e) || i.test(e)) && (t = !0), J(e) && (a = !0), n.test(e) && (o = !0), W.test(e) && (s = !0), q.test(e) && (l = !0);
419
419
  }
420
420
  };
421
421
  return await d(e), {
422
422
  workflows: t,
423
- schedules: r,
423
+ schedules: a,
424
424
  webhooks: o,
425
425
  agents: s,
426
426
  connections: l
@@ -0,0 +1,2 @@
1
+ import { c as e, u as t } from "./imagePipeline-CBZmjT4i.js";
2
+ export { e as loadSharp, t as sharpUnavailableReason };