@voltro/cli 0.55.0 → 0.57.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 (175) hide show
  1. package/CHANGELOG.md +691 -0
  2. package/bin/voltro.mjs +24 -0
  3. package/dist/apiBuild-B83Cb2Rv.js +2 -0
  4. package/dist/{apiBuild-CMvLJM_K.js → apiBuild-DDr2aNFd.js} +119 -88
  5. package/dist/bin.js +1 -1
  6. package/dist/{build-S0QOzqPT.js → build-QKP6Bm0J.js} +308 -279
  7. package/dist/buildReport-52gHKgfO.js +64 -0
  8. package/dist/{checkCommand-DNkY5kwF.js → checkCommand-BISqx1OJ.js} +1 -1
  9. package/dist/{checkCommand-fbj9GDjN.js → checkCommand-DUtMWjcR.js} +6 -6
  10. package/dist/{clusterCmd-DrVFCzSj.js → clusterCmd-CdLB1GkT.js} +1 -1
  11. package/dist/{codegen-SIepQtUl.js → codegen-Bth5lUTU.js} +2 -1
  12. package/dist/codegen-DbH7NbCR.js +2 -0
  13. package/dist/{codegenCommand-3TDJezom.js → codegenCommand-DnVuDxwT.js} +11 -11
  14. package/dist/{codemodRunner-C2zxZUIw.js → codemodRunner-BlQPfjzA.js} +222 -0
  15. package/dist/{commands-BBYJ7Q3B.js → commands-CRbxgxv0.js} +35 -35
  16. package/dist/{dashboardCommand-D2kmyCLL.js → dashboardCommand-Bf_-Ne3P.js} +5 -5
  17. package/dist/{dataCommand-BEPPQiTl.js → dataCommand-BoBJJ-Gb.js} +3 -3
  18. package/dist/{dbCommand-DZTmOFT4.js → dbCommand-CMAIz-Bf.js} +457 -441
  19. package/dist/dbCommand-DHi_RuDl.js +2 -0
  20. package/dist/dev-Bl9HqtV7.js +3 -0
  21. package/dist/{dev-Ca_A_S9v.js → dev-DOEJXicj.js} +2623 -2485
  22. package/dist/{doctorCommand-CGZJK_4o.js → doctorCommand-BrWu67JZ.js} +524 -280
  23. package/dist/doctorCommand-DrQv9SL3.js +2 -0
  24. package/dist/{dormancyCommand-DY2rYpTa.js → dormancyCommand-xn2y-pJm.js} +1 -1
  25. package/dist/{embeddingsCommand-BoCqZsgp.js → embeddingsCommand-Cn5MbRDM.js} +1 -1
  26. package/dist/emptyResultHeadline-Csa5fZOF.js +18 -0
  27. package/dist/{envCommand-Bxy2fOjc.js → envCommand-UJmJIbs9.js} +8 -8
  28. package/dist/{evolveCommand-BsbZ-XDg.js → evolveCommand-Db30twUy.js} +2 -2
  29. package/dist/frameworkTableAssembly-B96WCNJA.js +2 -0
  30. package/dist/{frameworkTableAssembly-Do-cf6RJ.js → frameworkTableAssembly-vfkzuzEo.js} +131 -104
  31. package/dist/index.js +1 -1
  32. package/dist/{infoCommand-EmM3jPKD.js → infoCommand-BjVXpMlP.js} +1 -1
  33. package/dist/inspect-B0hL41s0.js +2 -0
  34. package/dist/inspect-DZnan87F.js +1500 -0
  35. package/dist/{inspectCmd-niF97fAq.js → inspectCmd-CP-G0sVK.js} +1 -1
  36. package/dist/{inspectFetch-EMuhTG_9.js → inspectFetch-BU1NyzxV.js} +36 -24
  37. package/dist/{inspectMetrics-CGF94puw.js → inspectMetrics-BY0Sjb2F.js} +19 -19
  38. package/dist/{logsCmd-B6oNsfaZ.js → logsCmd-C5y9HyrG.js} +59 -54
  39. package/dist/{manifestBuild-DjX5MoXy.js → manifestBuild-DnbFKF6w.js} +1 -1
  40. package/dist/manifestBuild-UXrnUcXP.js +2 -0
  41. package/dist/{migrate-CGFZS-1a.js → migrate-DtC3lu7H.js} +4 -4
  42. package/dist/precompressAssets-YhTi1aWp.js +40 -0
  43. package/dist/{probeCommand-Bs3iVBSL.js → probeCommand-C5fuN6Z2.js} +2 -2
  44. package/dist/{runtimeTrace-C1BTpHGQ.js → runtimeTrace-BQL_lfz6.js} +1 -1
  45. package/dist/{scheduleCmd-DQRu6BZC.js → scheduleCmd-DYBUfo_T.js} +1 -1
  46. package/dist/{sdkgen-CXMwLg9n.js → sdkgen-CMUPrDjH.js} +1 -1
  47. package/dist/{seedRunner-Dgsiwk_e.js → seedRunner-DISBKow-.js} +16 -16
  48. package/dist/serveCommand-B_w-Mpb_.js +2544 -0
  49. package/dist/serveCommand-Dtb48ffg.js +2 -0
  50. package/dist/serveEntry.js +1 -1
  51. package/dist/{start-EOV7s1NZ.js → start-YaUehtDV.js} +580 -558
  52. package/dist/{start-DH7cat4-.js → start-s25GAIgn.js} +1 -1
  53. package/dist/startEntry.js +1 -1
  54. package/dist/staticCachePolicy-CIyj6DbS.js +15 -0
  55. package/dist/{test-DO27-x2P.js → test-jipIQ5Mx.js} +1 -1
  56. package/dist/{tracesCmd-DgtgOUdi.js → tracesCmd-C1qKa94g.js} +69 -64
  57. package/dist/{updateCommand-C_jN1w18.js → updateCommand-C9n_Z_oG.js} +8 -2
  58. package/dist/updateCommand-DsXEAHbd.js +2 -0
  59. package/dist/webDev-B6ZMX42w.js +2 -0
  60. package/dist/{webDev-B7vNj4Bq.js → webDev-BgdkyjP6.js} +1379 -1303
  61. package/dist/{webhooksCommand-B1LVcyO3.js → webhooksCommand-CYXTNvXq.js} +2 -2
  62. package/dist/{workflowsCmd-BGF-mRZ5.js → workflowsCmd-g-DNpaUc.js} +1 -1
  63. package/package.json +55 -19
  64. package/templates/AGENTS.core.md +20 -1
  65. package/templates/AGENTS.md +21 -2
  66. package/templates/agent-docs/_index.md +1 -1
  67. package/templates/agent-docs/_manifest.json +2 -2
  68. package/templates/agent-docs/ai.md +1 -1
  69. package/templates/agent-docs/authentication.md +34 -19
  70. package/templates/agent-docs/cli.md +170 -0
  71. package/templates/agent-docs/configuration.md +29 -4
  72. package/templates/agent-docs/data.md +145 -5
  73. package/templates/agent-docs/database/scaling.md +50 -2
  74. package/templates/agent-docs/deployment.md +75 -1
  75. package/templates/agent-docs/internationalization.md +32 -0
  76. package/templates/agent-docs/local-first-mobile.md +9 -2
  77. package/templates/agent-docs/observability.md +227 -0
  78. package/templates/agent-docs/plugins/audit.md +21 -5
  79. package/templates/agent-docs/plugins/billing.md +17 -0
  80. package/templates/agent-docs/plugins/broadcast.md +2 -1
  81. package/templates/agent-docs/plugins/ratelimit.md +6 -1
  82. package/templates/agent-docs/plugins/row-history.md +11 -0
  83. package/templates/agent-docs/plugins.md +19 -0
  84. package/templates/agent-docs/reference.md +1 -0
  85. package/templates/agent-docs/scheduling.md +23 -0
  86. package/templates/agent-docs/schema-driven-ui.md +81 -0
  87. package/templates/agent-docs/templates/appshells.md +3 -3
  88. package/templates/agent-docs/whats-new.md +133 -77
  89. package/templates/apps/api-ai/package.json +6 -6
  90. package/templates/apps/api-auth/package.json +8 -8
  91. package/templates/apps/api-backend/package.json +7 -7
  92. package/templates/apps/api-backend-deactivation/package.json +7 -7
  93. package/templates/apps/api-backend-mail/package.json +8 -8
  94. package/templates/apps/api-backend-mariadb/package.json +9 -9
  95. package/templates/apps/api-backend-sqlite/package.json +8 -8
  96. package/templates/apps/api-backend-storage/package.json +8 -8
  97. package/templates/apps/api-cms/package.json +9 -9
  98. package/templates/apps/api-collab/package.json +8 -8
  99. package/templates/apps/api-data-advanced/package.json +8 -8
  100. package/templates/apps/api-durable/package.json +8 -8
  101. package/templates/apps/api-feature-flags/package.json +9 -9
  102. package/templates/apps/api-governance/package.json +8 -8
  103. package/templates/apps/api-kv/package.json +8 -8
  104. package/templates/apps/api-moderation/package.json +8 -8
  105. package/templates/apps/api-observability/package.json +8 -8
  106. package/templates/apps/api-ratelimit/package.json +8 -8
  107. package/templates/apps/api-rbac/package.json +8 -8
  108. package/templates/apps/api-rest/package.json +7 -7
  109. package/templates/apps/api-row-history/package.json +8 -8
  110. package/templates/apps/api-saas/package.json +11 -11
  111. package/templates/apps/api-saas-starter/package.json +10 -10
  112. package/templates/apps/api-search/package.json +8 -8
  113. package/templates/apps/api-status/package.json +8 -8
  114. package/templates/apps/api-webhooks/package.json +9 -9
  115. package/templates/apps/changelog/package.json +7 -7
  116. package/templates/apps/changelog/src/pages/[locale]/page.tsx +7 -1
  117. package/templates/apps/edge-functions/package.json +2 -2
  118. package/templates/apps/frontend-admin/package.json +7 -8
  119. package/templates/apps/frontend-admin/src/pages/(marketing)/layout.tsx +1 -2
  120. package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +1 -2
  121. package/templates/apps/frontend-app/package.json +8 -9
  122. package/templates/apps/frontend-app/src/pages/layout.tsx +1 -2
  123. package/templates/apps/frontend-auth/package.json +7 -8
  124. package/templates/apps/frontend-auth/src/components/AuthShell.tsx +1 -2
  125. package/templates/apps/frontend-blank/package.json +6 -7
  126. package/templates/apps/frontend-blank/src/pages/layout.tsx +1 -2
  127. package/templates/apps/frontend-cms/package.json +8 -9
  128. package/templates/apps/frontend-cms/src/pages/(app)/layout.tsx +1 -2
  129. package/templates/apps/frontend-collab/README.md +7 -2
  130. package/templates/apps/frontend-collab/package.json +9 -10
  131. package/templates/apps/frontend-collab/src/pages/layout.tsx +1 -2
  132. package/templates/apps/frontend-collab/src/pages/page.test.tsx +8 -4
  133. package/templates/apps/frontend-collab/src/pages/page.tsx +10 -5
  134. package/templates/apps/frontend-contact/package.json +7 -7
  135. package/templates/apps/frontend-contact/src/components/ContactForm.island.tsx +1 -1
  136. package/templates/apps/frontend-dashboard/package.json +6 -7
  137. package/templates/apps/frontend-dashboard/src/pages/(marketing)/layout.tsx +1 -2
  138. package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.tsx +1 -2
  139. package/templates/apps/frontend-docs/package.json +8 -8
  140. package/templates/apps/frontend-i18n/package.json +6 -6
  141. package/templates/apps/frontend-landing/package.json +7 -7
  142. package/templates/apps/frontend-portal/package.json +7 -8
  143. package/templates/apps/frontend-portal/src/pages/(portal)/layout.tsx +1 -2
  144. package/templates/apps/frontend-saas/package.json +7 -8
  145. package/templates/apps/frontend-saas/src/pages/(marketing)/layout.tsx +1 -2
  146. package/templates/apps/frontend-saas/src/pages/dashboard/layout.tsx +1 -2
  147. package/templates/apps/frontend-spa/package.json +6 -7
  148. package/templates/apps/frontend-spa/src/pages/layout.tsx +1 -2
  149. package/templates/apps/frontend-ssr/package.json +6 -7
  150. package/templates/apps/frontend-ssr/src/pages/layout.tsx +1 -2
  151. package/templates/apps/frontend-ssr-api/package.json +7 -8
  152. package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +1 -2
  153. package/templates/apps/frontend-static-blog/package.json +8 -8
  154. package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.tsx +1 -1
  155. package/templates/apps/frontend-static-blog/src/pages/[locale]/page.tsx +7 -1
  156. package/templates/apps/frontend-status/package.json +7 -8
  157. package/templates/apps/frontend-status/src/pages/layout.tsx +1 -2
  158. package/templates/apps/mobile-app/package.json +4 -4
  159. package/templates/baselines/compose/docker/api.Dockerfile +61 -5
  160. package/templates/baselines/compose/docker/web.Dockerfile +55 -10
  161. package/templates/baselines/compose-mariadb/docker/api.Dockerfile +61 -5
  162. package/templates/baselines/compose-mariadb/docker/web.Dockerfile +55 -10
  163. package/dist/apiBuild-Cl0IDx8c.js +0 -2
  164. package/dist/codegen-CN6vMM4J.js +0 -2
  165. package/dist/dbCommand-BTyBGhIA.js +0 -2
  166. package/dist/dev-DfVZaoys.js +0 -3
  167. package/dist/doctorCommand-djmqEcDC.js +0 -2
  168. package/dist/frameworkTableAssembly-Df2Ymp2f.js +0 -2
  169. package/dist/inspect-DCqILJ1G.js +0 -1197
  170. package/dist/inspect-DGJwpOAb.js +0 -2
  171. package/dist/manifestBuild-CJ2zvPvT.js +0 -2
  172. package/dist/serveCommand-C7IrCD58.js +0 -2445
  173. package/dist/serveCommand-Cjt5S9hD.js +0 -2
  174. package/dist/updateCommand-nnFjDbl4.js +0 -2
  175. package/dist/webDev-1XpVnYkW.js +0 -2
