@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.
- package/CHANGELOG.md +210 -0
- package/dist/agentsMd-Bu_XQgVf.js +2 -0
- package/dist/{agentsMd-7zI2h5l9.js → agentsMd-D6yD7IQv.js} +31 -14
- package/dist/apiBuild-BIyGkym8.js +2 -0
- package/dist/{apiBuild-DGalUk9v.js → apiBuild-C8xBEYbL.js} +2 -2
- package/dist/bin.js +1 -1
- package/dist/{build-CfF6t0UM.js → build-CkhFGnKA.js} +168 -165
- package/dist/{checkCommand-CBtynBKW.js → checkCommand-BcXJa2IS.js} +3 -3
- package/dist/{checkCommand-BV56Pcc1.js → checkCommand-QbHshOac.js} +1 -1
- package/dist/{cloudCmd-C42gaO8s.js → cloudCmd-F4YJeqM3.js} +1 -1
- package/dist/{codegenCommand-W7SDdiAQ.js → codegenCommand-DF2OJh3O.js} +2 -2
- package/dist/{codemodRunner-D-jTyvWo.js → codemodRunner-BcOvi4A2.js} +103 -0
- package/dist/{commands-BD9eBRY3.js → commands-7Z7-HOE3.js} +30 -30
- package/dist/{dashboardCommand-7qGylm0F.js → dashboardCommand-CUycH6dR.js} +5 -5
- package/dist/{dataCommand-C_F2DYxe.js → dataCommand-By78lscK.js} +1 -1
- package/dist/{dev-alhkKoEX.js → dev-D8JSKlBM.js} +1 -1
- package/dist/{dev-gqpnzVhI.js → dev-Dh1NuYx1.js} +1569 -1569
- package/dist/{doctorCommand-Bvs-BQrM.js → doctorCommand-C-8-Z9D6.js} +55 -42
- package/dist/doctorCommand-FhQ7EVYL.js +2 -0
- package/dist/{dormancyCommand-B-PPHc9Q.js → dormancyCommand-A79Odglm.js} +1 -1
- package/dist/{embeddingsCommand-OKY6XjUf.js → embeddingsCommand-CoiyHfkY.js} +1 -1
- package/dist/{envCommand-B1-Zm85H.js → envCommand-B6d0s-jZ.js} +8 -8
- package/dist/{evolveCommand-C4-NlFbd.js → evolveCommand-BC5a9lxX.js} +2 -2
- package/dist/frameworkTableAssembly-DgylYh9_.js +2 -0
- package/dist/index.js +1 -1
- package/dist/{infoCommand-CTo8Jnhq.js → infoCommand-ZqSVzJZ4.js} +1 -1
- package/dist/{metaCommands-DUYR--Ts.js → metaCommands-CfRLra0s.js} +1 -1
- package/dist/{projectScaffold-BEhhHjPr.js → projectScaffold-BIl97_E6.js} +1 -1
- package/dist/{projectScaffold-BvhLOrLq.js → projectScaffold-mIX_DpSe.js} +1 -1
- package/dist/{runtimeTrace-DzZOCd94.js → runtimeTrace-BslKJjDY.js} +1 -1
- package/dist/{sdkgen-C4roLErM.js → sdkgen-DQ8uEmmn.js} +1 -1
- package/dist/serveCommand-BmvEQCMS.js +2 -0
- package/dist/{serveCommand-B6TATyCj.js → serveCommand-Dqb9Ku1-.js} +657 -657
- package/dist/serveEntry.js +1 -1
- package/dist/{start-BNuTWdRd.js → start-BA7txHhY.js} +1 -1
- package/dist/{start-ft_KzFTd.js → start-dkNYKtgQ.js} +342 -318
- package/dist/startEntry.js +1 -1
- package/dist/updateCommand-BauSVxPp.js +2 -0
- package/dist/{updateCommand-CHBmCB17.js → updateCommand-eoGpZr3E.js} +1 -1
- package/dist/webDev-CBbKs4dZ.js +2 -0
- package/dist/{webDev-CTpSY-e_.js → webDev-bybjZA0o.js} +240 -186
- package/dist/{webhooksCommand-BVvOtZ1B.js → webhooksCommand-DubZWNOx.js} +1 -1
- package/package.json +29 -17
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/authentication.md +13 -4
- package/templates/agent-docs/data.md +43 -0
- package/templates/agent-docs/routing.md +40 -0
- package/templates/agent-docs/whats-new.md +91 -157
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +10 -10
- package/templates/apps/api-collab/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-durable/startup/warm.startup.tsx +16 -2
- package/templates/apps/api-durable/tests/orders.place.test.ts +17 -4
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/changelog/src/pages/[slug]/page.test.tsx +8 -1
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +9 -9
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +10 -10
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/package.json +4 -4
- package/dist/agentsMd-BFCXh2gl.js +0 -2
- package/dist/apiBuild-2GvK8CUB.js +0 -2
- package/dist/doctorCommand-CVXfRrng.js +0 -2
- package/dist/frameworkTableAssembly-YyVe32Cb.js +0 -2
- package/dist/serveCommand-CNR0gI9V.js +0 -2
- package/dist/updateCommand-6FMU2klq.js +0 -2
- package/dist/webDev-id3I5PvG.js +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { hn as e } from "./dev-
|
|
2
|
-
import {
|
|
1
|
+
import { hn as e } from "./dev-Dh1NuYx1.js";
|
|
2
|
+
import { $ as t, E as n, J as r, M as i, N as a, T as o, X as s, Y as c, a as l, b as u, d, dt as f, f as p, j as m, mt as h, s as g, v as _, y as v } from "./webDev-bybjZA0o.js";
|
|
3
3
|
import { t as y } from "./cliRuntime-Dh7UDinH.js";
|
|
4
4
|
import { a as b } from "./renderModeScan-D7J1B7Kw.js";
|
|
5
|
-
import { i as x, o as S, s as C } from "./apiBuild-
|
|
5
|
+
import { i as x, o as S, s as C } from "./apiBuild-C8xBEYbL.js";
|
|
6
6
|
import { n as w } from "./renderProfile-1OWWAAtx.js";
|
|
7
7
|
import { dirname as T, join as E, resolve as D } from "node:path";
|
|
8
8
|
import { existsSync as O, promises as k } from "node:fs";
|
|
@@ -96,89 +96,89 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
96
96
|
let n = t.replace(/^\//, "").split("/");
|
|
97
97
|
return E(e, ...n, "index.html");
|
|
98
98
|
}, B = (e) => e.replace(/<script\b(?=[^>]*\btype="module")(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<script\b(?=[^>]*\bsrc=)(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<link\b[^>]*\brel="modulepreload"[^>]*>/gi, ""), V = (e, t) => {
|
|
99
|
-
let
|
|
99
|
+
let r = e.replace("<div id=\"root\"></div>", `<div id="root">${t.body}</div>`), i = [
|
|
100
100
|
t.metaHtml,
|
|
101
101
|
`<meta name="voltro-interactive" content="${t.interactive}" />`,
|
|
102
102
|
t.stateScript
|
|
103
103
|
].filter((e) => e.length > 0).join("\n ");
|
|
104
|
-
return
|
|
104
|
+
return r = n(r, i), t.interactive === "none" && (r = B(r)), r;
|
|
105
105
|
}, H = async (e) => {
|
|
106
|
-
let { page:
|
|
107
|
-
if (
|
|
108
|
-
pattern:
|
|
106
|
+
let { page: t, chainEntries: r, pageMod: o, helpers: s } = e, c = r.filter((e) => e.hasLayout);
|
|
107
|
+
if (c.length === 0) return F.debug("skip page", {
|
|
108
|
+
pattern: t.pattern,
|
|
109
109
|
reason: "renderMode=spa with no layout — nothing to shell"
|
|
110
110
|
}), null;
|
|
111
|
-
if (L(
|
|
112
|
-
pattern:
|
|
111
|
+
if (L(t.pattern)) return F.debug("skip page", {
|
|
112
|
+
pattern: t.pattern,
|
|
113
113
|
reason: "renderMode=spa with a dynamic pattern"
|
|
114
114
|
}), null;
|
|
115
|
-
let u = await Promise.all(
|
|
116
|
-
if (d.length > 0) return F.info(`spa shell for ${
|
|
117
|
-
pattern:
|
|
115
|
+
let u = await Promise.all(c.map(e.loadLayout)), d = c.filter((e, t) => typeof u[t]?.loader == "function").map((e) => e.dir || "/");
|
|
116
|
+
if (d.length > 0) return F.info(`spa shell for ${t.pattern} left to on-demand rendering — its layout chain has a loader (${d.join(", ")}), whose output may be per-request`, {
|
|
117
|
+
pattern: t.pattern,
|
|
118
118
|
layouts: d
|
|
119
119
|
}), null;
|
|
120
|
-
let { chain:
|
|
120
|
+
let { chain: f, segmentLoaderData: p } = await l({
|
|
121
121
|
entries: r,
|
|
122
122
|
loadLayout: e.loadLayout,
|
|
123
123
|
loadError: e.loadError,
|
|
124
124
|
loadPending: e.loadPending,
|
|
125
125
|
ctx: e.ctx
|
|
126
126
|
}), h = {
|
|
127
|
-
pattern:
|
|
127
|
+
pattern: t.pattern,
|
|
128
128
|
Component: o.default,
|
|
129
129
|
meta: o.meta,
|
|
130
130
|
ErrorBoundary: o.ErrorBoundary,
|
|
131
131
|
Pending: o.Pending,
|
|
132
132
|
renderMode: "spa",
|
|
133
|
-
chain:
|
|
134
|
-
}, g = o.interactive ?? "full", _ =
|
|
133
|
+
chain: f
|
|
134
|
+
}, g = o.interactive ?? "full", _ = m({
|
|
135
135
|
helpers: s,
|
|
136
|
-
page:
|
|
136
|
+
page: t.pattern,
|
|
137
137
|
interactive: g,
|
|
138
138
|
delivery: "artefact",
|
|
139
139
|
renderInput: {
|
|
140
140
|
descriptor: h,
|
|
141
141
|
params: {},
|
|
142
|
-
pathname:
|
|
143
|
-
segmentLoaderData:
|
|
142
|
+
pathname: t.pattern,
|
|
143
|
+
segmentLoaderData: p,
|
|
144
144
|
...e.outerWrap ? { outerWrap: e.outerWrap } : {},
|
|
145
145
|
...e.locale ? { locale: e.locale } : {}
|
|
146
146
|
}
|
|
147
147
|
}), v = i({
|
|
148
148
|
helpers: s,
|
|
149
149
|
prepared: _
|
|
150
|
-
}), y =
|
|
150
|
+
}), y = a({
|
|
151
151
|
helpers: s,
|
|
152
152
|
prepared: _,
|
|
153
153
|
meta: v.meta,
|
|
154
154
|
interactive: g
|
|
155
|
-
}), b =
|
|
156
|
-
return await k.mkdir(T(x), { recursive: !0 }), await k.writeFile(x, b, "utf8"), F.debug("prerendered spa layout shell", { pattern:
|
|
157
|
-
pattern:
|
|
155
|
+
}), b = n(e.shellTemplate.replace("<div id=\"root\"></div>", `<div id="root">${v.body}</div>`), y), x = z(e.distDir, t.pattern);
|
|
156
|
+
return await k.mkdir(T(x), { recursive: !0 }), await k.writeFile(x, b, "utf8"), F.debug("prerendered spa layout shell", { pattern: t.pattern }), {
|
|
157
|
+
pattern: t.pattern,
|
|
158
158
|
outPath: x
|
|
159
159
|
};
|
|
160
160
|
}, U = async (e) => {
|
|
161
|
-
let { root:
|
|
162
|
-
await k.mkdir(T(
|
|
163
|
-
let
|
|
161
|
+
let { root: n, distDir: r, pages: i, dirs: a, vite: s } = e, c = E(r, "index.html"), u = await k.readFile(c, "utf8"), d = E(r, "_voltro", "shell.html");
|
|
162
|
+
await k.mkdir(T(d), { recursive: !0 }), await k.writeFile(d, u, "utf8");
|
|
163
|
+
let f = E(n, "node_modules", "@voltro", "ui-shadcn"), p = O(E(f, "package.json")) ? f : null, m = [...p ? [
|
|
164
164
|
{
|
|
165
165
|
find: "@voltro/ui-shadcn/tokens.css",
|
|
166
|
-
replacement: E(
|
|
166
|
+
replacement: E(p, "src/tokens.css")
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
169
|
find: "@voltro/ui-shadcn/cn",
|
|
170
|
-
replacement: E(
|
|
170
|
+
replacement: E(p, "src/cn.ts")
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
find: "@voltro/ui-shadcn/brand",
|
|
174
|
-
replacement: E(
|
|
174
|
+
replacement: E(p, "src/brand/voltroLogo.tsx")
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
find: "@voltro/ui-shadcn",
|
|
178
|
-
replacement: E(
|
|
178
|
+
replacement: E(p, "src/index.ts")
|
|
179
179
|
}
|
|
180
|
-
] : [], ...
|
|
181
|
-
root: E(
|
|
180
|
+
] : [], ...t(n)], h = await s.createServer({
|
|
181
|
+
root: E(n, ".framework"),
|
|
182
182
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
183
183
|
plugins: [(await import("@vitejs/plugin-react")).default(), (await import("@tailwindcss/vite")).default()],
|
|
184
184
|
resolve: {
|
|
@@ -198,20 +198,20 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
198
198
|
},
|
|
199
199
|
appType: "custom",
|
|
200
200
|
logLevel: "warn"
|
|
201
|
-
}),
|
|
201
|
+
}), _ = await h.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: v, renderMetaToHtml: y, renderRouterStateScript: x, isDeferredLoaderResult: S, assertDeferralSupported: C, beginStoreSeeds: w, seedPreloadedSubscription: D, seedPreloadedSubscriptionFailure: A } = _, j = /* @__PURE__ */ new Map();
|
|
202
202
|
if (e.locales && e.locales.length > 0 && e.defaultLocale) try {
|
|
203
|
-
let
|
|
204
|
-
if (typeof
|
|
203
|
+
let t = (await h.ssrLoadModule("@voltro/i18n")).makeSsgWrap;
|
|
204
|
+
if (typeof t != "function") throw Error("@voltro/i18n is installed but missing the `makeSsgWrap` export — upgrade @voltro/i18n to a version that ships SSG support.");
|
|
205
205
|
for (let r of e.locales) try {
|
|
206
|
-
let i = await h.ssrLoadModule(E(
|
|
207
|
-
j.set(r,
|
|
206
|
+
let i = await h.ssrLoadModule(E(n, "src", "locales", `${r}.ts`)), a = i.default ?? i;
|
|
207
|
+
j.set(r, t(r, a, e.defaultLocale));
|
|
208
208
|
} catch (e) {
|
|
209
209
|
F.warn(`i18n catalog missing for locale '${r}' — pages rendered at /${r}/* will crash. Add src/locales/${r}.ts.`, {}, e);
|
|
210
210
|
}
|
|
211
211
|
} catch (e) {
|
|
212
212
|
F.warn("i18n wrapper unavailable for SSG — pages that call useT() will fail. Check that @voltro/i18n is installed.", {}, e);
|
|
213
213
|
}
|
|
214
|
-
let M = [], N = {}, P = (e) => e.dir === "" ? E(
|
|
214
|
+
let M = [], N = {}, P = (e) => e.dir === "" ? E(n, "src", "pages") : E(n, "src", "pages", e.dir), I = async (e) => await h.ssrLoadModule(E(P(e), "layout.tsx")), B = async (e) => await h.ssrLoadModule(E(P(e), "error.tsx")), U = async (e) => await h.ssrLoadModule(E(P(e), "loading.tsx")), W = (e, t) => ({
|
|
215
215
|
params: e.params,
|
|
216
216
|
pathname: e.pathname,
|
|
217
217
|
search: "",
|
|
@@ -220,166 +220,169 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
220
220
|
query: void 0,
|
|
221
221
|
isServer: !0
|
|
222
222
|
});
|
|
223
|
-
for (let
|
|
224
|
-
let
|
|
225
|
-
N[
|
|
226
|
-
let
|
|
227
|
-
if (
|
|
228
|
-
let
|
|
229
|
-
page:
|
|
230
|
-
chainEntries:
|
|
231
|
-
pageMod:
|
|
232
|
-
shellTemplate:
|
|
233
|
-
distDir:
|
|
234
|
-
helpers:
|
|
223
|
+
for (let t of i) {
|
|
224
|
+
let i = `${E(n, "src", "pages", t.file)}`, s = await h.ssrLoadModule(i), c = b(s, E("src", "pages", t.file));
|
|
225
|
+
N[t.pattern] = c;
|
|
226
|
+
let d = c.renderMode, f = g(a, t.dirChain);
|
|
227
|
+
if (d === "spa") {
|
|
228
|
+
let n = await H({
|
|
229
|
+
page: t,
|
|
230
|
+
chainEntries: f,
|
|
231
|
+
pageMod: s,
|
|
232
|
+
shellTemplate: u,
|
|
233
|
+
distDir: r,
|
|
234
|
+
helpers: _,
|
|
235
235
|
loadLayout: I,
|
|
236
236
|
loadError: B,
|
|
237
237
|
loadPending: U,
|
|
238
238
|
ctx: W({
|
|
239
239
|
params: {},
|
|
240
|
-
pathname:
|
|
240
|
+
pathname: t.pattern
|
|
241
241
|
}, new AbortController().signal),
|
|
242
242
|
outerWrap: j.get(e.defaultLocale ?? ""),
|
|
243
243
|
locale: e.defaultLocale
|
|
244
244
|
});
|
|
245
|
-
|
|
245
|
+
n && M.push(n);
|
|
246
246
|
continue;
|
|
247
247
|
}
|
|
248
|
-
if (
|
|
248
|
+
if (d !== "static") {
|
|
249
249
|
F.debug("skip page", {
|
|
250
|
-
pattern:
|
|
251
|
-
reason: `renderMode=${
|
|
250
|
+
pattern: t.pattern,
|
|
251
|
+
reason: `renderMode=${d}`
|
|
252
252
|
});
|
|
253
253
|
continue;
|
|
254
254
|
}
|
|
255
|
-
let
|
|
256
|
-
if (L(
|
|
257
|
-
if (typeof
|
|
255
|
+
let p;
|
|
256
|
+
if (L(t.pattern)) {
|
|
257
|
+
if (typeof s.getStaticPaths != "function") {
|
|
258
258
|
F.debug("skip page", {
|
|
259
|
-
pattern:
|
|
259
|
+
pattern: t.pattern,
|
|
260
260
|
reason: "no getStaticPaths export"
|
|
261
261
|
});
|
|
262
262
|
continue;
|
|
263
263
|
}
|
|
264
264
|
try {
|
|
265
|
-
let e = await
|
|
265
|
+
let e = await s.getStaticPaths();
|
|
266
266
|
if (!Array.isArray(e)) {
|
|
267
|
-
F.warn("skip page — getStaticPaths did not return an array", { pattern:
|
|
267
|
+
F.warn("skip page — getStaticPaths did not return an array", { pattern: t.pattern });
|
|
268
268
|
continue;
|
|
269
269
|
}
|
|
270
|
-
|
|
270
|
+
p = e.map((e) => ({
|
|
271
271
|
params: e.params,
|
|
272
|
-
pathname: R(
|
|
272
|
+
pathname: R(t.pattern, e.params)
|
|
273
273
|
}));
|
|
274
274
|
} catch (e) {
|
|
275
|
-
F.warn("skip page — getStaticPaths threw", { pattern:
|
|
275
|
+
F.warn("skip page — getStaticPaths threw", { pattern: t.pattern }, e);
|
|
276
276
|
continue;
|
|
277
277
|
}
|
|
278
|
-
if (
|
|
278
|
+
if (p.length === 0) {
|
|
279
279
|
F.debug("skip page", {
|
|
280
|
-
pattern:
|
|
280
|
+
pattern: t.pattern,
|
|
281
281
|
reason: "getStaticPaths returned []"
|
|
282
282
|
});
|
|
283
283
|
continue;
|
|
284
284
|
}
|
|
285
|
-
} else
|
|
285
|
+
} else p = [{
|
|
286
286
|
params: {},
|
|
287
|
-
pathname:
|
|
287
|
+
pathname: t.pattern
|
|
288
288
|
}];
|
|
289
|
-
let m =
|
|
290
|
-
for (let
|
|
289
|
+
let m = s.interactive ?? "full";
|
|
290
|
+
for (let n of p) {
|
|
291
291
|
w();
|
|
292
|
-
let
|
|
292
|
+
let i, a, c = new AbortController();
|
|
293
293
|
try {
|
|
294
|
-
({chain:
|
|
295
|
-
entries:
|
|
294
|
+
({chain: i, segmentLoaderData: a} = await l({
|
|
295
|
+
entries: f,
|
|
296
296
|
loadLayout: I,
|
|
297
297
|
loadError: B,
|
|
298
298
|
loadPending: U,
|
|
299
|
-
ctx: W(
|
|
299
|
+
ctx: W(n, c.signal)
|
|
300
300
|
}));
|
|
301
301
|
} catch (e) {
|
|
302
|
-
let
|
|
303
|
-
if (e instanceof Error &&
|
|
304
|
-
if (e instanceof Error &&
|
|
305
|
-
F.warn("layout loader threw NotFoundError at build time — skipping artifact", { pathname:
|
|
302
|
+
let t = e?._voltroControl;
|
|
303
|
+
if (e instanceof Error && t === "redirect") throw Error(`Static page "${n.pathname}" threw RedirectError from a LAYOUT loader at build time. Static pages can't redirect per-request — switch it to renderMode 'ssr'.`);
|
|
304
|
+
if (e instanceof Error && t === "not-found") {
|
|
305
|
+
F.warn("layout loader threw NotFoundError at build time — skipping artifact", { pathname: n.pathname });
|
|
306
306
|
continue;
|
|
307
307
|
}
|
|
308
|
-
F.warn("layout loader threw, falling back to no layout data", { pathname:
|
|
309
|
-
entries:
|
|
308
|
+
F.warn("layout loader threw, falling back to no layout data", { pathname: n.pathname }, e), {chain: i, segmentLoaderData: a} = await l({
|
|
309
|
+
entries: f,
|
|
310
310
|
loadLayout: async (e) => ({ default: (await I(e)).default }),
|
|
311
311
|
loadError: B,
|
|
312
312
|
loadPending: U,
|
|
313
|
-
ctx: W(
|
|
313
|
+
ctx: W(n, c.signal)
|
|
314
314
|
});
|
|
315
315
|
}
|
|
316
|
-
let
|
|
317
|
-
pattern:
|
|
318
|
-
Component:
|
|
319
|
-
meta:
|
|
320
|
-
loader:
|
|
321
|
-
ErrorBoundary:
|
|
322
|
-
Pending:
|
|
323
|
-
renderMode:
|
|
324
|
-
chain:
|
|
325
|
-
},
|
|
326
|
-
if (typeof
|
|
316
|
+
let p = {
|
|
317
|
+
pattern: t.pattern,
|
|
318
|
+
Component: s.default,
|
|
319
|
+
meta: s.meta,
|
|
320
|
+
loader: s.loader,
|
|
321
|
+
ErrorBoundary: s.ErrorBoundary,
|
|
322
|
+
Pending: s.Pending,
|
|
323
|
+
renderMode: d,
|
|
324
|
+
chain: i
|
|
325
|
+
}, h = null;
|
|
326
|
+
if (typeof s.loader == "function") {
|
|
327
327
|
let e = new AbortController();
|
|
328
328
|
try {
|
|
329
|
-
|
|
330
|
-
params:
|
|
331
|
-
pathname:
|
|
329
|
+
h = await s.loader({
|
|
330
|
+
params: n.params,
|
|
331
|
+
pathname: n.pathname,
|
|
332
|
+
search: "",
|
|
333
|
+
headers: {},
|
|
334
|
+
query: void 0,
|
|
332
335
|
signal: e.signal,
|
|
333
336
|
isServer: !0
|
|
334
337
|
});
|
|
335
338
|
} catch (e) {
|
|
336
|
-
if (e instanceof Error && e._voltroControl === "redirect") throw Error(`Static page "${
|
|
339
|
+
if (e instanceof Error && e._voltroControl === "redirect") throw Error(`Static page "${n.pathname}" threw RedirectError at build time. Static pages can't redirect per-request — switch it to renderMode 'ssr'.`);
|
|
337
340
|
if (e instanceof Error && e._voltroControl === "not-found") {
|
|
338
|
-
F.warn("loader threw NotFoundError at build time — skipping artifact", { pathname:
|
|
341
|
+
F.warn("loader threw NotFoundError at build time — skipping artifact", { pathname: n.pathname });
|
|
339
342
|
continue;
|
|
340
343
|
}
|
|
341
|
-
F.warn("loader threw, falling back to null", { pathname:
|
|
344
|
+
F.warn("loader threw, falling back to null", { pathname: n.pathname }, e);
|
|
342
345
|
}
|
|
343
346
|
}
|
|
344
|
-
S(
|
|
345
|
-
page:
|
|
346
|
-
renderMode:
|
|
347
|
+
S(h) && C({
|
|
348
|
+
page: n.pathname,
|
|
349
|
+
renderMode: d,
|
|
347
350
|
interactive: m
|
|
348
351
|
});
|
|
349
|
-
for (let e of Object.values(
|
|
350
|
-
page:
|
|
351
|
-
renderMode:
|
|
352
|
+
for (let e of Object.values(a)) S(e) && C({
|
|
353
|
+
page: n.pathname,
|
|
354
|
+
renderMode: d,
|
|
352
355
|
interactive: m
|
|
353
356
|
});
|
|
354
|
-
await
|
|
355
|
-
pageMod:
|
|
356
|
-
params:
|
|
357
|
+
await o({
|
|
358
|
+
pageMod: s,
|
|
359
|
+
params: n.params,
|
|
357
360
|
query: void 0,
|
|
358
361
|
apiName: void 0,
|
|
359
362
|
seed: D,
|
|
360
363
|
seedFailure: A
|
|
361
364
|
});
|
|
362
|
-
let
|
|
363
|
-
descriptor:
|
|
364
|
-
params:
|
|
365
|
-
pathname:
|
|
366
|
-
loaderData:
|
|
367
|
-
segmentLoaderData:
|
|
368
|
-
...
|
|
369
|
-
locale:
|
|
370
|
-
}), O = V(
|
|
365
|
+
let g = n.params.locale ?? e.defaultLocale ?? "en", _ = j.get(g) ?? j.get(e.defaultLocale ?? ""), { html: b, meta: E } = v({
|
|
366
|
+
descriptor: p,
|
|
367
|
+
params: n.params,
|
|
368
|
+
pathname: n.pathname,
|
|
369
|
+
loaderData: h,
|
|
370
|
+
segmentLoaderData: a,
|
|
371
|
+
..._ ? { outerWrap: _ } : {},
|
|
372
|
+
locale: g
|
|
373
|
+
}), O = V(u, {
|
|
371
374
|
body: b,
|
|
372
375
|
metaHtml: y(E),
|
|
373
376
|
stateScript: x({
|
|
374
|
-
path:
|
|
375
|
-
loaderData:
|
|
376
|
-
segmentLoaderData:
|
|
377
|
-
pageLoaderRan: typeof
|
|
377
|
+
path: n.pathname,
|
|
378
|
+
loaderData: h,
|
|
379
|
+
segmentLoaderData: a,
|
|
380
|
+
pageLoaderRan: typeof s.loader == "function"
|
|
378
381
|
}),
|
|
379
382
|
interactive: m
|
|
380
|
-
}), N = z(
|
|
383
|
+
}), N = z(r, n.pathname);
|
|
381
384
|
await k.mkdir(T(N), { recursive: !0 }), await k.writeFile(N, O, "utf8"), M.push({
|
|
382
|
-
pattern:
|
|
385
|
+
pattern: n.pathname,
|
|
383
386
|
outPath: N,
|
|
384
387
|
...E?.noIndex ? { noIndex: !0 } : {}
|
|
385
388
|
});
|
|
@@ -474,7 +477,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
474
477
|
file: n.file,
|
|
475
478
|
reason: n.reason
|
|
476
479
|
});
|
|
477
|
-
let { regenerateRpcGroup: r } = await import("./codegenCommand-
|
|
480
|
+
let { regenerateRpcGroup: r } = await import("./codegenCommand-DF2OJh3O.js"), i = await r(e);
|
|
478
481
|
if (i.kind === "refused") {
|
|
479
482
|
F.warn("could not regenerate the rpc group — building against what is on disk", { reason: i.reason });
|
|
480
483
|
return;
|
|
@@ -484,12 +487,12 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
484
487
|
routes: i.routes
|
|
485
488
|
});
|
|
486
489
|
}, K = async (e) => {
|
|
487
|
-
let
|
|
488
|
-
if (!
|
|
489
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
490
|
+
let n = await d(e);
|
|
491
|
+
if (!n) {
|
|
492
|
+
let { loadApiConfig: t } = await import("./dev-D8JSKlBM.js"), n = await t(e);
|
|
490
493
|
if (n) {
|
|
491
494
|
F.info("building api app", { app: n.name ?? "(unnamed)" }), await G(e);
|
|
492
|
-
let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-
|
|
495
|
+
let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-BIyGkym8.js");
|
|
493
496
|
await t(e);
|
|
494
497
|
try {
|
|
495
498
|
await r(e);
|
|
@@ -509,22 +512,22 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
509
512
|
exitCode: 0
|
|
510
513
|
};
|
|
511
514
|
}
|
|
512
|
-
F.info("building web app", { app:
|
|
513
|
-
let { resolved: i } = await
|
|
514
|
-
rawEnv:
|
|
515
|
+
F.info("building web app", { app: n.name ?? "(unnamed)" });
|
|
516
|
+
let { resolved: i } = await f({
|
|
517
|
+
rawEnv: n.env,
|
|
515
518
|
appType: "web",
|
|
516
519
|
root: e,
|
|
517
520
|
log: F,
|
|
518
521
|
generateTypes: !0
|
|
519
|
-
}), a = await
|
|
520
|
-
await
|
|
521
|
-
let { pages:
|
|
522
|
-
await
|
|
522
|
+
}), a = await p(e, n);
|
|
523
|
+
await u(e, n, a, i.publicValues);
|
|
524
|
+
let { pages: o } = await v(E(e, "src", "pages"));
|
|
525
|
+
await s({
|
|
523
526
|
appRoot: e,
|
|
524
|
-
pages:
|
|
527
|
+
pages: o,
|
|
525
528
|
mode: "prod"
|
|
526
529
|
});
|
|
527
|
-
let
|
|
530
|
+
let l = E(e, ".framework"), m = E(l, "dist"), g = E(e, "node_modules", "@voltro", "ui-shadcn"), y = O(E(g, "package.json")) ? g : null, b = [...y ? [
|
|
528
531
|
{
|
|
529
532
|
find: "@voltro/ui-shadcn/tokens.css",
|
|
530
533
|
replacement: E(y, "src/tokens.css")
|
|
@@ -541,11 +544,11 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
541
544
|
find: "@voltro/ui-shadcn",
|
|
542
545
|
replacement: E(y, "src/index.ts")
|
|
543
546
|
}
|
|
544
|
-
] : [], ...
|
|
547
|
+
] : [], ...t(e)];
|
|
545
548
|
F.info("running vite build");
|
|
546
549
|
let x = await h("vite", () => import("vite")), C = (await import("@vitejs/plugin-react")).default, T = (await import("@tailwindcss/vite")).default;
|
|
547
550
|
await x.build({
|
|
548
|
-
root:
|
|
551
|
+
root: l,
|
|
549
552
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
550
553
|
plugins: [C(), T()],
|
|
551
554
|
resolve: {
|
|
@@ -561,32 +564,32 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
561
564
|
build: {
|
|
562
565
|
outDir: "dist",
|
|
563
566
|
emptyOutDir: !0,
|
|
564
|
-
rollupOptions: { output: { manualChunks:
|
|
567
|
+
rollupOptions: { output: { manualChunks: _ } }
|
|
565
568
|
},
|
|
566
569
|
logLevel: "warn"
|
|
567
570
|
});
|
|
568
571
|
let D = E(e, "src", "pages"), { pages: A, dirs: j } = await v(D);
|
|
569
572
|
if (A.length === 0) return F.info("no pages found — client-only bundle written", {
|
|
570
573
|
pagesDir: D,
|
|
571
|
-
distDir:
|
|
574
|
+
distDir: m
|
|
572
575
|
}), {
|
|
573
576
|
ran: !0,
|
|
574
577
|
exitCode: 0
|
|
575
578
|
};
|
|
576
579
|
let { rendered: M, pageMeta: N } = await U({
|
|
577
580
|
root: e,
|
|
578
|
-
distDir:
|
|
581
|
+
distDir: m,
|
|
579
582
|
pages: A,
|
|
580
583
|
dirs: j,
|
|
581
584
|
vite: x,
|
|
582
|
-
...
|
|
583
|
-
...
|
|
585
|
+
...n.locales ? { locales: n.locales } : {},
|
|
586
|
+
...n.defaultLocale ? { defaultLocale: n.defaultLocale } : {}
|
|
584
587
|
});
|
|
585
|
-
F.info("generating .framework/ssrEntry.ts"), await W(e, A, j,
|
|
588
|
+
F.info("generating .framework/ssrEntry.ts"), await W(e, A, j, n.locales, n.defaultLocale, N), F.info("vite build --ssr → dist/server/");
|
|
586
589
|
let L = /* @__PURE__ */ new Set();
|
|
587
590
|
try {
|
|
588
591
|
await x.build({
|
|
589
|
-
root:
|
|
592
|
+
root: l,
|
|
590
593
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
591
594
|
plugins: [
|
|
592
595
|
C(),
|
|
@@ -626,7 +629,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
626
629
|
try {
|
|
627
630
|
await (await h("esbuild", () => import("esbuild"))).build({
|
|
628
631
|
entryPoints: [R],
|
|
629
|
-
outfile: E(
|
|
632
|
+
outfile: E(m, "server", "appConfig.js"),
|
|
630
633
|
bundle: !0,
|
|
631
634
|
format: "esm",
|
|
632
635
|
platform: "node",
|
|
@@ -656,36 +659,36 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
656
659
|
routes: M.map((e) => e.pattern)
|
|
657
660
|
});
|
|
658
661
|
try {
|
|
659
|
-
let e = process.env.VOLTRO_SEO_NOINDEX !== "1",
|
|
660
|
-
if (
|
|
661
|
-
let
|
|
662
|
-
let
|
|
663
|
-
return
|
|
664
|
-
}).filter((e) => !e.includes("[")).map((e) => ({ path: e })),
|
|
665
|
-
siteUrl:
|
|
666
|
-
entries:
|
|
662
|
+
let e = process.env.VOLTRO_SEO_NOINDEX !== "1", t = n.seo?.siteUrl, i = n.locales ?? [], a = n.defaultLocale ?? i[0];
|
|
663
|
+
if (t && !O(E(m, "sitemap.xml"))) {
|
|
664
|
+
let n = new Set(i.filter((e) => e !== a)), r = M.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
|
|
665
|
+
let t = e.split("/").filter(Boolean)[0];
|
|
666
|
+
return t === void 0 || !n.has(t);
|
|
667
|
+
}).filter((e) => !e.includes("[")).map((e) => ({ path: e })), o = c({
|
|
668
|
+
siteUrl: t,
|
|
669
|
+
entries: r,
|
|
667
670
|
...i.length > 1 ? { locales: i } : {},
|
|
668
671
|
...a ? { defaultLocale: a } : {}
|
|
669
672
|
});
|
|
670
|
-
await k.writeFile(E(
|
|
671
|
-
urls:
|
|
673
|
+
await k.writeFile(E(m, "sitemap.xml"), o, "utf8"), F.info("wrote dist/sitemap.xml", {
|
|
674
|
+
urls: r.length,
|
|
672
675
|
indexable: e
|
|
673
676
|
});
|
|
674
677
|
}
|
|
675
|
-
if (!O(E(
|
|
676
|
-
let
|
|
678
|
+
if (!O(E(m, "robots.txt"))) {
|
|
679
|
+
let i = r({
|
|
677
680
|
indexable: e,
|
|
678
|
-
...e &&
|
|
679
|
-
...
|
|
681
|
+
...e && t ? { sitemapUrl: `${t.replace(/\/$/, "")}/sitemap.xml` } : {},
|
|
682
|
+
...n.seo?.disallow ? { disallow: n.seo.disallow } : {}
|
|
680
683
|
});
|
|
681
|
-
await k.writeFile(E(
|
|
684
|
+
await k.writeFile(E(m, "robots.txt"), i, "utf8"), F.info("wrote dist/robots.txt", { indexable: e });
|
|
682
685
|
}
|
|
683
686
|
} catch (e) {
|
|
684
687
|
F.warn("SEO artefact generation failed (non-fatal)", {}, e);
|
|
685
688
|
}
|
|
686
689
|
try {
|
|
687
690
|
let t = await w(e);
|
|
688
|
-
await k.writeFile(E(
|
|
691
|
+
await k.writeFile(E(m, ".voltro-build.json"), JSON.stringify({
|
|
689
692
|
version: 1,
|
|
690
693
|
profile: t
|
|
691
694
|
}, null, 2), "utf8"), F.info("wrote deploy profile manifest", {
|
|
@@ -696,7 +699,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
696
699
|
} catch (e) {
|
|
697
700
|
F.warn("could not write .voltro-build.json deploy manifest", {}, e);
|
|
698
701
|
}
|
|
699
|
-
return F.info("build complete", { distDir:
|
|
702
|
+
return F.info("build complete", { distDir: m }), {
|
|
700
703
|
ran: !0,
|
|
701
704
|
exitCode: 0
|
|
702
705
|
};
|
|
@@ -708,7 +711,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
708
711
|
return t.ran ? t.exitCode : (yield* j.logError("no web app found at this path", { hint: "looked for app.config.ts with `type: 'web'`" }), 1);
|
|
709
712
|
}), J = async (t) => {
|
|
710
713
|
if (t.includes("--target")) {
|
|
711
|
-
let { runSdkBuildCommand: e } = await import("./sdkgen-
|
|
714
|
+
let { runSdkBuildCommand: e } = await import("./sdkgen-DQ8uEmmn.js");
|
|
712
715
|
return e(t);
|
|
713
716
|
}
|
|
714
717
|
let n = t.find((e) => !e.startsWith("-")) ?? process.cwd(), r = await y(q(n), { scope: "voltro:build" }), i = e(n);
|
|
@@ -4,7 +4,7 @@ import { r } from "./appGraph-KGDPTuTy.js";
|
|
|
4
4
|
import { n as i } from "./cliOutput-D1tSBoRM.js";
|
|
5
5
|
import { n as a, o, r as s, t as c } from "./inspectFetch-EMuhTG_9.js";
|
|
6
6
|
import { r as l } from "./fileTaxonomy-CJfgOllU.js";
|
|
7
|
-
import { x as u } from "./doctorCommand-
|
|
7
|
+
import { x as u } from "./doctorCommand-C-8-Z9D6.js";
|
|
8
8
|
import { resolve as d } from "node:path";
|
|
9
9
|
import { readdirSync as f, statSync as p } from "node:fs";
|
|
10
10
|
//#region src/observedDiff.ts
|
|
@@ -141,12 +141,12 @@ var m = (e) => e === void 0 ? [] : typeof e == "string" ? [e] : e, h = /* @__PUR
|
|
|
141
141
|
let t = e.severity === "error" ? "✗ error" : "⚠ warn", n = e.file ? ` (${e.file})` : "";
|
|
142
142
|
return `${t} ${e.rule} ${e.node}${n}\n ${e.breaks.join("; ")}\n fix: ${e.fix}`;
|
|
143
143
|
}).join("\n"), C = async (e) => {
|
|
144
|
-
let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-
|
|
144
|
+
let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-D8JSKlBM.js"), { buildRpcEntry: i } = await import("./manifestBuild-j0n109tt.js"), { buildCapabilityManifest: a } = await import("./inspect-DUze25t0.js"), { relative: o } = await import("node:path"), s = await n(await t(e)), c = (t, n, r) => i(t, n, o(e, r)), l = [
|
|
145
145
|
...s.queries.map((e) => c(e.descriptor, "query", e.file)),
|
|
146
146
|
...s.mutations.map((e) => c(e.descriptor, "mutation", e.file)),
|
|
147
147
|
...s.actions.map((e) => c(e.descriptor, "action", e.file)),
|
|
148
148
|
...s.streams.map((e) => c(e.descriptor, "stream", e.file))
|
|
149
|
-
], { assembleFrameworkTables: u } = await import("./frameworkTableAssembly-
|
|
149
|
+
], { assembleFrameworkTables: u } = await import("./frameworkTableAssembly-DgylYh9_.js"), d = await u({ root: e }).catch((e) => (console.warn(`\n⚠ plugin tables could not be collected — this report is INCOMPLETE.\n ${e instanceof Error ? e.message.split("\n")[0] : String(e)}\n`), [])), f = new Set(s.tables.map((e) => e.tableName)), p = [...[...f].map((e) => ({ name: e })), ...d.map((e) => e.tableName).filter((e) => !f.has(e)).map((e) => ({
|
|
150
150
|
name: e,
|
|
151
151
|
framework: !0
|
|
152
152
|
}))], m = await r(e).then((e) => e?.plugins ?? []).catch(() => []);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, r as t, t as n } from "./checkCommand-
|
|
1
|
+
import { n as e, r as t, t as n } from "./checkCommand-BcXJa2IS.js";
|
|
2
2
|
export { n as offlineManifest, e as runCheckCommand, t as toInput };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as e, t } from "./cliArgs-D4p8n7EE.js";
|
|
2
2
|
import { a as n, i as r, n as i, r as a, t as o } from "./cloudClient-DWL-Hw_T.js";
|
|
3
3
|
import { n as s } from "./cliOutput-D1tSBoRM.js";
|
|
4
|
-
import { d as c, f as l, o as u } from "./projectScaffold-
|
|
4
|
+
import { d as c, f as l, o as u } from "./projectScaffold-mIX_DpSe.js";
|
|
5
5
|
import { basename as d, join as f, resolve as p } from "node:path";
|
|
6
6
|
import { promises as m } from "node:fs";
|
|
7
7
|
import { ansi as h } from "@voltro/logger";
|