@voltro/cli 0.1.1 → 0.1.3
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 +19 -0
- package/dist/bin.js +1 -1
- package/dist/{commands-CfPH2Wf4.js → commands-C0o6Clo9.js} +253 -253
- package/dist/index.js +1 -1
- package/package.json +22 -22
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +7 -7
- 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-storage/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 +8 -8
- 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 +6 -6
- package/templates/apps/api-saas/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +7 -7
- 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 -7
- package/templates/apps/frontend-app/package.json +8 -7
- package/templates/apps/frontend-blank/package.json +7 -6
- package/templates/apps/frontend-contact/package.json +7 -6
- package/templates/apps/frontend-dashboard/package.json +7 -6
- package/templates/apps/frontend-docs/package.json +7 -6
- package/templates/apps/frontend-i18n/package.json +6 -5
- package/templates/apps/frontend-landing/package.json +7 -6
- package/templates/apps/frontend-spa/package.json +7 -6
- package/templates/apps/frontend-ssr/package.json +7 -6
- package/templates/apps/frontend-ssr-api/package.json +8 -7
- package/templates/apps/frontend-static-blog/package.json +6 -5
|
@@ -4,7 +4,7 @@ import { basename as r, dirname as i, extname as a, isAbsolute as o, join as s,
|
|
|
4
4
|
import { fileURLToPath as u, pathToFileURL as d } from "node:url";
|
|
5
5
|
import { FetchHttpClient as f, FileSystem as p } from "@effect/platform";
|
|
6
6
|
import { NodeContext as m, NodeRuntime as h } from "@effect/platform-node";
|
|
7
|
-
import { Cause as g, Cron as _, Data as v, Duration as y, Effect as b, Fiber as x, JSONSchema as
|
|
7
|
+
import { Cause as g, Cron as _, Data as v, Duration as y, Effect as b, Fiber as x, JSONSchema as S, Layer as C, ManagedRuntime as w, Option as T, Ref as E, Schema as D, Stream as ee } from "effect";
|
|
8
8
|
import { LoggerLayer as O, addSink as k, ansi as A, createLogger as j, printAppSurface as te, printReadyBlock as ne } from "@voltro/logger";
|
|
9
9
|
import { closeSync as re, existsSync as M, mkdirSync as N, openSync as ie, promises as P, readFileSync as F, readdirSync as ae, statSync as oe, unlinkSync as se, unwatchFile as ce, watchFile as le, writeFileSync as I, writeSync as ue } from "node:fs";
|
|
10
10
|
import { AggregateError as de, AggregateMaintainer as fe, AggregateNotFound as pe, AggregateRegistry as me, AggregateStale as he, AnalyticsSink as ge, Dispatcher as _e, InMemoryDataStore as ve, ReactionRateLimiter as ye, ReplicatedDataStore as L, _voltroScheduleClaimsTable as be, _voltroScheduleRunsTable as xe, _voltroTracesTable as Se, _voltroUndoLogTable as Ce, _voltroWakeupsTable as we, _voltroWorkflowEventDeliveriesTable as Te, _voltroWorkflowEventsTable as Ee, apiKeyManagementRoutes as De, applySoftDeleteScope as Oe, applyTenantScope as ke, applyUndoInvocation as Ae, attachAnalyticsMirror as je, awaitServerListening as Me, bindMutation as Ne, bindStream as Pe, bindSubscription as Fe, buildTracingLayer as Ie, cancelWakeup as Le, compileCron as Re, currentTraceContext as ze, dataStoreApiKeyStore as Be, dataStoreIdempotencyStore as Ve, extractDbCause as He, frameworkApiKeyStrategy as Ue, getConnectionSubject as We, getTimelineRecorder as Ge, isAggregateDefinition as Ke, isScheduleDefinition as qe, isWorkflowEventTriggerDefinition as Je, lastWriteProvenance as Ye, listRetentions as Xe, localityAwareSelector as Ze, makeActionRunner as Qe, makeAdvisoryLockCoordinator as $e, makeApiKeyService as et, makeAsyncKv as tt, makeBufferingSpanProcessor as nt, makeCoordinatedScheduler as rt, makeEffectStoreLayer as it, makeEventsFacade as at, makeLazyWorkflowFacade as ot, makeMutationRunner as st, makePostCommitWorkflowFacade as ct, makeQueryDescriptorProducer as lt, makeSchemaRegistry as ut, makeUndoCapture as dt, makeWorkflowFacade as ft, makeWorkflowFacadeWithCallerContext as pt, makeWorkflowLayers as mt, memoryRywPositionStore as ht, nextFiring as gt, nodeProcessSupervisor as _t, noopAnalytics as vt, noopAnalyticsSpec as yt, noopKv as bt, powerOfTwoSelector as xt, recordSample as St, recordSubscriptionDelivery as Ct, recordTimelineEvent as wt, redisRywPositionStore as Tt, redoUndoInvocation as Et, registerRetention as Dt, registerWakeup as Ot, resolveCurrentRegion as R, resolveSecret as kt, resolveSecretsBackend as At, retentionTtlMsFromEnv as jt, runProvidedEffect as Mt, runReaction as Nt, runSingleNodeOrchestrator as Pt, setSecretsBackend as Ft, singleCoordinator as It, snapshotMetricsSync as Lt, startRpcServer as Rt, startScheduler as zt, sweepRetention as Bt, tracingHttpClientLayer as Vt, undoCaptureEnabled as Ht, undoLogExecutor as Ut, workflowToRpc as Wt, wrapStoreWithMixinBehaviour as Gt } from "@voltro/runtime";
|
|
@@ -95,7 +95,7 @@ var ka = [
|
|
|
95
95
|
if (r) return r;
|
|
96
96
|
}
|
|
97
97
|
return null;
|
|
98
|
-
}, ja = (e = {}) =>
|
|
98
|
+
}, ja = (e = {}) => C.merge(m.layer, O({
|
|
99
99
|
...e.scope ? { defaultScope: e.scope } : {},
|
|
100
100
|
...e.logger
|
|
101
101
|
})), Ma = async (e, t = {}) => {
|
|
@@ -336,17 +336,17 @@ boundary, naming, anti-patterns) before editing.
|
|
|
336
336
|
for (let e of t) v.add(e);
|
|
337
337
|
}
|
|
338
338
|
}
|
|
339
|
-
let x = t.plugins ? t.plugins.map(Ka).filter((e) => e !== null) : y ? [...v] : null,
|
|
340
|
-
for (let e of m)
|
|
339
|
+
let x = t.plugins ? t.plugins.map(Ka).filter((e) => e !== null) : y ? [...v] : null, S = a.includes(Ba) ? a.replace(Ba, Xa(c, x, d)) : a, C = [];
|
|
340
|
+
for (let e of m) C.push(yield* to(n, e, S, f));
|
|
341
341
|
u || (yield* Ga(n, s(i, "agent-docs"), s(r, "agent-docs")));
|
|
342
|
-
let
|
|
343
|
-
let t =
|
|
342
|
+
let w = new Map((t.appTemplates ?? []).map((e) => [l(e.dir), e.template])), T = (e) => {
|
|
343
|
+
let t = w.get(l(e));
|
|
344
344
|
return t ? Za(t, c, d) : "";
|
|
345
|
-
},
|
|
346
|
-
for (let e of h)
|
|
347
|
-
for (let e of g)
|
|
348
|
-
for (let e of $a)
|
|
349
|
-
return { files:
|
|
345
|
+
}, E = (e, t) => b.forEach(La, (r) => to(n, s(e, r), t, f));
|
|
346
|
+
for (let e of h) C.push(...yield* E(e, Qa.api(d, _.get(e) ?? null, T(e)))), (yield* Va(n, s(e, "database"))) && C.push(...yield* E(s(e, "database"), Qa.database(d)));
|
|
347
|
+
for (let e of g) C.push(...yield* E(e, Qa.web(d, T(e))));
|
|
348
|
+
for (let e of $a) C.push(yield* to(n, s(r, ".claude", "skills", e.name, "SKILL.md"), eo(e, d), f));
|
|
349
|
+
return { files: C };
|
|
350
350
|
}), ro = (e, t = {}) => b.runPromise(no(e, t).pipe(b.provide(m.layer))), io = async (e) => {
|
|
351
351
|
let t = e.includes("--force"), n = e.find((e) => !e.startsWith("-")) ?? process.cwd();
|
|
352
352
|
return Ma(b.gen(function* () {
|
|
@@ -2424,7 +2424,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
2424
2424
|
} catch {
|
|
2425
2425
|
return null;
|
|
2426
2426
|
}
|
|
2427
|
-
}, al = (e) => e.disableDevtools ? [] : [
|
|
2427
|
+
}, al = (e, t) => e.disableDevtools || !t ? [] : [
|
|
2428
2428
|
"",
|
|
2429
2429
|
"// Dev-only in-page devtools overlay. The `import.meta.env.DEV` guard is a",
|
|
2430
2430
|
"// compile-time constant, so prod builds strip this whole `if` block — the",
|
|
@@ -2434,7 +2434,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
2434
2434
|
" await import('@voltro/devtools/styles.css')",
|
|
2435
2435
|
" Devtools = (await import('@voltro/devtools')).VoltroDevtools",
|
|
2436
2436
|
"}"
|
|
2437
|
-
], ol = (e) => e.disableDevtools ? [] : [" ...(Devtools ? { Devtools } : {}),"], sl = (e) => e.sentry ? ["import { initSentryBrowser } from '@voltro/plugin-sentry/web'"] : [], cl = (e) => e.sentry ? [
|
|
2437
|
+
], ol = (e, t) => e.disableDevtools || !t ? [] : [" ...(Devtools ? { Devtools } : {}),"], sl = (e) => e.sentry ? ["import { initSentryBrowser } from '@voltro/plugin-sentry/web'"] : [], cl = (e) => e.sentry ? [
|
|
2438
2438
|
"",
|
|
2439
2439
|
"// Browser-side Sentry (frontend half of the deep integration). Errors +",
|
|
2440
2440
|
"// browser rpc spans flow to Sentry, sharing the server transactions' trace.",
|
|
@@ -2737,7 +2737,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
2737
2737
|
if (l) return c;
|
|
2738
2738
|
};
|
|
2739
2739
|
}, Fl = async (e, t, n, r = {}) => {
|
|
2740
|
-
let i = t.title ?? t.name ?? "app", a = t.theme === "dark" ? " class=\"dark\"" : t.theme === "light" ? " class=\"light\"" : "", o = t.theme === "system" ? [
|
|
2740
|
+
let i = t.title ?? t.name ?? "app", a = t.theme === "dark" ? " class=\"dark\"" : t.theme === "light" ? " class=\"light\"" : "", o = M(s(e, "node_modules", "@voltro", "devtools", "package.json")) || await il() !== null, c = t.theme === "system" ? [
|
|
2741
2741
|
" <script>",
|
|
2742
2742
|
" (function () {",
|
|
2743
2743
|
" var root = document.documentElement",
|
|
@@ -2758,7 +2758,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
2758
2758
|
" }",
|
|
2759
2759
|
" })()",
|
|
2760
2760
|
" <\/script>"
|
|
2761
|
-
].join("\n") : "",
|
|
2761
|
+
].join("\n") : "", l = [
|
|
2762
2762
|
"<!doctype html>",
|
|
2763
2763
|
"<!-- GENERATED BY `voltro dev` — do not edit; will be overwritten on next boot. -->",
|
|
2764
2764
|
`<html lang="en"${a}>`,
|
|
@@ -2767,7 +2767,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
2767
2767
|
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />",
|
|
2768
2768
|
` <title>${i}</title>`,
|
|
2769
2769
|
" <link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\" />",
|
|
2770
|
-
...
|
|
2770
|
+
...c ? [c] : [],
|
|
2771
2771
|
" </head>",
|
|
2772
2772
|
" <body>",
|
|
2773
2773
|
" <div id=\"root\"></div>",
|
|
@@ -2775,64 +2775,64 @@ __installPublicEnv(publicEnvValues)
|
|
|
2775
2775
|
" </body>",
|
|
2776
2776
|
"</html>",
|
|
2777
2777
|
""
|
|
2778
|
-
].join("\n"), { pages:
|
|
2779
|
-
let t = [`group: ${
|
|
2780
|
-
return t.push(`descriptors: ${
|
|
2781
|
-
}),
|
|
2782
|
-
if (
|
|
2783
|
-
let e =
|
|
2784
|
-
for (let e of
|
|
2778
|
+
].join("\n"), { pages: u, dirs: d } = await bl(s(e, "src", "pages")), f = (e) => `${e.replace(/[^a-zA-Z0-9]/g, "_")}AppGroup`, p = (e) => `${e.replace(/[^a-zA-Z0-9]/g, "_")}AppDescriptors`, m = n.map((e) => `import { appGroup as ${f(e.name)}, appDescriptors as ${p(e.name)} } from '${e.pkg}/rpcGroup'`), h = n.map((e) => {
|
|
2779
|
+
let t = [`group: ${f(e.name)}`];
|
|
2780
|
+
return t.push(`descriptors: ${p(e.name)}`), t.push(`wsUrl: ${JSON.stringify(e.browserWsUrl)}`), e.headers && t.push(`headers: ${JSON.stringify(e.headers)}`), ` ${JSON.stringify(e.name)}: { ${t.join(", ")} },`;
|
|
2781
|
+
}), g, _;
|
|
2782
|
+
if (u.length > 0) {
|
|
2783
|
+
let e = u.map((e) => ` ${JSON.stringify(e.pattern)}: () => import('../src/pages/${e.file}'),`), n = [];
|
|
2784
|
+
for (let e of d) {
|
|
2785
2785
|
let t = e.dir === "" ? "../src/pages" : `../src/pages/${e.dir}`;
|
|
2786
2786
|
e.hasLayout && e.hasLayoutLoader ? n.push(`import * as ${yl(e.dir, "Layout")}Mod from '${t}/layout.tsx'`) : e.hasLayout && n.push(`import ${yl(e.dir, "Layout")} from '${t}/layout.tsx'`), e.hasError && n.push(`import ${yl(e.dir, "Error")} from '${t}/error.tsx'`), e.hasPending && n.push(`import ${yl(e.dir, "Pending")} from '${t}/loading.tsx'`), e.hasNotFound && n.push(`import ${yl(e.dir, "NotFound")} from '${t}/not-found.tsx'`);
|
|
2787
2787
|
}
|
|
2788
|
-
let r =
|
|
2789
|
-
let t = xl(
|
|
2788
|
+
let r = u.map((e) => {
|
|
2789
|
+
let t = xl(d, e.dirChain).map((e) => {
|
|
2790
2790
|
let t = [`id: ${JSON.stringify(e.dir || "/")}`], n = JSON.stringify(e.dir);
|
|
2791
2791
|
return e.hasLayout && t.push(`Layout: refs.layouts[${n}]`), e.hasLayoutLoader && t.push(`loader: refs.layoutLoaders[${n}]`), e.hasError && t.push(`Error: refs.errors[${n}]`), e.hasPending && t.push(`Pending: refs.pendings[${n}]`), ` { ${t.join(", ")} }`;
|
|
2792
2792
|
}).join(",\n");
|
|
2793
2793
|
return ` makePageRoute(${JSON.stringify(e.pattern)}, ${t.length > 0 ? `[\n${t},\n ]` : "undefined"}),`;
|
|
2794
|
-
}), i =
|
|
2795
|
-
let t = Sl(e.chain), n = xl(
|
|
2794
|
+
}), i = d.filter((e) => e.hasNotFound).map((e) => {
|
|
2795
|
+
let t = Sl(e.chain), n = xl(d, e.chain).map((e) => {
|
|
2796
2796
|
let t = [`id: ${JSON.stringify(e.dir || "/")}`], n = JSON.stringify(e.dir);
|
|
2797
2797
|
return e.hasLayout && t.push(`Layout: refs.layouts[${n}]`), e.hasError && t.push(`Error: refs.errors[${n}]`), ` { ${t.join(", ")} }`;
|
|
2798
2798
|
}).join(",\n"), r = n.length > 0 ? `\n chain: [\n${n},\n ],` : "";
|
|
2799
2799
|
return ` {\n prefix: ${JSON.stringify(t)},\n Component: refs.notFounds[${JSON.stringify(e.dir)}],${r}\n },`;
|
|
2800
|
-
}), a = [],
|
|
2801
|
-
for (let e of
|
|
2802
|
-
let t = e.dir === "" ? "../src/pages/layout.tsx" : `../src/pages/${e.dir}/layout.tsx`, n = e.dir === "" ? "../src/pages/error.tsx" : `../src/pages/${e.dir}/error.tsx`, r = e.dir === "" ? "../src/pages/loading.tsx" : `../src/pages/${e.dir}/loading.tsx`, i = e.dir === "" ? "../src/pages/not-found.tsx" : `../src/pages/${e.dir}/not-found.tsx`,
|
|
2803
|
-
e.hasLayout && e.hasLayoutLoader ? (
|
|
2800
|
+
}), a = [], s = [], c = [], l = [], f = [], p = [];
|
|
2801
|
+
for (let e of d) {
|
|
2802
|
+
let t = e.dir === "" ? "../src/pages/layout.tsx" : `../src/pages/${e.dir}/layout.tsx`, n = e.dir === "" ? "../src/pages/error.tsx" : `../src/pages/${e.dir}/error.tsx`, r = e.dir === "" ? "../src/pages/loading.tsx" : `../src/pages/${e.dir}/loading.tsx`, i = e.dir === "" ? "../src/pages/not-found.tsx" : `../src/pages/${e.dir}/not-found.tsx`, o = JSON.stringify(e.dir);
|
|
2803
|
+
e.hasLayout && e.hasLayoutLoader ? (s.push(` ${o}: ${yl(e.dir, "Layout")}Mod.default,`), c.push(` ${o}: ${yl(e.dir, "Layout")}Mod.loader,`), a.push({
|
|
2804
2804
|
relPath: t,
|
|
2805
2805
|
kind: "layout",
|
|
2806
2806
|
slotKey: e.dir
|
|
2807
|
-
})) : e.hasLayout && (
|
|
2807
|
+
})) : e.hasLayout && (s.push(` ${o}: ${yl(e.dir, "Layout")},`), a.push({
|
|
2808
2808
|
relPath: t,
|
|
2809
2809
|
kind: "layout",
|
|
2810
2810
|
slotKey: e.dir
|
|
2811
|
-
})), e.hasError && (
|
|
2811
|
+
})), e.hasError && (l.push(` ${o}: ${yl(e.dir, "Error")},`), a.push({
|
|
2812
2812
|
relPath: n,
|
|
2813
2813
|
kind: "error",
|
|
2814
2814
|
slotKey: e.dir
|
|
2815
|
-
})), e.hasPending && (
|
|
2815
|
+
})), e.hasPending && (f.push(` ${o}: ${yl(e.dir, "Pending")},`), a.push({
|
|
2816
2816
|
relPath: r,
|
|
2817
2817
|
kind: "pending",
|
|
2818
2818
|
slotKey: e.dir
|
|
2819
|
-
})), e.hasNotFound && (
|
|
2819
|
+
})), e.hasNotFound && (p.push(` ${o}: ${yl(e.dir, "NotFound")},`), a.push({
|
|
2820
2820
|
relPath: i,
|
|
2821
2821
|
kind: "notFound",
|
|
2822
2822
|
slotKey: e.dir
|
|
2823
2823
|
}));
|
|
2824
2824
|
}
|
|
2825
|
-
for (let e of
|
|
2825
|
+
for (let e of u) a.push({
|
|
2826
2826
|
relPath: `../src/pages/${e.file}`,
|
|
2827
2827
|
kind: "page",
|
|
2828
2828
|
slotKey: e.pattern
|
|
2829
2829
|
});
|
|
2830
|
-
let
|
|
2830
|
+
let v = a.map((e) => ` ${JSON.stringify(e.relPath)},`), y = a.map((e, t) => {
|
|
2831
2831
|
let n = JSON.stringify(e.slotKey);
|
|
2832
2832
|
return e.kind === "page" ? ` if (newMods[${t}] && refs.pages[${n}] !== undefined) { refs.pages[${n}] = newMods[${t}]; changed = true }` : ` if (newMods[${t}]?.default) { refs.${e.kind === "layout" ? "layouts" : e.kind === "error" ? "errors" : e.kind === "pending" ? "pendings" : "notFounds"}[${n}] = newMods[${t}].default;${e.kind === "layout" ? ` refs.layoutLoaders[${n}] = newMods[${t}].loader;` : ""} changed = true }`;
|
|
2833
|
-
}),
|
|
2834
|
-
if (
|
|
2835
|
-
|
|
2833
|
+
}), b = t.locales ?? [], x = b.length > 0, S = t.defaultLocale ?? b[0] ?? "en";
|
|
2834
|
+
if (x && !b.includes(S)) throw Error(`[voltro dev] app.config.ts: defaultLocale '${S}' must be one of locales [${b.join(", ")}]`);
|
|
2835
|
+
g = [
|
|
2836
2836
|
"// GENERATED BY `voltro dev` — do not edit; will be overwritten on next boot.",
|
|
2837
2837
|
"// Routes + per-page chain + not-found scopes assembled from src/pages/.",
|
|
2838
2838
|
"// Exported as a single React component so vite-plugin-react treats this file",
|
|
@@ -2850,11 +2850,11 @@ __installPublicEnv(publicEnvValues)
|
|
|
2850
2850
|
"",
|
|
2851
2851
|
"import { useMemo, useSyncExternalStore } from 'react'",
|
|
2852
2852
|
"import { Router, pageRoute, lazyPageRoute, preloadRouteModule, type PageDescriptor, type NotFoundDescriptor } from '@voltro/web'",
|
|
2853
|
-
...
|
|
2853
|
+
...x ? [
|
|
2854
2854
|
"import { I18nProvider } from '@voltro/i18n'",
|
|
2855
2855
|
"import { resolveLocale } from '@voltro/i18n/server'",
|
|
2856
2856
|
"import { useServerRequest } from '@voltro/web'",
|
|
2857
|
-
...
|
|
2857
|
+
...b.map((e) => `import i18nCatalog_${e} from '../src/locales/${e}'`)
|
|
2858
2858
|
] : [],
|
|
2859
2859
|
...n,
|
|
2860
2860
|
"",
|
|
@@ -2869,19 +2869,19 @@ __installPublicEnv(publicEnvValues)
|
|
|
2869
2869
|
" pages: Record<string, unknown>",
|
|
2870
2870
|
"} = {",
|
|
2871
2871
|
" layouts: {",
|
|
2872
|
-
...
|
|
2872
|
+
...s,
|
|
2873
2873
|
" },",
|
|
2874
2874
|
" layoutLoaders: {",
|
|
2875
|
-
...
|
|
2875
|
+
...c,
|
|
2876
2876
|
" },",
|
|
2877
2877
|
" errors: {",
|
|
2878
|
-
...
|
|
2878
|
+
...l,
|
|
2879
2879
|
" },",
|
|
2880
2880
|
" pendings: {",
|
|
2881
|
-
...
|
|
2881
|
+
...f,
|
|
2882
2882
|
" },",
|
|
2883
2883
|
" notFounds: {",
|
|
2884
|
-
...
|
|
2884
|
+
...p,
|
|
2885
2885
|
" },",
|
|
2886
2886
|
" pages: {},",
|
|
2887
2887
|
"}",
|
|
@@ -2939,13 +2939,13 @@ __installPublicEnv(publicEnvValues)
|
|
|
2939
2939
|
...i,
|
|
2940
2940
|
"]",
|
|
2941
2941
|
"",
|
|
2942
|
-
...
|
|
2943
|
-
`// i18n auto-wiring (config.locales = [${
|
|
2942
|
+
...x ? [
|
|
2943
|
+
`// i18n auto-wiring (config.locales = [${b.map((e) => JSON.stringify(e)).join(", ")}]).`,
|
|
2944
2944
|
"const I18N_CATALOGS: Record<string, import('@voltro/i18n').MessageCatalog> = {",
|
|
2945
|
-
...
|
|
2945
|
+
...b.map((e) => ` ${JSON.stringify(e)}: i18nCatalog_${e},`),
|
|
2946
2946
|
"}",
|
|
2947
|
-
`const I18N_SUPPORTED: ReadonlyArray<string> = [${
|
|
2948
|
-
`const I18N_DEFAULT = ${JSON.stringify(
|
|
2947
|
+
`const I18N_SUPPORTED: ReadonlyArray<string> = [${b.map((e) => JSON.stringify(e)).join(", ")}]`,
|
|
2948
|
+
`const I18N_DEFAULT = ${JSON.stringify(S)}`,
|
|
2949
2949
|
"",
|
|
2950
2950
|
"const pickI18nLocale = (ssr: ReturnType<typeof useServerRequest>): string => {",
|
|
2951
2951
|
" if (ssr) {",
|
|
@@ -2979,7 +2979,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
2979
2979
|
" const v = useSyncExternalStore(subscribe, getVersion, getVersion)",
|
|
2980
2980
|
" const routes = useMemo(() => buildRoutes(), [v])",
|
|
2981
2981
|
" const notFounds = useMemo(() => buildNotFounds(), [v])",
|
|
2982
|
-
...
|
|
2982
|
+
...x ? [
|
|
2983
2983
|
" const ssr = useServerRequest()",
|
|
2984
2984
|
" const locale = pickI18nLocale(ssr)",
|
|
2985
2985
|
" const messages = I18N_CATALOGS[locale] ?? I18N_CATALOGS[I18N_DEFAULT]!",
|
|
@@ -2994,17 +2994,17 @@ __installPublicEnv(publicEnvValues)
|
|
|
2994
2994
|
"if (import.meta.hot) {",
|
|
2995
2995
|
" import.meta.hot.accept(",
|
|
2996
2996
|
" [",
|
|
2997
|
-
...
|
|
2997
|
+
...v,
|
|
2998
2998
|
" ],",
|
|
2999
2999
|
" (newMods: Array<Record<string, unknown> | undefined>) => {",
|
|
3000
3000
|
" let changed = false",
|
|
3001
|
-
...
|
|
3001
|
+
...y,
|
|
3002
3002
|
" if (changed) bump()",
|
|
3003
3003
|
" },",
|
|
3004
3004
|
" )",
|
|
3005
3005
|
"}",
|
|
3006
3006
|
""
|
|
3007
|
-
].join("\n"),
|
|
3007
|
+
].join("\n"), _ = [
|
|
3008
3008
|
"// GENERATED BY `voltro dev` — do not edit; will be overwritten on next boot.",
|
|
3009
3009
|
"// Entry: imports the generated App component and calls mount() with the",
|
|
3010
3010
|
"// resolved apis map. Side-effect only — no local component definitions —",
|
|
@@ -3012,10 +3012,10 @@ __installPublicEnv(publicEnvValues)
|
|
|
3012
3012
|
"",
|
|
3013
3013
|
...ll(t),
|
|
3014
3014
|
"import { mount } from '@voltro/web'",
|
|
3015
|
-
...
|
|
3015
|
+
...m,
|
|
3016
3016
|
"import { App, preloadCurrentRoute } from './app'",
|
|
3017
3017
|
...sl(t),
|
|
3018
|
-
...al(t),
|
|
3018
|
+
...al(t, o),
|
|
3019
3019
|
...cl(t),
|
|
3020
3020
|
"",
|
|
3021
3021
|
"// Preload the current route's page chunk BEFORE hydration so the first",
|
|
@@ -3031,14 +3031,14 @@ __installPublicEnv(publicEnvValues)
|
|
|
3031
3031
|
"",
|
|
3032
3032
|
"mount(App, {",
|
|
3033
3033
|
" apis: {",
|
|
3034
|
-
...
|
|
3034
|
+
...h,
|
|
3035
3035
|
" },",
|
|
3036
|
-
...ol(t),
|
|
3036
|
+
...ol(t, o),
|
|
3037
3037
|
"})",
|
|
3038
3038
|
"",
|
|
3039
3039
|
Cl
|
|
3040
3040
|
].join("\n");
|
|
3041
|
-
} else
|
|
3041
|
+
} else g = "", _ = [
|
|
3042
3042
|
"// GENERATED BY `voltro dev` — do not edit; will be overwritten on next boot.",
|
|
3043
3043
|
"// The user's root component lives at ../src/App.tsx; this file imports it",
|
|
3044
3044
|
"// and calls mount(). Side-effect only, no component definitions, so the",
|
|
@@ -3046,30 +3046,30 @@ __installPublicEnv(publicEnvValues)
|
|
|
3046
3046
|
"",
|
|
3047
3047
|
...ll(t),
|
|
3048
3048
|
"import { mount } from '@voltro/web'",
|
|
3049
|
-
...
|
|
3049
|
+
...m,
|
|
3050
3050
|
"import App from '../src/App'",
|
|
3051
3051
|
...sl(t),
|
|
3052
|
-
...al(t),
|
|
3052
|
+
...al(t, o),
|
|
3053
3053
|
...cl(t),
|
|
3054
3054
|
"",
|
|
3055
3055
|
"mount(App, {",
|
|
3056
3056
|
" apis: {",
|
|
3057
|
-
...
|
|
3057
|
+
...h,
|
|
3058
3058
|
" },",
|
|
3059
|
-
...ol(t),
|
|
3059
|
+
...ol(t, o),
|
|
3060
3060
|
"})",
|
|
3061
3061
|
"",
|
|
3062
3062
|
Cl
|
|
3063
3063
|
].join("\n");
|
|
3064
|
-
let
|
|
3065
|
-
await P.mkdir(
|
|
3066
|
-
let
|
|
3064
|
+
let v = s(e, ".framework");
|
|
3065
|
+
await P.mkdir(v, { recursive: !0 }), t.env ? await Ro(v, r) : await P.rm(s(v, "env.public.ts"), { force: !0 }), await P.writeFile(s(v, "index.html"), l, "utf8"), await P.writeFile(s(v, "main.tsx"), _, "utf8"), g ? await P.writeFile(s(v, "app.tsx"), g, "utf8") : await P.rm(s(v, "app.tsx"), { force: !0 });
|
|
3066
|
+
let y = s(e, ".gitignore"), b = "";
|
|
3067
3067
|
try {
|
|
3068
|
-
|
|
3068
|
+
b = await P.readFile(y, "utf8");
|
|
3069
3069
|
} catch {}
|
|
3070
|
-
let
|
|
3071
|
-
for (let e of
|
|
3072
|
-
await P.writeFile(
|
|
3070
|
+
let x = ["/.framework/"], S = b.split("\n").filter((e) => e.trim() !== "");
|
|
3071
|
+
for (let e of x) S.includes(e) || S.push(e);
|
|
3072
|
+
await P.writeFile(y, S.join("\n") + "\n", "utf8");
|
|
3073
3073
|
}, Il = async (e, t) => {
|
|
3074
3074
|
try {
|
|
3075
3075
|
let n = s(i(e), "project.json");
|
|
@@ -3145,7 +3145,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
3145
3145
|
pages: m
|
|
3146
3146
|
});
|
|
3147
3147
|
_.wrote && K.debug("routes codegen wrote", { path: c(e, _.path) });
|
|
3148
|
-
let v = await import("vite"), y = (await import("@vitejs/plugin-react")).default, b = (await import("@tailwindcss/vite")).default, x = s(e, ".framework"),
|
|
3148
|
+
let v = await import("vite"), y = (await import("@vitejs/plugin-react")).default, b = (await import("@tailwindcss/vite")).default, x = s(e, ".framework"), S = s(e, "src"), C = /* @__PURE__ */ new Set([
|
|
3149
3149
|
".framework",
|
|
3150
3150
|
"node_modules",
|
|
3151
3151
|
"dist",
|
|
@@ -3153,15 +3153,15 @@ __installPublicEnv(publicEnvValues)
|
|
|
3153
3153
|
".vite",
|
|
3154
3154
|
".turbo",
|
|
3155
3155
|
".cache"
|
|
3156
|
-
]),
|
|
3156
|
+
]), w = {
|
|
3157
3157
|
name: "framework:watch-app-sources",
|
|
3158
3158
|
async configureServer(t) {
|
|
3159
3159
|
try {
|
|
3160
|
-
let n = (await P.readdir(e, { withFileTypes: !0 })).filter((e) => e.isDirectory() && !
|
|
3160
|
+
let n = (await P.readdir(e, { withFileTypes: !0 })).filter((e) => e.isDirectory() && !C.has(e.name));
|
|
3161
3161
|
for (let r of n) t.watcher.add(s(e, r.name));
|
|
3162
|
-
n.length === 0 && t.watcher.add(
|
|
3162
|
+
n.length === 0 && t.watcher.add(S);
|
|
3163
3163
|
} catch {
|
|
3164
|
-
t.watcher.add(
|
|
3164
|
+
t.watcher.add(S);
|
|
3165
3165
|
}
|
|
3166
3166
|
try {
|
|
3167
3167
|
let n = await P.readFile(s(e, "package.json"), "utf8"), r = JSON.parse(n), i = Object.keys({
|
|
@@ -3178,11 +3178,11 @@ __installPublicEnv(publicEnvValues)
|
|
|
3178
3178
|
}));
|
|
3179
3179
|
} catch {}
|
|
3180
3180
|
}
|
|
3181
|
-
},
|
|
3181
|
+
}, T = s(e, "src", "pages"), E = (e) => e.endsWith(".tsx") && (e === T || e.startsWith(T + "/")), D = (e) => e === T || e.startsWith(T + "/"), ee = async (n) => {
|
|
3182
3182
|
try {
|
|
3183
3183
|
let r = Date.now();
|
|
3184
3184
|
await Fl(e, t, i, o);
|
|
3185
|
-
let { pages: a } = await bl(
|
|
3185
|
+
let { pages: a } = await bl(T);
|
|
3186
3186
|
await is({
|
|
3187
3187
|
appRoot: e,
|
|
3188
3188
|
pages: a
|
|
@@ -3200,17 +3200,17 @@ __installPublicEnv(publicEnvValues)
|
|
|
3200
3200
|
r.push(e), n && clearTimeout(n), n = setTimeout(() => {
|
|
3201
3201
|
n = null;
|
|
3202
3202
|
let e = r.length === 1 ? r[0] : `${r.length} events (${r[0]}, …)`;
|
|
3203
|
-
r.length = 0,
|
|
3203
|
+
r.length = 0, ee(e);
|
|
3204
3204
|
}, 50);
|
|
3205
3205
|
};
|
|
3206
3206
|
t.watcher.on("add", (t) => {
|
|
3207
|
-
|
|
3207
|
+
E(t) && i(`add ${c(e, t)}`);
|
|
3208
3208
|
}), t.watcher.on("unlink", (t) => {
|
|
3209
|
-
|
|
3209
|
+
E(t) && i(`unlink ${c(e, t)}`);
|
|
3210
3210
|
}), t.watcher.on("addDir", (t) => {
|
|
3211
|
-
|
|
3211
|
+
D(t) && i(`addDir ${c(e, t)}`);
|
|
3212
3212
|
}), t.watcher.on("unlinkDir", (t) => {
|
|
3213
|
-
|
|
3213
|
+
D(t) && i(`unlinkDir ${c(e, t)}`);
|
|
3214
3214
|
});
|
|
3215
3215
|
}
|
|
3216
3216
|
}, k = s(e, "app.config.ts"), A = (e) => {
|
|
@@ -3667,12 +3667,12 @@ __installPublicEnv(publicEnvValues)
|
|
|
3667
3667
|
};
|
|
3668
3668
|
}))), b = {};
|
|
3669
3669
|
for (let [e, t] of Object.entries(n.headers ?? {})) typeof t == "string" ? b[e] = t : Array.isArray(t) && (b[e] = t.join(", "));
|
|
3670
|
-
let x = Pl(Nl(i[0]), b.cookie),
|
|
3671
|
-
if (typeof
|
|
3670
|
+
let x = Pl(Nl(i[0]), b.cookie), S = null, C = c.loader;
|
|
3671
|
+
if (typeof C == "function") {
|
|
3672
3672
|
let e = new AbortController(), t = () => e.abort();
|
|
3673
3673
|
r.once("close", t);
|
|
3674
3674
|
try {
|
|
3675
|
-
|
|
3675
|
+
S = await m("loader", () => C({
|
|
3676
3676
|
params: u.params,
|
|
3677
3677
|
pathname: l,
|
|
3678
3678
|
signal: e.signal,
|
|
@@ -3683,7 +3683,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
3683
3683
|
r.off("close", t);
|
|
3684
3684
|
}
|
|
3685
3685
|
}
|
|
3686
|
-
let
|
|
3686
|
+
let w = await m("loadSsrHelpers", async () => await t.ssrLoadModule("@voltro/web/ssr")), T = {
|
|
3687
3687
|
pattern: u.route.pattern,
|
|
3688
3688
|
Component: c.default,
|
|
3689
3689
|
meta: c.meta,
|
|
@@ -3692,18 +3692,18 @@ __installPublicEnv(publicEnvValues)
|
|
|
3692
3692
|
Pending: c.Pending,
|
|
3693
3693
|
renderMode: _,
|
|
3694
3694
|
chain: y
|
|
3695
|
-
},
|
|
3696
|
-
cookies:
|
|
3695
|
+
}, E = {
|
|
3696
|
+
cookies: w.parseCookieHeader(b.cookie),
|
|
3697
3697
|
headers: b,
|
|
3698
3698
|
url: o
|
|
3699
|
-
},
|
|
3700
|
-
descriptor:
|
|
3699
|
+
}, D = Date.now(), { html: ee, meta: O } = w.renderPageToHtml({
|
|
3700
|
+
descriptor: T,
|
|
3701
3701
|
params: u.params,
|
|
3702
3702
|
pathname: l,
|
|
3703
|
-
loaderData:
|
|
3704
|
-
requestContext:
|
|
3703
|
+
loaderData: S,
|
|
3704
|
+
requestContext: E
|
|
3705
3705
|
});
|
|
3706
|
-
p.render = Date.now() -
|
|
3706
|
+
p.render = Date.now() - D;
|
|
3707
3707
|
let k = c.interactive ?? "full", A = [];
|
|
3708
3708
|
await m("collectCss", async () => {
|
|
3709
3709
|
let t = /* @__PURE__ */ new Set(), n = [
|
|
@@ -3719,10 +3719,10 @@ __installPublicEnv(publicEnvValues)
|
|
|
3719
3719
|
});
|
|
3720
3720
|
let j = await m("readShell", de), te = await m("transformShell", () => t.transformIndexHtml(o, j)), ne = [
|
|
3721
3721
|
A.map((e) => `<link rel="stylesheet" href="${e}?direct" />`).join("\n "),
|
|
3722
|
-
|
|
3722
|
+
w.renderMetaToHtml(O),
|
|
3723
3723
|
`<meta name="voltro-interactive" content="${k}" />`,
|
|
3724
|
-
`<script type="application/json" id="__voltro_state__">${
|
|
3725
|
-
].filter((e) => e.length > 0).join("\n "), re =
|
|
3724
|
+
`<script type="application/json" id="__voltro_state__">${w.serialiseStateForInlining(S)}<\/script>`
|
|
3725
|
+
].filter((e) => e.length > 0).join("\n "), re = E.cookies["voltro:locale"], M = te.replace("<div id=\"root\"></div>", `<div id="root">${ee}</div>`).replace("</head>", ` ${ne}\n </head>`).replace(/<html(\s+lang="[^"]*")?/i, re ? `<html lang="${re}"` : "<html lang=\"en\"");
|
|
3726
3726
|
r.statusCode = 200, r.setHeader("content-type", "text/html; charset=utf-8"), r.setHeader("x-voltro-rendered-by", "ssr-dev"), r.end(M);
|
|
3727
3727
|
let N = Date.now() - f;
|
|
3728
3728
|
d ? (I.add(u.route.pattern), K.info(`ssr compiled ${u.route.pattern} in ${N}ms`, {
|
|
@@ -3809,7 +3809,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
3809
3809
|
plugins: [
|
|
3810
3810
|
y(),
|
|
3811
3811
|
b(),
|
|
3812
|
-
|
|
3812
|
+
w,
|
|
3813
3813
|
O,
|
|
3814
3814
|
N,
|
|
3815
3815
|
F,
|
|
@@ -4421,31 +4421,31 @@ __installPublicEnv(publicEnvValues)
|
|
|
4421
4421
|
attempts: n,
|
|
4422
4422
|
diagnostics: a
|
|
4423
4423
|
};
|
|
4424
|
-
}, ou =
|
|
4425
|
-
tag:
|
|
4426
|
-
kind:
|
|
4427
|
-
file:
|
|
4428
|
-
source:
|
|
4429
|
-
targets:
|
|
4430
|
-
table:
|
|
4431
|
-
op:
|
|
4424
|
+
}, ou = D.Struct({
|
|
4425
|
+
tag: D.String,
|
|
4426
|
+
kind: D.String,
|
|
4427
|
+
file: D.optional(D.String),
|
|
4428
|
+
source: D.optional(D.Union(D.String, D.Array(D.String))),
|
|
4429
|
+
targets: D.optional(D.Array(D.Struct({
|
|
4430
|
+
table: D.String,
|
|
4431
|
+
op: D.String
|
|
4432
4432
|
}))),
|
|
4433
|
-
binds:
|
|
4434
|
-
requiresScopes:
|
|
4435
|
-
}), su =
|
|
4436
|
-
tables:
|
|
4437
|
-
procedures:
|
|
4438
|
-
scopes:
|
|
4439
|
-
routes:
|
|
4440
|
-
pattern:
|
|
4441
|
-
binds:
|
|
4442
|
-
file:
|
|
4433
|
+
binds: D.optional(D.Array(D.String)),
|
|
4434
|
+
requiresScopes: D.optional(D.Array(D.String))
|
|
4435
|
+
}), su = D.Struct({
|
|
4436
|
+
tables: D.Array(D.String),
|
|
4437
|
+
procedures: D.Array(ou),
|
|
4438
|
+
scopes: D.optional(D.Array(D.String)),
|
|
4439
|
+
routes: D.optional(D.Array(D.Struct({
|
|
4440
|
+
pattern: D.String,
|
|
4441
|
+
binds: D.Array(D.String),
|
|
4442
|
+
file: D.optional(D.String)
|
|
4443
4443
|
})))
|
|
4444
|
-
}), cu =
|
|
4444
|
+
}), cu = D.Struct({
|
|
4445
4445
|
graph: su,
|
|
4446
|
-
artifacts:
|
|
4447
|
-
path:
|
|
4448
|
-
content:
|
|
4446
|
+
artifacts: D.Array(D.Struct({
|
|
4447
|
+
path: D.String,
|
|
4448
|
+
content: D.String
|
|
4449
4449
|
}))
|
|
4450
4450
|
}), lu = (e, t) => {
|
|
4451
4451
|
let n = [
|
|
@@ -4843,7 +4843,7 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
4843
4843
|
cookies: _.parseCookieHeader(s.cookie),
|
|
4844
4844
|
headers: s,
|
|
4845
4845
|
url: c
|
|
4846
|
-
}, b = _.i18n?.resolve(s.cookie, s["accept-language"]), { html: x, meta:
|
|
4846
|
+
}, b = _.i18n?.resolve(s.cookie, s["accept-language"]), { html: x, meta: S } = _.renderPageToHtml({
|
|
4847
4847
|
descriptor: v,
|
|
4848
4848
|
params: r,
|
|
4849
4849
|
pathname: i,
|
|
@@ -4854,17 +4854,17 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
4854
4854
|
outerWrap: b.outerWrap,
|
|
4855
4855
|
locale: b.locale
|
|
4856
4856
|
} : {}
|
|
4857
|
-
}),
|
|
4858
|
-
_.renderMetaToHtml(
|
|
4859
|
-
`<meta name="voltro-interactive" content="${
|
|
4857
|
+
}), C = d.interactive ?? "full", w = [
|
|
4858
|
+
_.renderMetaToHtml(S),
|
|
4859
|
+
`<meta name="voltro-interactive" content="${C}" />`,
|
|
4860
4860
|
`<script type="application/json" id="__voltro_state__">${_.serialiseStateForInlining(h)}<\/script>`
|
|
4861
|
-
].filter((e) => e.length > 0).join("\n "),
|
|
4862
|
-
|
|
4863
|
-
let
|
|
4861
|
+
].filter((e) => e.length > 0).join("\n "), T = b?.locale ?? y.cookies["voltro:lang"] ?? "en", E = o.replace("<div id=\"root\"></div>", `<div id="root">${x}</div>`).replace("</head>", ` ${w}\n </head>`).replace(/<html(\s+lang="[^"]*")?/i, `<html lang="${T}"`);
|
|
4862
|
+
C === "none" && (E = Pu(E));
|
|
4863
|
+
let D = f === "isr" ? _c(d.revalidate) : null;
|
|
4864
4864
|
return {
|
|
4865
|
-
html:
|
|
4865
|
+
html: E,
|
|
4866
4866
|
renderMode: f,
|
|
4867
|
-
revalidateMs:
|
|
4867
|
+
revalidateMs: D
|
|
4868
4868
|
};
|
|
4869
4869
|
}, Bu = (e) => e === "" ? "/" : e, Vu = async (e) => {
|
|
4870
4870
|
let t = await import(d(e).href);
|
|
@@ -4978,15 +4978,15 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
4978
4978
|
password: process.env.PG_PASSWORD ?? "app",
|
|
4979
4979
|
database: process.env.PG_DATABASE ?? "app"
|
|
4980
4980
|
}), await y.connect(), v = xu({ client: y }), Du.info("isr cache backend: postgres", { table: "voltro_isr_cache" })) : (v = gc(), Du.info("isr cache backend: memory (per-process)", { hint: "set SSR_CACHE=postgres for persistent storage" })), await Fl(e, t, g, r);
|
|
4981
|
-
let { pages: b, dirs: x } = await bl(s(e, "src", "pages")),
|
|
4982
|
-
Du.info(`ssr loader: ${
|
|
4983
|
-
kind:
|
|
4984
|
-
...
|
|
4981
|
+
let { pages: b, dirs: x } = await bl(s(e, "src", "pages")), S = Lu(b), C = s(l, "server", "ssrEntry.js"), w = await Fu(C) ? await Vu(C) : await Hu(e, c);
|
|
4982
|
+
Du.info(`ssr loader: ${w.kind}`, {
|
|
4983
|
+
kind: w.kind,
|
|
4984
|
+
...w.kind === "middleware" ? { hint: "no pre-built SSR bundle found; run `voltro build` to enable bundle mode" } : {}
|
|
4985
4985
|
});
|
|
4986
|
-
let
|
|
4986
|
+
let T = /* @__PURE__ */ new Map();
|
|
4987
4987
|
for (let e of b) try {
|
|
4988
|
-
let t = await
|
|
4989
|
-
|
|
4988
|
+
let t = await w.getPage(e.pattern, e.file);
|
|
4989
|
+
T.set(e.pattern, {
|
|
4990
4990
|
renderMode: ku(t),
|
|
4991
4991
|
tenantAware: t.tenantAware === !0,
|
|
4992
4992
|
revalidateMs: _c(t.revalidate),
|
|
@@ -5000,19 +5000,19 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5000
5000
|
} catch (t) {
|
|
5001
5001
|
Du.warn("failed to load page metadata", { pattern: e.pattern }, t);
|
|
5002
5002
|
}
|
|
5003
|
-
Du.info(`registered ${
|
|
5004
|
-
let T = /* @__PURE__ */ new Map();
|
|
5005
|
-
for (let [e, t] of w) t.cacheInvalidatesOn.length > 0 && T.set(e, t.cacheInvalidatesOn);
|
|
5003
|
+
Du.info(`registered ${T.size} route(s)`, { count: T.size });
|
|
5006
5004
|
let E = /* @__PURE__ */ new Map();
|
|
5007
|
-
for (let e of
|
|
5008
|
-
let D =
|
|
5005
|
+
for (let [e, t] of T) t.cacheInvalidatesOn.length > 0 && E.set(e, t.cacheInvalidatesOn);
|
|
5006
|
+
let D = /* @__PURE__ */ new Map();
|
|
5007
|
+
for (let e of S) D.set(e.pattern, e.regex);
|
|
5008
|
+
let ee = _u({
|
|
5009
5009
|
cache: v,
|
|
5010
|
-
tableSubscriptionsByPattern:
|
|
5011
|
-
regexByPattern:
|
|
5010
|
+
tableSubscriptionsByPattern: E,
|
|
5011
|
+
regexByPattern: D
|
|
5012
5012
|
});
|
|
5013
|
-
await
|
|
5013
|
+
await ee.start();
|
|
5014
5014
|
let O = Eu(), k = b.map((e) => {
|
|
5015
|
-
let t =
|
|
5015
|
+
let t = T.get(e.pattern);
|
|
5016
5016
|
return {
|
|
5017
5017
|
pattern: e.pattern,
|
|
5018
5018
|
file: e.file,
|
|
@@ -5132,7 +5132,7 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5132
5132
|
body: e.body
|
|
5133
5133
|
};
|
|
5134
5134
|
}
|
|
5135
|
-
let o = Ru(i,
|
|
5135
|
+
let o = Ru(i, S), c = o ? T.get(o.route.pattern)?.renderMode : void 0, u = c === "ssr" || c === "isr", d = i === "/" ? s(l, "index.html") : s(l, i.replace(/^\//, ""), "index.html");
|
|
5136
5136
|
if (!u && await Fu(d)) return {
|
|
5137
5137
|
status: 200,
|
|
5138
5138
|
headers: { "content-type": "text/html; charset=utf-8" },
|
|
@@ -5149,20 +5149,20 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5149
5149
|
};
|
|
5150
5150
|
}
|
|
5151
5151
|
}
|
|
5152
|
-
let f = Ru(i,
|
|
5152
|
+
let f = Ru(i, S);
|
|
5153
5153
|
if (!f) return {
|
|
5154
5154
|
status: 404,
|
|
5155
5155
|
headers: { "content-type": "text/plain" },
|
|
5156
5156
|
body: "not found"
|
|
5157
5157
|
};
|
|
5158
|
-
let p =
|
|
5158
|
+
let p = T.get(f.route.pattern), m = r["x-tenant"] ?? "anonymous", g = (await w.getHelpers()).i18n?.resolve(r.cookie, r["accept-language"])?.locale, y = vc(i, {
|
|
5159
5159
|
...p?.tenantAware ? { tenant: m } : {},
|
|
5160
5160
|
...g ? { locale: g } : {}
|
|
5161
|
-
}), b = v.get(y),
|
|
5162
|
-
if (b && yc(b,
|
|
5161
|
+
}), b = v.get(y), C = Date.now();
|
|
5162
|
+
if (b && yc(b, C)) return a.emit("cache", {
|
|
5163
5163
|
kind: "HIT",
|
|
5164
5164
|
key: y,
|
|
5165
|
-
ageMs:
|
|
5165
|
+
ageMs: C - b.renderedAt
|
|
5166
5166
|
}), {
|
|
5167
5167
|
status: 200,
|
|
5168
5168
|
headers: {
|
|
@@ -5170,18 +5170,18 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5170
5170
|
"x-voltro-rendered-by": "isr",
|
|
5171
5171
|
"x-voltro-cache": "HIT",
|
|
5172
5172
|
"x-voltro-cache-key": y,
|
|
5173
|
-
"x-voltro-cache-age-ms": String(
|
|
5173
|
+
"x-voltro-cache-age-ms": String(C - b.renderedAt)
|
|
5174
5174
|
},
|
|
5175
5175
|
body: b.html
|
|
5176
5176
|
};
|
|
5177
|
-
if (b && bc(b,
|
|
5177
|
+
if (b && bc(b, C)) return a.emit("cache", {
|
|
5178
5178
|
kind: "STALE",
|
|
5179
5179
|
key: y,
|
|
5180
|
-
ageMs:
|
|
5180
|
+
ageMs: C - b.renderedAt
|
|
5181
5181
|
}), (async () => {
|
|
5182
5182
|
try {
|
|
5183
5183
|
let t = await zu({
|
|
5184
|
-
provider:
|
|
5184
|
+
provider: w,
|
|
5185
5185
|
root: e,
|
|
5186
5186
|
route: f.route,
|
|
5187
5187
|
params: f.params,
|
|
@@ -5193,7 +5193,7 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5193
5193
|
requestUrl: n
|
|
5194
5194
|
});
|
|
5195
5195
|
if (t && !("control" in t) && t.renderMode === "isr" && t.revalidateMs !== null) {
|
|
5196
|
-
let e =
|
|
5196
|
+
let e = T.get(f.route.pattern)?.staleWhileRevalidateMs ?? 0, n = Date.now();
|
|
5197
5197
|
v.set(y, {
|
|
5198
5198
|
html: t.html,
|
|
5199
5199
|
renderedAt: n,
|
|
@@ -5213,13 +5213,13 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5213
5213
|
"x-voltro-rendered-by": "isr",
|
|
5214
5214
|
"x-voltro-cache": "STALE",
|
|
5215
5215
|
"x-voltro-cache-key": y,
|
|
5216
|
-
"x-voltro-cache-age-ms": String(
|
|
5216
|
+
"x-voltro-cache-age-ms": String(C - b.renderedAt)
|
|
5217
5217
|
},
|
|
5218
5218
|
body: b.html
|
|
5219
5219
|
};
|
|
5220
5220
|
try {
|
|
5221
5221
|
let t = await zu({
|
|
5222
|
-
provider:
|
|
5222
|
+
provider: w,
|
|
5223
5223
|
root: e,
|
|
5224
5224
|
route: f.route,
|
|
5225
5225
|
params: f.params,
|
|
@@ -5258,7 +5258,7 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5258
5258
|
"x-voltro-rendered-by": t.renderMode
|
|
5259
5259
|
};
|
|
5260
5260
|
if (t.renderMode === "isr" && t.revalidateMs !== null) {
|
|
5261
|
-
let e = Date.now(), n =
|
|
5261
|
+
let e = Date.now(), n = T.get(f.route.pattern)?.staleWhileRevalidateMs ?? 0;
|
|
5262
5262
|
v.set(y, {
|
|
5263
5263
|
html: t.html,
|
|
5264
5264
|
renderedAt: e,
|
|
@@ -5434,7 +5434,7 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5434
5434
|
renderedBy: e.headers["x-voltro-rendered-by"],
|
|
5435
5435
|
cache: e.headers["x-voltro-cache"]
|
|
5436
5436
|
});
|
|
5437
|
-
let n = Ru(s,
|
|
5437
|
+
let n = Ru(s, S)?.route.pattern ?? (e.status === 404 ? "<unmatched>" : "<asset>");
|
|
5438
5438
|
O.record({
|
|
5439
5439
|
kind: "request",
|
|
5440
5440
|
tag: n,
|
|
@@ -5487,10 +5487,10 @@ CREATE INDEX IF NOT EXISTS ${e}_servable_until_idx ON ${e} (servable_until);
|
|
|
5487
5487
|
});
|
|
5488
5488
|
let ie = !1, F = (e) => async () => {
|
|
5489
5489
|
if (!ie) {
|
|
5490
|
-
if (ie = !0, Du.info(`received ${e}, shutting down`, { signal: e }), N.close(), await
|
|
5490
|
+
if (ie = !0, Du.info(`received ${e}, shutting down`, { signal: e }), N.close(), await ee.stop(), y) try {
|
|
5491
5491
|
await y.end();
|
|
5492
5492
|
} catch {}
|
|
5493
|
-
await
|
|
5493
|
+
await w.close(), await Mc(f), await p.dispose(), process.exit(0);
|
|
5494
5494
|
}
|
|
5495
5495
|
};
|
|
5496
5496
|
process.on("SIGINT", F("SIGINT")), process.on("SIGTERM", F("SIGTERM"));
|
|
@@ -5738,11 +5738,11 @@ ${a.join("\n\n")}\n`);
|
|
|
5738
5738
|
...u,
|
|
5739
5739
|
...f
|
|
5740
5740
|
], e);
|
|
5741
|
-
let p = (e) => e.replace(/[^a-zA-Z0-9_$]/g, "_"), m = (e) => `__src_agent_${p(e.name)}`, h = (e) => `__agentRoutes_${p(e.name)}`, g = r.length > 0, _ = r.map((e, t) => `import { ${e.name} as __pe${t} } from '${e.module}'`), v = g ? ", __voltroPluginErrors" : "", y = d.length > 0, b = d.map((e, t) => `import { ${e.name} as __prpc${t} } from '${e.module}'`), x = (e) => e === "query" ? "queryToRpc" : e === "mutation" ? "mutationToRpc" : "actionToRpc",
|
|
5742
|
-
let t = `./${c(
|
|
5743
|
-
return `import { ${e.exportName} as ${
|
|
5741
|
+
let p = (e) => e.replace(/[^a-zA-Z0-9_$]/g, "_"), m = (e) => `__src_agent_${p(e.name)}`, h = (e) => `__agentRoutes_${p(e.name)}`, g = r.length > 0, _ = r.map((e, t) => `import { ${e.name} as __pe${t} } from '${e.module}'`), v = g ? ", __voltroPluginErrors" : "", y = d.length > 0, b = d.map((e, t) => `import { ${e.name} as __prpc${t} } from '${e.module}'`), x = (e) => e === "query" ? "queryToRpc" : e === "mutation" ? "mutationToRpc" : "actionToRpc", S = d.map((e, t) => `export const ${md(e.tag)} = ${x(e.kind)}(__prpc${t}${v})`), C = d.map((e) => ` ${md(e.tag)},`), w = d.map((e, t) => ` ${JSON.stringify(e.tag)}: normalizeDescriptor(__prpc${t}),`), T = [...n].sort((e, t) => e.kind === t.kind ? e.rpcTag < t.rpcTag ? -1 : 1 : _d(e.kind) - _d(t.kind)), E = i(t), D = (e) => `__src_${md(e.rpcTag)}`, ee = (e) => {
|
|
5742
|
+
let t = `./${c(E, e.file).replace(/\\/g, "/").replace(/\.tsx?$/, "")}`;
|
|
5743
|
+
return `import { ${e.exportName} as ${D(e)} } from '${t}'`;
|
|
5744
5744
|
}, O = (e) => {
|
|
5745
|
-
let t = md(e.rpcTag), n =
|
|
5745
|
+
let t = md(e.rpcTag), n = D(e);
|
|
5746
5746
|
return e.kind === "query" ? `export const ${t} = queryToRpc(${n}${v})` : e.kind === "mutation" ? `export const ${t} = mutationToRpc(${n}${v})` : e.kind === "action" ? `export const ${t} = actionToRpc(${n}${v})` : e.kind === "stream" ? `export const ${t} = streamToRpc(${n}${v})` : [
|
|
5747
5747
|
`export const ${t} = Rpc.make('${e.rpcTag}', {`,
|
|
5748
5748
|
` payload: ${n}.payloadSchema,`,
|
|
@@ -5750,7 +5750,7 @@ ${a.join("\n\n")}\n`);
|
|
|
5750
5750
|
` error: ${n}.errorSchema,`,
|
|
5751
5751
|
"})"
|
|
5752
5752
|
].join("\n");
|
|
5753
|
-
}, k =
|
|
5753
|
+
}, k = T.some((e) => e.kind === "workflow"), A = k ? [
|
|
5754
5754
|
"__voltroWorkflowRun",
|
|
5755
5755
|
"__voltroWorkflowRuns",
|
|
5756
5756
|
"__voltroWorkflowRunSteps",
|
|
@@ -5766,14 +5766,14 @@ ${a.join("\n\n")}\n`);
|
|
|
5766
5766
|
"__voltroUndoApply",
|
|
5767
5767
|
"__voltroUndoRedo"
|
|
5768
5768
|
] : [], te = [
|
|
5769
|
-
...
|
|
5769
|
+
...T.map((e) => ` ${md(e.rpcTag)},`),
|
|
5770
5770
|
...a.flatMap((e) => [` ${md(`${e.name}.send`)},`, ` ${md(`${e.name}.messages`)},`]),
|
|
5771
5771
|
...A.map((e) => ` ${e},`),
|
|
5772
5772
|
...j.map((e) => ` ${e},`),
|
|
5773
|
-
...
|
|
5773
|
+
...C
|
|
5774
5774
|
].join("\n"), ne = ["queryToRpc"];
|
|
5775
|
-
(
|
|
5776
|
-
let re = [...new Set(ne)].sort(), M =
|
|
5775
|
+
(T.some((e) => e.kind === "mutation") || d.some((e) => e.kind === "mutation")) && ne.push("mutationToRpc"), (T.some((e) => e.kind === "action") || k || l || d.some((e) => e.kind === "action")) && ne.push("actionToRpc"), T.some((e) => e.kind === "stream") && ne.push("streamToRpc"), k && ne.push("WorkflowRunHandleSchema", "workflowCancelDescriptor", "workflowDomainEventsQueryDescriptor", "workflowEventDeliveriesQueryDescriptor", "workflowResumeDescriptor", "workflowRunEventsQueryDescriptor", "workflowRunQueryDescriptor", "workflowRunsQueryDescriptor", "workflowRunStepsQueryDescriptor", "workflowSignalDescriptor", "workflowUpdateDescriptor"), o && ne.push("mutationToRpc", "undoLogQueryDescriptor", "undoApplyDescriptor", "undoRedoDescriptor"), (T.some((e) => e.kind === "query" || e.kind === "mutation" || e.kind === "action" || e.kind === "stream") || l || k || o || y) && ne.push("normalizeDescriptor");
|
|
5776
|
+
let re = [...new Set(ne)].sort(), M = T.filter((e) => e.kind === "query" || e.kind === "mutation" || e.kind === "action" || e.kind === "stream").map((e) => ` ${JSON.stringify(e.rpcTag)}: normalizeDescriptor(${D(e)}),`), N = a.flatMap((e) => [` ${JSON.stringify(`${e.name}.send`)}: normalizeDescriptor(${h(e)}.send),`, ` ${JSON.stringify(`${e.name}.messages`)}: normalizeDescriptor(${h(e)}.messages),`]), ie = k ? [
|
|
5777
5777
|
" \"__voltro.workflow.run\": normalizeDescriptor(workflowRunQueryDescriptor),",
|
|
5778
5778
|
" \"__voltro.workflow.runs\": normalizeDescriptor(workflowRunsQueryDescriptor),",
|
|
5779
5779
|
" \"__voltro.workflow.run.steps\": normalizeDescriptor(workflowRunStepsQueryDescriptor),",
|
|
@@ -5788,8 +5788,8 @@ ${a.join("\n\n")}\n`);
|
|
|
5788
5788
|
" \"__voltro.undo.log\": normalizeDescriptor(undoLogQueryDescriptor),",
|
|
5789
5789
|
" \"__voltro.undo.apply\": normalizeDescriptor(undoApplyDescriptor),",
|
|
5790
5790
|
" \"__voltro.undo.redo\": normalizeDescriptor(undoRedoDescriptor),"
|
|
5791
|
-
] : [], ae =
|
|
5792
|
-
let t =
|
|
5791
|
+
] : [], ae = T.filter((e) => e.kind === "workflow").map((e) => ` ${JSON.stringify(e.rpcTag)}: { kind: 'workflow' },`), oe = T.filter((e) => e.kind === "workflow").map((e) => {
|
|
5792
|
+
let t = D(e);
|
|
5793
5793
|
return [
|
|
5794
5794
|
` ${JSON.stringify(e.rpcTag)}: {`,
|
|
5795
5795
|
" kind: 'workflow',",
|
|
@@ -5801,7 +5801,7 @@ ${a.join("\n\n")}\n`);
|
|
|
5801
5801
|
` queries: __voltroWorkflowMessages(${t}).queries,`,
|
|
5802
5802
|
" },"
|
|
5803
5803
|
].join("\n");
|
|
5804
|
-
}), se = [...
|
|
5804
|
+
}), se = [...T, ...a.map((e) => ({
|
|
5805
5805
|
rpcTag: `agent:${e.name}`,
|
|
5806
5806
|
file: e.file
|
|
5807
5807
|
}))];
|
|
@@ -5816,7 +5816,7 @@ ${a.join("\n\n")}\n`);
|
|
|
5816
5816
|
return `${e.rpcTag}${t}`;
|
|
5817
5817
|
}).join("")).digest("hex").slice(0, 16)}`,
|
|
5818
5818
|
"// Source files:",
|
|
5819
|
-
...
|
|
5819
|
+
...T.map((t) => `// - ${c(e, t.file).replace(/\\/g, "/")}`),
|
|
5820
5820
|
...a.map((t) => `// - ${c(e, t.file).replace(/\\/g, "/")} (agent)`),
|
|
5821
5821
|
"",
|
|
5822
5822
|
k ? "import { Rpc, RpcGroup } from '@effect/rpc'" : "import { RpcGroup } from '@effect/rpc'",
|
|
@@ -5824,8 +5824,8 @@ ${a.join("\n\n")}\n`);
|
|
|
5824
5824
|
`import { ${re.join(", ")} } from '@voltro/protocol'`,
|
|
5825
5825
|
...l ? ["import { agentRouteDescriptors as __voltroAgentRoutes } from '@voltro/ai/agent'"] : [],
|
|
5826
5826
|
"",
|
|
5827
|
-
...
|
|
5828
|
-
...a.map((e) => `import { ${e.exportName} as ${m(e)} } from './${c(
|
|
5827
|
+
...T.map(ee),
|
|
5828
|
+
...a.map((e) => `import { ${e.exportName} as ${m(e)} } from './${c(E, e.file).replace(/\\/g, "/").replace(/\.tsx?$/, "")}'`),
|
|
5829
5829
|
...g ? ["", ..._] : [],
|
|
5830
5830
|
...y ? ["", ...b] : [],
|
|
5831
5831
|
"",
|
|
@@ -5871,7 +5871,7 @@ ${a.join("\n\n")}\n`);
|
|
|
5871
5871
|
"} }",
|
|
5872
5872
|
""
|
|
5873
5873
|
] : [],
|
|
5874
|
-
...
|
|
5874
|
+
...T.map(O),
|
|
5875
5875
|
...a.flatMap((e) => [`export const ${md(`${e.name}.send`)} = actionToRpc(${h(e)}.send${v})`, `export const ${md(`${e.name}.messages`)} = queryToRpc(${h(e)}.messages${v})`]),
|
|
5876
5876
|
...k ? [
|
|
5877
5877
|
"export const __voltroWorkflowRun = queryToRpc(workflowRunQueryDescriptor)",
|
|
@@ -5890,7 +5890,7 @@ ${a.join("\n\n")}\n`);
|
|
|
5890
5890
|
"export const __voltroUndoApply = mutationToRpc(undoApplyDescriptor)",
|
|
5891
5891
|
"export const __voltroUndoRedo = mutationToRpc(undoRedoDescriptor)"
|
|
5892
5892
|
] : [],
|
|
5893
|
-
...
|
|
5893
|
+
...S,
|
|
5894
5894
|
"",
|
|
5895
5895
|
"export const appGroup = RpcGroup.make(",
|
|
5896
5896
|
te,
|
|
@@ -5905,7 +5905,7 @@ ${a.join("\n\n")}\n`);
|
|
|
5905
5905
|
...ae,
|
|
5906
5906
|
...ie,
|
|
5907
5907
|
...P,
|
|
5908
|
-
...
|
|
5908
|
+
...w,
|
|
5909
5909
|
"} as const",
|
|
5910
5910
|
"",
|
|
5911
5911
|
"export type AppDescriptors = typeof appDescriptors",
|
|
@@ -6581,7 +6581,7 @@ ${a.join("\n\n")}\n`);
|
|
|
6581
6581
|
...i ? { cdcDialect: i } : {}
|
|
6582
6582
|
});
|
|
6583
6583
|
}, kf = async ({ env: e = process.env } = {}) => {
|
|
6584
|
-
let t =
|
|
6584
|
+
let t = w.make(C.mergeAll(Fi.layer, Ii.Default)), n = await t.runPromise(Pi), r = await t.runPromise(Ii), i = (e.CACHE_BACKEND ?? "memory").toLowerCase();
|
|
6585
6585
|
return await t.runPromise(r.addSink((e) => n.invalidateTag(e))), {
|
|
6586
6586
|
service: n,
|
|
6587
6587
|
invalidationBus: r,
|
|
@@ -6600,7 +6600,7 @@ ${a.join("\n\n")}\n`);
|
|
|
6600
6600
|
}
|
|
6601
6601
|
},
|
|
6602
6602
|
cache: {
|
|
6603
|
-
get: (e) => t.runPromise(n.get(e)).then((e) =>
|
|
6603
|
+
get: (e) => t.runPromise(n.get(e)).then((e) => T.getOrUndefined(e)),
|
|
6604
6604
|
set: (e, r, i) => t.runPromise(n.set(e, r, i)),
|
|
6605
6605
|
setWithTags: (e, r, i) => t.runPromise(n.setWithTags(e, r, i)),
|
|
6606
6606
|
remove: (e) => t.runPromise(n.remove(e)),
|
|
@@ -6709,15 +6709,15 @@ ${a.join("\n\n")}\n`);
|
|
|
6709
6709
|
take: 1
|
|
6710
6710
|
}))[0], a = i?.subject?.tenantId ?? null, o = t.tenantId ?? null;
|
|
6711
6711
|
if (i === void 0 || a !== o) throw new Kr({ reason: "not authorized for this workflow run" });
|
|
6712
|
-
}, Nf = Vt.pipe(
|
|
6713
|
-
let t =
|
|
6712
|
+
}, Nf = Vt.pipe(C.provide(f.layer)), Pf = (e) => {
|
|
6713
|
+
let t = C.succeed(Pi, e.cacheService), n = C.succeed(Li, e.kvService), r = [
|
|
6714
6714
|
e.analyticsLayer,
|
|
6715
6715
|
t,
|
|
6716
6716
|
n,
|
|
6717
6717
|
...e.pluginServices,
|
|
6718
6718
|
...e.userLayers
|
|
6719
6719
|
];
|
|
6720
|
-
return
|
|
6720
|
+
return C.mergeAll(...r);
|
|
6721
6721
|
}, Ff = [
|
|
6722
6722
|
mi,
|
|
6723
6723
|
gi,
|
|
@@ -6729,12 +6729,12 @@ ${a.join("\n\n")}\n`);
|
|
|
6729
6729
|
let r = new Set(t);
|
|
6730
6730
|
if (n) for (let e of Ff) r.add(e.name);
|
|
6731
6731
|
let i = {};
|
|
6732
|
-
for (let [t, n] of Object.entries(e)) i[t] = r.has(t) ? (e) => n(e).pipe(
|
|
6732
|
+
for (let [t, n] of Object.entries(e)) i[t] = r.has(t) ? (e) => n(e).pipe(ee.take(1)) : n;
|
|
6733
6733
|
return i;
|
|
6734
6734
|
}, Lf = j({ scope: "voltro:dev:supervisor" }), Rf = /\.generated\./, zf = /\.([cm]?[jt]sx?|json)$/, Bf = (e) => {
|
|
6735
6735
|
let t = r(e);
|
|
6736
6736
|
return !Rf.test(t) && zf.test(t);
|
|
6737
|
-
}, Vf = (e) => e.startsWith("node_modules") || e.startsWith(".framework") || e.startsWith(".turbo") || e.startsWith(".vite") || e.startsWith("dist") || e.startsWith(".git"), Hf = process.env.WATCH_POLL === "1" || process.env.CHOKIDAR_USEPOLLING === "1", Uf = 1e3, Wf = (e) =>
|
|
6737
|
+
}, Vf = (e) => e.startsWith("node_modules") || e.startsWith(".framework") || e.startsWith(".turbo") || e.startsWith(".vite") || e.startsWith("dist") || e.startsWith(".git"), Hf = process.env.WATCH_POLL === "1" || process.env.CHOKIDAR_USEPOLLING === "1", Uf = 1e3, Wf = (e) => ee.async((t) => {
|
|
6738
6738
|
let n = l(e), i = (e) => c(n, e), a = Vi(n, {
|
|
6739
6739
|
persistent: !0,
|
|
6740
6740
|
ignoreInitial: !0,
|
|
@@ -6792,17 +6792,17 @@ ${a.join("\n\n")}\n`);
|
|
|
6792
6792
|
watcher: Hf ? "chokidar (polling)" : "chokidar (native)",
|
|
6793
6793
|
hint: "WATCH=0 disables, WATCH_DEBUG=1 traces every event, WATCH_POLL=1 for bind-mounts (k8s/Docker)"
|
|
6794
6794
|
});
|
|
6795
|
-
let t = yield*
|
|
6795
|
+
let t = yield* E.make(T.none()), n = b.gen(function* () {
|
|
6796
6796
|
let n = yield* b.fork(Gf(e.root));
|
|
6797
|
-
yield*
|
|
6797
|
+
yield* E.set(t, T.some(n));
|
|
6798
6798
|
}), r = b.gen(function* () {
|
|
6799
|
-
let e = yield*
|
|
6800
|
-
yield*
|
|
6799
|
+
let e = yield* E.get(t);
|
|
6800
|
+
yield* T.match(e, {
|
|
6801
6801
|
onNone: () => b.void,
|
|
6802
6802
|
onSome: (e) => x.interrupt(e)
|
|
6803
|
-
}), yield*
|
|
6803
|
+
}), yield* E.set(t, T.none());
|
|
6804
6804
|
});
|
|
6805
|
-
return yield* n, yield* Wf(e.root).pipe(
|
|
6805
|
+
return yield* n, yield* Wf(e.root).pipe(ee.debounce(y.millis(80)), ee.runForEach((e) => b.gen(function* () {
|
|
6806
6806
|
let t = Date.now();
|
|
6807
6807
|
Lf.info("file changed — restarting", { file: e.file }), yield* r, yield* n, Lf.info("restart complete", { ms: Date.now() - t });
|
|
6808
6808
|
}))), yield* b.never;
|
|
@@ -6821,7 +6821,7 @@ ${a.join("\n\n")}\n`);
|
|
|
6821
6821
|
}), {
|
|
6822
6822
|
spec: t,
|
|
6823
6823
|
sink: n,
|
|
6824
|
-
layer:
|
|
6824
|
+
layer: C.succeed(ge, n),
|
|
6825
6825
|
tables: t.tables ?? [],
|
|
6826
6826
|
dispose: async () => {
|
|
6827
6827
|
t.dispose && await b.runPromise(t.dispose(n).pipe(b.timeout("1200 millis"), b.ignore));
|
|
@@ -7430,7 +7430,7 @@ ${a.join("\n\n")}\n`);
|
|
|
7430
7430
|
let r = n ?? 0, i = t === void 0 ? e.length : r + t;
|
|
7431
7431
|
return e.slice(r, i);
|
|
7432
7432
|
}, Fp = (e, t) => {
|
|
7433
|
-
let n =
|
|
7433
|
+
let n = D.decodeUnknownEither(e.output), r = [];
|
|
7434
7434
|
for (let e = 0; e < t.length; e++) {
|
|
7435
7435
|
let i = n(t[e]);
|
|
7436
7436
|
if (i._tag === "Left") {
|
|
@@ -8132,7 +8132,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8132
8132
|
}
|
|
8133
8133
|
let n = e.pluginConfigs?.[t.name];
|
|
8134
8134
|
try {
|
|
8135
|
-
let e =
|
|
8135
|
+
let e = D.decodeUnknownSync(t.configSchema)(n);
|
|
8136
8136
|
a.set(t.name, e);
|
|
8137
8137
|
} catch (e) {
|
|
8138
8138
|
throw Error(`plugin "${t.name}" config failed validation: ${e.message ?? String(e)}`);
|
|
@@ -8468,7 +8468,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8468
8468
|
}), Im = (e, t) => {
|
|
8469
8469
|
let n = [];
|
|
8470
8470
|
for (let r of e) typeof r.onWorkflowStep == "function" && n.push(Fm(r.name, r.onWorkflowStep, t));
|
|
8471
|
-
return n.length === 0 ?
|
|
8471
|
+
return n.length === 0 ? C.succeed(Un, { interceptor: ((e) => e) }) : C.succeed(Un, { interceptor: ((e, t) => n.reduceRight((e, n) => n(e, t), e)) });
|
|
8472
8472
|
}, Lm = (e) => {
|
|
8473
8473
|
if (!e) return;
|
|
8474
8474
|
let t = e.workflowName ?? e.tag, n = [];
|
|
@@ -8910,10 +8910,10 @@ ${a.join("\n\n")}\n`);
|
|
|
8910
8910
|
onStrategyFailed: ({ strategyId: e, reason: t }) => {
|
|
8911
8911
|
J.warn(`auth strategy "${e}" rejected request: ${t}`);
|
|
8912
8912
|
}
|
|
8913
|
-
}), Ch = (e) =>
|
|
8913
|
+
}), Ch = (e) => C.succeed(Wr, Wr.of(({ headers: t, clientId: n }) => b.promise(async () => We(n) || e({
|
|
8914
8914
|
headers: t,
|
|
8915
8915
|
clientId: n
|
|
8916
|
-
})))), wh =
|
|
8916
|
+
})))), wh = C.succeed(Gr, Gr.of(({ clientId: e }) => b.succeed({ clientId: e }))), Th = (e) => {
|
|
8917
8917
|
if (g.isCause(e)) return e;
|
|
8918
8918
|
if (typeof e != "object" || !e) return;
|
|
8919
8919
|
for (let t of Object.getOwnPropertySymbols(e)) if (t.description === "effect/Runtime/FiberFailure/Cause") {
|
|
@@ -8926,9 +8926,9 @@ ${a.join("\n\n")}\n`);
|
|
|
8926
8926
|
let t = Th(e);
|
|
8927
8927
|
if (t === void 0) return;
|
|
8928
8928
|
let n = g.failureOption(t);
|
|
8929
|
-
if (
|
|
8929
|
+
if (T.isSome(n)) return n.value;
|
|
8930
8930
|
let r = g.dieOption(t);
|
|
8931
|
-
if (
|
|
8931
|
+
if (T.isSome(r)) return r.value;
|
|
8932
8932
|
}, Dh = (e) => {
|
|
8933
8933
|
if (e == null) return { message: "unknown error" };
|
|
8934
8934
|
let t = Eh(e);
|
|
@@ -9355,7 +9355,7 @@ ${a.join("\n\n")}\n`);
|
|
|
9355
9355
|
}
|
|
9356
9356
|
}
|
|
9357
9357
|
v ||= ht();
|
|
9358
|
-
let b = bg(p.length), x = R(),
|
|
9358
|
+
let b = bg(p.length), x = R(), S = x && b.length > 0 ? Ze({
|
|
9359
9359
|
currentRegion: x,
|
|
9360
9360
|
replicaRegions: xg(h, b),
|
|
9361
9361
|
inner: xt()
|
|
@@ -9372,7 +9372,7 @@ ${a.join("\n\n")}\n`);
|
|
|
9372
9372
|
replicationAdapter: m,
|
|
9373
9373
|
rywPolicy: g,
|
|
9374
9374
|
rywStore: v,
|
|
9375
|
-
replicaSelector:
|
|
9375
|
+
replicaSelector: S
|
|
9376
9376
|
});
|
|
9377
9377
|
}, vg = async (e, t, n, r) => {
|
|
9378
9378
|
let i = Qi(t?.plugins ?? []), a = n === "postgres" || n === "mysql" || n === "mariadb", o = n === "postgres" ? "LISTEN/NOTIFY" : "binlog CDC";
|
|
@@ -9445,20 +9445,20 @@ ${a.join("\n\n")}\n`);
|
|
|
9445
9445
|
});
|
|
9446
9446
|
let v = await Uh(i);
|
|
9447
9447
|
J.info(`discovered ${v.length} files`, { count: v.length });
|
|
9448
|
-
let y = await Xm(o?.plugins ?? [], o?.name ?? r(i), i), x = (o?.plugins ?? []).flatMap((e) => (e.errorSchemas ?? []).map((e) => e.import)),
|
|
9448
|
+
let y = await Xm(o?.plugins ?? [], o?.name ?? r(i), i), x = (o?.plugins ?? []).flatMap((e) => (e.errorSchemas ?? []).map((e) => e.import)), T = (o?.plugins ?? []).flatMap((e) => (e.rpcClientDescriptors ?? []).map((e) => ({
|
|
9449
9449
|
tag: e.tag,
|
|
9450
9450
|
kind: e.kind,
|
|
9451
9451
|
module: e.import.module,
|
|
9452
9452
|
name: e.import.name
|
|
9453
|
-
}))),
|
|
9453
|
+
}))), E = await bd({
|
|
9454
9454
|
root: i,
|
|
9455
9455
|
...y.length > 0 ? { pluginContributions: y } : {},
|
|
9456
9456
|
...x.length > 0 ? { pluginErrorImports: x } : {},
|
|
9457
|
-
...
|
|
9457
|
+
...T.length > 0 ? { pluginRpcImports: T } : {},
|
|
9458
9458
|
...o?.name === void 0 ? {} : { apiName: o.name }
|
|
9459
9459
|
});
|
|
9460
|
-
|
|
9461
|
-
let
|
|
9460
|
+
E ? (J.info("codegen wrote rpcGroup", { path: c(i, E) }), await nd(E)) : J.debug("codegen skipped — no descriptors discovered");
|
|
9461
|
+
let D = gg(o ?? null), ee = D === "mariadb" ? "mariadb" : D === "mssql" ? "mssql" : void 0, O = ee !== void 0 && (process.env.CDC ?? "1") !== "0", { queries: k, mutations: A, actions: j, streams: re, workflows: M, workflowWorkers: N, eventTriggers: ie, schedules: F, tables: ae, featureMix: oe, tenantScopedTables: se, softDeleteScopedTables: ce } = await sg(v, { cdc: O }), le = M.length > 0 || ie.length > 0, I = await cg(i);
|
|
9462
9462
|
Ft(At(I?.secrets)), await zo({
|
|
9463
9463
|
rawEnv: I?.env,
|
|
9464
9464
|
appType: "api",
|
|
@@ -9470,7 +9470,7 @@ ${a.join("\n\n")}\n`);
|
|
|
9470
9470
|
mix: oe,
|
|
9471
9471
|
plugins: I?.plugins ?? [],
|
|
9472
9472
|
cdc: O,
|
|
9473
|
-
...
|
|
9473
|
+
...ee ? { cdcDialect: ee } : {}
|
|
9474
9474
|
}), ye = I?.analytics?.tables ?? [], L = (() => {
|
|
9475
9475
|
let e = new Set(ae.map((e) => e.tableName)), t = [...ae];
|
|
9476
9476
|
for (let n of [...ve, ...ye]) {
|
|
@@ -9617,7 +9617,7 @@ ${a.join("\n\n")}\n`);
|
|
|
9617
9617
|
let kt = gg(I), jt = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, Nt, Pt;
|
|
9618
9618
|
if (kt !== "memory") {
|
|
9619
9619
|
let e = await mg(kt);
|
|
9620
|
-
Nt =
|
|
9620
|
+
Nt = w.make(e.makeSqlLayer(lg())), Pt = await Nt.runPromise(z.SqlClient);
|
|
9621
9621
|
}
|
|
9622
9622
|
let Bt = rt({
|
|
9623
9623
|
coordinator: [
|
|
@@ -10024,7 +10024,7 @@ ${a.join("\n\n")}\n`);
|
|
|
10024
10024
|
...re.map((e) => ai(e.descriptor, Dr)),
|
|
10025
10025
|
...Cr,
|
|
10026
10026
|
...Tr
|
|
10027
|
-
], Ar = Vn.make(...Or).middleware(Wr).middleware(Gr), jr = I?.layers ?? [], Mr = (I?.plugins ?? []).map((e) => e.services).filter((e) => e !== void 0), Nr =
|
|
10027
|
+
], Ar = Vn.make(...Or).middleware(Wr).middleware(Gr), jr = I?.layers ?? [], Mr = (I?.plugins ?? []).map((e) => e.services).filter((e) => e !== void 0), Nr = C.succeed(me, Dn.registry), Pr = C.mergeAll(Pf({
|
|
10028
10028
|
analyticsLayer: rn.layer,
|
|
10029
10029
|
cacheService: Wt,
|
|
10030
10030
|
kvService: $t,
|
|
@@ -10058,7 +10058,7 @@ ${a.join("\n\n")}\n`);
|
|
|
10058
10058
|
kv: Qt
|
|
10059
10059
|
}, t = qn.outgoing.map((e) => e.descriptor);
|
|
10060
10060
|
Lr = Wi(e, async (n) => {
|
|
10061
|
-
let r = Ki.execute(n).pipe(b.provide(Ki.toLayer(Ui(e, { events: t })).pipe(
|
|
10061
|
+
let r = Ki.execute(n).pipe(b.provide(Ki.toLayer(Ui(e, { events: t })).pipe(C.provideMerge(Fn))));
|
|
10062
10062
|
b.runPromise(r).catch((e) => {
|
|
10063
10063
|
Gn.error("deliverWebhook workflow crashed", {
|
|
10064
10064
|
deliveryId: n.deliveryId,
|
|
@@ -10391,7 +10391,7 @@ ${a.join("\n\n")}\n`);
|
|
|
10391
10391
|
}, Hi = [...mt(M, {
|
|
10392
10392
|
buildContext: Di,
|
|
10393
10393
|
resolveStartContext: Un
|
|
10394
|
-
}, (e, t, n) => Vi(e.definition.name, e.definition, t, n)), ...N], qi = Hi.length > 0 ?
|
|
10394
|
+
}, (e, t, n) => Vi(e.definition.name, e.definition, t, n)), ...N], qi = Hi.length > 0 ? C.mergeAll(...Hi) : C.empty, Yi = w.make(qi.pipe(C.provideMerge(Fn)));
|
|
10395
10395
|
process.on("beforeExit", () => {
|
|
10396
10396
|
Yi.dispose();
|
|
10397
10397
|
}), In = M.length > 0 ? ft({
|
|
@@ -10428,7 +10428,7 @@ ${a.join("\n\n")}\n`);
|
|
|
10428
10428
|
runPromise: (e) => Yi.runPromise(e)
|
|
10429
10429
|
}, e, t)
|
|
10430
10430
|
}) : void 0;
|
|
10431
|
-
let Zi =
|
|
10431
|
+
let Zi = C.mergeAll(Ar.toLayer(Vr), ge, wh), Qi = If(Vr, k.map((e) => e.descriptor.name), le), $i = C.mergeAll(Ar.toLayer(Qi), ge, wh), ea = On, ta = (ea === "postgres" || ea === "mysql" || ea === "mariadb" || ea === "mssql") && (process.env.CDC ?? "1") !== "0";
|
|
10432
10432
|
if (ea === "postgres" && hf()) {
|
|
10433
10433
|
let e = bf({
|
|
10434
10434
|
store: R,
|
|
@@ -10445,7 +10445,7 @@ ${a.join("\n\n")}\n`);
|
|
|
10445
10445
|
});
|
|
10446
10446
|
let ra = (e) => {
|
|
10447
10447
|
try {
|
|
10448
|
-
return
|
|
10448
|
+
return S.make(e);
|
|
10449
10449
|
} catch {
|
|
10450
10450
|
return;
|
|
10451
10451
|
}
|
|
@@ -11902,7 +11902,7 @@ ${a.join("\n\n")}\n`);
|
|
|
11902
11902
|
kv: r
|
|
11903
11903
|
}, a = _.outgoing.map((e) => e.descriptor);
|
|
11904
11904
|
g = Wi(i, async (e) => {
|
|
11905
|
-
let n = Ki.execute(e).pipe(b.provide(Ki.toLayer(Ui(i, { events: a })).pipe(
|
|
11905
|
+
let n = Ki.execute(e).pipe(b.provide(Ki.toLayer(Ui(i, { events: a })).pipe(C.provideMerge(t))));
|
|
11906
11906
|
b.runPromise(n).catch((t) => {
|
|
11907
11907
|
h.error("deliverWebhook workflow crashed", {
|
|
11908
11908
|
deliveryId: e.deliveryId,
|
|
@@ -11941,34 +11941,34 @@ ${a.join("\n\n")}\n`);
|
|
|
11941
11941
|
...d === void 0 ? {} : { workflowsProxy: d },
|
|
11942
11942
|
eventTriggers: e.discovered.eventTriggers ?? [],
|
|
11943
11943
|
namespaceIsolationOn: m
|
|
11944
|
-
}), x =
|
|
11944
|
+
}), x = C.succeed(me, Hp), S = (t, n) => {
|
|
11945
11945
|
let r = t.pipe(b.provide(it(n)));
|
|
11946
11946
|
return Mt((e.baseLayer ? r.pipe(b.provide(e.baseLayer)) : r).pipe(b.provide(x)));
|
|
11947
|
-
},
|
|
11947
|
+
}, T = st({
|
|
11948
11948
|
store: e.store,
|
|
11949
11949
|
buildContext: (e, t, n) => y(e, t, n),
|
|
11950
|
-
runEffect:
|
|
11950
|
+
runEffect: S,
|
|
11951
11951
|
undoCapture: fm()
|
|
11952
|
-
}),
|
|
11952
|
+
}), E = dm(), D = Qe({
|
|
11953
11953
|
buildContext: (e) => y(e),
|
|
11954
|
-
runEffect:
|
|
11955
|
-
}),
|
|
11954
|
+
runEffect: S
|
|
11955
|
+
}), ee = lt({
|
|
11956
11956
|
buildContext: (e) => y(e),
|
|
11957
11957
|
finalize: (t, n) => Oe(ke(t, e.tenantScopedTables, n.subject.tenantId), e.softDeleteScopedTables),
|
|
11958
11958
|
provideEffect: (e, t) => e.pipe(b.provide(it(t)))
|
|
11959
11959
|
}), O = {};
|
|
11960
|
-
for (let n of [...e.discovered.queries, ...
|
|
11961
|
-
for (let t of [...e.discovered.mutations, ...
|
|
11962
|
-
for (let t of e.discovered.actions) O[t.descriptor.name] = (e) => Ne(async (e, n) =>
|
|
11960
|
+
for (let n of [...e.discovered.queries, ...E.queries]) O[n.descriptor.name] = (e) => Fe(ee(n, e), t, `subscription.${n.descriptor.name}`);
|
|
11961
|
+
for (let t of [...e.discovered.mutations, ...E.mutations]) O[t.descriptor.name] = (e) => Ne(async (e, n) => T(t, e, n), e, `mutation.${t.descriptor.name}`);
|
|
11962
|
+
for (let t of e.discovered.actions) O[t.descriptor.name] = (e) => Ne(async (e, n) => D(t, e, n), e, `action.${t.descriptor.name}`);
|
|
11963
11963
|
let k = () => `public-${Math.random().toString(36).slice(2, 10)}`, A = [...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
11964
11964
|
descriptor: e.descriptor,
|
|
11965
|
-
invoke: (t, n) =>
|
|
11965
|
+
invoke: (t, n) => T(e, t, {
|
|
11966
11966
|
subject: n.subject,
|
|
11967
11967
|
traceId: k()
|
|
11968
11968
|
})
|
|
11969
11969
|
})), ...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
11970
11970
|
descriptor: e.descriptor,
|
|
11971
|
-
invoke: (t, n) =>
|
|
11971
|
+
invoke: (t, n) => D(e, t, {
|
|
11972
11972
|
subject: n.subject,
|
|
11973
11973
|
traceId: k()
|
|
11974
11974
|
})
|
|
@@ -12025,7 +12025,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12025
12025
|
source: "workflow-rpc"
|
|
12026
12026
|
}).start(t.definition.name, e);
|
|
12027
12027
|
}, e, `workflow.${t.definition.name}`);
|
|
12028
|
-
f && (O[mi.name] = (e) => Fe(
|
|
12028
|
+
f && (O[mi.name] = (e) => Fe(ee({
|
|
12029
12029
|
descriptor: mi,
|
|
12030
12030
|
executor: (e) => {
|
|
12031
12031
|
let t = e.id;
|
|
@@ -12041,7 +12041,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12041
12041
|
projection: void 0
|
|
12042
12042
|
};
|
|
12043
12043
|
}
|
|
12044
|
-
}, e), t, `subscription.${mi.name}`), O[gi.name] = (e) => Fe(
|
|
12044
|
+
}, e), t, `subscription.${mi.name}`), O[gi.name] = (e) => Fe(ee({
|
|
12045
12045
|
descriptor: gi,
|
|
12046
12046
|
executor: (e) => {
|
|
12047
12047
|
let t = e, n = [...t.tag === void 0 ? [] : [B("tag", t.tag)], ...t.status === void 0 ? [] : [B("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
|
|
@@ -12057,7 +12057,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12057
12057
|
projection: void 0
|
|
12058
12058
|
};
|
|
12059
12059
|
}
|
|
12060
|
-
}, e), t, `subscription.${gi.name}`), O[hi.name] = (e) => Fe(
|
|
12060
|
+
}, e), t, `subscription.${gi.name}`), O[hi.name] = (e) => Fe(ee({
|
|
12061
12061
|
descriptor: hi,
|
|
12062
12062
|
executor: (e) => {
|
|
12063
12063
|
let t = e.runId;
|
|
@@ -12073,7 +12073,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12073
12073
|
projection: void 0
|
|
12074
12074
|
};
|
|
12075
12075
|
}
|
|
12076
|
-
}, e), t, `subscription.${hi.name}`), O[pi.name] = (e) => Fe(
|
|
12076
|
+
}, e), t, `subscription.${hi.name}`), O[pi.name] = (e) => Fe(ee({
|
|
12077
12077
|
descriptor: pi,
|
|
12078
12078
|
executor: (e) => {
|
|
12079
12079
|
let t = e.runId;
|
|
@@ -12089,7 +12089,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12089
12089
|
projection: void 0
|
|
12090
12090
|
};
|
|
12091
12091
|
}
|
|
12092
|
-
}, e), t, `subscription.${pi.name}`), O[ui.name] = (e) => Fe(
|
|
12092
|
+
}, e), t, `subscription.${pi.name}`), O[ui.name] = (e) => Fe(ee({
|
|
12093
12093
|
descriptor: ui,
|
|
12094
12094
|
executor: (e) => {
|
|
12095
12095
|
let t = e;
|
|
@@ -12105,7 +12105,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12105
12105
|
projection: void 0
|
|
12106
12106
|
};
|
|
12107
12107
|
}
|
|
12108
|
-
}, e), t, `subscription.${ui.name}`), O[di.name] = (e) => Fe(
|
|
12108
|
+
}, e), t, `subscription.${ui.name}`), O[di.name] = (e) => Fe(ee({
|
|
12109
12109
|
descriptor: di,
|
|
12110
12110
|
executor: (e) => {
|
|
12111
12111
|
let t = e.eventId;
|
|
@@ -12138,8 +12138,8 @@ ${a.join("\n\n")}\n`);
|
|
|
12138
12138
|
...e.discovered.queries.map((e) => ii(e.descriptor)),
|
|
12139
12139
|
...e.discovered.mutations.map((e) => ni(e.descriptor)),
|
|
12140
12140
|
...e.discovered.actions.map((e) => Jr(e.descriptor)),
|
|
12141
|
-
...
|
|
12142
|
-
...
|
|
12141
|
+
...E.queries.map((e) => ii(e.descriptor)),
|
|
12142
|
+
...E.mutations.map((e) => ni(e.descriptor)),
|
|
12143
12143
|
...(e.discovered.streams ?? []).map((e) => ai(e.descriptor)),
|
|
12144
12144
|
...(e.discovered.workflows ?? []).map((e) => Wt(e.definition)),
|
|
12145
12145
|
...f ? [
|
|
@@ -12154,7 +12154,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12154
12154
|
Jr(_i),
|
|
12155
12155
|
Jr(vi)
|
|
12156
12156
|
] : []
|
|
12157
|
-
], ie = Vn.make(...N).middleware(Wr).middleware(Gr), P =
|
|
12157
|
+
], ie = Vn.make(...N).middleware(Wr).middleware(Gr), P = C.succeed(Wr, Wr.of(({ headers: t, clientId: n }) => b.promise(() => e.resolveSubject(t, n)))), F = C.succeed(Gr, Gr.of(({ clientId: e }) => b.succeed({ clientId: e }))), ae = e.dormancyTenantId ?? "default", oe = e.dormancy === "sleep" ? {
|
|
12158
12158
|
register: (t, n, r) => Ot(e.store, {
|
|
12159
12159
|
tenantId: r ?? ae,
|
|
12160
12160
|
kind: "workflow",
|
|
@@ -12239,8 +12239,8 @@ ${a.join("\n\n")}\n`);
|
|
|
12239
12239
|
onParentClose: ({ executionId: e, status: t }) => le(e, t),
|
|
12240
12240
|
recorder: ce
|
|
12241
12241
|
}, n);
|
|
12242
|
-
}), ...e.discovered.workflowWorkers ?? []], de = ue.length > 0 ?
|
|
12243
|
-
((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster") && e.workflowEngineLayer !== void 0 && (a =
|
|
12242
|
+
}), ...e.discovered.workflowWorkers ?? []], de = ue.length > 0 ? C.mergeAll(...ue) : C.empty;
|
|
12243
|
+
((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster") && e.workflowEngineLayer !== void 0 && (a = w.make(de.pipe(C.provideMerge(e.workflowEngineLayer))), await a.runPromise(b.void), i = (e.discovered.workflows?.length ?? 0) > 0 ? ft({
|
|
12244
12244
|
workflows: e.discovered.workflows ?? [],
|
|
12245
12245
|
runEffect: (e) => a.runPromise(e),
|
|
12246
12246
|
rememberStartContext: l,
|
|
@@ -12274,7 +12274,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12274
12274
|
runPromise: (e) => a.runPromise(e)
|
|
12275
12275
|
}, t, n)
|
|
12276
12276
|
}) : void 0);
|
|
12277
|
-
let fe =
|
|
12277
|
+
let fe = C.mergeAll(ie.toLayer(O), P, F), pe = If(O, e.discovered.queries.map((e) => e.descriptor.name), f), he = C.mergeAll(ie.toLayer(pe), P, F), ge = e.observability, ve = await Ie({
|
|
12278
12278
|
...ge && ge.spanProcessors.length > 0 ? { extraSpanProcessors: ge.spanProcessors } : {},
|
|
12279
12279
|
...ge && ge.metricReaders.length > 0 ? { extraMetricReaders: ge.metricReaders } : {},
|
|
12280
12280
|
...ge && Object.keys(ge.resourceAttributes).length > 0 ? { resourceAttributes: ge.resourceAttributes } : {},
|
|
@@ -12343,7 +12343,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12343
12343
|
}
|
|
12344
12344
|
await yp(n.agent, r, {
|
|
12345
12345
|
findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
|
|
12346
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
12346
|
+
runAction: (e, t, n) => Promise.resolve(D(e, t, n)),
|
|
12347
12347
|
makeSubject: (e) => Yr(e),
|
|
12348
12348
|
now: () => Date.now(),
|
|
12349
12349
|
log: t
|
|
@@ -12370,7 +12370,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12370
12370
|
...e.analytics === void 0 ? {} : { analytics: e.analytics },
|
|
12371
12371
|
...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
|
|
12372
12372
|
...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
|
|
12373
|
-
}), x =
|
|
12373
|
+
}), x = C.succeed(me, we.registry)), ye = !0, {
|
|
12374
12374
|
dispatcher: t,
|
|
12375
12375
|
server: be,
|
|
12376
12376
|
scheduler: o,
|
|
@@ -12417,11 +12417,11 @@ ${a.join("\n\n")}\n`);
|
|
|
12417
12417
|
}
|
|
12418
12418
|
let _ = ut(m), v = await _g(r, void 0);
|
|
12419
12419
|
r?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = r.cache), r?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = r.cacheRedisUrl), r?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = r.cacheRedisDriver), r?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = r.cacheKeyPrefix);
|
|
12420
|
-
let { service: y, invalidationBus: x, snapshotCache:
|
|
12421
|
-
Y.info(`cache backend resolved: ${
|
|
12420
|
+
let { service: y, invalidationBus: x, snapshotCache: S, cache: T, backend: E, dispose: D } = await kf({ env: process.env });
|
|
12421
|
+
Y.info(`cache backend resolved: ${E}` + (E === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), v.onChange((e) => {
|
|
12422
12422
|
b.runFork(x.publish(e.table));
|
|
12423
12423
|
}), r?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = r.kv), r?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = r.kvRedisUrl), r?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = r.kvKeyPrefix);
|
|
12424
|
-
let { kv:
|
|
12424
|
+
let { kv: ee, service: O } = await tt({ store: v }), k = je({
|
|
12425
12425
|
store: v,
|
|
12426
12426
|
sink: p.sink,
|
|
12427
12427
|
log: Y
|
|
@@ -12429,7 +12429,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12429
12429
|
store: v,
|
|
12430
12430
|
dialect: i
|
|
12431
12431
|
}), j = r?.plugins ?? [], te = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, ne, re;
|
|
12432
|
-
i !== "memory" && (ne =
|
|
12432
|
+
i !== "memory" && (ne = w.make((await mg(i)).makeSqlLayer(lg())), re = await ne.runPromise(z.SqlClient));
|
|
12433
12433
|
let M = rt({
|
|
12434
12434
|
coordinator: [
|
|
12435
12435
|
"postgres",
|
|
@@ -12485,7 +12485,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12485
12485
|
clientId: -1
|
|
12486
12486
|
}),
|
|
12487
12487
|
...pe ? { idempotency: pe } : {}
|
|
12488
|
-
}) : [], he = j.map((e) => e.services).filter((e) => e !== void 0), ge =
|
|
12488
|
+
}) : [], he = j.map((e) => e.services).filter((e) => e !== void 0), ge = C.mergeAll(Pf({
|
|
12489
12489
|
analyticsLayer: p.layer,
|
|
12490
12490
|
cacheService: y,
|
|
12491
12491
|
kvService: O,
|
|
@@ -12559,9 +12559,9 @@ ${a.join("\n\n")}\n`);
|
|
|
12559
12559
|
aggregateStorage: Pe,
|
|
12560
12560
|
aggregateCoordinator: Fe,
|
|
12561
12561
|
store: v,
|
|
12562
|
-
kv:
|
|
12563
|
-
cache:
|
|
12564
|
-
snapshotCache:
|
|
12562
|
+
kv: ee,
|
|
12563
|
+
cache: T,
|
|
12564
|
+
snapshotCache: S,
|
|
12565
12565
|
schemaRegistry: _,
|
|
12566
12566
|
tenantScopedTables: c.tenantScopedTables,
|
|
12567
12567
|
softDeleteScopedTables: c.softDeleteScopedTables,
|
|
@@ -12601,7 +12601,7 @@ ${a.join("\n\n")}\n`);
|
|
|
12601
12601
|
});
|
|
12602
12602
|
let We = () => {
|
|
12603
12603
|
for (let e of N) e.stop();
|
|
12604
|
-
k.detach(), A.stop(),
|
|
12604
|
+
k.detach(), A.stop(), D(), ne?.dispose(), Promise.resolve(F.deactivate()).then(() => oe?.close()).then(() => p.dispose()).then(() => He.close()).then(() => v.close?.()).then(() => process.exit(0));
|
|
12605
12605
|
};
|
|
12606
12606
|
return process.on("SIGINT", We), process.on("SIGTERM", We), await new Promise(() => {}), 0;
|
|
12607
12607
|
}, Jg = (e, t) => {
|
|
@@ -13045,7 +13045,7 @@ ${a.join("\n\n")}\n`);
|
|
|
13045
13045
|
if (t === void 0) return y_();
|
|
13046
13046
|
let r = (process.env.CACHE_BACKEND ?? "memory").toLowerCase();
|
|
13047
13047
|
if (r !== "redis" && (t === "flush" || t === "invalidate")) return console.error(`voltro cache ${t}: CACHE_BACKEND=${r} is per-process — the CLI cannot reach the dev server's in-memory cache.`), console.error(" Use CACHE_BACKEND=redis (a shared backend) to flush/invalidate from the CLI."), 1;
|
|
13048
|
-
let i =
|
|
13048
|
+
let i = w.make(Fi.layer);
|
|
13049
13049
|
try {
|
|
13050
13050
|
switch (t) {
|
|
13051
13051
|
case "status": {
|
|
@@ -16195,7 +16195,7 @@ replicas = 1
|
|
|
16195
16195
|
}, Qx = (e) => Or(e, {
|
|
16196
16196
|
table: Pr,
|
|
16197
16197
|
chunkSize: 500
|
|
16198
|
-
}).pipe(
|
|
16198
|
+
}).pipe(ee.map((e) => ({
|
|
16199
16199
|
key: String(e.key),
|
|
16200
16200
|
contentType: String(e.contentType ?? "application/octet-stream"),
|
|
16201
16201
|
size: Number(e.size ?? 0)
|