package/bin/voltro.mjs CHANGED
@@ -17,8 +17,32 @@ import { existsSync } from 'node:fs'
17
17
  import { createRequire } from 'node:module'
18
18
  import { fileURLToPath, pathToFileURL } from 'node:url'
19
19
  import { dirname, join, resolve } from 'node:path'
20
+ import { enableCompileCache } from 'node:module'
20
21
  import { resolveNodeEnvironment } from './nodeEnvironment.mjs'
21
22
 
23
+ // V8 CODE CACHE — the cheapest cold-boot win there is, and it needs no build
24
+ // change: node caches the compiled bytecode of every module it loads and reuses
25
+ // it on the next boot from the same files.
26
+ //
27
+ // Measured on the reference fixtures (5 fresh processes, median):
28
+ // `voltro start` 166 ms → 93 ms (−44 %) cache 936 KB
29
+ // `voltro serve` 287 ms → 215 ms (−25 %) cache 3.1 MB
30
+ // The `modules` phase — node init + loading the precompiled bundle — is 46 % of
31
+ // a web boot and 65 % of an api boot, so this lands where the seconds are.
32
+ //
33
+ // `NODE_COMPILE_CACHE` set → node already enabled it before this file ran; do
34
+ // nothing (and never override the operator's directory). Unset → the default
35
+ // location under the OS temp dir, which survives process restarts on the same
36
+ // host. That covers dev and a warm container restart; a scale-from-zero
37
+ // container starts with an EMPTY temp dir, which is why the shipped Dockerfiles
38
+ // point the variable at a directory the image BAKES during the boot smoke.
39
+ //
40
+ // Wrapped: `enableCompileCache` is Node 22+, and a failure to cache must never
41
+ // be a failure to boot.
42
+ if (process.env.NODE_COMPILE_CACHE === undefined) {
43
+ try { enableCompileCache?.() } catch { /* cache is an optimisation, never a requirement */ }
44
+ }
45
+
22
46
  // FAST PATH — `voltro serve <app>` with a precompiled SERVE BUNDLE boots from that
