@voltro/cli 0.40.0 → 0.41.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 +74 -0
- package/dist/{apiBuild-C8xBEYbL.js → apiBuild-B_iH24qf.js} +2 -2
- package/dist/apiBuild-RM5W5YXk.js +2 -0
- package/dist/bin.js +1 -1
- package/dist/{build-CkhFGnKA.js → build-DUdi6F_Q.js} +150 -150
- package/dist/{checkCommand-QbHshOac.js → checkCommand-B2RWrpWi.js} +1 -1
- package/dist/{checkCommand-BcXJa2IS.js → checkCommand-DWL2_PPR.js} +2 -2
- package/dist/{codegenCommand-DF2OJh3O.js → codegenCommand-DkjoJ30Q.js} +2 -2
- package/dist/{codemodRunner-BcOvi4A2.js → codemodRunner-sFuWDETH.js} +520 -460
- package/dist/{commands-7Z7-HOE3.js → commands-D0VR1yBB.js} +22 -22
- package/dist/{dashboardCommand-CUycH6dR.js → dashboardCommand-Bro7Jwts.js} +5 -5
- package/dist/{dataCommand-By78lscK.js → dataCommand-OKC5FscP.js} +183 -172
- package/dist/{dbCommand-DSwGv9wS.js → dbCommand-BHRamDsy.js} +441 -414
- package/dist/dbCommand-C9iE1pd9.js +2 -0
- package/dist/{dev-Dh1NuYx1.js → dev-D4l_YOzI.js} +22 -22
- package/dist/{dev-D8JSKlBM.js → dev-DuqBJC7g.js} +1 -1
- package/dist/doctorCommand-Bw3V4L1j.js +2 -0
- package/dist/{doctorCommand-C-8-Z9D6.js → doctorCommand-TmZTAepc.js} +385 -279
- package/dist/{dormancyCommand-A79Odglm.js → dormancyCommand-CUKhRmGG.js} +1 -1
- package/dist/{embeddingsCommand-CoiyHfkY.js → embeddingsCommand-Db-iQM3l.js} +1 -1
- package/dist/{envCommand-B6d0s-jZ.js → envCommand-DQ_URZq9.js} +12 -12
- package/dist/{evolveCommand-BC5a9lxX.js → evolveCommand-CghRPrGO.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/{infoCommand-ZqSVzJZ4.js → infoCommand-BCs_ZFnl.js} +1 -1
- package/dist/{migrate-BnPw2zC8.js → migrate-DLtPv2_D.js} +1 -1
- package/dist/{runtimeTrace-BslKJjDY.js → runtimeTrace-jFKvOPBz.js} +1 -1
- package/dist/{sdkgen-DQ8uEmmn.js → sdkgen-COQqHB9V.js} +1 -1
- package/dist/{serveCommand-Dqb9Ku1-.js → serveCommand-Cba_M2Su.js} +3 -3
- package/dist/serveCommand-DRbYK646.js +2 -0
- package/dist/serveEntry.js +1 -1
- package/dist/{start-dkNYKtgQ.js → start-BjcuFME_.js} +379 -343
- package/dist/{start-BA7txHhY.js → start-fifc0xpW.js} +1 -1
- package/dist/startEntry.js +1 -1
- package/dist/updateCommand-B2alql9k.js +2 -0
- package/dist/{updateCommand-eoGpZr3E.js → updateCommand-HZQVBU3T.js} +1 -1
- package/dist/webDev-D6QeXw3P.js +2 -0
- package/dist/{webDev-bybjZA0o.js → webDev-Dk8lFUzf.js} +642 -525
- package/dist/{webhooksCommand-DubZWNOx.js → webhooksCommand-D7ZpH7w0.js} +1 -1
- package/package.json +23 -17
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/_manifest.json +1 -1
- package/templates/agent-docs/cli.md +6 -0
- package/templates/agent-docs/plugins/governance.md +8 -0
- package/templates/agent-docs/routing.md +141 -28
- package/templates/agent-docs/security.md +24 -0
- package/templates/agent-docs/whats-new.md +37 -121
- 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-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/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/apiBuild-BIyGkym8.js +0 -2
- package/dist/dbCommand-DcqEyxju.js +0 -2
- package/dist/doctorCommand-FhQ7EVYL.js +0 -2
- package/dist/serveCommand-BmvEQCMS.js +0 -2
- package/dist/updateCommand-BauSVxPp.js +0 -2
- package/dist/webDev-CBbKs4dZ.js +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { hn as e } from "./dev-
|
|
2
|
-
import { $ as t,
|
|
1
|
+
import { hn as e } from "./dev-D4l_YOzI.js";
|
|
2
|
+
import { $ as t, A as n, F as r, I as i, L as a, Q as o, a as s, b as c, d as l, et as u, f as d, ht as f, k as p, rt as m, s as h, v as g, vt as _, y as v } from "./webDev-Dk8lFUzf.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-B_iH24qf.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";
|
|
@@ -12,7 +12,7 @@ import { Effect as j } from "effect";
|
|
|
12
12
|
import { createRequire as M } from "node:module";
|
|
13
13
|
//#region src/webStartBundle.ts
|
|
14
14
|
var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
15
|
-
let t = await
|
|
15
|
+
let t = await _("esbuild", () => import("esbuild")), n = E(e, ".framework"), r = E(n, "dist-web", "startBundle");
|
|
16
16
|
await k.mkdir(n, { recursive: !0 });
|
|
17
17
|
let i = Date.now(), a = E(e, "tsconfig.json"), o = /* @__PURE__ */ new Set(), s = E(n, "startEntry.ts");
|
|
18
18
|
await k.writeFile(s, [
|
|
@@ -103,8 +103,8 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
103
103
|
].filter((e) => e.length > 0).join("\n ");
|
|
104
104
|
return r = n(r, i), t.interactive === "none" && (r = B(r)), r;
|
|
105
105
|
}, H = async (e) => {
|
|
106
|
-
let { page: t, chainEntries:
|
|
107
|
-
if (
|
|
106
|
+
let { page: t, chainEntries: o, pageMod: c, helpers: l } = e, u = o.filter((e) => e.hasLayout);
|
|
107
|
+
if (u.length === 0) return F.debug("skip page", {
|
|
108
108
|
pattern: t.pattern,
|
|
109
109
|
reason: "renderMode=spa with no layout — nothing to shell"
|
|
110
110
|
}), null;
|
|
@@ -112,27 +112,27 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
112
112
|
pattern: t.pattern,
|
|
113
113
|
reason: "renderMode=spa with a dynamic pattern"
|
|
114
114
|
}), null;
|
|
115
|
-
let
|
|
116
|
-
if (
|
|
115
|
+
let d = await Promise.all(u.map(e.loadLayout)), f = u.filter((e, t) => typeof d[t]?.loader == "function").map((e) => e.dir || "/");
|
|
116
|
+
if (f.length > 0) return F.info(`spa shell for ${t.pattern} left to on-demand rendering — its layout chain has a loader (${f.join(", ")}), whose output may be per-request`, {
|
|
117
117
|
pattern: t.pattern,
|
|
118
|
-
layouts:
|
|
118
|
+
layouts: f
|
|
119
119
|
}), null;
|
|
120
|
-
let { chain:
|
|
121
|
-
entries:
|
|
120
|
+
let { chain: p, segmentLoaderData: m } = await s({
|
|
121
|
+
entries: o,
|
|
122
122
|
loadLayout: e.loadLayout,
|
|
123
123
|
loadError: e.loadError,
|
|
124
124
|
loadPending: e.loadPending,
|
|
125
125
|
ctx: e.ctx
|
|
126
126
|
}), h = {
|
|
127
127
|
pattern: t.pattern,
|
|
128
|
-
Component:
|
|
129
|
-
meta:
|
|
130
|
-
ErrorBoundary:
|
|
131
|
-
Pending:
|
|
128
|
+
Component: c.default,
|
|
129
|
+
meta: c.meta,
|
|
130
|
+
ErrorBoundary: c.ErrorBoundary,
|
|
131
|
+
Pending: c.Pending,
|
|
132
132
|
renderMode: "spa",
|
|
133
|
-
chain:
|
|
134
|
-
}, g =
|
|
135
|
-
helpers:
|
|
133
|
+
chain: p
|
|
134
|
+
}, g = c.interactive ?? "full", _ = r({
|
|
135
|
+
helpers: l,
|
|
136
136
|
page: t.pattern,
|
|
137
137
|
interactive: g,
|
|
138
138
|
delivery: "artefact",
|
|
@@ -140,15 +140,15 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
140
140
|
descriptor: h,
|
|
141
141
|
params: {},
|
|
142
142
|
pathname: t.pattern,
|
|
143
|
-
segmentLoaderData:
|
|
143
|
+
segmentLoaderData: m,
|
|
144
144
|
...e.outerWrap ? { outerWrap: e.outerWrap } : {},
|
|
145
145
|
...e.locale ? { locale: e.locale } : {}
|
|
146
146
|
}
|
|
147
147
|
}), v = i({
|
|
148
|
-
helpers:
|
|
148
|
+
helpers: l,
|
|
149
149
|
prepared: _
|
|
150
150
|
}), y = a({
|
|
151
|
-
helpers:
|
|
151
|
+
helpers: l,
|
|
152
152
|
prepared: _,
|
|
153
153
|
meta: v.meta,
|
|
154
154
|
interactive: g
|
|
@@ -158,31 +158,31 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
158
158
|
outPath: x
|
|
159
159
|
};
|
|
160
160
|
}, U = async (e) => {
|
|
161
|
-
let { root:
|
|
162
|
-
await k.mkdir(T(
|
|
163
|
-
let
|
|
161
|
+
let { root: t, distDir: n, pages: r, dirs: i, vite: a } = e, o = E(n, "index.html"), c = await k.readFile(o, "utf8"), l = E(n, "_voltro", "shell.html");
|
|
162
|
+
await k.mkdir(T(l), { recursive: !0 }), await k.writeFile(l, c, "utf8");
|
|
163
|
+
let u = E(t, "node_modules", "@voltro", "ui-shadcn"), d = O(E(u, "package.json")) ? u : null, f = [...d ? [
|
|
164
164
|
{
|
|
165
165
|
find: "@voltro/ui-shadcn/tokens.css",
|
|
166
|
-
replacement: E(
|
|
166
|
+
replacement: E(d, "src/tokens.css")
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
169
|
find: "@voltro/ui-shadcn/cn",
|
|
170
|
-
replacement: E(
|
|
170
|
+
replacement: E(d, "src/cn.ts")
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
find: "@voltro/ui-shadcn/brand",
|
|
174
|
-
replacement: E(
|
|
174
|
+
replacement: E(d, "src/brand/voltroLogo.tsx")
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
find: "@voltro/ui-shadcn",
|
|
178
|
-
replacement: E(
|
|
178
|
+
replacement: E(d, "src/index.ts")
|
|
179
179
|
}
|
|
180
|
-
] : [], ...t
|
|
181
|
-
root: E(
|
|
180
|
+
] : [], ...m(t)], g = await a.createServer({
|
|
181
|
+
root: E(t, ".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: {
|
|
185
|
-
alias:
|
|
185
|
+
alias: f,
|
|
186
186
|
dedupe: [
|
|
187
187
|
"react",
|
|
188
188
|
"react-dom",
|
|
@@ -198,20 +198,20 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
198
198
|
},
|
|
199
199
|
appType: "custom",
|
|
200
200
|
logLevel: "warn"
|
|
201
|
-
}), _ = await
|
|
201
|
+
}), _ = await g.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 n = (await g.ssrLoadModule("@voltro/i18n")).makeSsgWrap;
|
|
204
|
+
if (typeof n != "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
|
|
207
|
-
j.set(r,
|
|
206
|
+
let i = await g.ssrLoadModule(E(t, "src", "locales", `${r}.ts`)), a = i.default ?? i;
|
|
207
|
+
j.set(r, n(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(t, "src", "pages") : E(t, "src", "pages", e.dir), I = async (e) => await g.ssrLoadModule(E(P(e), "layout.tsx")), B = async (e) => await g.ssrLoadModule(E(P(e), "error.tsx")), U = async (e) => await g.ssrLoadModule(E(P(e), "loading.tsx")), W = (e, t) => ({
|
|
215
215
|
params: e.params,
|
|
216
216
|
pathname: e.pathname,
|
|
217
217
|
search: "",
|
|
@@ -220,115 +220,115 @@ 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:
|
|
223
|
+
for (let a of r) {
|
|
224
|
+
let r = `${E(t, "src", "pages", a.file)}`, o = await g.ssrLoadModule(r), l = b(o, E("src", "pages", a.file));
|
|
225
|
+
N[a.pattern] = l;
|
|
226
|
+
let u = l.renderMode, d = h(i, a.dirChain);
|
|
227
|
+
if (u === "spa") {
|
|
228
|
+
let t = await H({
|
|
229
|
+
page: a,
|
|
230
|
+
chainEntries: d,
|
|
231
|
+
pageMod: o,
|
|
232
|
+
shellTemplate: c,
|
|
233
|
+
distDir: n,
|
|
234
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: a.pattern
|
|
241
241
|
}, new AbortController().signal),
|
|
242
242
|
outerWrap: j.get(e.defaultLocale ?? ""),
|
|
243
243
|
locale: e.defaultLocale
|
|
244
244
|
});
|
|
245
|
-
|
|
245
|
+
t && M.push(t);
|
|
246
246
|
continue;
|
|
247
247
|
}
|
|
248
|
-
if (
|
|
248
|
+
if (u !== "static") {
|
|
249
249
|
F.debug("skip page", {
|
|
250
|
-
pattern:
|
|
251
|
-
reason: `renderMode=${
|
|
250
|
+
pattern: a.pattern,
|
|
251
|
+
reason: `renderMode=${u}`
|
|
252
252
|
});
|
|
253
253
|
continue;
|
|
254
254
|
}
|
|
255
|
-
let
|
|
256
|
-
if (L(
|
|
257
|
-
if (typeof
|
|
255
|
+
let f;
|
|
256
|
+
if (L(a.pattern)) {
|
|
257
|
+
if (typeof o.getStaticPaths != "function") {
|
|
258
258
|
F.debug("skip page", {
|
|
259
|
-
pattern:
|
|
259
|
+
pattern: a.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 o.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: a.pattern });
|
|
268
268
|
continue;
|
|
269
269
|
}
|
|
270
|
-
|
|
270
|
+
f = e.map((e) => ({
|
|
271
271
|
params: e.params,
|
|
272
|
-
pathname: R(
|
|
272
|
+
pathname: R(a.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: a.pattern }, e);
|
|
276
276
|
continue;
|
|
277
277
|
}
|
|
278
|
-
if (
|
|
278
|
+
if (f.length === 0) {
|
|
279
279
|
F.debug("skip page", {
|
|
280
|
-
pattern:
|
|
280
|
+
pattern: a.pattern,
|
|
281
281
|
reason: "getStaticPaths returned []"
|
|
282
282
|
});
|
|
283
283
|
continue;
|
|
284
284
|
}
|
|
285
|
-
} else
|
|
285
|
+
} else f = [{
|
|
286
286
|
params: {},
|
|
287
|
-
pathname:
|
|
287
|
+
pathname: a.pattern
|
|
288
288
|
}];
|
|
289
|
-
let m =
|
|
290
|
-
for (let
|
|
289
|
+
let m = o.interactive ?? "full";
|
|
290
|
+
for (let t of f) {
|
|
291
291
|
w();
|
|
292
|
-
let
|
|
292
|
+
let r, i, l = new AbortController();
|
|
293
293
|
try {
|
|
294
|
-
({chain:
|
|
295
|
-
entries:
|
|
294
|
+
({chain: r, segmentLoaderData: i} = await s({
|
|
295
|
+
entries: d,
|
|
296
296
|
loadLayout: I,
|
|
297
297
|
loadError: B,
|
|
298
298
|
loadPending: U,
|
|
299
|
-
ctx: W(
|
|
299
|
+
ctx: W(t, l.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 n = e?._voltroControl;
|
|
303
|
+
if (e instanceof Error && n === "redirect") throw Error(`Static page "${t.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 && n === "not-found") {
|
|
305
|
+
F.warn("layout loader threw NotFoundError at build time — skipping artifact", { pathname: t.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: t.pathname }, e), {chain: r, segmentLoaderData: i} = await s({
|
|
309
|
+
entries: d,
|
|
310
310
|
loadLayout: async (e) => ({ default: (await I(e)).default }),
|
|
311
311
|
loadError: B,
|
|
312
312
|
loadPending: U,
|
|
313
|
-
ctx: W(
|
|
313
|
+
ctx: W(t, l.signal)
|
|
314
314
|
});
|
|
315
315
|
}
|
|
316
|
-
let
|
|
317
|
-
pattern:
|
|
318
|
-
Component:
|
|
319
|
-
meta:
|
|
320
|
-
loader:
|
|
321
|
-
ErrorBoundary:
|
|
322
|
-
Pending:
|
|
323
|
-
renderMode:
|
|
324
|
-
chain:
|
|
316
|
+
let f = {
|
|
317
|
+
pattern: a.pattern,
|
|
318
|
+
Component: o.default,
|
|
319
|
+
meta: o.meta,
|
|
320
|
+
loader: o.loader,
|
|
321
|
+
ErrorBoundary: o.ErrorBoundary,
|
|
322
|
+
Pending: o.Pending,
|
|
323
|
+
renderMode: u,
|
|
324
|
+
chain: r
|
|
325
325
|
}, h = null;
|
|
326
|
-
if (typeof
|
|
326
|
+
if (typeof o.loader == "function") {
|
|
327
327
|
let e = new AbortController();
|
|
328
328
|
try {
|
|
329
|
-
h = await
|
|
330
|
-
params:
|
|
331
|
-
pathname:
|
|
329
|
+
h = await o.loader({
|
|
330
|
+
params: t.params,
|
|
331
|
+
pathname: t.pathname,
|
|
332
332
|
search: "",
|
|
333
333
|
headers: {},
|
|
334
334
|
query: void 0,
|
|
@@ -336,59 +336,59 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
336
336
|
isServer: !0
|
|
337
337
|
});
|
|
338
338
|
} catch (e) {
|
|
339
|
-
if (e instanceof Error && e._voltroControl === "redirect") throw Error(`Static page "${
|
|
339
|
+
if (e instanceof Error && e._voltroControl === "redirect") throw Error(`Static page "${t.pathname}" threw RedirectError at build time. Static pages can't redirect per-request — switch it to renderMode 'ssr'.`);
|
|
340
340
|
if (e instanceof Error && e._voltroControl === "not-found") {
|
|
341
|
-
F.warn("loader threw NotFoundError at build time — skipping artifact", { pathname:
|
|
341
|
+
F.warn("loader threw NotFoundError at build time — skipping artifact", { pathname: t.pathname });
|
|
342
342
|
continue;
|
|
343
343
|
}
|
|
344
|
-
F.warn("loader threw, falling back to null", { pathname:
|
|
344
|
+
F.warn("loader threw, falling back to null", { pathname: t.pathname }, e);
|
|
345
345
|
}
|
|
346
346
|
}
|
|
347
347
|
S(h) && C({
|
|
348
|
-
page:
|
|
349
|
-
renderMode:
|
|
348
|
+
page: t.pathname,
|
|
349
|
+
renderMode: u,
|
|
350
350
|
interactive: m
|
|
351
351
|
});
|
|
352
|
-
for (let e of Object.values(
|
|
353
|
-
page:
|
|
354
|
-
renderMode:
|
|
352
|
+
for (let e of Object.values(i)) S(e) && C({
|
|
353
|
+
page: t.pathname,
|
|
354
|
+
renderMode: u,
|
|
355
355
|
interactive: m
|
|
356
356
|
});
|
|
357
|
-
await
|
|
358
|
-
pageMod:
|
|
359
|
-
params:
|
|
357
|
+
await p({
|
|
358
|
+
pageMod: o,
|
|
359
|
+
params: t.params,
|
|
360
360
|
query: void 0,
|
|
361
361
|
apiName: void 0,
|
|
362
362
|
seed: D,
|
|
363
363
|
seedFailure: A
|
|
364
364
|
});
|
|
365
|
-
let g =
|
|
366
|
-
descriptor:
|
|
367
|
-
params:
|
|
368
|
-
pathname:
|
|
365
|
+
let g = t.params.locale ?? e.defaultLocale ?? "en", _ = j.get(g) ?? j.get(e.defaultLocale ?? ""), { html: b, meta: E } = v({
|
|
366
|
+
descriptor: f,
|
|
367
|
+
params: t.params,
|
|
368
|
+
pathname: t.pathname,
|
|
369
369
|
loaderData: h,
|
|
370
|
-
segmentLoaderData:
|
|
370
|
+
segmentLoaderData: i,
|
|
371
371
|
..._ ? { outerWrap: _ } : {},
|
|
372
372
|
locale: g
|
|
373
|
-
}), O = V(
|
|
373
|
+
}), O = V(c, {
|
|
374
374
|
body: b,
|
|
375
375
|
metaHtml: y(E),
|
|
376
376
|
stateScript: x({
|
|
377
|
-
path:
|
|
377
|
+
path: t.pathname,
|
|
378
378
|
loaderData: h,
|
|
379
|
-
segmentLoaderData:
|
|
380
|
-
pageLoaderRan: typeof
|
|
379
|
+
segmentLoaderData: i,
|
|
380
|
+
pageLoaderRan: typeof o.loader == "function"
|
|
381
381
|
}),
|
|
382
382
|
interactive: m
|
|
383
|
-
}), N = z(
|
|
383
|
+
}), N = z(n, t.pathname);
|
|
384
384
|
await k.mkdir(T(N), { recursive: !0 }), await k.writeFile(N, O, "utf8"), M.push({
|
|
385
|
-
pattern:
|
|
385
|
+
pattern: t.pathname,
|
|
386
386
|
outPath: N,
|
|
387
387
|
...E?.noIndex ? { noIndex: !0 } : {}
|
|
388
388
|
});
|
|
389
389
|
}
|
|
390
390
|
}
|
|
391
|
-
return await
|
|
391
|
+
return await g.close(), {
|
|
392
392
|
rendered: M,
|
|
393
393
|
pageMeta: N
|
|
394
394
|
};
|
|
@@ -477,7 +477,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
477
477
|
file: n.file,
|
|
478
478
|
reason: n.reason
|
|
479
479
|
});
|
|
480
|
-
let { regenerateRpcGroup: r } = await import("./codegenCommand-
|
|
480
|
+
let { regenerateRpcGroup: r } = await import("./codegenCommand-DkjoJ30Q.js"), i = await r(e);
|
|
481
481
|
if (i.kind === "refused") {
|
|
482
482
|
F.warn("could not regenerate the rpc group — building against what is on disk", { reason: i.reason });
|
|
483
483
|
return;
|
|
@@ -487,12 +487,12 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
487
487
|
routes: i.routes
|
|
488
488
|
});
|
|
489
489
|
}, K = async (e) => {
|
|
490
|
-
let n = await
|
|
490
|
+
let n = await l(e);
|
|
491
491
|
if (!n) {
|
|
492
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
492
|
+
let { loadApiConfig: t } = await import("./dev-DuqBJC7g.js"), n = await t(e);
|
|
493
493
|
if (n) {
|
|
494
494
|
F.info("building api app", { app: n.name ?? "(unnamed)" }), await G(e);
|
|
495
|
-
let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-
|
|
495
|
+
let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-RM5W5YXk.js");
|
|
496
496
|
await t(e);
|
|
497
497
|
try {
|
|
498
498
|
await r(e);
|
|
@@ -513,21 +513,21 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
513
513
|
};
|
|
514
514
|
}
|
|
515
515
|
F.info("building web app", { app: n.name ?? "(unnamed)" });
|
|
516
|
-
let { resolved:
|
|
516
|
+
let { resolved: r } = await f({
|
|
517
517
|
rawEnv: n.env,
|
|
518
518
|
appType: "web",
|
|
519
519
|
root: e,
|
|
520
520
|
log: F,
|
|
521
521
|
generateTypes: !0
|
|
522
|
-
}),
|
|
523
|
-
await
|
|
524
|
-
let { pages:
|
|
525
|
-
await
|
|
522
|
+
}), i = await d(e, n);
|
|
523
|
+
await c(e, n, i, r.publicValues);
|
|
524
|
+
let { pages: a } = await v(E(e, "src", "pages"));
|
|
525
|
+
await u({
|
|
526
526
|
appRoot: e,
|
|
527
|
-
pages:
|
|
527
|
+
pages: a,
|
|
528
528
|
mode: "prod"
|
|
529
529
|
});
|
|
530
|
-
let
|
|
530
|
+
let s = E(e, ".framework"), p = E(s, "dist"), h = E(e, "node_modules", "@voltro", "ui-shadcn"), y = O(E(h, "package.json")) ? h : null, b = [...y ? [
|
|
531
531
|
{
|
|
532
532
|
find: "@voltro/ui-shadcn/tokens.css",
|
|
533
533
|
replacement: E(y, "src/tokens.css")
|
|
@@ -544,11 +544,11 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
544
544
|
find: "@voltro/ui-shadcn",
|
|
545
545
|
replacement: E(y, "src/index.ts")
|
|
546
546
|
}
|
|
547
|
-
] : [], ...
|
|
547
|
+
] : [], ...m(e)];
|
|
548
548
|
F.info("running vite build");
|
|
549
|
-
let x = await
|
|
549
|
+
let x = await _("vite", () => import("vite")), C = (await import("@vitejs/plugin-react")).default, T = (await import("@tailwindcss/vite")).default;
|
|
550
550
|
await x.build({
|
|
551
|
-
root:
|
|
551
|
+
root: s,
|
|
552
552
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
553
553
|
plugins: [C(), T()],
|
|
554
554
|
resolve: {
|
|
@@ -564,21 +564,21 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
564
564
|
build: {
|
|
565
565
|
outDir: "dist",
|
|
566
566
|
emptyOutDir: !0,
|
|
567
|
-
rollupOptions: { output: { manualChunks:
|
|
567
|
+
rollupOptions: { output: { manualChunks: g } }
|
|
568
568
|
},
|
|
569
569
|
logLevel: "warn"
|
|
570
570
|
});
|
|
571
571
|
let D = E(e, "src", "pages"), { pages: A, dirs: j } = await v(D);
|
|
572
572
|
if (A.length === 0) return F.info("no pages found — client-only bundle written", {
|
|
573
573
|
pagesDir: D,
|
|
574
|
-
distDir:
|
|
574
|
+
distDir: p
|
|
575
575
|
}), {
|
|
576
576
|
ran: !0,
|
|
577
577
|
exitCode: 0
|
|
578
578
|
};
|
|
579
579
|
let { rendered: M, pageMeta: N } = await U({
|
|
580
580
|
root: e,
|
|
581
|
-
distDir:
|
|
581
|
+
distDir: p,
|
|
582
582
|
pages: A,
|
|
583
583
|
dirs: j,
|
|
584
584
|
vite: x,
|
|
@@ -589,7 +589,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
589
589
|
let L = /* @__PURE__ */ new Set();
|
|
590
590
|
try {
|
|
591
591
|
await x.build({
|
|
592
|
-
root:
|
|
592
|
+
root: s,
|
|
593
593
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
594
594
|
plugins: [
|
|
595
595
|
C(),
|
|
@@ -627,9 +627,9 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
627
627
|
if (O(R)) {
|
|
628
628
|
F.info("precompiling app.config.ts → dist/server/appConfig.js");
|
|
629
629
|
try {
|
|
630
|
-
await (await
|
|
630
|
+
await (await _("esbuild", () => import("esbuild"))).build({
|
|
631
631
|
entryPoints: [R],
|
|
632
|
-
outfile: E(
|
|
632
|
+
outfile: E(p, "server", "appConfig.js"),
|
|
633
633
|
bundle: !0,
|
|
634
634
|
format: "esm",
|
|
635
635
|
platform: "node",
|
|
@@ -659,36 +659,36 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
659
659
|
routes: M.map((e) => e.pattern)
|
|
660
660
|
});
|
|
661
661
|
try {
|
|
662
|
-
let e = process.env.VOLTRO_SEO_NOINDEX !== "1",
|
|
663
|
-
if (
|
|
664
|
-
let n = new Set(i.filter((e) => e !== a)),
|
|
662
|
+
let e = process.env.VOLTRO_SEO_NOINDEX !== "1", r = n.seo?.siteUrl, i = n.locales ?? [], a = n.defaultLocale ?? i[0];
|
|
663
|
+
if (r && !O(E(p, "sitemap.xml"))) {
|
|
664
|
+
let n = new Set(i.filter((e) => e !== a)), o = M.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
|
|
665
665
|
let t = e.split("/").filter(Boolean)[0];
|
|
666
666
|
return t === void 0 || !n.has(t);
|
|
667
|
-
}).filter((e) => !e.includes("[")).map((e) => ({ path: e })),
|
|
668
|
-
siteUrl:
|
|
669
|
-
entries:
|
|
667
|
+
}).filter((e) => !e.includes("[")).map((e) => ({ path: e })), s = t({
|
|
668
|
+
siteUrl: r,
|
|
669
|
+
entries: o,
|
|
670
670
|
...i.length > 1 ? { locales: i } : {},
|
|
671
671
|
...a ? { defaultLocale: a } : {}
|
|
672
672
|
});
|
|
673
|
-
await k.writeFile(E(
|
|
674
|
-
urls:
|
|
673
|
+
await k.writeFile(E(p, "sitemap.xml"), s, "utf8"), F.info("wrote dist/sitemap.xml", {
|
|
674
|
+
urls: o.length,
|
|
675
675
|
indexable: e
|
|
676
676
|
});
|
|
677
677
|
}
|
|
678
|
-
if (!O(E(
|
|
679
|
-
let
|
|
678
|
+
if (!O(E(p, "robots.txt"))) {
|
|
679
|
+
let t = o({
|
|
680
680
|
indexable: e,
|
|
681
|
-
...e &&
|
|
681
|
+
...e && r ? { sitemapUrl: `${r.replace(/\/$/, "")}/sitemap.xml` } : {},
|
|
682
682
|
...n.seo?.disallow ? { disallow: n.seo.disallow } : {}
|
|
683
683
|
});
|
|
684
|
-
await k.writeFile(E(
|
|
684
|
+
await k.writeFile(E(p, "robots.txt"), t, "utf8"), F.info("wrote dist/robots.txt", { indexable: e });
|
|
685
685
|
}
|
|
686
686
|
} catch (e) {
|
|
687
687
|
F.warn("SEO artefact generation failed (non-fatal)", {}, e);
|
|
688
688
|
}
|
|
689
689
|
try {
|
|
690
690
|
let t = await w(e);
|
|
691
|
-
await k.writeFile(E(
|
|
691
|
+
await k.writeFile(E(p, ".voltro-build.json"), JSON.stringify({
|
|
692
692
|
version: 1,
|
|
693
693
|
profile: t
|
|
694
694
|
}, null, 2), "utf8"), F.info("wrote deploy profile manifest", {
|
|
@@ -699,7 +699,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
699
699
|
} catch (e) {
|
|
700
700
|
F.warn("could not write .voltro-build.json deploy manifest", {}, e);
|
|
701
701
|
}
|
|
702
|
-
return F.info("build complete", { distDir:
|
|
702
|
+
return F.info("build complete", { distDir: p }), {
|
|
703
703
|
ran: !0,
|
|
704
704
|
exitCode: 0
|
|
705
705
|
};
|
|
@@ -711,7 +711,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
|
|
|
711
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);
|
|
712
712
|
}), J = async (t) => {
|
|
713
713
|
if (t.includes("--target")) {
|
|
714
|
-
let { runSdkBuildCommand: e } = await import("./sdkgen-
|
|
714
|
+
let { runSdkBuildCommand: e } = await import("./sdkgen-COQqHB9V.js");
|
|
715
715
|
return e(t);
|
|
716
716
|
}
|
|
717
717
|
let n = t.find((e) => !e.startsWith("-")) ?? process.cwd(), r = await y(q(n), { scope: "voltro:build" }), i = e(n);
|
|
@@ -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-DWL2_PPR.js";
|
|
2
2
|
export { n as offlineManifest, e as runCheckCommand, t as toInput };
|
|
@@ -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-TmZTAepc.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,7 +141,7 @@ 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-DuqBJC7g.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)),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { l as e, z as t } from "./dev-
|
|
2
|
-
import {
|
|
1
|
+
import { l as e, z as t } from "./dev-D4l_YOzI.js";
|
|
2
|
+
import { dt as n } from "./webDev-Dk8lFUzf.js";
|
|
3
3
|
import { r } from "./codegen-CbpGCWLG.js";
|
|
4
4
|
import { basename as i, join as a, relative as o, resolve as s } from "node:path";
|
|
5
5
|
import { promises as c } from "node:fs";
|