@voltro/cli 0.54.0 → 0.56.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 +639 -2
- package/bin/voltro.mjs +24 -0
- package/dist/{apiBuild-DTWp0S_q.js → apiBuild-Bdaetr37.js} +119 -88
- package/dist/apiBuild-Vw1figjO.js +2 -0
- package/dist/bin.js +1 -1
- package/dist/{build-D4ygSbnV.js → build-CI36wL4R.js} +339 -314
- package/dist/buildReport-52gHKgfO.js +64 -0
- package/dist/{checkCommand-Dg1G7Gwd.js → checkCommand-CAwFXrxA.js} +6 -6
- package/dist/{checkCommand-L7DTlpIF.js → checkCommand-D0QV_zM_.js} +1 -1
- package/dist/{clusterCmd-DrVFCzSj.js → clusterCmd-CdLB1GkT.js} +1 -1
- package/dist/{codegen-DSLM8Su9.js → codegen-Bth5lUTU.js} +76 -64
- package/dist/codegen-DbH7NbCR.js +2 -0
- package/dist/{codegenCommand-CG_Vx4lc.js → codegenCommand-CidbQzbv.js} +15 -14
- package/dist/{codemodRunner-Cd4xkC6u.js → codemodRunner-BlQPfjzA.js} +277 -0
- package/dist/{commands-6Kzi92Np.js → commands-CWjfThXv.js} +35 -35
- package/dist/{dashboardCommand-Cq1PWvI1.js → dashboardCommand-BekcY5Ls.js} +3 -3
- package/dist/{dataCommand-DYzW8vkv.js → dataCommand-2pccgbIy.js} +267 -195
- package/dist/{dbCommand-B4NWZtGL.js → dbCommand-DpK_vQET.js} +457 -441
- package/dist/dbCommand-DrycGWWt.js +2 -0
- package/dist/{dev-cKUiZZsB.js → dev-B9Gz0k85.js} +1 -1
- package/dist/{dev-CmuvUKRq.js → dev-Dw263KPu.js} +2598 -2452
- package/dist/doctorCommand-BMWs6aVm.js +2 -0
- package/dist/{doctorCommand-DCiFVMtZ.js → doctorCommand-aR_bFmIi.js} +353 -251
- package/dist/{dormancyCommand-w1TrmgYP.js → dormancyCommand-eXTQMbHU.js} +1 -1
- package/dist/{embeddingsCommand-CMgPyRTr.js → embeddingsCommand-CTmiQvwa.js} +1 -1
- package/dist/{envCommand-Cyynmcfa.js → envCommand-BDUgV7EM.js} +12 -12
- package/dist/{evolveCommand-BwvQ8dVH.js → evolveCommand-YV8qW1LU.js} +2 -2
- package/dist/frameworkTableAssembly-CGNC0qr7.js +2 -0
- package/dist/{frameworkTableAssembly-D7LJuALW.js → frameworkTableAssembly-DNOFXfEQ.js} +102 -100
- package/dist/index.js +1 -1
- package/dist/{infoCommand-DlYlUPqs.js → infoCommand-BjVXpMlP.js} +1 -1
- package/dist/inspect-CNYvNXPU.js +1484 -0
- package/dist/inspect-S2rWy1Ys.js +2 -0
- package/dist/{inspectCmd-niF97fAq.js → inspectCmd-CP-G0sVK.js} +1 -1
- package/dist/{inspectFetch-EMuhTG_9.js → inspectFetch-BU1NyzxV.js} +36 -24
- package/dist/{inspectMetrics-CGF94puw.js → inspectMetrics-BY0Sjb2F.js} +19 -19
- package/dist/interruptedReplace-CwnkBb2X.js +41 -0
- package/dist/interruptedReplace-qzmFI020.js +2 -0
- package/dist/{logsCmd-B6oNsfaZ.js → logsCmd-BU8uCdys.js} +1 -1
- package/dist/{manifestBuild-Cqgsx2bM.js → manifestBuild-CEkjfpwc.js} +1 -1
- package/dist/manifestBuild-DIa_s6u0.js +2 -0
- package/dist/{migrate-BK_Bbx-_.js → migrate-SICulyz1.js} +2 -2
- package/dist/precompressAssets-YhTi1aWp.js +40 -0
- package/dist/{probeCommand-_C0YU207.js → probeCommand-6HxEkNDG.js} +2 -2
- package/dist/{runtimeTrace-CGWx1Q6l.js → runtimeTrace-DgYMc09E.js} +1 -1
- package/dist/{scheduleCmd-DQRu6BZC.js → scheduleCmd-DYBUfo_T.js} +1 -1
- package/dist/{sdkgen-CDGHQUFj.js → sdkgen-PY-umd6O.js} +1 -1
- package/dist/{seedRunner-Dgsiwk_e.js → seedRunner-DISBKow-.js} +16 -16
- package/dist/serveCommand-BITS8Hpj.js +2 -0
- package/dist/{serveCommand-Bje09q1v.js → serveCommand-DIJ3ma76.js} +951 -909
- package/dist/serveEntry.js +1 -1
- package/dist/{start-Clz-1BHB.js → start-B9NGB8gn.js} +627 -588
- package/dist/{start-B0bnJgxI.js → start-BFQQkL1i.js} +1 -1
- package/dist/startEntry.js +1 -1
- package/dist/staticCachePolicy-CIyj6DbS.js +15 -0
- package/dist/{test-D_kW4KMj.js → test-jipIQ5Mx.js} +1 -1
- package/dist/{tracesCmd-DgtgOUdi.js → tracesCmd-BWYDqMy6.js} +1 -1
- package/dist/{updateCommand-CRJlAOaM.js → updateCommand-C9n_Z_oG.js} +8 -2
- package/dist/updateCommand-DsXEAHbd.js +2 -0
- package/dist/webDev-C2dRz9s5.js +2 -0
- package/dist/{webDev-DSI9SOhs.js → webDev-C53hJdcL.js} +1265 -1288
- package/dist/{webhooksCommand-BvzXNHji.js → webhooksCommand-uuPu8qQX.js} +1 -1
- package/dist/{workflowsCmd-BGF-mRZ5.js → workflowsCmd-g-DNpaUc.js} +1 -1
- package/package.json +67 -19
- package/templates/AGENTS.core.md +20 -1
- package/templates/AGENTS.md +21 -2
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/_manifest.json +1 -1
- package/templates/agent-docs/authentication.md +49 -6
- package/templates/agent-docs/cli.md +216 -11
- package/templates/agent-docs/data.md +209 -18
- package/templates/agent-docs/database/scaling.md +40 -1
- package/templates/agent-docs/deployment.md +53 -1
- package/templates/agent-docs/internationalization.md +32 -0
- package/templates/agent-docs/local-first-mobile.md +9 -2
- package/templates/agent-docs/observability.md +227 -0
- package/templates/agent-docs/plugins/billing.md +15 -0
- package/templates/agent-docs/plugins/broadcast.md +2 -1
- package/templates/agent-docs/plugins/ratelimit.md +6 -1
- package/templates/agent-docs/plugins/row-history.md +11 -0
- package/templates/agent-docs/plugins.md +65 -8
- package/templates/agent-docs/reference.md +5 -3
- package/templates/agent-docs/routing.md +18 -0
- package/templates/agent-docs/schema-driven-ui.md +125 -0
- package/templates/agent-docs/templates/appshells.md +3 -3
- package/templates/agent-docs/whats-new.md +408 -106
- 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/changelog/src/pages/[locale]/page.tsx +7 -1
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +7 -8
- package/templates/apps/frontend-admin/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +1 -2
- package/templates/apps/frontend-app/package.json +8 -9
- package/templates/apps/frontend-app/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-auth/package.json +7 -8
- package/templates/apps/frontend-auth/src/components/AuthShell.tsx +1 -2
- package/templates/apps/frontend-blank/package.json +6 -7
- package/templates/apps/frontend-blank/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-cms/package.json +8 -9
- package/templates/apps/frontend-cms/src/pages/(app)/layout.tsx +1 -2
- package/templates/apps/frontend-collab/README.md +7 -2
- package/templates/apps/frontend-collab/package.json +9 -10
- package/templates/apps/frontend-collab/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-collab/src/pages/page.test.tsx +8 -4
- package/templates/apps/frontend-collab/src/pages/page.tsx +10 -5
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-contact/src/components/ContactForm.island.tsx +1 -1
- package/templates/apps/frontend-dashboard/package.json +6 -7
- package/templates/apps/frontend-dashboard/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.tsx +1 -2
- 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 -8
- package/templates/apps/frontend-portal/src/pages/(portal)/layout.tsx +1 -2
- package/templates/apps/frontend-saas/package.json +7 -8
- package/templates/apps/frontend-saas/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-saas/src/pages/dashboard/layout.tsx +1 -2
- package/templates/apps/frontend-spa/package.json +6 -7
- package/templates/apps/frontend-spa/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-ssr/package.json +6 -7
- package/templates/apps/frontend-ssr/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-ssr-api/package.json +7 -8
- package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-static-blog/package.json +8 -8
- package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.tsx +1 -1
- package/templates/apps/frontend-static-blog/src/pages/[locale]/page.tsx +7 -1
- package/templates/apps/frontend-status/package.json +7 -8
- package/templates/apps/frontend-status/src/pages/layout.tsx +1 -2
- package/templates/apps/mobile-app/package.json +4 -4
- package/templates/baselines/compose/docker/api.Dockerfile +61 -5
- package/templates/baselines/compose/docker/web.Dockerfile +55 -10
- package/templates/baselines/compose-mariadb/docker/api.Dockerfile +61 -5
- package/templates/baselines/compose-mariadb/docker/web.Dockerfile +55 -10
- package/dist/apiBuild-CeUN55uk.js +0 -2
- package/dist/codegen-DjgxEOnD.js +0 -2
- package/dist/dbCommand-CSFWs9ev.js +0 -2
- package/dist/doctorCommand-J3qu4E0Y.js +0 -2
- package/dist/frameworkTableAssembly-IPD1pUnZ.js +0 -2
- package/dist/inspect-Bd8-9wsi.js +0 -1193
- package/dist/inspect-CuoDInfZ.js +0 -2
- package/dist/interruptedReplace-C3O3M1MM.js +0 -28
- package/dist/interruptedReplace-CvmiAM9K.js +0 -2
- package/dist/manifestBuild-C4-J1-m_.js +0 -2
- package/dist/serveCommand-BiPe8BJm.js +0 -2
- package/dist/updateCommand-CIoVDKnj.js +0 -2
- package/dist/webDev-DlvZO30c.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as e } from "./cliOutput-D1tSBoRM.js";
|
|
2
|
-
import { n as t, o as n, r, t as i } from "./inspectFetch-
|
|
2
|
+
import { n as t, o as n, r, t as i } from "./inspectFetch-BU1NyzxV.js";
|
|
3
3
|
import { ansi as a } from "@voltro/logger";
|
|
4
4
|
//#region src/inspectCmd.ts
|
|
5
5
|
var o = {
|
|
@@ -1,43 +1,55 @@
|
|
|
1
1
|
import { n as e } from "./runtimeRegistry-DMeKfTHP.js";
|
|
2
2
|
//#region src/inspectFetch.ts
|
|
3
|
-
var t = (e
|
|
3
|
+
var t = (e) => {
|
|
4
|
+
if (typeof e != "object" || !e) return { data: e };
|
|
5
|
+
let t = e;
|
|
6
|
+
return !("data" in t) || !("scope" in t) || !("completeness" in t) ? { data: e } : {
|
|
7
|
+
data: t.data,
|
|
8
|
+
observation: {
|
|
9
|
+
...t.scope === void 0 ? {} : { scope: t.scope },
|
|
10
|
+
...t.origin === void 0 ? {} : { origin: t.origin },
|
|
11
|
+
...t.completeness === void 0 ? {} : { completeness: t.completeness }
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}, n = (e, t, n = !1) => {
|
|
4
15
|
let r = { ...e ?? {} }, i = t ?? process.env.VOLTRO_INSPECT_TOKEN;
|
|
5
16
|
if (i !== void 0 && i !== "" && (r.authorization = `Bearer ${i}`), n) {
|
|
6
17
|
let e = process.env.VOLTRO_INSPECT_WRITE_TOKEN;
|
|
7
18
|
e !== void 0 && e !== "" && (r["x-voltro-inspect-write"] = e);
|
|
8
19
|
}
|
|
9
20
|
return r;
|
|
10
|
-
},
|
|
21
|
+
}, r = /* @__PURE__ */ new Set([
|
|
11
22
|
"POST",
|
|
12
23
|
"PUT",
|
|
13
24
|
"PATCH",
|
|
14
25
|
"DELETE"
|
|
15
|
-
]),
|
|
16
|
-
let
|
|
26
|
+
]), i = async (e, i, a) => {
|
|
27
|
+
let o = `${e.url.replace(/\/+$/, "")}${i.startsWith("/") ? i : `/${i}`}`, s = a?.method ?? "GET", c = a?.body !== void 0;
|
|
17
28
|
try {
|
|
18
|
-
let
|
|
19
|
-
method:
|
|
20
|
-
headers:
|
|
21
|
-
...
|
|
22
|
-
}),
|
|
23
|
-
if (
|
|
24
|
-
|
|
29
|
+
let i = await fetch(o, {
|
|
30
|
+
method: s,
|
|
31
|
+
headers: a?.anonymous === !0 ? c ? { "content-type": "application/json" } : {} : n(c ? { "content-type": "application/json" } : void 0, e.inspectToken, r.has(s)),
|
|
32
|
+
...c ? { body: JSON.stringify(a.body) } : {}
|
|
33
|
+
}), l = await i.text(), u;
|
|
34
|
+
if (l.length > 0) try {
|
|
35
|
+
u = JSON.parse(l);
|
|
25
36
|
} catch {
|
|
26
|
-
|
|
37
|
+
u = l;
|
|
27
38
|
}
|
|
28
|
-
if (!
|
|
29
|
-
let t =
|
|
39
|
+
if (!i.ok) {
|
|
40
|
+
let t = u, n = typeof t == "object" && t ? String(t.message ?? t.reason ?? t.error ?? `HTTP ${i.status}`) : `HTTP ${i.status}`, a = r.has(s) && (process.env.VOLTRO_INSPECT_WRITE_TOKEN ?? "") === "" && /write/i.test(n);
|
|
30
41
|
return {
|
|
31
42
|
kind: "err",
|
|
32
43
|
name: e.name,
|
|
33
|
-
error: a ? `${
|
|
44
|
+
error: a ? `${n}\n VOLTRO_INSPECT_WRITE_TOKEN is not set in this shell. \`voltro dev\` mints it into the project's \`.env.local\`; export it (or run from a shell that loaded it).` : n
|
|
34
45
|
};
|
|
35
46
|
}
|
|
47
|
+
let d = t(u);
|
|
36
48
|
return {
|
|
37
49
|
kind: "ok",
|
|
38
50
|
name: e.name,
|
|
39
|
-
status:
|
|
40
|
-
|
|
51
|
+
status: i.status,
|
|
52
|
+
...d
|
|
41
53
|
};
|
|
42
54
|
} catch (t) {
|
|
43
55
|
return {
|
|
@@ -46,7 +58,7 @@ var t = (e, t, n = !1) => {
|
|
|
46
58
|
error: t.message || String(t)
|
|
47
59
|
};
|
|
48
60
|
}
|
|
49
|
-
},
|
|
61
|
+
}, a = (e, t = process.env) => {
|
|
50
62
|
let n = [], r, i;
|
|
51
63
|
for (let t = 0; t < e.length; t++) {
|
|
52
64
|
let a = e[t];
|
|
@@ -91,7 +103,7 @@ var t = (e, t, n = !1) => {
|
|
|
91
103
|
},
|
|
92
104
|
rest: n
|
|
93
105
|
};
|
|
94
|
-
},
|
|
106
|
+
}, o = (e) => ({
|
|
95
107
|
id: `remote:${e.url}`,
|
|
96
108
|
name: e.name,
|
|
97
109
|
kind: "api",
|
|
@@ -102,7 +114,7 @@ var t = (e, t, n = !1) => {
|
|
|
102
114
|
status: "live",
|
|
103
115
|
logFile: "",
|
|
104
116
|
...e.token === void 0 ? {} : { inspectToken: e.token }
|
|
105
|
-
}),
|
|
117
|
+
}), s = async (t, n) => n === void 0 ? (await e()).apps.filter((e) => e.kind === "api" && e.status === "live" && e.url.length > 0 && (t === void 0 || e.name === t)) : [o(n)], c = (e) => {
|
|
106
118
|
let t = "pretty", n = [];
|
|
107
119
|
for (let r = 0; r < e.length; r++) {
|
|
108
120
|
let i = e[r];
|
|
@@ -126,8 +138,8 @@ var t = (e, t, n = !1) => {
|
|
|
126
138
|
format: t,
|
|
127
139
|
rest: n
|
|
128
140
|
};
|
|
129
|
-
},
|
|
130
|
-
let { target: n, rest: r, error:
|
|
141
|
+
}, l = (e, t = process.env) => {
|
|
142
|
+
let { target: n, rest: r, error: i } = a(e, t), o, s = [];
|
|
131
143
|
for (let e = 0; e < r.length; e++) {
|
|
132
144
|
let t = r[e];
|
|
133
145
|
if (t === "--process") {
|
|
@@ -144,8 +156,8 @@ var t = (e, t, n = !1) => {
|
|
|
144
156
|
process: o,
|
|
145
157
|
target: n,
|
|
146
158
|
rest: s,
|
|
147
|
-
...
|
|
159
|
+
...i === void 0 ? {} : { error: i }
|
|
148
160
|
};
|
|
149
161
|
};
|
|
150
162
|
//#endregion
|
|
151
|
-
export { a, i,
|
|
163
|
+
export { o as a, a as i, c as n, s as o, l as r, i as t };
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { o as e, t } from "./connectionConfig-Bk9IC7D0.js";
|
|
2
2
|
import { createLogger as n } from "@voltro/logger";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { recordSample as r, setRevalidationPublisher as i } from "@voltro/runtime";
|
|
4
|
+
import { Effect as a } from "effect";
|
|
5
5
|
import { channelFor as o, resolveBroadcastNamespace as s, resolveBroadcastProvider as c } from "@voltro/plugin-broadcast";
|
|
6
6
|
//#region src/revalidationWiring.ts
|
|
7
|
-
var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE }), "revalidate"), d = (
|
|
8
|
-
let o =
|
|
9
|
-
if (
|
|
7
|
+
var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE }), "revalidate"), d = (r) => {
|
|
8
|
+
let o = r.logger ?? n({ scope: "voltro:revalidate" });
|
|
9
|
+
if (r.mode === "dev") return i((e) => (o.debug(`revalidate ${e.kind} '${e.value}' — no-op under voltro dev (no ISR cache)`), Promise.resolve())), {
|
|
10
10
|
transports: [],
|
|
11
|
-
stop: () => (
|
|
11
|
+
stop: () => (i(null), Promise.resolve())
|
|
12
12
|
};
|
|
13
|
-
let s = [], d =
|
|
13
|
+
let s = [], d = r.dialect === "postgres" && t(), f = null, m = null, h = () => m || (m = (async () => {
|
|
14
14
|
try {
|
|
15
15
|
let t = new (await (import("pg"))).default.Client(e());
|
|
16
16
|
return await t.connect(), f = t, t;
|
|
@@ -20,13 +20,13 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
|
|
|
20
20
|
})(), m);
|
|
21
21
|
d && s.push("pg-notify");
|
|
22
22
|
let g = null, _ = !1;
|
|
23
|
-
if (
|
|
24
|
-
else if (
|
|
23
|
+
if (r.provider !== void 0 && r.provider.name !== "memory") g = r.provider;
|
|
24
|
+
else if (r.provider === void 0) {
|
|
25
25
|
let e = c({}, process.env);
|
|
26
26
|
e.crossReplica && (g = e.provider, _ = !0);
|
|
27
27
|
}
|
|
28
28
|
let v = u(process.env);
|
|
29
|
-
return g && s.push("broker"),
|
|
29
|
+
return g && s.push("broker"), i(async (e) => {
|
|
30
30
|
let t = JSON.stringify(e), n = !1;
|
|
31
31
|
if (d) {
|
|
32
32
|
let r = await h();
|
|
@@ -37,7 +37,7 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
if (g) try {
|
|
40
|
-
await
|
|
40
|
+
await a.runPromise(g.publish(v, t)), n = !0;
|
|
41
41
|
} catch (t) {
|
|
42
42
|
o.warn(`revalidate ${e.kind} '${e.value}': broker publish failed`, {}, t);
|
|
43
43
|
}
|
|
@@ -48,14 +48,14 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
|
|
|
48
48
|
}), {
|
|
49
49
|
transports: s,
|
|
50
50
|
stop: async () => {
|
|
51
|
-
if (
|
|
51
|
+
if (i(null), f) {
|
|
52
52
|
try {
|
|
53
53
|
await f.end();
|
|
54
54
|
} catch {}
|
|
55
55
|
f = null;
|
|
56
56
|
}
|
|
57
57
|
if (g && _) try {
|
|
58
|
-
await
|
|
58
|
+
await a.runPromise(g.close());
|
|
59
59
|
} catch {}
|
|
60
60
|
g = null;
|
|
61
61
|
}
|
|
@@ -98,17 +98,17 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
|
|
|
98
98
|
max: t[t.length - 1]
|
|
99
99
|
};
|
|
100
100
|
}, y = (e = {}) => {
|
|
101
|
-
let t = e.maxSamples ?? h, n = e.defaultWindowMs ?? g,
|
|
101
|
+
let t = e.maxSamples ?? h, n = e.defaultWindowMs ?? g, i = [];
|
|
102
102
|
return {
|
|
103
103
|
record(e) {
|
|
104
|
-
|
|
104
|
+
r(e), i.push({
|
|
105
105
|
...e,
|
|
106
106
|
ts: Date.now()
|
|
107
|
-
}),
|
|
107
|
+
}), i.length > t && i.shift();
|
|
108
108
|
},
|
|
109
109
|
snapshot(e) {
|
|
110
|
-
let t = e ?? n,
|
|
111
|
-
for (let e of
|
|
110
|
+
let t = e ?? n, r = Date.now(), a = r - t, o = /* @__PURE__ */ new Map(), s = 0;
|
|
111
|
+
for (let e of i) {
|
|
112
112
|
if (e.ts < a) continue;
|
|
113
113
|
s++;
|
|
114
114
|
let t = `${e.kind}\u0000${e.tag}`, n = o.get(t);
|
|
@@ -132,7 +132,7 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
|
|
|
132
132
|
}
|
|
133
133
|
return c.sort((e, t) => t.count - e.count), {
|
|
134
134
|
windowMs: t,
|
|
135
|
-
capturedAt:
|
|
135
|
+
capturedAt: r,
|
|
136
136
|
totalSamples: s,
|
|
137
137
|
buckets: c
|
|
138
138
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { REPLACE_IN_PROGRESS_TABLE as e, interruptedReplaceRefusal as t, stagingLeftoverReport as n, stagingLeftovers as r, stagingNamesOf as i, stagingStaleAfterMs as a } from "@voltro/database";
|
|
2
|
+
//#region src/interruptedReplace.ts
|
|
3
|
+
var o = async (t) => {
|
|
4
|
+
try {
|
|
5
|
+
let n = await t.query({
|
|
6
|
+
table: e,
|
|
7
|
+
predicate: void 0,
|
|
8
|
+
order: [],
|
|
9
|
+
take: void 0,
|
|
10
|
+
skip: void 0,
|
|
11
|
+
projection: void 0
|
|
12
|
+
}), r = (e) => e instanceof Date ? e : e == null ? null : new Date(String(e));
|
|
13
|
+
return n.map((e) => ({
|
|
14
|
+
id: String(e.id ?? ""),
|
|
15
|
+
startedAt: r(e.startedAt) ?? /* @__PURE__ */ new Date(NaN),
|
|
16
|
+
kind: e.kind === void 0 || e.kind === null ? "replace" : String(e.kind),
|
|
17
|
+
tables: e.tables === null || e.tables === void 0 ? null : Number(e.tables),
|
|
18
|
+
capture: e.capture === null || e.capture === void 0 ? null : String(e.capture),
|
|
19
|
+
via: String(e.via ?? "unknown"),
|
|
20
|
+
staging: i(e.staging),
|
|
21
|
+
heartbeatAt: r(e.heartbeatAt),
|
|
22
|
+
resumable: e.resumable === !0 || e.resumable === 1 || e.resumable === "1"
|
|
23
|
+
}));
|
|
24
|
+
} catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}, s = async (e) => t(await o(e)), c = async (t, i, s) => {
|
|
28
|
+
let c = i === "postgres" || i === "mysql" || i === "mariadb" || i === "sqlite" || i === "mssql" ? i : void 0, l = await o(t), u = r(l, Date.now(), a(process.env, s?.dataTransfer?.stagingStaleMinutes));
|
|
29
|
+
if (u.all.length === 0) return;
|
|
30
|
+
let { STAGING_PREFIX: d, canStage: f, dropStagingSql: p, execStatements: m } = await import("@voltro/data-transfer"), h = [], g = f(t) ? t : void 0;
|
|
31
|
+
if (c !== void 0 && g !== void 0) for (let n of u.droppable) try {
|
|
32
|
+
await m(g, n.staging.map((e) => p(e.startsWith(d) ? e.slice(d.length) : e, c))), await t.delete(e, n.id), h.push(n.id);
|
|
33
|
+
} catch {}
|
|
34
|
+
let _ = new Set(h);
|
|
35
|
+
return n({
|
|
36
|
+
all: u.all,
|
|
37
|
+
droppable: u.droppable.filter((e) => _.has(e.id))
|
|
38
|
+
}, Date.now());
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
export { c as n, s as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as e } from "./runtimeRegistry-DMeKfTHP.js";
|
|
2
2
|
import { r as t, t as n } from "./logFileSink-B4uP8pvf.js";
|
|
3
3
|
import { n as r } from "./cliOutput-D1tSBoRM.js";
|
|
4
|
-
import { a as i, i as a } from "./inspectFetch-
|
|
4
|
+
import { a as i, i as a } from "./inspectFetch-BU1NyzxV.js";
|
|
5
5
|
import { ansi as o } from "@voltro/logger";
|
|
6
6
|
//#region src/logsCmd.ts
|
|
7
7
|
var s = (e) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "./cliError-BmdYnghb.js";
|
|
2
2
|
import { r as t } from "./dialectDriver-czCHYpeH.js";
|
|
3
3
|
import { a as n, r } from "./connectionConfig-Bk9IC7D0.js";
|
|
4
|
-
import { g as i, n as a, s as o } from "./frameworkTableAssembly-
|
|
4
|
+
import { g as i, n as a, s as o } from "./frameworkTableAssembly-DNOFXfEQ.js";
|
|
5
5
|
import { t as s } from "./cliRuntime-Dh7UDinH.js";
|
|
6
6
|
import { join as c, relative as l, resolve as u } from "node:path";
|
|
7
7
|
import { pathToFileURL as d } from "node:url";
|
|
@@ -79,7 +79,7 @@ var _ = /* @__PURE__ */ new Set([
|
|
|
79
79
|
let t = u(e.find((e) => !e.startsWith("-")) ?? process.cwd());
|
|
80
80
|
return s(S(t), { scope: "voltro:migrate" });
|
|
81
81
|
}
|
|
82
|
-
let { runDbCommand: t } = await import("./dbCommand-
|
|
82
|
+
let { runDbCommand: t } = await import("./dbCommand-DrycGWWt.js");
|
|
83
83
|
return t(["apply", ...e]);
|
|
84
84
|
};
|
|
85
85
|
//#endregion
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { i as e } from "./staticCachePolicy-CIyj6DbS.js";
|
|
2
|
+
import { join as t } from "node:path";
|
|
3
|
+
import { promises as n } from "node:fs";
|
|
4
|
+
import { brotliCompress as r, constants as i, gzip as a } from "node:zlib";
|
|
5
|
+
import { promisify as o } from "node:util";
|
|
6
|
+
//#region src/precompressAssets.ts
|
|
7
|
+
var s = o(r), c = o(a), l = /\.(js|mjs|css|svg|json|map|txt|xml|wasm)$/i, u = async (r) => {
|
|
8
|
+
let a = t(r, "assets"), o;
|
|
9
|
+
try {
|
|
10
|
+
o = await n.readdir(a);
|
|
11
|
+
} catch {
|
|
12
|
+
return {
|
|
13
|
+
files: 0,
|
|
14
|
+
originalBytes: 0,
|
|
15
|
+
brotliBytes: 0,
|
|
16
|
+
gzipBytes: 0
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
let u = 0, d = 0, f = 0, p = 0;
|
|
20
|
+
return await Promise.all(o.map(async (r) => {
|
|
21
|
+
if (r.endsWith(".br") || r.endsWith(".gz") || !l.test(r) || !e(`/assets/${r}`)) return;
|
|
22
|
+
let o = t(a, r);
|
|
23
|
+
try {
|
|
24
|
+
let e = await n.readFile(o);
|
|
25
|
+
if (e.length < 1024) return;
|
|
26
|
+
let [t, r] = await Promise.all([s(e, { params: {
|
|
27
|
+
[i.BROTLI_PARAM_QUALITY]: 11,
|
|
28
|
+
[i.BROTLI_PARAM_SIZE_HINT]: e.length
|
|
29
|
+
} }), c(e, { level: 9 })]);
|
|
30
|
+
t.length < e.length && (await n.writeFile(`${o}.br`, t), f += t.length), r.length < e.length && (await n.writeFile(`${o}.gz`, r), p += r.length), u += 1, d += e.length;
|
|
31
|
+
} catch {}
|
|
32
|
+
})), {
|
|
33
|
+
files: u,
|
|
34
|
+
originalBytes: d,
|
|
35
|
+
brotliBytes: f,
|
|
36
|
+
gzipBytes: p
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
export { u as precompressAssets };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as e, t } from "./inspectGateHint-4LxkNtrz.js";
|
|
2
2
|
import { n } from "./cliOutput-D1tSBoRM.js";
|
|
3
|
-
import { n as r, o as i, r as a, t as o } from "./inspectFetch-
|
|
3
|
+
import { n as r, o as i, r as a, t as o } from "./inspectFetch-BU1NyzxV.js";
|
|
4
4
|
import { ansi as s } from "@voltro/logger";
|
|
5
5
|
//#region src/probeCommand.ts
|
|
6
6
|
var c = () => {
|
|
@@ -108,7 +108,7 @@ server and in this shell.`);
|
|
|
108
108
|
}, m = async (e) => {
|
|
109
109
|
let t = /* @__PURE__ */ new Map();
|
|
110
110
|
try {
|
|
111
|
-
let { walk: n, loadDiscovered: r } = await import("./dev-
|
|
111
|
+
let { walk: n, loadDiscovered: r } = await import("./dev-B9Gz0k85.js"), i = await r(await n(e)), a = [
|
|
112
112
|
...i.queries,
|
|
113
113
|
...i.mutations,
|
|
114
114
|
...i.actions,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as e } from "./apiBuild-
|
|
1
|
+
import { n as e } from "./apiBuild-Bdaetr37.js";
|
|
2
2
|
import { join as t, resolve as n, sep as r } from "node:path";
|
|
3
3
|
import { existsSync as i, promises as a } from "node:fs";
|
|
4
4
|
import { createLogger as o } from "@voltro/logger";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as e } from "./cliArgs-D4p8n7EE.js";
|
|
2
2
|
import { n as t } from "./cliOutput-D1tSBoRM.js";
|
|
3
|
-
import { n, o as r, r as i, t as a } from "./inspectFetch-
|
|
3
|
+
import { n, o as r, r as i, t as a } from "./inspectFetch-BU1NyzxV.js";
|
|
4
4
|
import { ansi as o } from "@voltro/logger";
|
|
5
5
|
//#region src/scheduleCmd.ts
|
|
6
6
|
var s = () => {
|
|
@@ -422,7 +422,7 @@ let package = Package(
|
|
|
422
422
|
await l.mkdir(o(e), { recursive: !0 }), await l.writeFile(e, n.content, "utf8");
|
|
423
423
|
}
|
|
424
424
|
}, X = async (e) => {
|
|
425
|
-
let { offlineManifest: t } = await import("./checkCommand-
|
|
425
|
+
let { offlineManifest: t } = await import("./checkCommand-D0QV_zM_.js"), { manifest: n } = await t(e);
|
|
426
426
|
return n;
|
|
427
427
|
}, Z = async (e) => {
|
|
428
428
|
let t = J(await (e.manifestProvider ?? X)(e.root), {
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import { n as e } from "./appModuleLoader-C9r9mxZt.js";
|
|
2
2
|
import { promises as t } from "node:fs";
|
|
3
3
|
import { _voltroSeedsTable as n, and as r, eq as i, generateId as a, isSeedDefinition as o, setSchemaChangeSeedHook as s, setTenantCreateSeedHook as c } from "@voltro/database";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { defineSchedule as l } from "@voltro/runtime";
|
|
5
|
+
import { Cause as u, Effect as d } from "effect";
|
|
6
|
+
import { SqlClient as f } from "@effect/sql";
|
|
7
|
+
import { DEFAULT_CDC_CHANNEL as p, detectReactiveTriggerDrift as m, migrationLockKeyForSchema as h, reactiveTriggerRepairSql as g, resolveMigrationLockSchema as _ } from "@voltro/database/sql";
|
|
8
8
|
import { createHash as v } from "node:crypto";
|
|
9
9
|
//#region src/reactiveTriggerBoot.ts
|
|
10
10
|
var y = (e, t = process.env) => {
|
|
11
11
|
let n = (t.VOLTRO_REACTIVE_TRIGGERS ?? "").trim().toLowerCase(), r = n === "repair" || n === "report" || n === "off" ? n : e ?? "repair";
|
|
12
12
|
return r === "repair" && t.VOLTRO_AUTO_MIGRATE === "0" ? "report" : r;
|
|
13
|
-
}, b = (e, t, n =
|
|
13
|
+
}, b = (e, t, n = p) => d.map(m(e, t, n), (e) => ({
|
|
14
14
|
drift: e,
|
|
15
|
-
statements:
|
|
15
|
+
statements: g({
|
|
16
16
|
tables: t,
|
|
17
17
|
dialect: "postgres",
|
|
18
18
|
channel: n,
|
|
19
19
|
...e
|
|
20
20
|
})
|
|
21
|
-
})), x = (e, t) =>
|
|
22
|
-
let n = yield*
|
|
21
|
+
})), x = (e, t) => d.gen(function* () {
|
|
22
|
+
let n = yield* f.SqlClient, { drift: r, statements: i } = yield* b(n, e, t.channel ?? p), a = {
|
|
23
23
|
missing: r.missing.length,
|
|
24
24
|
stale: r.stale.length,
|
|
25
25
|
statements: i.length
|
|
@@ -32,24 +32,24 @@ var y = (e, t = process.env) => {
|
|
|
32
32
|
kind: "reported",
|
|
33
33
|
...a
|
|
34
34
|
};
|
|
35
|
-
let o =
|
|
35
|
+
let o = h(_({ schema: t.lockSchema }));
|
|
36
36
|
return (yield* n`
|
|
37
|
-
SELECT pg_try_advisory_lock(${o.toString()}::bigint) AS got`)[0]?.got === !0 ? yield*
|
|
37
|
+
SELECT pg_try_advisory_lock(${o.toString()}::bigint) AS got`)[0]?.got === !0 ? yield* d.gen(function* () {
|
|
38
38
|
for (let e of i) yield* n.unsafe(e);
|
|
39
39
|
return {
|
|
40
40
|
kind: "repaired",
|
|
41
41
|
...a
|
|
42
42
|
};
|
|
43
|
-
}).pipe(
|
|
43
|
+
}).pipe(d.ensuring(n`SELECT pg_advisory_unlock(${o.toString()}::bigint)`.pipe(d.catchAll(() => d.void)))) : {
|
|
44
44
|
kind: "lock-held",
|
|
45
45
|
...a
|
|
46
46
|
};
|
|
47
|
-
}).pipe(
|
|
47
|
+
}).pipe(d.catchAllCause((e) => d.succeed({
|
|
48
48
|
kind: "failed",
|
|
49
49
|
missing: 0,
|
|
50
50
|
stale: 0,
|
|
51
51
|
statements: 0,
|
|
52
|
-
detail:
|
|
52
|
+
detail: u.pretty(e)
|
|
53
53
|
}))), S = async (e) => {
|
|
54
54
|
let t = {
|
|
55
55
|
kind: "skipped",
|
|
@@ -58,11 +58,11 @@ var y = (e, t = process.env) => {
|
|
|
58
58
|
statements: 0
|
|
59
59
|
};
|
|
60
60
|
if (e.dialectId !== "postgres" || e.mode === "off" || e.tables.length === 0) return t;
|
|
61
|
-
let n = await e.makeLayer(), r = await
|
|
61
|
+
let n = await e.makeLayer(), r = await d.runPromise(x(e.tables, {
|
|
62
62
|
mode: e.mode,
|
|
63
63
|
...e.channel === void 0 ? {} : { channel: e.channel },
|
|
64
64
|
...e.lockSchema === void 0 ? {} : { lockSchema: e.lockSchema }
|
|
65
|
-
}).pipe(
|
|
65
|
+
}).pipe(d.provide(n))).catch((e) => ({
|
|
66
66
|
kind: "failed",
|
|
67
67
|
missing: 0,
|
|
68
68
|
stale: 0,
|
|
@@ -317,7 +317,7 @@ var y = (e, t = process.env) => {
|
|
|
317
317
|
await I(e, r.changedTables, t, n);
|
|
318
318
|
}), () => {
|
|
319
319
|
c(null), s(null);
|
|
320
|
-
}), R = "seed:", z = (e, t, n) => e.filter((e) => e.definition.lifecycle === "cron").map((r) =>
|
|
320
|
+
}), R = "seed:", z = (e, t, n) => e.filter((e) => e.definition.lifecycle === "cron").map((r) => l({
|
|
321
321
|
name: `${R}${r.definition.id}`,
|
|
322
322
|
cron: r.definition.cron ?? "",
|
|
323
323
|
timezone: r.definition.timezone ?? "UTC",
|