23
47
  // ONE artefact IN THIS PROCESS: no child `node --import tsx`, no CLI command
24
48
  // graph. `voltro build` esbuilds the whole serve path (framework + effect +
@@ -0,0 +1,2 @@
1
+ import { c as e, l as t } from "./apiBuild-DDr2aNFd.js";
2
+ export { e as runApiBuild, t as runServeBundleBuild };
@@ -1,14 +1,18 @@
1
- import { p as e } from "./dev-Ca_A_S9v.js";
2
- import { Kt as t } from "./webDev-B7vNj4Bq.js";
1
+ import { p as e } from "./dev-DOEJXicj.js";
2
+ import { Yt as t } from "./webDev-BgdkyjP6.js";
3
3
  import { t as n } from "./dialectDriver-czCHYpeH.js";
4
4
  import { dirname as r, isAbsolute as i, join as a, relative as o, resolve as s } from "node:path";
5
- import { existsSync as c, promises as l } from "node:fs";
6
- import { fileURLToPath as u } from "node:url";
7
- import { createLogger as d } from "@voltro/logger";
8
- import { createRequire as f } from "node:module";
9
- //#region src/apiBuild.ts
10
- var p = d({ scope: "voltro:build" }), m = (e) => {
11
- let t = r(u(import.meta.url));
5
+ import { existsSync as c, promises as l, readFileSync as u } from "node:fs";
6
+ import { fileURLToPath as d } from "node:url";
7
+ import { createLogger as f } from "@voltro/logger";
8
+ import { frameworkVersion as p } from "@voltro/protocol/identity";
9
+ import { createRequire as m } from "node:module";
10
+ //#region src/bundleBanner.ts
11
+ var h = () => {
12
+ let e = p(), t = "import { createRequire as __voltroRequire } from 'node:module'; const require = __voltroRequire(import.meta.url);";
13
+ return e === void 0 ? t : `globalThis.__VOLTRO_FRAMEWORK_VERSION__ = ${JSON.stringify(e)};\n${t}`;
14
+ }, g = f({ scope: "voltro:build" }), _ = (e) => {
15
+ let t = r(d(import.meta.url));
12
16
  for (let n of [
13
17
  ".js",
14
18
  ".ts",
@@ -18,7 +22,7 @@ var p = d({ scope: "voltro:build" }), m = (e) => {
18
22
  if (c(r)) return { [`@voltro/cli/${e}`]: r };
19
23
  }
20
24
  return {};
21
- }, h = async (e) => {
25
+ }, v = async (e) => {
22
26
  let t = a(e, "package.json");
23
27
  if (!c(t)) return [];
24
28
  let r = {};
@@ -32,7 +36,7 @@ var p = d({ scope: "voltro:build" }), m = (e) => {
32
36
  } catch {
33
37
  return [];
34
38
  }
35
- let i = f(t);
39
+ let i = m(t);
36
40
  return n.filter((e) => {
37
41
  if (r[e] === void 0) return !1;
38
42
  try {
@@ -41,7 +45,7 @@ var p = d({ scope: "voltro:build" }), m = (e) => {
41
45
  return !1;
42
46
  }
43
47
  });
44
- }, g = /(?:\.(?:query|mutation|action|stream)(?:\.server)?\.ts|\.workflow(?:\.server)?\.tsx|\.(?:subscribe|reaction|aggregate|agent|tool|webhook|cron|trigger|outbox|consumer|connection|email)(?:\.server)?\.tsx?|\.(?:startup|seed)\.tsx?|\.(?:entity|schema|relations|migration|event|ws|expectation|budget|experiment)\.ts|(?:^|\/)schema\.ts)$/, _ = (e) => /\.(ts|tsx)$/.test(e) && !/\.(test|spec)\.[tj]sx?$/.test(e), v = async (t) => (await e(t)).filter((e) => g.test(e) && _(e) && !e.includes(`${t}/.framework/`)), y = {
48
+ }, y = /(?:\.(?:query|mutation|action|stream)(?:\.server)?\.ts|\.workflow(?:\.server)?\.tsx|\.(?:subscribe|reaction|aggregate|agent|tool|webhook|cron|trigger|outbox|consumer|connection|email)(?:\.server)?\.tsx?|\.(?:startup|seed)\.tsx?|\.(?:entity|schema|relations|migration|event|ws|expectation|budget|experiment)\.ts|(?:^|\/)schema\.ts)$/, b = (e) => /\.(ts|tsx)$/.test(e) && !/\.(test|spec)\.[tj]sx?$/.test(e), x = async (t) => (await e(t)).filter((e) => y.test(e) && b(e) && !e.includes(`${t}/.framework/`)), S = {
45
49
  name: "externalize-bare",
46
50
  setup(e) {
47
51
  e.onResolve({ filter: /.*/ }, (e) => {
@@ -52,12 +56,12 @@ var p = d({ scope: "voltro:build" }), m = (e) => {
52
56
  };
53
57
  });
54
58
  }
55
- }, b = async (e) => {
59
+ }, C = async (e) => {
56
60
  let n = await t("esbuild", () => import("esbuild")), r = a(e, ".framework"), i = a(r, "dist-api");
57
61
  await l.mkdir(r, { recursive: !0 });
58
- let u = [...await v(e)], d = a(e, "app.config.ts");
59
- if (c(d) && u.push(d), u.length === 0) return p.warn("api build: no handlers or app.config found — nothing to precompile", { root: e }), null;
60
- let f = a(e, "tsconfig.json"), m = {
62
+ let u = [...await x(e)], d = a(e, "app.config.ts");
63
+ if (c(d) && u.push(d), u.length === 0) return g.warn("api build: no handlers or app.config found — nothing to precompile", { root: e }), null;
64
+ let f = a(e, "tsconfig.json"), p = {
61
65
  bundle: !0,
62
66
  format: "esm",
63
67
  platform: "node",
@@ -66,36 +70,38 @@ var p = d({ scope: "voltro:build" }), m = (e) => {
66
70
  jsx: "automatic",
67
71
  jsxImportSource: "react",
68
72
  absWorkingDir: e,
73
+ minify: !0,
74
+ keepNames: !0,
69
75
  ...c(f) ? { tsconfig: f } : {},
70
- plugins: [y]
71
- }, h = await n.build({
72
- ...m,
76
+ plugins: [S]
77
+ }, m = await n.build({
78
+ ...p,
73
79
  entryPoints: u,
74
80
  write: !1,
75
81
  metafile: !0,
76
82
  outdir: i
77
- }), g = Object.keys(h.metafile.inputs).map((t) => s(e, t)).filter((t) => t.startsWith(`${e}/`) && !t.includes("/node_modules/") && !t.includes("/.framework/") && _(t)), b = [
83
+ }), h = Object.keys(m.metafile.inputs).map((t) => s(e, t)).filter((t) => t.startsWith(`${e}/`) && !t.includes("/node_modules/") && !t.includes("/.framework/") && b(t)), _ = [
78
84
  "// GENERATED BY `voltro build` — do not edit; overwritten on next build.",
79
85
  "// Precompiled api entry: the single bundle the serve runtime loads instead",
80
86
  "// of importing every handler/schema source at boot. See apiBuild.ts /",
81
87
  "// appModuleLoader.ts.",
82
88
  ""
83
- ], x = [];
84
- g.forEach((t, n) => {
85
- b.push(`import * as m${n} from ${JSON.stringify(t)}`), x.push(` ${JSON.stringify(o(e, t))}: m${n},`);
86
- }), b.push("", "export const modules: Record<string, unknown> = {", ...x, "}", "");
87
- let S = a(r, "apiEntry.ts");
88
- return await l.writeFile(S, b.join("\n"), "utf8"), await n.build({
89
- ...m,
90
- entryPoints: [S],
89
+ ], v = [];
90
+ h.forEach((t, n) => {
91
+ _.push(`import * as m${n} from ${JSON.stringify(t)}`), v.push(` ${JSON.stringify(o(e, t))}: m${n},`);
92
+ }), _.push("", "export const modules: Record<string, unknown> = {", ...v, "}", "");
93
+ let y = a(r, "apiEntry.ts");
94
+ return await l.writeFile(y, _.join("\n"), "utf8"), await n.build({
95
+ ...p,
96
+ entryPoints: [y],
91
97
  outfile: a(i, "apiEntry.js"),
92
98
  metafile: !1,
93
99
  write: !0
94
- }), p.info("api build: precompiled bundle written", {
95
- modules: g.length,
100
+ }), g.info("api build: precompiled bundle written", {
101
+ modules: h.length,
96
102
  out: a(".framework", "dist-api", "apiEntry.js")
97
103
  }), a(i, "apiEntry.js");
98
- }, x = (e) => a(e, ".framework", "dist-api", "apiEntry.js"), S = [
104
+ }, w = (e) => a(e, ".framework", "dist-api", "apiEntry.js"), T = [
99
105
  "better-sqlite3",
100
106
  "pg-native",
101
107
  "@tursodatabase/*",
@@ -107,8 +113,13 @@ var p = d({ scope: "voltro:build" }), m = (e) => {
107
113
  "@img/*",
108
114
  "fontkit",
109
115
  "subset-font",
110
- "satori"
111
- ], C = [
116
+ "satori",
117
+ "@azure/storage-blob",
118
+ "@aws-sdk/*",
119
+ "@smithy/*",
120
+ "@react-email/render",
121
+ "@sentry/profiling-node"
122
+ ], E = [
112
123
  "tsx",
113
124
  "esbuild",
114
125
  "vite",
@@ -116,42 +127,60 @@ var p = d({ scope: "voltro:build" }), m = (e) => {
116
127
  "@tailwindcss/*",
117
128
  "rolldown",
118
129
  "lightningcss"
119
- ], w = (e, t) => t.some((t) => t.endsWith("/*") ? e === t.slice(0, -2) || e.startsWith(t.slice(0, -1)) : e === t || e.startsWith(`${t}/`)), T = (e, t) => `const { createRequire } = require('node:module')
130
+ ], D = (e, t) => t.some((t) => t.endsWith("/*") ? e === t.slice(0, -2) || e.startsWith(t.slice(0, -1)) : e === t || e.startsWith(`${t}/`)), O = (e, t) => `const { createRequire } = require('node:module')
120
131
  const { join } = require('node:path')
121
132
  const reqApp = createRequire(join(process.cwd(), 'package.json'))
122
- const drivers = ${JSON.stringify(t)}\nlet mod\nfor (const d of drivers) {\n try { mod = createRequire(reqApp.resolve(d + '/package.json'))(${JSON.stringify(e)}); break } catch (e) {}\n}\nif (!mod) { try { mod = reqApp(${JSON.stringify(e)}) } catch (e) {} }\nif (!mod) mod = require(${JSON.stringify(e)})\nmodule.exports = mod\n`, E = (e, t, n) => ({
123
- name: "native-leaf-runtime-resolver",
124
- setup(r) {
125
- r.onResolve({ filter: /.*/ }, (e) => {
126
- let r = e.path;
127
- if (!(r.startsWith(".") || i(r) || r.startsWith("node:")) && !(/^effect$/.test(r) || r.startsWith("@effect/") || r.startsWith("@voltro/"))) {
128
- if (w(r, S)) return {
129
- path: r,
130
- namespace: "native-leaf"
131
- };
132
- if (w(r, C)) return {
133
- path: r,
134
- external: !0
135
- };
136
- for (let n of [e.resolveDir, t]) if (n) try {
137
- f(a(n, "_.js")).resolve(r);
138
- return;
139
- } catch {}
140
- return n.add(r), {
141
- path: r,
142
- external: !0
143
- };
144
- }
145
- }), r.onLoad({
146
- filter: /.*/,
147
- namespace: "native-leaf"
148
- }, (t) => ({
149
- contents: T(t.path, [...e, "@voltro/cli"]),
150
- loader: "js"
151
- }));
133
+ const drivers = ${JSON.stringify(t)}\nlet mod\nfor (const d of drivers) {\n try { mod = createRequire(reqApp.resolve(d + '/package.json'))(${JSON.stringify(e)}); break } catch (e) {}\n}\nif (!mod) { try { mod = reqApp(${JSON.stringify(e)}) } catch (e) {} }\nif (!mod) mod = require(${JSON.stringify(e)})\nmodule.exports = mod\n`, k = (e) => {
134
+ try {
135
+ let t = JSON.parse(u(a(e, "package.json"), "utf8"));
136
+ return Object.keys({
137
+ ...t.dependencies,
138
+ ...t.devDependencies,
139
+ ...t.optionalDependencies
140
+ }).filter((e) => e.startsWith("@voltro/plugin-"));
141
+ } catch {
142
+ return [];
152
143
  }
153
- }), D = (e) => a(e, ".framework", "dist-api", "serveBundle", "serveEntry.js"), O = 1e3, k = async (e, t) => {
154
- let n = t - O, r = 0, i = async (e) => {
144
+ }, A = (e, t, n) => {
145
+ let r = [
146
+ ...e,
147
+ ...k(t),
148
+ "@voltro/cli"
149
+ ];
150
+ return {
151
+ name: "native-leaf-runtime-resolver",
152
+ setup(e) {
153
+ e.onResolve({ filter: /.*/ }, (e) => {
154
+ let r = e.path;
155
+ if (!(r.startsWith(".") || i(r) || r.startsWith("node:")) && !(/^effect$/.test(r) || r.startsWith("@effect/") || r.startsWith("@voltro/"))) {
156
+ if (D(r, T)) return {
157
+ path: r,
158
+ namespace: "native-leaf"
159
+ };
160
+ if (D(r, E)) return {
161
+ path: r,
162
+ external: !0
163
+ };
164
+ for (let n of [e.resolveDir, t]) if (n) try {
165
+ m(a(n, "_.js")).resolve(r);
166
+ return;
167
+ } catch {}
168
+ return n.add(r), {
169
+ path: r,
170
+ external: !0
171
+ };
172
+ }
173
+ }), e.onLoad({
174
+ filter: /.*/,
175
+ namespace: "native-leaf"
176
+ }, (e) => ({
177
+ contents: O(e.path, r),
178
+ loader: "js"
179
+ }));
180
+ }
181
+ };
182
+ }, j = (e) => a(e, ".framework", "dist-api", "serveBundle", "serveEntry.js"), M = 1e3, N = async (e, t) => {
183
+ let n = t - M, r = 0, i = async (e) => {
155
184
  let t;
156
185
  try {
157
186
  t = await l.readdir(e, { withFileTypes: !0 });
@@ -170,12 +199,12 @@ const drivers = ${JSON.stringify(t)}\nlet mod\nfor (const d of drivers) {\n try
170
199
  }
171
200
  };
172
201
  return await i(e), r;
173
- }, A = async (e) => {
202
+ }, P = async (e) => {
174
203
  let n = await t("esbuild", () => import("esbuild")), r = a(e, ".framework"), i = a(r, "dist-api", "serveBundle");
175
204
  await l.mkdir(r, { recursive: !0 });
176
- let u = Date.now(), d = [...await v(e)], f = a(e, "app.config.ts");
205
+ let u = Date.now(), d = [...await x(e)], f = a(e, "app.config.ts");
177
206
  if (c(f) && d.push(f), d.length === 0) return null;
178
- let g = a(e, "tsconfig.json"), b = await n.build({
207
+ let p = a(e, "tsconfig.json"), m = await n.build({
179
208
  entryPoints: d,
180
209
  bundle: !0,
181
210
  write: !1,
@@ -186,28 +215,28 @@ const drivers = ${JSON.stringify(t)}\nlet mod\nfor (const d of drivers) {\n try
186
215
  jsx: "automatic",
187
216
  jsxImportSource: "react",
188
217
  logLevel: "silent",
189
- plugins: [y],
218
+ plugins: [S],
190
219
  outdir: a(i, ".probe"),
191
- ...c(g) ? { tsconfig: g } : {}
192
- }), x = Object.keys(b.metafile.inputs).map((t) => s(e, t)).filter((t) => t.startsWith(`${e}/`) && !t.includes("/node_modules/") && !t.includes("/.framework/") && _(t)), S = await h(e), C = /* @__PURE__ */ new Set(), w = [
220
+ ...c(p) ? { tsconfig: p } : {}
221
+ }), y = Object.keys(m.metafile.inputs).map((t) => s(e, t)).filter((t) => t.startsWith(`${e}/`) && !t.includes("/node_modules/") && !t.includes("/.framework/") && b(t)), C = await v(e), w = /* @__PURE__ */ new Set(), T = [
193
222
  "// GENERATED BY `voltro build` — do not edit; overwritten on next build.",
194
223
  "import { join as __join, dirname as __dirname, resolve as __resolve } from 'node:path'",
195
224
  "import { pathToFileURL as __pathToFileURL, fileURLToPath as __fileURLToPath } from 'node:url'",
196
225
  "import { runServe as __runServe, registerAppModules, registerDriver, loadDotEnv } from '@voltro/cli/serveEntry'",
197
- ...S.map((e, t) => `import * as __drv${t} from ${JSON.stringify(e)}`),
226
+ ...C.map((e, t) => `import * as __drv${t} from ${JSON.stringify(e)}`),
198
227
  "const __isMain = Boolean(process.argv[1]) && import.meta.url === __pathToFileURL(process.argv[1]).href",
199
228
  "if (__isMain) process.chdir(__resolve(__dirname(__fileURLToPath(import.meta.url)), '..', '..', '..'))",
200
229
  "const __root = process.cwd()",
201
230
  "registerAppModules({",
202
- ...x.map((t) => ` [__join(__root, ${JSON.stringify(o(e, t))})]: () => import(${JSON.stringify(t)}),`),
231
+ ...y.map((t) => ` [__join(__root, ${JSON.stringify(o(e, t))})]: () => import(${JSON.stringify(t)}),`),
203
232
  "})",
204
- ...S.map((e, t) => `registerDriver(${JSON.stringify(e)}, __drv${t})`),
233
+ ...C.map((e, t) => `registerDriver(${JSON.stringify(e)}, __drv${t})`),
205
234
  "export const runServe = (args = []) => { loadDotEnv([]); return __runServe(args) }",
206
235
  "if (__isMain) runServe(process.argv.slice(2)).then((c) => process.exit(typeof c === 'number' ? c : 0))",
207
236
  ""
208
- ], T = a(r, "serveEntry.ts");
209
- await l.writeFile(T, w.join("\n"), "utf8"), await n.build({
210
- entryPoints: [T],
237
+ ], E = a(r, "serveEntry.ts");
238
+ await l.writeFile(E, T.join("\n"), "utf8"), await n.build({
239
+ entryPoints: [E],
211
240
  bundle: !0,
212
241
  format: "esm",
213
242
  platform: "node",
@@ -215,23 +244,25 @@ const drivers = ${JSON.stringify(t)}\nlet mod\nfor (const d of drivers) {\n try
215
244
  outdir: i,
216
245
  splitting: !0,
217
246
  write: !0,
218
- plugins: [E(S, e, C)],
219
- banner: { js: "import { createRequire as __voltroRequire } from 'node:module'; const require = __voltroRequire(import.meta.url);" },
247
+ minify: !0,
248
+ keepNames: !0,
249
+ plugins: [A(C, e, w)],
250
+ banner: { js: h() },
220
251
  jsx: "automatic",
221
252
  jsxImportSource: "react",
222
253
  logLevel: "silent",
223
254
  absWorkingDir: e,
224
- alias: m("serveEntry"),
225
- ...c(g) ? { tsconfig: g } : {}
255
+ alias: _("serveEntry"),
256
+ ...c(p) ? { tsconfig: p } : {}
226
257
  });
227
- let D = await k(i, u);
228
- return p.info("api build: serve bundle written", {
229
- appModules: x.length,
230
- drivers: S.length > 0 ? S.join(", ") : "none (memory)",
231
- ...C.size > 0 ? { externalizedOptionalPeers: [...C].join(", ") } : {},
258
+ let D = await N(i, u);
259
+ return g.info("api build: serve bundle written", {
260
+ appModules: y.length,
261
+ drivers: C.length > 0 ? C.join(", ") : "none (memory)",
262
+ ...w.size > 0 ? { externalizedOptionalPeers: [...w].join(", ") } : {},
232
263
  ...D > 0 ? { prunedStaleChunks: D } : {},
233
264
  out: a(".framework", "dist-api", "serveBundle", "serveEntry.js")
234
265
  }), a(i, "serveEntry.js");
235
266
  };
236
267
  //#endregion
237
- export { v as a, b as c, m as i, A as l, S as n, E as o, x as r, k as s, g as t, D as u };
268
+ export { x as a, C as c, h as d, _ as i, P as l, T as n, A as o, w as r, N as s, y as t, j as u };
package/dist/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { r as e } from "./commands-BBYJ7Q3B.js";
2
+ import { r as e } from "./commands-CRbxgxv0.js";
3
3
  import { a as t } from "./nodeEnvironment-cGFAj1J8.js";
4
4
  import { t as n } from "./loadEnv-D9nEOClM.js";
5
5
  import { n as r } from "./cliError-BmdYnghb.js";