@voltro/cli 0.56.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.
- package/CHANGELOG.md +194 -0
- package/dist/apiBuild-B83Cb2Rv.js +2 -0
- package/dist/{apiBuild-Bdaetr37.js → apiBuild-DDr2aNFd.js} +2 -2
- package/dist/bin.js +1 -1
- package/dist/{build-CI36wL4R.js → build-QKP6Bm0J.js} +191 -187
- package/dist/{checkCommand-D0QV_zM_.js → checkCommand-BISqx1OJ.js} +1 -1
- package/dist/{checkCommand-CAwFXrxA.js → checkCommand-DUtMWjcR.js} +4 -4
- package/dist/{codegenCommand-CidbQzbv.js → codegenCommand-DnVuDxwT.js} +10 -10
- package/dist/{commands-CWjfThXv.js → commands-CRbxgxv0.js} +22 -22
- package/dist/{dashboardCommand-BekcY5Ls.js → dashboardCommand-Bf_-Ne3P.js} +5 -5
- package/dist/{dataCommand-2pccgbIy.js → dataCommand-BoBJJ-Gb.js} +2 -2
- package/dist/{dbCommand-DpK_vQET.js → dbCommand-CMAIz-Bf.js} +3 -3
- package/dist/dbCommand-DHi_RuDl.js +2 -0
- package/dist/dev-Bl9HqtV7.js +3 -0
- package/dist/{dev-Dw263KPu.js → dev-DOEJXicj.js} +2109 -2092
- package/dist/{doctorCommand-aR_bFmIi.js → doctorCommand-BrWu67JZ.js} +331 -189
- package/dist/doctorCommand-DrQv9SL3.js +2 -0
- package/dist/{dormancyCommand-eXTQMbHU.js → dormancyCommand-xn2y-pJm.js} +1 -1
- package/dist/{embeddingsCommand-CTmiQvwa.js → embeddingsCommand-Cn5MbRDM.js} +1 -1
- package/dist/emptyResultHeadline-Csa5fZOF.js +18 -0
- package/dist/{envCommand-BDUgV7EM.js → envCommand-UJmJIbs9.js} +8 -8
- package/dist/{evolveCommand-YV8qW1LU.js → evolveCommand-Db30twUy.js} +1 -1
- package/dist/frameworkTableAssembly-B96WCNJA.js +2 -0
- package/dist/{frameworkTableAssembly-DNOFXfEQ.js → frameworkTableAssembly-vfkzuzEo.js} +104 -85
- package/dist/index.js +1 -1
- package/dist/inspect-B0hL41s0.js +2 -0
- package/dist/{inspect-CNYvNXPU.js → inspect-DZnan87F.js} +68 -52
- package/dist/{logsCmd-BU8uCdys.js → logsCmd-C5y9HyrG.js} +58 -53
- package/dist/{manifestBuild-CEkjfpwc.js → manifestBuild-DnbFKF6w.js} +1 -1
- package/dist/manifestBuild-UXrnUcXP.js +2 -0
- package/dist/{migrate-SICulyz1.js → migrate-DtC3lu7H.js} +4 -4
- package/dist/{probeCommand-6HxEkNDG.js → probeCommand-C5fuN6Z2.js} +1 -1
- package/dist/{runtimeTrace-DgYMc09E.js → runtimeTrace-BQL_lfz6.js} +1 -1
- package/dist/{sdkgen-PY-umd6O.js → sdkgen-CMUPrDjH.js} +1 -1
- package/dist/{serveCommand-DIJ3ma76.js → serveCommand-B_w-Mpb_.js} +1013 -954
- package/dist/serveCommand-Dtb48ffg.js +2 -0
- package/dist/serveEntry.js +1 -1
- package/dist/{start-B9NGB8gn.js → start-YaUehtDV.js} +564 -571
- package/dist/{start-BFQQkL1i.js → start-s25GAIgn.js} +1 -1
- package/dist/startEntry.js +1 -1
- package/dist/{tracesCmd-BWYDqMy6.js → tracesCmd-C1qKa94g.js} +68 -63
- package/dist/{webDev-C2dRz9s5.js → webDev-B6ZMX42w.js} +1 -1
- package/dist/{webDev-C53hJdcL.js → webDev-BgdkyjP6.js} +881 -774
- package/dist/{webhooksCommand-uuPu8qQX.js → webhooksCommand-CYXTNvXq.js} +2 -2
- package/package.json +19 -19
- 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/ai.md +1 -1
- package/templates/agent-docs/authentication.md +34 -19
- package/templates/agent-docs/cli.md +48 -0
- package/templates/agent-docs/configuration.md +29 -4
- package/templates/agent-docs/database/scaling.md +10 -1
- package/templates/agent-docs/deployment.md +22 -0
- package/templates/agent-docs/plugins/audit.md +21 -5
- package/templates/agent-docs/plugins/billing.md +2 -0
- package/templates/agent-docs/reference.md +1 -0
- package/templates/agent-docs/scheduling.md +23 -0
- package/templates/agent-docs/schema-driven-ui.md +81 -0
- package/templates/agent-docs/whats-new.md +100 -403
- package/templates/apps/api-ai/package.json +6 -6
- 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 +9 -9
- 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-row-history/package.json +8 -8
- 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-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +7 -7
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +7 -7
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-auth/package.json +7 -7
- package/templates/apps/frontend-blank/package.json +6 -6
- package/templates/apps/frontend-cms/package.json +8 -8
- package/templates/apps/frontend-collab/package.json +9 -9
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +6 -6
- package/templates/apps/frontend-docs/package.json +8 -8
- 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 +7 -7
- package/templates/apps/frontend-saas/package.json +7 -7
- package/templates/apps/frontend-spa/package.json +6 -6
- package/templates/apps/frontend-ssr/package.json +6 -6
- package/templates/apps/frontend-ssr-api/package.json +7 -7
- package/templates/apps/frontend-static-blog/package.json +8 -8
- package/templates/apps/frontend-status/package.json +7 -7
- package/templates/apps/mobile-app/package.json +4 -4
- package/dist/apiBuild-Vw1figjO.js +0 -2
- package/dist/dbCommand-DrycGWWt.js +0 -2
- package/dist/dev-B9Gz0k85.js +0 -3
- package/dist/doctorCommand-BMWs6aVm.js +0 -2
- package/dist/frameworkTableAssembly-CGNC0qr7.js +0 -2
- package/dist/inspect-S2rWy1Ys.js +0 -2
- package/dist/manifestBuild-DIa_s6u0.js +0 -2
- package/dist/serveCommand-BITS8Hpj.js +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { d as A, i as j, o as M, s as N } from "./apiBuild-
|
|
1
|
+
import { kn as e } from "./dev-DOEJXicj.js";
|
|
2
|
+
import { $ as t, At as n, Ct as r, Dt as i, Et as a, G as o, It as s, Kt as c, Q as l, S as u, St as d, Tt as f, U as p, W as m, Yt as h, Z as g, bt as _, c as v, h as y, ht as b, kt as x, m as S, mt as C, o as w, pt as T, u as E, w as D, wt as ee, x as te, xt as O, yt as k } from "./webDev-BgdkyjP6.js";
|
|
3
|
+
import { d as A, i as j, o as M, s as N } from "./apiBuild-DDr2aNFd.js";
|
|
4
4
|
import { t as P } from "./cliRuntime-Dh7UDinH.js";
|
|
5
5
|
import { a as F } from "./renderModeScan-43yQ2opo.js";
|
|
6
6
|
import { o as I } from "./imagePipeline-CBZmjT4i.js";
|
|
@@ -15,7 +15,7 @@ import { Effect as K } from "effect";
|
|
|
15
15
|
import { createRequire as q } from "node:module";
|
|
16
16
|
//#region src/webStartBundle.ts
|
|
17
17
|
var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
18
|
-
let t = await
|
|
18
|
+
let t = await h("esbuild", () => import("esbuild")), n = B(e, ".framework"), r = B(n, "dist-web", "startBundle");
|
|
19
19
|
await U.mkdir(n, { recursive: !0 });
|
|
20
20
|
let i = Date.now(), a = B(e, "tsconfig.json"), o = /* @__PURE__ */ new Set(), s = B(n, "startEntry.ts");
|
|
21
21
|
await U.writeFile(s, [
|
|
@@ -105,76 +105,76 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
105
105
|
let n = t.replace(/^\//, "").split("/");
|
|
106
106
|
return B(e, ...n, "index.html");
|
|
107
107
|
}, ie = (e) => e.replace(/<script\b(?=[^>]*\btype="module")(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<script\b(?=[^>]*\bsrc=)(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<link\b[^>]*\brel="modulepreload"[^>]*>/gi, ""), ae = (e, t) => {
|
|
108
|
-
let
|
|
108
|
+
let n = e.replace("<div id=\"root\"></div>", `<div id="root">${t.body}</div>`), r = [
|
|
109
109
|
t.metaHtml,
|
|
110
110
|
`<meta name="voltro-interactive" content="${t.interactive}" />`,
|
|
111
111
|
t.stateScript
|
|
112
112
|
].filter((e) => e.length > 0).join("\n ");
|
|
113
|
-
return
|
|
113
|
+
return n = m(o(n, r), t.documentAttrs), t.interactive === "none" && (n = ie(n)), n;
|
|
114
114
|
}, oe = async (e) => {
|
|
115
|
-
let { page:
|
|
115
|
+
let { page: n, chainEntries: r, pageMod: i, helpers: a } = e, s = r.filter((e) => e.hasLayout);
|
|
116
116
|
if (s.length === 0) return Y.debug("skip page", {
|
|
117
|
-
pattern:
|
|
117
|
+
pattern: n.pattern,
|
|
118
118
|
reason: "renderMode=spa with no layout — nothing to shell"
|
|
119
119
|
}), null;
|
|
120
|
-
if (Z(
|
|
121
|
-
pattern:
|
|
120
|
+
if (Z(n.pattern)) return Y.debug("skip page", {
|
|
121
|
+
pattern: n.pattern,
|
|
122
122
|
reason: "renderMode=spa with a dynamic pattern"
|
|
123
123
|
}), null;
|
|
124
|
-
let c = await Promise.all(s.map(e.loadLayout)),
|
|
125
|
-
if (
|
|
126
|
-
pattern:
|
|
127
|
-
layouts:
|
|
124
|
+
let c = await Promise.all(s.map(e.loadLayout)), u = s.filter((e, t) => typeof c[t]?.loader == "function").map((e) => e.dir || "/");
|
|
125
|
+
if (u.length > 0) return Y.info(`spa shell for ${n.pattern} left to on-demand rendering — its layout chain has a loader (${u.join(", ")}), whose output may be per-request`, {
|
|
126
|
+
pattern: n.pattern,
|
|
127
|
+
layouts: u
|
|
128
128
|
}), null;
|
|
129
|
-
let { chain:
|
|
130
|
-
entries:
|
|
129
|
+
let { chain: d, segmentLoaderData: f } = await v({
|
|
130
|
+
entries: r,
|
|
131
131
|
loadLayout: e.loadLayout,
|
|
132
132
|
loadError: e.loadError,
|
|
133
133
|
loadPending: e.loadPending,
|
|
134
134
|
ctx: e.ctx
|
|
135
|
-
}),
|
|
136
|
-
pattern:
|
|
137
|
-
Component:
|
|
138
|
-
meta:
|
|
139
|
-
ErrorBoundary:
|
|
140
|
-
Pending:
|
|
135
|
+
}), p = {
|
|
136
|
+
pattern: n.pattern,
|
|
137
|
+
Component: i.default,
|
|
138
|
+
meta: i.meta,
|
|
139
|
+
ErrorBoundary: i.ErrorBoundary,
|
|
140
|
+
Pending: i.Pending,
|
|
141
141
|
renderMode: "spa",
|
|
142
|
-
chain:
|
|
143
|
-
},
|
|
144
|
-
helpers:
|
|
145
|
-
page:
|
|
146
|
-
interactive:
|
|
142
|
+
chain: d
|
|
143
|
+
}, m = i.interactive ?? "full", h = g({
|
|
144
|
+
helpers: a,
|
|
145
|
+
page: n.pattern,
|
|
146
|
+
interactive: m,
|
|
147
147
|
delivery: "artefact",
|
|
148
148
|
renderInput: {
|
|
149
|
-
descriptor:
|
|
149
|
+
descriptor: p,
|
|
150
150
|
params: {},
|
|
151
|
-
pathname:
|
|
152
|
-
segmentLoaderData:
|
|
151
|
+
pathname: n.pattern,
|
|
152
|
+
segmentLoaderData: f,
|
|
153
153
|
...e.outerWrap ? { outerWrap: e.outerWrap } : {},
|
|
154
154
|
...e.locale ? { locale: e.locale } : {}
|
|
155
155
|
}
|
|
156
|
-
}),
|
|
157
|
-
helpers:
|
|
158
|
-
prepared:
|
|
159
|
-
}), y =
|
|
160
|
-
helpers:
|
|
161
|
-
prepared:
|
|
162
|
-
meta:
|
|
163
|
-
interactive:
|
|
164
|
-
}), b =
|
|
165
|
-
return await U.mkdir(z(x), { recursive: !0 }), await U.writeFile(x, b, "utf8"), Y.debug("prerendered spa layout shell", { pattern:
|
|
166
|
-
pattern:
|
|
156
|
+
}), _ = l({
|
|
157
|
+
helpers: a,
|
|
158
|
+
prepared: h
|
|
159
|
+
}), y = t({
|
|
160
|
+
helpers: a,
|
|
161
|
+
prepared: h,
|
|
162
|
+
meta: _.meta,
|
|
163
|
+
interactive: m
|
|
164
|
+
}), b = o(e.shellTemplate.replace("<div id=\"root\"></div>", `<div id="root">${_.body}</div>`), y), x = $(e.distDir, n.pattern);
|
|
165
|
+
return await U.mkdir(z(x), { recursive: !0 }), await U.writeFile(x, b, "utf8"), Y.debug("prerendered spa layout shell", { pattern: n.pattern }), {
|
|
166
|
+
pattern: n.pattern,
|
|
167
167
|
outPath: x
|
|
168
168
|
};
|
|
169
169
|
}, se = async (e) => {
|
|
170
|
-
let { root:
|
|
170
|
+
let { root: t, distDir: r, pages: i, dirs: a, vite: o } = e, c = B(r, "index.html"), l = await U.readFile(c, "utf8"), u = B(r, "_voltro", "shell.html");
|
|
171
171
|
await U.mkdir(z(u), { recursive: !0 }), await U.writeFile(u, l, "utf8");
|
|
172
172
|
let d = /* @__PURE__ */ new Map();
|
|
173
173
|
for (let t of e.islandsPlans ?? []) {
|
|
174
174
|
let e = B(r, "island-shells", `${t.name}.html`);
|
|
175
175
|
try {
|
|
176
|
-
let
|
|
177
|
-
await U.writeFile(e,
|
|
176
|
+
let r = n(await U.readFile(e, "utf8"), l);
|
|
177
|
+
await U.writeFile(e, r, "utf8"), d.set(t.pattern, r);
|
|
178
178
|
} catch {
|
|
179
179
|
Y.warn("islands shell missing — page ships the full entry", {
|
|
180
180
|
pattern: t.pattern,
|
|
@@ -182,7 +182,7 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
|
-
let
|
|
185
|
+
let m = B(t, "node_modules", "@voltro", "ui-shadcn"), h = H(B(m, "package.json")) ? m : null, g = [...h ? [
|
|
186
186
|
{
|
|
187
187
|
find: "@voltro/ui-shadcn/tokens.css",
|
|
188
188
|
replacement: B(h, "src/tokens.css")
|
|
@@ -199,14 +199,14 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
199
199
|
find: "@voltro/ui-shadcn",
|
|
200
200
|
replacement: B(h, "src/index.ts")
|
|
201
201
|
}
|
|
202
|
-
] : [], ...
|
|
203
|
-
root: B(
|
|
202
|
+
] : [], ...s(t)], y = await o.createServer({
|
|
203
|
+
root: B(t, ".framework"),
|
|
204
204
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
205
205
|
plugins: [
|
|
206
206
|
(await import("@vitejs/plugin-react")).default(),
|
|
207
207
|
(await import("@tailwindcss/vite")).default(),
|
|
208
|
-
|
|
209
|
-
root:
|
|
208
|
+
f({
|
|
209
|
+
root: t,
|
|
210
210
|
config: I(e.images),
|
|
211
211
|
urlMode: "build-urls"
|
|
212
212
|
}),
|
|
@@ -229,27 +229,27 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
229
229
|
},
|
|
230
230
|
appType: "custom",
|
|
231
231
|
logLevel: "warn"
|
|
232
|
-
}), b = await
|
|
232
|
+
}), b = await y.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: x, renderMetaToHtml: S, renderRouterStateScript: C, isDeferredLoaderResult: w, assertDeferralSupported: T, beginStoreSeeds: D, seedPreloadedSubscription: ee, seedPreloadedSubscriptionFailure: te } = b, O, A = /* @__PURE__ */ new Map();
|
|
233
233
|
if (e.locales && e.locales.length > 0 && e.defaultLocale) try {
|
|
234
|
-
let
|
|
234
|
+
let n = await y.ssrLoadModule("@voltro/i18n");
|
|
235
235
|
try {
|
|
236
|
-
|
|
236
|
+
O = (await y.ssrLoadModule("@voltro/i18n/server")).resolveTimeZone?.({
|
|
237
237
|
configured: e.timeZone ?? null,
|
|
238
238
|
defaultTimeZone: e.defaultTimeZone ?? null
|
|
239
239
|
});
|
|
240
240
|
} catch {}
|
|
241
|
-
let r =
|
|
241
|
+
let r = n.makeSsgWrap;
|
|
242
242
|
if (typeof r != "function") throw Error("@voltro/i18n is installed but missing the `makeSsgWrap` export — upgrade @voltro/i18n to a version that ships SSG support.");
|
|
243
|
-
for (let
|
|
244
|
-
let i = await
|
|
245
|
-
A.set(
|
|
243
|
+
for (let n of e.locales) try {
|
|
244
|
+
let i = await y.ssrLoadModule(B(t, "src", "locales", `${n}.ts`)), a = i.default ?? i;
|
|
245
|
+
A.set(n, r(n, a, e.defaultLocale));
|
|
246
246
|
} catch (e) {
|
|
247
|
-
Y.warn(`i18n catalog missing for locale '${
|
|
247
|
+
Y.warn(`i18n catalog missing for locale '${n}' — pages rendered at /${n}/* will crash. Add src/locales/${n}.ts.`, {}, e);
|
|
248
248
|
}
|
|
249
249
|
} catch (e) {
|
|
250
250
|
Y.warn("i18n wrapper unavailable for SSG — pages that call useT() will fail. Check that @voltro/i18n is installed.", {}, e);
|
|
251
251
|
}
|
|
252
|
-
let j = [], M = {}, N = (e) => e.dir === "" ? B(
|
|
252
|
+
let j = [], M = {}, N = (e) => e.dir === "" ? B(t, "src", "pages") : B(t, "src", "pages", e.dir), P = async (e) => await y.ssrLoadModule(B(N(e), "layout.tsx")), R = async (e) => await y.ssrLoadModule(B(N(e), "error.tsx")), V = async (e) => await y.ssrLoadModule(B(N(e), "loading.tsx")), W = (e, t) => ({
|
|
253
253
|
params: e.params,
|
|
254
254
|
pathname: e.pathname,
|
|
255
255
|
search: "",
|
|
@@ -258,15 +258,15 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
258
258
|
query: void 0,
|
|
259
259
|
isServer: !0
|
|
260
260
|
});
|
|
261
|
-
for (let
|
|
262
|
-
let i = `${B(
|
|
263
|
-
M[
|
|
264
|
-
let
|
|
265
|
-
if (
|
|
261
|
+
for (let n of i) {
|
|
262
|
+
let i = `${B(t, "src", "pages", n.file)}`, o = await y.ssrLoadModule(i), s = F(o, B("src", "pages", n.file));
|
|
263
|
+
M[n.pattern] = s;
|
|
264
|
+
let c = s.renderMode, u = E(a, n.dirChain);
|
|
265
|
+
if (c === "spa") {
|
|
266
266
|
let t = await oe({
|
|
267
|
-
page:
|
|
268
|
-
chainEntries:
|
|
269
|
-
pageMod:
|
|
267
|
+
page: n,
|
|
268
|
+
chainEntries: u,
|
|
269
|
+
pageMod: o,
|
|
270
270
|
shellTemplate: l,
|
|
271
271
|
distDir: r,
|
|
272
272
|
helpers: b,
|
|
@@ -275,7 +275,7 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
275
275
|
loadPending: V,
|
|
276
276
|
ctx: W({
|
|
277
277
|
params: {},
|
|
278
|
-
pathname:
|
|
278
|
+
pathname: n.pattern
|
|
279
279
|
}, new AbortController().signal),
|
|
280
280
|
outerWrap: A.get(e.defaultLocale ?? ""),
|
|
281
281
|
locale: e.defaultLocale
|
|
@@ -283,58 +283,58 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
283
283
|
t && j.push(t);
|
|
284
284
|
continue;
|
|
285
285
|
}
|
|
286
|
-
if (
|
|
286
|
+
if (c !== "static") {
|
|
287
287
|
Y.debug("skip page", {
|
|
288
|
-
pattern:
|
|
289
|
-
reason: `renderMode=${
|
|
288
|
+
pattern: n.pattern,
|
|
289
|
+
reason: `renderMode=${c}`
|
|
290
290
|
});
|
|
291
291
|
continue;
|
|
292
292
|
}
|
|
293
|
-
let
|
|
294
|
-
if (Z(
|
|
295
|
-
if (typeof
|
|
293
|
+
let f;
|
|
294
|
+
if (Z(n.pattern)) {
|
|
295
|
+
if (typeof o.getStaticPaths != "function") {
|
|
296
296
|
Y.debug("skip page", {
|
|
297
|
-
pattern:
|
|
297
|
+
pattern: n.pattern,
|
|
298
298
|
reason: "no getStaticPaths export"
|
|
299
299
|
});
|
|
300
300
|
continue;
|
|
301
301
|
}
|
|
302
302
|
try {
|
|
303
|
-
let e = await
|
|
303
|
+
let e = await o.getStaticPaths();
|
|
304
304
|
if (!Array.isArray(e)) {
|
|
305
|
-
Y.warn("skip page — getStaticPaths did not return an array", { pattern:
|
|
305
|
+
Y.warn("skip page — getStaticPaths did not return an array", { pattern: n.pattern });
|
|
306
306
|
continue;
|
|
307
307
|
}
|
|
308
|
-
|
|
308
|
+
f = e.map((e) => ({
|
|
309
309
|
params: e.params,
|
|
310
|
-
pathname: Q(
|
|
310
|
+
pathname: Q(n.pattern, e.params)
|
|
311
311
|
}));
|
|
312
312
|
} catch (e) {
|
|
313
|
-
Y.warn("skip page — getStaticPaths threw", { pattern:
|
|
313
|
+
Y.warn("skip page — getStaticPaths threw", { pattern: n.pattern }, e);
|
|
314
314
|
continue;
|
|
315
315
|
}
|
|
316
|
-
if (
|
|
316
|
+
if (f.length === 0) {
|
|
317
317
|
Y.debug("skip page", {
|
|
318
|
-
pattern:
|
|
318
|
+
pattern: n.pattern,
|
|
319
319
|
reason: "getStaticPaths returned []"
|
|
320
320
|
});
|
|
321
321
|
continue;
|
|
322
322
|
}
|
|
323
|
-
} else
|
|
323
|
+
} else f = [{
|
|
324
324
|
params: {},
|
|
325
|
-
pathname:
|
|
325
|
+
pathname: n.pattern
|
|
326
326
|
}];
|
|
327
|
-
let
|
|
328
|
-
for (let i of
|
|
329
|
-
|
|
330
|
-
let a,
|
|
327
|
+
let m = o.interactive ?? "full";
|
|
328
|
+
for (let i of f) {
|
|
329
|
+
D();
|
|
330
|
+
let a, s, f = new AbortController();
|
|
331
331
|
try {
|
|
332
|
-
({chain: a, segmentLoaderData:
|
|
333
|
-
entries:
|
|
332
|
+
({chain: a, segmentLoaderData: s} = await v({
|
|
333
|
+
entries: u,
|
|
334
334
|
loadLayout: P,
|
|
335
335
|
loadError: R,
|
|
336
336
|
loadPending: V,
|
|
337
|
-
ctx: W(i,
|
|
337
|
+
ctx: W(i, f.signal)
|
|
338
338
|
}));
|
|
339
339
|
} catch (e) {
|
|
340
340
|
let t = e?._voltroControl;
|
|
@@ -345,20 +345,20 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
345
345
|
}
|
|
346
346
|
throw Error(`Static page "${i.pathname}": a LAYOUT loader threw at build time — the page would prerender without its layout data. Fix the loader (cause below) or throw NotFoundError to skip this path.\ncause: ${e instanceof Error ? e.stack ?? e.message : String(e)}`);
|
|
347
347
|
}
|
|
348
|
-
let
|
|
349
|
-
pattern:
|
|
350
|
-
Component:
|
|
351
|
-
meta:
|
|
352
|
-
loader:
|
|
353
|
-
ErrorBoundary:
|
|
354
|
-
Pending:
|
|
355
|
-
renderMode:
|
|
348
|
+
let h = {
|
|
349
|
+
pattern: n.pattern,
|
|
350
|
+
Component: o.default,
|
|
351
|
+
meta: o.meta,
|
|
352
|
+
loader: o.loader,
|
|
353
|
+
ErrorBoundary: o.ErrorBoundary,
|
|
354
|
+
Pending: o.Pending,
|
|
355
|
+
renderMode: c,
|
|
356
356
|
chain: a
|
|
357
|
-
},
|
|
358
|
-
if (typeof
|
|
357
|
+
}, g = null;
|
|
358
|
+
if (typeof o.loader == "function") {
|
|
359
359
|
let e = new AbortController();
|
|
360
360
|
try {
|
|
361
|
-
|
|
361
|
+
g = await o.loader({
|
|
362
362
|
params: i.params,
|
|
363
363
|
pathname: i.pathname,
|
|
364
364
|
search: "",
|
|
@@ -376,65 +376,65 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
376
376
|
throw Error(`Static page "${i.pathname}": its loader threw at build time — the page would prerender EMPTY. Fix the loader (cause below) or throw NotFoundError to skip this path.\ncause: ${e instanceof Error ? e.stack ?? e.message : String(e)}`);
|
|
377
377
|
}
|
|
378
378
|
}
|
|
379
|
-
|
|
379
|
+
w(g) && T({
|
|
380
380
|
page: i.pathname,
|
|
381
|
-
renderMode:
|
|
382
|
-
interactive:
|
|
381
|
+
renderMode: c,
|
|
382
|
+
interactive: m
|
|
383
383
|
});
|
|
384
|
-
for (let e of Object.values(
|
|
384
|
+
for (let e of Object.values(s)) w(e) && T({
|
|
385
385
|
page: i.pathname,
|
|
386
|
-
renderMode:
|
|
387
|
-
interactive:
|
|
386
|
+
renderMode: c,
|
|
387
|
+
interactive: m
|
|
388
388
|
});
|
|
389
|
-
await
|
|
390
|
-
pageMod:
|
|
389
|
+
await p({
|
|
390
|
+
pageMod: o,
|
|
391
391
|
params: i.params,
|
|
392
392
|
query: void 0,
|
|
393
393
|
apiName: void 0,
|
|
394
|
-
seed:
|
|
395
|
-
seedFailure:
|
|
394
|
+
seed: ee,
|
|
395
|
+
seedFailure: te
|
|
396
396
|
});
|
|
397
|
-
let y = i.params.locale ?? e.defaultLocale ?? "en", b = A.get(y) ?? A.get(e.defaultLocale ?? ""),
|
|
398
|
-
timeZone:
|
|
399
|
-
renderedAt:
|
|
397
|
+
let y = i.params.locale ?? e.defaultLocale ?? "en", b = A.get(y) ?? A.get(e.defaultLocale ?? ""), E = Date.now(), M = b ? (e) => b(e, {
|
|
398
|
+
timeZone: O,
|
|
399
|
+
renderedAt: E
|
|
400
400
|
}) : void 0, { html: N, meta: F } = x({
|
|
401
|
-
descriptor:
|
|
401
|
+
descriptor: h,
|
|
402
402
|
params: i.params,
|
|
403
403
|
pathname: i.pathname,
|
|
404
|
-
loaderData:
|
|
405
|
-
segmentLoaderData:
|
|
404
|
+
loaderData: g,
|
|
405
|
+
segmentLoaderData: s,
|
|
406
406
|
...M ? { outerWrap: M } : {},
|
|
407
407
|
locale: y
|
|
408
408
|
}), I = "";
|
|
409
|
-
if (typeof
|
|
410
|
-
let
|
|
409
|
+
if (typeof o.ogImage == "function") {
|
|
410
|
+
let n = await o.ogImage({
|
|
411
411
|
params: i.params,
|
|
412
|
-
loaderData:
|
|
412
|
+
loaderData: g,
|
|
413
413
|
locale: y
|
|
414
|
-
}), a = await
|
|
415
|
-
element:
|
|
414
|
+
}), a = await k(t, e.fonts), { png: s } = await _({
|
|
415
|
+
element: n,
|
|
416
416
|
fonts: a
|
|
417
|
-
}), c = `assets/og/${L(
|
|
418
|
-
await U.mkdir(B(r, "assets", "og"), { recursive: !0 }), await U.writeFile(B(r, c), Buffer.from(
|
|
417
|
+
}), c = `assets/og/${L(s)}.png`;
|
|
418
|
+
await U.mkdir(B(r, "assets", "og"), { recursive: !0 }), await U.writeFile(B(r, c), Buffer.from(s));
|
|
419
419
|
let l = e.siteUrl === void 0 ? `/${c}` : `${e.siteUrl.replace(/\/$/, "")}/${c}`;
|
|
420
|
-
I =
|
|
420
|
+
I = S(F).includes("og:image") ? "" : `<meta property="og:image" content="${l}" /><meta name="twitter:image" content="${l}" /><meta name="twitter:card" content="summary_large_image" />`;
|
|
421
421
|
}
|
|
422
|
-
let H =
|
|
423
|
-
|
|
422
|
+
let H = m === "islands" ? d.get(n.pattern) : void 0;
|
|
423
|
+
m === "islands" && H === void 0 && Y.warn("islands page has no per-page entry (non-literal `interactive`?) — shipping the full app entry", { pattern: n.pattern });
|
|
424
424
|
let G = ae(H ?? l, {
|
|
425
425
|
body: N,
|
|
426
|
-
metaHtml:
|
|
427
|
-
stateScript:
|
|
426
|
+
metaHtml: S(F) + I,
|
|
427
|
+
stateScript: C({
|
|
428
428
|
path: i.pathname,
|
|
429
|
-
loaderData:
|
|
430
|
-
segmentLoaderData:
|
|
431
|
-
pageLoaderRan: typeof
|
|
429
|
+
loaderData: g,
|
|
430
|
+
segmentLoaderData: s,
|
|
431
|
+
pageLoaderRan: typeof o.loader == "function"
|
|
432
432
|
}),
|
|
433
|
-
interactive:
|
|
433
|
+
interactive: m,
|
|
434
434
|
documentAttrs: {
|
|
435
435
|
lang: y,
|
|
436
|
-
...
|
|
437
|
-
renderedAt:
|
|
436
|
+
...O === void 0 ? {} : { timeZone: O },
|
|
437
|
+
renderedAt: E
|
|
438
438
|
}
|
|
439
439
|
}), K = $(r, i.pathname);
|
|
440
440
|
await U.mkdir(z(K), { recursive: !0 }), await U.writeFile(K, G, "utf8"), j.push({
|
|
@@ -444,7 +444,7 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
444
444
|
});
|
|
445
445
|
}
|
|
446
446
|
}
|
|
447
|
-
return await
|
|
447
|
+
return await y.close(), {
|
|
448
448
|
rendered: j,
|
|
449
449
|
pageMeta: M
|
|
450
450
|
};
|
|
@@ -544,7 +544,7 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
544
544
|
file: n.file,
|
|
545
545
|
reason: n.reason
|
|
546
546
|
});
|
|
547
|
-
let { regenerateRpcGroup: r } = await import("./codegenCommand-
|
|
547
|
+
let { regenerateRpcGroup: r } = await import("./codegenCommand-DnVuDxwT.js"), i = await r(e);
|
|
548
548
|
if (i.kind === "refused") {
|
|
549
549
|
Y.warn("could not regenerate the rpc group — building against what is on disk", { reason: i.reason });
|
|
550
550
|
return;
|
|
@@ -554,15 +554,19 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
554
554
|
routes: i.routes
|
|
555
555
|
});
|
|
556
556
|
}, ue = async (e) => {
|
|
557
|
-
let t = await
|
|
557
|
+
let t = await S(e, { preferSource: !0 });
|
|
558
558
|
if (!t) {
|
|
559
|
-
let {
|
|
560
|
-
if (n) {
|
|
561
|
-
|
|
562
|
-
|
|
559
|
+
let { loadApiConfigDiagnosed: t } = await import("./dev-Bl9HqtV7.js"), n = await t(e), r = n.config;
|
|
560
|
+
if (!r && n.present) return Y.error("app.config.ts is present but could not be loaded — this is NOT a statement about the app's type", { path: B(e, "app.config.ts") }, n.error), {
|
|
561
|
+
ran: !0,
|
|
562
|
+
exitCode: 1
|
|
563
|
+
};
|
|
564
|
+
if (r) {
|
|
565
|
+
Y.info("building api app", { app: r.name ?? "(unnamed)" }), await le(e);
|
|
566
|
+
let { runApiBuild: t, runServeBundleBuild: n } = await import("./apiBuild-B83Cb2Rv.js");
|
|
563
567
|
await t(e);
|
|
564
568
|
try {
|
|
565
|
-
await
|
|
569
|
+
await n(e);
|
|
566
570
|
} catch (e) {
|
|
567
571
|
return Y.fatal("serve bundle build FAILED — refusing to ship a bundle-less image. Fix the error above (production serves from the bundle, never tsx).", {}, e), {
|
|
568
572
|
ran: !0,
|
|
@@ -586,31 +590,31 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
586
590
|
root: e,
|
|
587
591
|
log: Y,
|
|
588
592
|
generateTypes: !0
|
|
589
|
-
}),
|
|
590
|
-
await
|
|
591
|
-
let { pages:
|
|
592
|
-
for (let t of
|
|
593
|
-
let n = await U.readFile(B(e, "src", "pages", t.file), "utf8").catch(() => ""), r =
|
|
594
|
-
n.includes("<Script") && (r === "none" || r === "islands") && Y.warn(r === "none" ? `page '${t.pattern}' uses <Script> but declares interactive: 'none' — zero-JS strips every script, so it will NEVER load. Remove the <Script>, or raise the page to islands/full.` : `page '${t.pattern}' uses <Script> in its STATIC part (the page file) while interactive: 'islands' — outside an island nothing mounts, so it will NEVER load. Move the <Script> into an *.island.tsx component (it fires when that island hydrates).`), r === "islands" &&
|
|
593
|
+
}), o = await y(e, t);
|
|
594
|
+
await D(e, t, o, n.publicValues);
|
|
595
|
+
let { pages: l } = await u(B(e, "src", "pages")), p = [];
|
|
596
|
+
for (let t of l) {
|
|
597
|
+
let n = await U.readFile(B(e, "src", "pages", t.file), "utf8").catch(() => ""), r = x(n);
|
|
598
|
+
n.includes("<Script") && (r === "none" || r === "islands") && Y.warn(r === "none" ? `page '${t.pattern}' uses <Script> but declares interactive: 'none' — zero-JS strips every script, so it will NEVER load. Remove the <Script>, or raise the page to islands/full.` : `page '${t.pattern}' uses <Script> in its STATIC part (the page file) while interactive: 'islands' — outside an island nothing mounts, so it will NEVER load. Move the <Script> into an *.island.tsx component (it fires when that island hydrates).`), r === "islands" && p.push({
|
|
595
599
|
pattern: t.pattern,
|
|
596
600
|
file: t.file
|
|
597
601
|
});
|
|
598
602
|
}
|
|
599
|
-
let
|
|
603
|
+
let m = w(o, "../../app.config"), g = await a({
|
|
600
604
|
webRoot: e,
|
|
601
|
-
pages:
|
|
602
|
-
headSnippets:
|
|
603
|
-
apiImports:
|
|
604
|
-
apiEntriesLiteral: `[\n${
|
|
605
|
+
pages: p,
|
|
606
|
+
headSnippets: i(await U.readFile(B(e, ".framework", "index.html"), "utf8").catch(() => "")),
|
|
607
|
+
apiImports: m.imports,
|
|
608
|
+
apiEntriesLiteral: `[\n${m.providerEntryLines.join("\n")}\n ]`
|
|
605
609
|
});
|
|
606
|
-
|
|
607
|
-
let { pages:
|
|
608
|
-
await
|
|
610
|
+
g.length > 0 && Y.info("per-page islands entries", { pages: g.map((e) => `${e.pattern}${e.usesClient ? " (client boot)" : ""}`) });
|
|
611
|
+
let { pages: _ } = await u(B(e, "src", "pages"));
|
|
612
|
+
await b({
|
|
609
613
|
appRoot: e,
|
|
610
|
-
pages:
|
|
614
|
+
pages: _,
|
|
611
615
|
mode: "prod"
|
|
612
616
|
});
|
|
613
|
-
let v = B(e, ".framework"),
|
|
617
|
+
let v = B(e, ".framework"), E = B(v, "dist"), k = B(e, "node_modules", "@voltro", "ui-shadcn"), j = H(B(k, "package.json")) ? k : null, N = [...j ? [
|
|
614
618
|
{
|
|
615
619
|
find: "@voltro/ui-shadcn/tokens.css",
|
|
616
620
|
replacement: B(j, "src/tokens.css")
|
|
@@ -627,9 +631,9 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
627
631
|
find: "@voltro/ui-shadcn",
|
|
628
632
|
replacement: B(j, "src/index.ts")
|
|
629
633
|
}
|
|
630
|
-
] : [], ...
|
|
634
|
+
] : [], ...s(e)];
|
|
631
635
|
Y.info("running vite build");
|
|
632
|
-
let P = await
|
|
636
|
+
let P = await h("vite", () => import("vite")), F = (await import("@vitejs/plugin-react")).default, L = (await import("@tailwindcss/vite")).default, V = t.web?.sourcemaps, W = t.web?.assetPrefix;
|
|
633
637
|
if (W !== void 0 && !/^https?:\/\/|^\//.test(W)) return Y.fatal(`web.assetPrefix must be an absolute URL or a root-relative path — got ${JSON.stringify(W)}. A bare host would be resolved against the page URL and 404 on every route but one.`), {
|
|
634
638
|
ran: !0,
|
|
635
639
|
exitCode: 1
|
|
@@ -641,7 +645,7 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
641
645
|
plugins: [
|
|
642
646
|
F(),
|
|
643
647
|
L(),
|
|
644
|
-
|
|
648
|
+
f({
|
|
645
649
|
root: e,
|
|
646
650
|
config: I(t.images)
|
|
647
651
|
}),
|
|
@@ -664,39 +668,39 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
664
668
|
rollupOptions: {
|
|
665
669
|
input: {
|
|
666
670
|
index: B(v, "index.html"),
|
|
667
|
-
...Object.fromEntries(
|
|
671
|
+
...Object.fromEntries(g.map((e) => [`island_${e.name}`, B(v, e.htmlFile)]))
|
|
668
672
|
},
|
|
669
|
-
output: { manualChunks:
|
|
673
|
+
output: { manualChunks: te }
|
|
670
674
|
}
|
|
671
675
|
},
|
|
672
676
|
logLevel: "warn"
|
|
673
677
|
});
|
|
674
|
-
let G = B(e, "src", "pages"), { pages: K, dirs: q } = await
|
|
678
|
+
let G = B(e, "src", "pages"), { pages: K, dirs: q } = await u(G);
|
|
675
679
|
if (K.length === 0) return Y.info("no pages found — client-only bundle written", {
|
|
676
680
|
pagesDir: G,
|
|
677
|
-
distDir:
|
|
681
|
+
distDir: E
|
|
678
682
|
}), {
|
|
679
683
|
ran: !0,
|
|
680
684
|
exitCode: 0
|
|
681
685
|
};
|
|
682
686
|
{
|
|
683
|
-
let n = await
|
|
687
|
+
let n = await ee(e, t.fonts);
|
|
684
688
|
if (n !== null) {
|
|
685
689
|
for (let e of n.files) {
|
|
686
|
-
let t = B(
|
|
690
|
+
let t = B(E, e.fileName);
|
|
687
691
|
await U.mkdir(z(t), { recursive: !0 }), await U.writeFile(t, Buffer.from(e.bytes));
|
|
688
692
|
}
|
|
689
693
|
Y.info(`fonts: ${n.files.length} hashed file(s) into dist/assets/fonts`);
|
|
690
694
|
}
|
|
691
695
|
}
|
|
692
|
-
|
|
696
|
+
r(e);
|
|
693
697
|
let { rendered: J, pageMeta: Z } = await se({
|
|
694
698
|
root: e,
|
|
695
|
-
distDir:
|
|
699
|
+
distDir: E,
|
|
696
700
|
pages: K,
|
|
697
701
|
dirs: q,
|
|
698
702
|
vite: P,
|
|
699
|
-
islandsPlans:
|
|
703
|
+
islandsPlans: g,
|
|
700
704
|
...t.locales ? { locales: t.locales } : {},
|
|
701
705
|
...t.defaultLocale ? { defaultLocale: t.defaultLocale } : {},
|
|
702
706
|
...t.timeZone ? { timeZone: t.timeZone } : {},
|
|
@@ -705,10 +709,10 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
705
709
|
...t.fonts === void 0 ? {} : { fonts: t.fonts },
|
|
706
710
|
...t.seo?.siteUrl === void 0 ? {} : { siteUrl: t.seo.siteUrl }
|
|
707
711
|
});
|
|
708
|
-
await
|
|
712
|
+
await O(E), await d(E, t.feeds ?? [], t.seo?.siteUrl), Y.info("generating .framework/ssrEntry.ts"), await ce(e, K, q, t.locales, t.defaultLocale, Z, {
|
|
709
713
|
...t.timeZone ? { timeZone: t.timeZone } : {},
|
|
710
714
|
...t.defaultTimeZone ? { defaultTimeZone: t.defaultTimeZone } : {}
|
|
711
|
-
},
|
|
715
|
+
}, o.map((e) => ({
|
|
712
716
|
name: e.name,
|
|
713
717
|
pkg: e.pkg
|
|
714
718
|
}))), Y.info("vite build --ssr → dist/server/");
|
|
@@ -720,7 +724,7 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
720
724
|
plugins: [
|
|
721
725
|
F(),
|
|
722
726
|
L(),
|
|
723
|
-
|
|
727
|
+
f({
|
|
724
728
|
root: e,
|
|
725
729
|
config: I(t.images)
|
|
726
730
|
}),
|
|
@@ -760,9 +764,9 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
760
764
|
if (H($)) {
|
|
761
765
|
Y.info("precompiling app.config.ts → dist/server/appConfig.js");
|
|
762
766
|
try {
|
|
763
|
-
await (await
|
|
767
|
+
await (await h("esbuild", () => import("esbuild"))).build({
|
|
764
768
|
entryPoints: [$],
|
|
765
|
-
outfile: B(
|
|
769
|
+
outfile: B(E, "server", "appConfig.js"),
|
|
766
770
|
bundle: !0,
|
|
767
771
|
format: "esm",
|
|
768
772
|
platform: "node",
|
|
@@ -793,31 +797,31 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
793
797
|
});
|
|
794
798
|
try {
|
|
795
799
|
let e = process.env.VOLTRO_SEO_NOINDEX !== "1", n = t.seo?.siteUrl, r = t.locales ?? [], i = t.defaultLocale ?? r[0];
|
|
796
|
-
if (n && !H(B(
|
|
800
|
+
if (n && !H(B(E, "sitemap.xml"))) {
|
|
797
801
|
let t = new Set(r.filter((e) => e !== i)), a = J.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
|
|
798
802
|
let n = e.split("/").filter(Boolean)[0];
|
|
799
803
|
return n === void 0 || !t.has(n);
|
|
800
|
-
}).filter((e) => !e.includes("[")).map((e) => ({ path: e })), o =
|
|
804
|
+
}).filter((e) => !e.includes("[")).map((e) => ({ path: e })), o = C({
|
|
801
805
|
siteUrl: n,
|
|
802
806
|
entries: a,
|
|
803
807
|
...r.length > 1 ? { locales: r } : {},
|
|
804
808
|
...i ? { defaultLocale: i } : {}
|
|
805
809
|
});
|
|
806
|
-
await U.writeFile(B(
|
|
810
|
+
await U.writeFile(B(E, "sitemap.xml"), o, "utf8"), Y.info("wrote dist/sitemap.xml", {
|
|
807
811
|
urls: a.length,
|
|
808
812
|
indexable: e
|
|
809
813
|
});
|
|
810
814
|
}
|
|
811
|
-
if (!H(B(
|
|
812
|
-
let r =
|
|
815
|
+
if (!H(B(E, "robots.txt"))) {
|
|
816
|
+
let r = T({
|
|
813
817
|
indexable: e,
|
|
814
818
|
...e && n ? { sitemapUrl: `${n.replace(/\/$/, "")}/sitemap.xml` } : {},
|
|
815
819
|
...t.seo?.disallow ? { disallow: t.seo.disallow } : {}
|
|
816
820
|
});
|
|
817
|
-
await U.writeFile(B(
|
|
821
|
+
await U.writeFile(B(E, "robots.txt"), r, "utf8"), Y.info("wrote dist/robots.txt", { indexable: e });
|
|
818
822
|
}
|
|
819
823
|
{
|
|
820
|
-
let { precompressAssets: e } = await import("./precompressAssets-YhTi1aWp.js"), t = await e(
|
|
824
|
+
let { precompressAssets: e } = await import("./precompressAssets-YhTi1aWp.js"), t = await e(E);
|
|
821
825
|
t.files > 0 && Y.info("pre-compressed assets", {
|
|
822
826
|
files: t.files,
|
|
823
827
|
raw: t.originalBytes,
|
|
@@ -830,7 +834,7 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
830
834
|
}
|
|
831
835
|
try {
|
|
832
836
|
let t = await R(e);
|
|
833
|
-
await U.writeFile(B(
|
|
837
|
+
await U.writeFile(B(E, ".voltro-build.json"), JSON.stringify({
|
|
834
838
|
version: 1,
|
|
835
839
|
profile: t
|
|
836
840
|
}, null, 2), "utf8"), Y.info("wrote deploy profile manifest", {
|
|
@@ -841,7 +845,7 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
841
845
|
} catch (e) {
|
|
842
846
|
Y.warn("could not write .voltro-build.json deploy manifest", {}, e);
|
|
843
847
|
}
|
|
844
|
-
return Y.info("build complete", { distDir:
|
|
848
|
+
return Y.info("build complete", { distDir: E }), {
|
|
845
849
|
ran: !0,
|
|
846
850
|
exitCode: 0
|
|
847
851
|
};
|
|
@@ -850,10 +854,10 @@ var J = W({ scope: "voltro:build" }), ne = async (e) => {
|
|
|
850
854
|
try: () => ue(V(e)),
|
|
851
855
|
catch: (e) => e
|
|
852
856
|
}).pipe(K.orDie);
|
|
853
|
-
return t.ran ? t.exitCode : (yield* K.logError("no
|
|
857
|
+
return t.ran ? t.exitCode : (yield* K.logError("no voltro app found at this path", { hint: "looked for an app.config.ts with `type: 'web'` or `type: 'api'` — a web app gets the vite build + prerender + start bundle, an api gets the precompiled serve bundle" }), 1);
|
|
854
858
|
}), fe = async (t) => {
|
|
855
859
|
if (G("build"), t.includes("--target")) {
|
|
856
|
-
let { runSdkBuildCommand: e } = await import("./sdkgen-
|
|
860
|
+
let { runSdkBuildCommand: e } = await import("./sdkgen-CMUPrDjH.js");
|
|
857
861
|
return e(t);
|
|
858
862
|
}
|
|
859
863
|
let n = t.find((e) => !e.startsWith("-")) ?? process.cwd(), r = await P(de(n), { scope: "voltro:build" });
|