@voltro/cli 0.2.0 → 0.2.1
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 +8 -0
- package/dist/{apiBuild-CnF3GAcP.js → apiBuild-B0dd-oDo.js} +1 -1
- package/dist/apiBuild-D09wjKKO.js +2 -0
- package/dist/bin.js +2 -2
- package/dist/{commands-5AlC8Udj.js → commands-BgOfGwLc.js} +4 -4
- package/dist/{dev-CZ2WE3zn.js → dev-BGYmeKEx.js} +53 -55
- package/dist/dev-DoTIxucX.js +2 -0
- package/dist/index.js +1 -1
- package/package.json +17 -17
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-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 +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +8 -8
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/baselines/compose/docker/api.Dockerfile +1 -1
- package/templates/baselines/compose-mariadb/docker/api.Dockerfile +1 -1
- package/dist/apiBuild-CRV5VLc-.js +0 -2
- package/dist/dev-DFhyP4GC.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -39,6 +39,14 @@ _Changes staged for the next release accumulate here (rolled up from
|
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
+
## [0.2.1] — 2026-07-17
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- **@voltro/cli, @voltro/database** — `voltro codegen` / `dev` / `serve` / `build` no longer crash with `Cannot find package '@voltro/sql-mysql'` on an app that doesn't declare that driver (e.g. a memory-store app, or a postgres app for the mysql/mssql drivers). The CLI's framework-table assembly statically imported the CDC-offsets table schema from `@voltro/sql-mysql` / `@voltro/sql-mssql` (`import { _voltroCdcOffsetsTable } from '@voltro/sql-mysql'`), so merely LOADING the CLI resolved those driver packages — failing whenever one wasn't installed. This surfaced only in a production install where the drivers aren't present (0.2.0's app-declared-driver change), not in the workspace where all drivers are devDependencies. The two CDC-offsets table schemas (pure schema, no driver runtime) move to `@voltro/database` — the driver-agnostic package both the CLI and the drivers already depend on; the drivers re-export them so their public API + CDC readers are unchanged. The CLI now references a SQL driver only through the runtime `importDriver()` lookup (lazy, and only for the dialect actually in use). The lazily-imported driver modules are also typed with local structural interfaces instead of `typeof import('@voltro/sql-*')`, so no driver package is referenced in a type position either.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
42
50
|
## [0.2.0] — 2026-07-17
|
|
43
51
|
|
|
44
52
|
### ⚠ BREAKING
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as e } from "./dev-
|
|
1
|
+
import { d as e } from "./dev-BGYmeKEx.js";
|
|
2
2
|
import { isAbsolute as t, join as n, relative as r, resolve as i } from "node:path";
|
|
3
3
|
import { createLogger as a } from "@voltro/logger";
|
|
4
4
|
import { existsSync as o, promises as s } from "node:fs";
|
package/dist/bin.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { Ot as e } from "./dev-
|
|
3
|
-
import { n as t } from "./commands-
|
|
2
|
+
import { Ot as e } from "./dev-BGYmeKEx.js";
|
|
3
|
+
import { n as t } from "./commands-BgOfGwLc.js";
|
|
4
4
|
import { createLogger as n } from "@voltro/logger";
|
|
5
5
|
//#region src/bin.ts
|
|
6
6
|
var r = n({ scope: "voltro:cli" }), i = process.argv.slice(2);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as p, Gt as m, H as h, Ht as g, I as _, J as v, Jt as y, K as b, Kt as x, L as S, Lt as C, M as w, Mt as ee, N as te, Nt as ne, O as re, P as ie, Pt as ae, Q as T, R as oe, Rt as se, S as ce, St as le, T as E, Tt as ue, U as de, Ut as fe, V as pe, Vt as me, W as he, Wt as ge, X as _e, Xt as ve, Y as ye, Yt as be, Z as xe, _ as Se, _t as Ce, at as we, b as Te, bt as Ee, ct as De, d as Oe, dt as D, et as ke, f as Ae, ft as je, g as Me, gt as Ne, h as Pe, ht as Fe, i as Ie, it as Le, j as Re, jt as ze, k as Be, l as Ve, lt as He, m as Ue, mt as We, n as Ge, nt as Ke, o as qe, ot as Je, p as Ye, q as Xe, qt as Ze, rt as Qe, s as $e, st as et, t as tt, tt as nt, ut as rt, v as it, vt as at, w as ot, wt as st, x as ct, xt as lt, y as ut, yt as dt, z as ft, zt as pt } from "./dev-
|
|
1
|
+
import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as p, Gt as m, H as h, Ht as g, I as _, J as v, Jt as y, K as b, Kt as x, L as S, Lt as C, M as w, Mt as ee, N as te, Nt as ne, O as re, P as ie, Pt as ae, Q as T, R as oe, Rt as se, S as ce, St as le, T as E, Tt as ue, U as de, Ut as fe, V as pe, Vt as me, W as he, Wt as ge, X as _e, Xt as ve, Y as ye, Yt as be, Z as xe, _ as Se, _t as Ce, at as we, b as Te, bt as Ee, ct as De, d as Oe, dt as D, et as ke, f as Ae, ft as je, g as Me, gt as Ne, h as Pe, ht as Fe, i as Ie, it as Le, j as Re, jt as ze, k as Be, l as Ve, lt as He, m as Ue, mt as We, n as Ge, nt as Ke, o as qe, ot as Je, p as Ye, q as Xe, qt as Ze, rt as Qe, s as $e, st as et, t as tt, tt as nt, ut as rt, v as it, vt as at, w as ot, wt as st, x as ct, xt as lt, y as ut, yt as dt, z as ft, zt as pt } from "./dev-BGYmeKEx.js";
|
|
2
2
|
import { i as mt } from "./startupRunner-DAexyPkM.js";
|
|
3
|
-
import { t as ht } from "./apiBuild-
|
|
3
|
+
import { t as ht } from "./apiBuild-B0dd-oDo.js";
|
|
4
4
|
import { basename as gt, dirname as O, extname as _t, isAbsolute as vt, join as k, relative as A, resolve as j } from "node:path";
|
|
5
5
|
import { fileURLToPath as yt, pathToFileURL as bt } from "node:url";
|
|
6
6
|
import { FileSystem as xt } from "@effect/platform";
|
|
@@ -576,10 +576,10 @@ external scheduler owns the once-only guarantee.
|
|
|
576
576
|
}, sa = async (e) => {
|
|
577
577
|
let t = await Je(e);
|
|
578
578
|
if (!t) {
|
|
579
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
579
|
+
let { loadApiConfig: t } = await import("./dev-DoTIxucX.js"), n = await t(e);
|
|
580
580
|
if (n) {
|
|
581
581
|
z.info("building api app", { app: n.name ?? "(unnamed)" });
|
|
582
|
-
let { runApiBuild: t } = await import("./apiBuild-
|
|
582
|
+
let { runApiBuild: t } = await import("./apiBuild-D09wjKKO.js");
|
|
583
583
|
return await t(e), {
|
|
584
584
|
ran: !0,
|
|
585
585
|
exitCode: 0
|
|
@@ -25,10 +25,8 @@ import { SqlClient as R } from "@effect/sql";
|
|
|
25
25
|
import { WorkflowEngine as Sn } from "@effect/workflow";
|
|
26
26
|
import { WorkflowStepInterceptorTag as Cn, _voltroWorkflowRunEventsTable as wn, _voltroWorkflowRunStepsTable as Tn, _voltroWorkflowRunsTable as En, _voltroWorkflowStartContextsTable as Dn, closeWorkflowChildrenForParent as On, completeSuspendingSignal as kn, getWorkflowVersionMetadata as An, isWorkflowWorkerLayer as jn, makeWorkflowRunRecorder as Mn, sendWorkflowSignal as Nn, sendWorkflowUpdate as Pn, serialiseWorkflowRowForWire as Fn, wrapWorkflowExecuteWithRunRecording as In } from "@voltro/workflow";
|
|
27
27
|
import { makeClusterCronLayer as Ln, parseShardLockMode as Rn, resolveRunnerIdentity as zn, resolveRunnerStorage as Bn, workflowEngineLayer as Vn } from "@voltro/workflow/cluster";
|
|
28
|
-
import { _voltroApiKeysTable as Hn,
|
|
29
|
-
import { _voltroWebhookDeliveriesTable as
|
|
30
|
-
import { _voltroCdcOffsetsTable as ur } from "@voltro/sql-mysql";
|
|
31
|
-
import { _voltroMssqlCdcOffsetsTable as V } from "@voltro/sql-mssql";
|
|
28
|
+
import { _voltroApiKeysTable as Hn, _voltroCdcOffsetsTable as Un, _voltroIdempotencyTable as Wn, _voltroKvTable as z, _voltroMigrationPlansTable as Gn, _voltroMigrationsTable as Kn, _voltroMssqlCdcOffsetsTable as qn, _voltroSeedsTable as Jn, actorsTable as Yn, allRegisteredTables as Xn, and as Zn, auditAllTableIndexes as Qn, drainIdentifierWarnings as $n, ensureTableRegistered as er, eq as B, formatIndexAuditIssue as tr, isSeedDefinition as nr, isSqliteFamily as rr, lt as ir, or as ar, registerCoreTables as or, registerDiscoveredRelations as sr, resolveTenantNamespace as cr, walkLeaves as lr } from "@voltro/database";
|
|
29
|
+
import { _voltroWebhookDeliveriesTable as ur, _voltroWebhookTargetsTable as V } from "@voltro/plugin-webhooks/mixin";
|
|
32
30
|
import { _voltroStorageBlobsTable as dr, _voltroStorageGrantsTable as fr, _voltroStorageRefsTable as H, _voltroStorageUsageTable as pr } from "@voltro/plugin-storage";
|
|
33
31
|
import { AuthMiddleware as mr, ConnectionInfoMiddleware as hr, Unauthenticated as gr, WorkflowRunHandleSchema as _r, actionToRpc as vr, anonymousSubject as yr, checkFrameworkCompat as br, composeAuthStrategies as xr, composeRpcInterceptors as Sr, defineAction as Cr, defineMutation as wr, defineQuery as Tr, mutationToRpc as Er, publishServerError as U, queryToRpc as Dr, streamToRpc as Or, undoApplyDescriptor as kr, undoLogQueryDescriptor as Ar, undoRedoDescriptor as jr, workflowCancelDescriptor as Mr, workflowDomainEventsQueryDescriptor as Nr, workflowEventDeliveriesQueryDescriptor as Pr, workflowResumeDescriptor as Fr, workflowRunEventsQueryDescriptor as Ir, workflowRunQueryDescriptor as Lr, workflowRunStepsQueryDescriptor as Rr, workflowRunsQueryDescriptor as zr, workflowSignalDescriptor as Br, workflowUpdateDescriptor as Vr } from "@voltro/protocol";
|
|
34
32
|
import { declaredSnapshot as Hr, describeOutcome as Ur, fingerprintSchema as Wr, introspectSchema as Gr, planMigrations as Kr, runFileBasedMigrations as qr, runFrameworkBootstrap as Jr, runPlannedMigrations as Yr } from "@voltro/database/sql";
|
|
@@ -4182,15 +4180,15 @@ ${a.join("\n\n")}\n`);
|
|
|
4182
4180
|
return (await zc(t))[Rc[e]];
|
|
4183
4181
|
}, Vc = [
|
|
4184
4182
|
{
|
|
4185
|
-
table:
|
|
4183
|
+
table: Kn,
|
|
4186
4184
|
when: "always"
|
|
4187
4185
|
},
|
|
4188
4186
|
{
|
|
4189
|
-
table:
|
|
4187
|
+
table: Jn,
|
|
4190
4188
|
when: "always"
|
|
4191
4189
|
},
|
|
4192
4190
|
{
|
|
4193
|
-
table:
|
|
4191
|
+
table: Gn,
|
|
4194
4192
|
when: "always"
|
|
4195
4193
|
},
|
|
4196
4194
|
{
|
|
@@ -4226,11 +4224,11 @@ ${a.join("\n\n")}\n`);
|
|
|
4226
4224
|
when: "schedules"
|
|
4227
4225
|
},
|
|
4228
4226
|
{
|
|
4229
|
-
table:
|
|
4227
|
+
table: V,
|
|
4230
4228
|
when: "webhooks"
|
|
4231
4229
|
},
|
|
4232
4230
|
{
|
|
4233
|
-
table:
|
|
4231
|
+
table: ur,
|
|
4234
4232
|
when: "webhooks"
|
|
4235
4233
|
},
|
|
4236
4234
|
{
|
|
@@ -4262,7 +4260,7 @@ ${a.join("\n\n")}\n`);
|
|
|
4262
4260
|
when: "always"
|
|
4263
4261
|
},
|
|
4264
4262
|
{
|
|
4265
|
-
table:
|
|
4263
|
+
table: Wn,
|
|
4266
4264
|
when: "always"
|
|
4267
4265
|
},
|
|
4268
4266
|
{
|
|
@@ -4270,12 +4268,12 @@ ${a.join("\n\n")}\n`);
|
|
|
4270
4268
|
when: "always"
|
|
4271
4269
|
},
|
|
4272
4270
|
{
|
|
4273
|
-
table:
|
|
4271
|
+
table: z,
|
|
4274
4272
|
when: "always"
|
|
4275
4273
|
}
|
|
4276
4274
|
], Hc = (e) => {
|
|
4277
4275
|
let t = Vc.filter((t) => t.when === "always" || t.when === "workflows" && e.workflows || t.when === "schedules" && e.schedules || t.when === "webhooks" && e.webhooks || t.when === "traces" && e.traces || t.when === "undo" && e.undo === !0).map((e) => e.table);
|
|
4278
|
-
return e.cdc === !0 && t.push(e.cdcDialect === "mssql" ?
|
|
4276
|
+
return e.cdc === !0 && t.push(e.cdcDialect === "mssql" ? qn : Un), t;
|
|
4279
4277
|
}, Uc = (e) => {
|
|
4280
4278
|
let t = e.startsWith("@") ? e.replace(/^@[^/]+\//, "") : e;
|
|
4281
4279
|
return (t.startsWith("plugin-") ? t.slice(7) : t).replace(/-([a-zA-Z0-9])/g, (e, t) => t.toUpperCase());
|
|
@@ -4627,7 +4625,7 @@ ${a.join("\n\n")}\n`);
|
|
|
4627
4625
|
let n = await t.query({
|
|
4628
4626
|
table: "_voltro_traces",
|
|
4629
4627
|
order: [],
|
|
4630
|
-
predicate:
|
|
4628
|
+
predicate: ir("startedAt", e),
|
|
4631
4629
|
projection: ["id"],
|
|
4632
4630
|
skip: void 0,
|
|
4633
4631
|
take: c
|
|
@@ -4741,7 +4739,7 @@ ${a.join("\n\n")}\n`);
|
|
|
4741
4739
|
table: "_voltro_workflow_runs",
|
|
4742
4740
|
timeColumn: "completedAt",
|
|
4743
4741
|
ttlMs: Ot(n.VOLTRO_WORKFLOW_RUNS_TTL_HOURS, 720),
|
|
4744
|
-
where:
|
|
4742
|
+
where: ar(B("status", "succeeded"), B("status", "failed"), B("status", "cancelled"))
|
|
4745
4743
|
});
|
|
4746
4744
|
let r = e.raw?.bind(e), i = (e) => {
|
|
4747
4745
|
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)) throw Error(`retention: unsafe identifier "${e}"`);
|
|
@@ -4756,7 +4754,7 @@ ${a.join("\n\n")}\n`);
|
|
|
4756
4754
|
};
|
|
4757
4755
|
return (await r(e)).length;
|
|
4758
4756
|
}
|
|
4759
|
-
let d =
|
|
4757
|
+
let d = ir(l, a), f = s === void 0 ? d : Zn(d, s), p = await e.query({
|
|
4760
4758
|
table: c,
|
|
4761
4759
|
order: [],
|
|
4762
4760
|
predicate: f,
|
|
@@ -4781,7 +4779,7 @@ ${a.join("\n\n")}\n`);
|
|
|
4781
4779
|
let { store: t, schemaRegistry: n, cache: r, kv: i, webhooksService: a, workflowsProxy: o, eventTriggers: s, namespaceIsolationOn: c, onEventEmit: l } = e, u = (e, t) => {
|
|
4782
4780
|
if (!c) return e;
|
|
4783
4781
|
if (e.withNamespace === void 0) throw Error("tenantIsolation=namespace is set but the active store has no physical-namespace support (withNamespace).");
|
|
4784
|
-
return e.withNamespace(
|
|
4782
|
+
return e.withNamespace(cr(t.tenantId));
|
|
4785
4783
|
};
|
|
4786
4784
|
return (e, c = t, d, f = "app-context", p) => {
|
|
4787
4785
|
let m = u(c, e.subject), h = o === void 0 ? void 0 : dt(o, {
|
|
@@ -4992,7 +4990,7 @@ ${a.join("\n\n")}\n`);
|
|
|
4992
4990
|
t.warn("seed: failed to import", { file: r }, e);
|
|
4993
4991
|
continue;
|
|
4994
4992
|
}
|
|
4995
|
-
let i = (e.default &&
|
|
4993
|
+
let i = (e.default && nr(e.default) ? e.default : void 0) ?? Object.values(e).find(nr);
|
|
4996
4994
|
if (!i) {
|
|
4997
4995
|
t.warn("seed: no defineSeed export", { file: r });
|
|
4998
4996
|
continue;
|
|
@@ -5021,7 +5019,7 @@ ${a.join("\n\n")}\n`);
|
|
|
5021
5019
|
if (i.length === 1) {
|
|
5022
5020
|
let e = i[0];
|
|
5023
5021
|
a = B(e, n[e]);
|
|
5024
|
-
} else a =
|
|
5022
|
+
} else a = Zn(...i.map((e) => B(e, n[e])));
|
|
5025
5023
|
let o = (await e.query({
|
|
5026
5024
|
table: t,
|
|
5027
5025
|
order: [],
|
|
@@ -6590,7 +6588,7 @@ ${a.join("\n\n")}\n`);
|
|
|
6590
6588
|
}, Kd = (e) => {
|
|
6591
6589
|
if (!e) return;
|
|
6592
6590
|
let t = e.workflowName ?? e.tag, n = [];
|
|
6593
|
-
if (t !== void 0 && n.push(B("tag", t)), e.status !== void 0 && n.push(B("status", e.status)), n.length !== 0) return n.length === 1 ? n[0] :
|
|
6591
|
+
if (t !== void 0 && n.push(B("tag", t)), e.status !== void 0 && n.push(B("status", e.status)), n.length !== 0) return n.length === 1 ? n[0] : Zn(...n);
|
|
6594
6592
|
}, qd = async (e, t) => {
|
|
6595
6593
|
let n = Math.max(0, t?.offset ?? 0), r = Math.max(1, Math.min(500, t?.limit ?? 50)), i = Kd(t);
|
|
6596
6594
|
return {
|
|
@@ -7168,11 +7166,11 @@ ${a.join("\n\n")}\n`);
|
|
|
7168
7166
|
if (Xf.test(e)) {
|
|
7169
7167
|
let e = await t(n);
|
|
7170
7168
|
for (let t of Object.values(e)) lp(t) && (m.set(t.tableName, t), fp(t) && f.add(t.tableName), mp(t) && p.add(t.tableName));
|
|
7171
|
-
|
|
7169
|
+
sr(e);
|
|
7172
7170
|
continue;
|
|
7173
7171
|
}
|
|
7174
7172
|
if (Zf.test(e)) {
|
|
7175
|
-
|
|
7173
|
+
sr(await t(n)) === 0 && $.warn("skipping relations file — no relations(...) export found", { file: n });
|
|
7176
7174
|
continue;
|
|
7177
7175
|
}
|
|
7178
7176
|
if (Bf.test(e)) {
|
|
@@ -7284,9 +7282,9 @@ ${a.join("\n\n")}\n`);
|
|
|
7284
7282
|
executor: l
|
|
7285
7283
|
});
|
|
7286
7284
|
}
|
|
7287
|
-
m.has("actors") || m.set("actors",
|
|
7285
|
+
m.has("actors") || m.set("actors", Yn);
|
|
7288
7286
|
let _ = m.get("actors"), v = m.get("tenants");
|
|
7289
|
-
(_ !== void 0 || v !== void 0) &&
|
|
7287
|
+
(_ !== void 0 || v !== void 0) && or({
|
|
7290
7288
|
..._ === void 0 ? {} : { actors: () => _ },
|
|
7291
7289
|
...v === void 0 ? {} : { tenants: () => v }
|
|
7292
7290
|
});
|
|
@@ -7376,13 +7374,13 @@ ${a.join("\n\n")}\n`);
|
|
|
7376
7374
|
}, Tp = (e) => (process.env.DB_DIALECT ?? e?.store ?? "memory").toLowerCase(), Ep = async (e, t) => {
|
|
7377
7375
|
let n = Tp(e);
|
|
7378
7376
|
if (n === "memory") return $.info("sql dialect resolved: memory — in-process store, no persistence"), new ge({});
|
|
7379
|
-
let i = (process.env.CDC ?? "1") !== "0", a = await Bc(n), o = a.id === "postgres" ? "LISTEN/NOTIFY" :
|
|
7377
|
+
let i = (process.env.CDC ?? "1") !== "0", a = await Bc(n), o = a.id === "postgres" ? "LISTEN/NOTIFY" : rr(a.id) ? "in-process bus" : a.id === "mariadb" ? "binlog CDC (ROW)" : a.id === "mssql" ? "Change Tracking (polled)" : a.id === "mysql" ? "binlog CDC (ROW)" : "inline only", s = a.id === "postgres" ? "native" : a.id === "mysql" ? "INSERT/UPDATE/DELETE then SELECT (no RETURNING)" : a.id === "mariadb" ? "native (INSERT/DELETE); UPDATE then SELECT" : a.id === "mssql" ? "OUTPUT INSERTED/DELETED" : rr(a.id) ? "native" : "unknown";
|
|
7380
7378
|
$.info(`sql dialect resolved: ${a.id} — CDC: ${i ? o : "inline emit (CDC=0)"}, RETURNING: ${s}`);
|
|
7381
7379
|
let c = yp(), { summary: l, fromEnv: u } = Sp(c);
|
|
7382
7380
|
$.info(`db connection: ${l}${u ? "" : " (DEFAULT FALLBACK — no DB_URL / PG_HOST set)"}`), u || $.warn("db connection: falling back to localhost:5432/app — no DB_URL or PG_HOST env var set.\n If this app should run against its OWN postgres (e.g. its docker-compose), set DB_URL.\n Copy `.env.example` to `.env` in the app dir, or set DB_URL in the shell.\n Otherwise this app is silently using whatever DB is at localhost:5432/app — which is\n voltro-starter's docker default + may carry foreign tables that confuse the planner.");
|
|
7383
7381
|
let d;
|
|
7384
7382
|
if (i && (a.id === "mysql" || a.id === "mariadb")) {
|
|
7385
|
-
let { connectionFromConfig: e } = await zc("@voltro/sql-mysql"), t = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, n =
|
|
7383
|
+
let { connectionFromConfig: e } = await zc("@voltro/sql-mysql"), t = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, n = Xn().map((e) => e.tableName).filter((e) => !e.startsWith("_voltro_"));
|
|
7386
7384
|
d = {
|
|
7387
7385
|
serverId: wp(t),
|
|
7388
7386
|
replicaId: t,
|
|
@@ -7394,7 +7392,7 @@ ${a.join("\n\n")}\n`);
|
|
|
7394
7392
|
reactiveTables: n.length
|
|
7395
7393
|
});
|
|
7396
7394
|
} else if (i && a.id === "mssql") {
|
|
7397
|
-
let { connectionFromConfig: e } = await zc("@voltro/sql-mssql"), t = e(c), n = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, r =
|
|
7395
|
+
let { connectionFromConfig: e } = await zc("@voltro/sql-mssql"), t = e(c), n = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, r = Xn().map((e) => e.tableName).filter((e) => !e.startsWith("_voltro_"));
|
|
7398
7396
|
d = {
|
|
7399
7397
|
serverId: 0,
|
|
7400
7398
|
replicaId: n,
|
|
@@ -7424,7 +7422,7 @@ ${a.join("\n\n")}\n`);
|
|
|
7424
7422
|
region: null,
|
|
7425
7423
|
localityEnabled: !1
|
|
7426
7424
|
}), f;
|
|
7427
|
-
if (
|
|
7425
|
+
if (rr(a.id)) return $.warn(`read replicas: not applicable (${a.id} is single-process); ignoring DB_REPLICA_URLS`), r.recordReplication({
|
|
7428
7426
|
replicaCount: 0,
|
|
7429
7427
|
rywPolicy: "off",
|
|
7430
7428
|
rywStore: "memory",
|
|
@@ -7587,7 +7585,7 @@ ${a.join("\n\n")}\n`);
|
|
|
7587
7585
|
}
|
|
7588
7586
|
return t;
|
|
7589
7587
|
})();
|
|
7590
|
-
for (let e of I)
|
|
7588
|
+
for (let e of I) er(e);
|
|
7591
7589
|
let xe = Nd({
|
|
7592
7590
|
plugins: F?.plugins ?? [],
|
|
7593
7591
|
appName: F?.name ?? i(t),
|
|
@@ -7664,7 +7662,7 @@ ${a.join("\n\n")}\n`);
|
|
|
7664
7662
|
"__voltro.undo.redo"
|
|
7665
7663
|
] }));
|
|
7666
7664
|
let qe = $.child("aggregate"), Je = v.filter((e) => Yf.test(e)), Ye = Je.length > 0 ? await zu(Je, qe) : [], rt = Ye.map((e) => e.definition.name);
|
|
7667
|
-
for (let e of
|
|
7665
|
+
for (let e of $n()) $.warn(`identifier length · ${e}`);
|
|
7668
7666
|
let ot = F?.restRoutes ?? [], lt = v.filter((e) => qf.test(e)).length, pt = v.filter((e) => Wf.test(e)).length, ht = v.filter((e) => /\.seed\.ts$/.test(e)).length, gt = v.filter((e) => Kf.test(e)).length, _t = v.filter((e) => hd.test(e)).length;
|
|
7669
7667
|
$.info("app surface", {
|
|
7670
7668
|
queryCount: O.length,
|
|
@@ -7865,21 +7863,21 @@ ${a.join("\n\n")}\n`);
|
|
|
7865
7863
|
"mariadb",
|
|
7866
7864
|
"mysql",
|
|
7867
7865
|
"mssql"
|
|
7868
|
-
].includes(z) ? "advisoryLock" : "single"),
|
|
7866
|
+
].includes(z) ? "advisoryLock" : "single"), Yn = Jn === "cluster" && (/* @__PURE__ */ new Set([
|
|
7869
7867
|
"postgres",
|
|
7870
7868
|
"mysql",
|
|
7871
7869
|
"mariadb",
|
|
7872
7870
|
"mssql"
|
|
7873
|
-
])).has(z),
|
|
7871
|
+
])).has(z), Xn = Yn ? P.filter((e) => (e.trigger ?? qn) === "self").map((e) => Ln({
|
|
7874
7872
|
name: e.name,
|
|
7875
7873
|
cron: Ie(e),
|
|
7876
7874
|
execute: async () => {
|
|
7877
7875
|
await Gn?.fireFromCluster(e.name);
|
|
7878
7876
|
}
|
|
7879
|
-
})) : [],
|
|
7877
|
+
})) : [], nr = await (async () => {
|
|
7880
7878
|
if (z === "memory") return Sn.layerMemory;
|
|
7881
|
-
let e = await Bc(z), t = e.makeSqlLayer(yp()), n = Bn({ sqliteFamily:
|
|
7882
|
-
if ($.info(`workflow engine: cluster-${n}, dialect=${e.id}` + (n === "memory" ? " — single-process durable replay, no horizontal scaling" + (
|
|
7879
|
+
let e = await Bc(z), t = e.makeSqlLayer(yp()), n = Bn({ sqliteFamily: rr(e.id) });
|
|
7880
|
+
if ($.info(`workflow engine: cluster-${n}, dialect=${e.id}` + (n === "memory" ? " — single-process durable replay, no horizontal scaling" + (rr(e.id) ? "" : " (VOLTRO_WORKFLOW_RUNNER_STORAGE=memory: SqlRunnerStorage/cluster_runners + GET_LOCK skipped)") : "")), e.id === "mssql") {
|
|
7883
7881
|
let e = await fu(process.cwd());
|
|
7884
7882
|
e && $.warn(e);
|
|
7885
7883
|
}
|
|
@@ -7888,11 +7886,11 @@ ${a.join("\n\n")}\n`);
|
|
|
7888
7886
|
runnerStorage: n,
|
|
7889
7887
|
dialectId: e.id,
|
|
7890
7888
|
...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {},
|
|
7891
|
-
...
|
|
7889
|
+
...Xn.length > 0 ? { extraShardingLayers: Xn } : {}
|
|
7892
7890
|
});
|
|
7893
7891
|
})();
|
|
7894
7892
|
$.info("workflow engine selected", { engine: z === "postgres" ? "cluster-postgres" : "in-memory" });
|
|
7895
|
-
let
|
|
7893
|
+
let ir, or = /* @__PURE__ */ new Map(), sr = () => `wfctx_${globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`, cr = async (e, t, n) => {
|
|
7896
7894
|
let r = {
|
|
7897
7895
|
...n,
|
|
7898
7896
|
source: n.source ?? `workflow:${e}`
|
|
@@ -7917,7 +7915,7 @@ ${a.join("\n\n")}\n`);
|
|
|
7917
7915
|
createdAt: /* @__PURE__ */ new Date()
|
|
7918
7916
|
};
|
|
7919
7917
|
n[0] === void 0 ? await L.insert("_voltro_workflow_start_contexts", {
|
|
7920
|
-
id:
|
|
7918
|
+
id: sr(),
|
|
7921
7919
|
...i
|
|
7922
7920
|
}) : await L.update("_voltro_workflow_start_contexts", n[0].id, i);
|
|
7923
7921
|
} catch (n) {
|
|
@@ -7961,7 +7959,7 @@ ${a.join("\n\n")}\n`);
|
|
|
7961
7959
|
});
|
|
7962
7960
|
return;
|
|
7963
7961
|
}
|
|
7964
|
-
}, V = M.length > 0 ? it(() =>
|
|
7962
|
+
}, V = M.length > 0 ? it(() => ir) : void 0, dr = $.child("webhooks"), fr = v.filter((e) => Kf.test(e)), H = fr.length > 0 ? await md(fr, dr) : {
|
|
7965
7963
|
outgoing: [],
|
|
7966
7964
|
incoming: [],
|
|
7967
7965
|
providers: []
|
|
@@ -8066,7 +8064,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8066
8064
|
}), kr = () => {
|
|
8067
8065
|
let e = U.subscriptionSnapshot(), t = U.matcherStats(), n = e.map((e) => {
|
|
8068
8066
|
let t = [];
|
|
8069
|
-
for (let n of
|
|
8067
|
+
for (let n of lr(e.predicate)) n.conjunctive && t.push(n.column);
|
|
8070
8068
|
return {
|
|
8071
8069
|
fingerprint: e.fingerprint,
|
|
8072
8070
|
table: e.table,
|
|
@@ -8146,8 +8144,8 @@ ${a.join("\n\n")}\n`);
|
|
|
8146
8144
|
});
|
|
8147
8145
|
let _i = (e, t) => kt(e.pipe(y.provide(nt(t)), y.provide(gi), y.provide(Df))), vi = ct(I);
|
|
8148
8146
|
if ((process.env.VOLTRO_INDEX_AUDIT ?? "on") !== "off") {
|
|
8149
|
-
let e =
|
|
8150
|
-
for (let n of e) $.warn("\n" +
|
|
8147
|
+
let e = Qn(I), t = process.stdout.isTTY === !0 && (process.env.NO_COLOR ?? "") === "";
|
|
8148
|
+
for (let n of e) $.warn("\n" + tr(n, {
|
|
8151
8149
|
color: t,
|
|
8152
8150
|
indent: " "
|
|
8153
8151
|
}));
|
|
@@ -8167,7 +8165,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8167
8165
|
kv: en
|
|
8168
8166
|
}, t = H.outgoing.map((e) => e.descriptor);
|
|
8169
8167
|
W = oi(e, async (n) => {
|
|
8170
|
-
let r = ci.execute(n).pipe(y.provide(ci.toLayer(ai(e, { events: t })).pipe(S.provideMerge(
|
|
8168
|
+
let r = ci.execute(n).pipe(y.provide(ci.toLayer(ai(e, { events: t })).pipe(S.provideMerge(nr))));
|
|
8171
8169
|
y.runPromise(r).catch((e) => {
|
|
8172
8170
|
dr.error("deliverWebhook workflow crashed", {
|
|
8173
8171
|
deliveryId: n.deliveryId,
|
|
@@ -8191,7 +8189,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8191
8189
|
}), xi = async () => {
|
|
8192
8190
|
if (P.length === 0) return;
|
|
8193
8191
|
let e = process.env.HOSTNAME ?? `pid-${process.pid}`, t;
|
|
8194
|
-
|
|
8192
|
+
Yn ? t = Mt : Jn === "cluster" ? ($.warn("scheduling.coordination=cluster needs store=postgres — falling back to single (dev/memory)"), t = Mt) : Jn === "advisoryLock" ? z === "memory" ? ($.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single (memory)"), t = Mt) : t = Ze(L, e, {
|
|
8195
8193
|
info: (e, t) => $.info(e, t ?? {}),
|
|
8196
8194
|
warn: (e, t) => $.warn(e, t ?? {})
|
|
8197
8195
|
}) : t = Mt;
|
|
@@ -8201,7 +8199,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8201
8199
|
coordinator: t,
|
|
8202
8200
|
defaultTrigger: qn,
|
|
8203
8201
|
replicaId: e,
|
|
8204
|
-
armSelf: !
|
|
8202
|
+
armSelf: !Yn,
|
|
8205
8203
|
dormancy: F?.dormancy ?? "always-on",
|
|
8206
8204
|
dormancyTenantId: kf,
|
|
8207
8205
|
buildContext: ({ traceId: e, scheduleName: t }) => bi({
|
|
@@ -8220,15 +8218,15 @@ ${a.join("\n\n")}\n`);
|
|
|
8220
8218
|
...n === void 0 ? {} : { interceptFire: n }
|
|
8221
8219
|
}), $.info("scheduler ready", {
|
|
8222
8220
|
schedules: P.length,
|
|
8223
|
-
coordination:
|
|
8224
|
-
clusterCrons:
|
|
8221
|
+
coordination: Yn ? "cluster" : t.kind,
|
|
8222
|
+
clusterCrons: Xn.length
|
|
8225
8223
|
}), process.on("beforeExit", () => {
|
|
8226
8224
|
Gn?.shutdown();
|
|
8227
8225
|
});
|
|
8228
8226
|
}, G = {}, Si = (e, t) => Ee(De(e, ce, t.subject.tenantId), le), Ci = /* @__PURE__ */ new Set(), wi = (e) => {
|
|
8229
8227
|
if (e.usingIndex !== void 0 || e.predicate === void 0) return;
|
|
8230
8228
|
let t = /* @__PURE__ */ new Set();
|
|
8231
|
-
for (let n of
|
|
8229
|
+
for (let n of lr(e.predicate)) n.conjunctive && t.add(n.column);
|
|
8232
8230
|
if (t.size === 0 || vi.anyFieldIndexed(e.table, t)) return;
|
|
8233
8231
|
let n = `${e.table}::${[...t].sort().join(",")}`;
|
|
8234
8232
|
Ci.has(n) || (Ci.add(n), $.warn("non-indexed predicate — slow at scale", {
|
|
@@ -8302,7 +8300,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8302
8300
|
column: "startedAt",
|
|
8303
8301
|
direction: "desc"
|
|
8304
8302
|
}],
|
|
8305
|
-
predicate:
|
|
8303
|
+
predicate: ar(B("id", t), B("executionId", t)),
|
|
8306
8304
|
take: 1,
|
|
8307
8305
|
skip: void 0,
|
|
8308
8306
|
projection: void 0
|
|
@@ -8318,7 +8316,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8318
8316
|
column: "startedAt",
|
|
8319
8317
|
direction: "desc"
|
|
8320
8318
|
}],
|
|
8321
|
-
predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] :
|
|
8319
|
+
predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : Zn(...n),
|
|
8322
8320
|
take: r,
|
|
8323
8321
|
skip: void 0,
|
|
8324
8322
|
projection: void 0
|
|
@@ -8500,13 +8498,13 @@ ${a.join("\n\n")}\n`);
|
|
|
8500
8498
|
}, qi = [...ft(M, {
|
|
8501
8499
|
buildContext: Li,
|
|
8502
8500
|
resolveStartContext: ur
|
|
8503
|
-
}, (e, t, n) => Ki(e.definition.name, e.definition, t, n)), ...ie], Ji = qi.length > 0 ? S.mergeAll(...qi) : S.empty, Yi = C.make(Ji.pipe(S.provideMerge(
|
|
8501
|
+
}, (e, t, n) => Ki(e.definition.name, e.definition, t, n)), ...ie], Ji = qi.length > 0 ? S.mergeAll(...qi) : S.empty, Yi = C.make(Ji.pipe(S.provideMerge(nr)));
|
|
8504
8502
|
process.on("beforeExit", () => {
|
|
8505
8503
|
Yi.dispose();
|
|
8506
|
-
}),
|
|
8504
|
+
}), ir = M.length > 0 ? ut({
|
|
8507
8505
|
workflows: M,
|
|
8508
8506
|
runEffect: (e) => Yi.runPromise(e),
|
|
8509
|
-
rememberStartContext:
|
|
8507
|
+
rememberStartContext: cr,
|
|
8510
8508
|
signal: async (e, t, n) => {
|
|
8511
8509
|
let r = await Nn({
|
|
8512
8510
|
store: L,
|
|
@@ -8801,7 +8799,7 @@ ${a.join("\n\n")}\n`);
|
|
|
8801
8799
|
return {
|
|
8802
8800
|
subscriptions: e.map((e) => {
|
|
8803
8801
|
let t = [];
|
|
8804
|
-
for (let n of
|
|
8802
|
+
for (let n of lr(e.predicate)) n.conjunctive && t.push(n.column);
|
|
8805
8803
|
return {
|
|
8806
8804
|
fingerprint: e.fingerprint,
|
|
8807
8805
|
table: e.table,
|
|
@@ -9260,7 +9258,7 @@ ${a.join("\n\n")}\n`);
|
|
|
9260
9258
|
...e.description === void 0 ? {} : { description: e.description },
|
|
9261
9259
|
nextFiringAt: mt(e).toISOString()
|
|
9262
9260
|
})),
|
|
9263
|
-
coordination:
|
|
9261
|
+
coordination: Yn ? "cluster" : Jn === "advisoryLock" && z === "postgres" ? "advisoryLock" : "single"
|
|
9264
9262
|
}),
|
|
9265
9263
|
inspectScheduleRuns: async (e) => {
|
|
9266
9264
|
let t = Math.max(0, e.offset ?? 0), n = Math.max(1, Math.min(500, e.limit ?? 50)), r = e.name === void 0 ? void 0 : B("name", e.name), i = await L.query({
|
|
@@ -9310,7 +9308,7 @@ ${a.join("\n\n")}\n`);
|
|
|
9310
9308
|
let e = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, t = z, n = t === "memory", r = n ? "none" : Bn({ sqliteFamily: t === "sqlite" || t === "turso" }), i = zn({
|
|
9311
9309
|
runnerStorage: r === "sql" ? "sql" : "memory",
|
|
9312
9310
|
...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {}
|
|
9313
|
-
}), a = !n && (process.env.CDC ?? "1") !== "0", o = t === "postgres" ? "LISTEN/NOTIFY" : t === "sqlite" || t === "turso" ? "in-process bus" : t === "mariadb" || t === "mysql" ? "binlog CDC (ROW)" : t === "mssql" ? "inline only" : t === "memory" ? "none (single-process)" : "inline only", s = t === "postgres" || t === "mariadb" || t === "mssql" ? "full" : t === "mysql" ? "inline-only" : t === "sqlite" || t === "turso" ? "single-process" : "none", c =
|
|
9311
|
+
}), a = !n && (process.env.CDC ?? "1") !== "0", o = t === "postgres" ? "LISTEN/NOTIFY" : t === "sqlite" || t === "turso" ? "in-process bus" : t === "mariadb" || t === "mysql" ? "binlog CDC (ROW)" : t === "mssql" ? "inline only" : t === "memory" ? "none (single-process)" : "inline only", s = t === "postgres" || t === "mariadb" || t === "mssql" ? "full" : t === "mysql" ? "inline-only" : t === "sqlite" || t === "turso" ? "single-process" : "none", c = Yn ? "cluster" : Jn === "advisoryLock" && z === "postgres" ? "advisoryLock" : "single", l = a && t === "mariadb" ? wp(e) : void 0, u = {
|
|
9314
9312
|
replicaId: e,
|
|
9315
9313
|
dialect: t,
|
|
9316
9314
|
runnerHost: i.host,
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltro/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "The `voltro` CLI — dev server, codegen, migrations, project scaffolding, agent-docs seeding, and production serve.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|
|
@@ -49,22 +49,22 @@
|
|
|
49
49
|
"@effect/workflow": "^0.18.2",
|
|
50
50
|
"@tailwindcss/vite": "^4.3.2",
|
|
51
51
|
"@vitejs/plugin-react": "^6.0.3",
|
|
52
|
-
"@voltro/ai": "0.2.
|
|
53
|
-
"@voltro/cache": "0.2.
|
|
54
|
-
"@voltro/data-transfer": "0.2.
|
|
55
|
-
"@voltro/database": "0.2.
|
|
56
|
-
"@voltro/env": "0.2.
|
|
57
|
-
"@voltro/kv": "0.2.
|
|
58
|
-
"@voltro/logger": "0.2.
|
|
59
|
-
"@voltro/plugin-auth": "0.2.
|
|
60
|
-
"@voltro/plugin-broadcast": "0.2.
|
|
61
|
-
"@voltro/plugin-mail": "0.2.
|
|
62
|
-
"@voltro/plugin-storage": "0.2.
|
|
63
|
-
"@voltro/plugin-webhooks": "0.2.
|
|
64
|
-
"@voltro/protocol": "0.2.
|
|
65
|
-
"@voltro/runtime": "0.2.
|
|
66
|
-
"@voltro/serverless": "0.2.
|
|
67
|
-
"@voltro/workflow": "0.2.
|
|
52
|
+
"@voltro/ai": "0.2.1",
|
|
53
|
+
"@voltro/cache": "0.2.1",
|
|
54
|
+
"@voltro/data-transfer": "0.2.1",
|
|
55
|
+
"@voltro/database": "0.2.1",
|
|
56
|
+
"@voltro/env": "0.2.1",
|
|
57
|
+
"@voltro/kv": "0.2.1",
|
|
58
|
+
"@voltro/logger": "0.2.1",
|
|
59
|
+
"@voltro/plugin-auth": "0.2.1",
|
|
60
|
+
"@voltro/plugin-broadcast": "0.2.1",
|
|
61
|
+
"@voltro/plugin-mail": "0.2.1",
|
|
62
|
+
"@voltro/plugin-storage": "0.2.1",
|
|
63
|
+
"@voltro/plugin-webhooks": "0.2.1",
|
|
64
|
+
"@voltro/protocol": "0.2.1",
|
|
65
|
+
"@voltro/runtime": "0.2.1",
|
|
66
|
+
"@voltro/serverless": "0.2.1",
|
|
67
|
+
"@voltro/workflow": "0.2.1",
|
|
68
68
|
"chokidar": "^5.0.0",
|
|
69
69
|
"esbuild": "^0.28.0",
|
|
70
70
|
"ioredis": "^5.11.1",
|
|
@@ -11,16 +11,16 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@effect/platform": "^0.96.1",
|
|
13
13
|
"@effect/rpc": "^0.75.1",
|
|
14
|
-
"@voltro/ai": "0.2.
|
|
15
|
-
"@voltro/cli": "0.2.
|
|
16
|
-
"@voltro/database": "0.2.
|
|
17
|
-
"@voltro/env": "0.2.
|
|
18
|
-
"@voltro/protocol": "0.2.
|
|
19
|
-
"@voltro/runtime": "0.2.
|
|
14
|
+
"@voltro/ai": "0.2.1",
|
|
15
|
+
"@voltro/cli": "0.2.1",
|
|
16
|
+
"@voltro/database": "0.2.1",
|
|
17
|
+
"@voltro/env": "0.2.1",
|
|
18
|
+
"@voltro/protocol": "0.2.1",
|
|
19
|
+
"@voltro/runtime": "0.2.1",
|
|
20
20
|
"effect": "^3.21.2"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@voltro/testing": "0.2.
|
|
23
|
+
"@voltro/testing": "0.2.1",
|
|
24
24
|
"typescript": "^5.7.0",
|
|
25
25
|
"vitest": "^3.0.0"
|
|
26
26
|
}
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.2.
|
|
16
|
-
"@voltro/database": "0.2.
|
|
17
|
-
"@voltro/env": "0.2.
|
|
18
|
-
"@voltro/plugin-auth": "0.2.
|
|
19
|
-
"@voltro/protocol": "0.2.
|
|
20
|
-
"@voltro/runtime": "0.2.
|
|
21
|
-
"@voltro/sql-postgres": "0.2.
|
|
15
|
+
"@voltro/cli": "0.2.1",
|
|
16
|
+
"@voltro/database": "0.2.1",
|
|
17
|
+
"@voltro/env": "0.2.1",
|
|
18
|
+
"@voltro/plugin-auth": "0.2.1",
|
|
19
|
+
"@voltro/protocol": "0.2.1",
|
|
20
|
+
"@voltro/runtime": "0.2.1",
|
|
21
|
+
"@voltro/sql-postgres": "0.2.1",
|
|
22
22
|
"effect": "^3.21.2"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.2.
|
|
25
|
+
"@voltro/testing": "0.2.1",
|
|
26
26
|
"typescript": "^5.7.0",
|
|
27
27
|
"vitest": "^3.0.0"
|
|
28
28
|
}
|
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.2.
|
|
16
|
-
"@voltro/database": "0.2.
|
|
17
|
-
"@voltro/env": "0.2.
|
|
18
|
-
"@voltro/plugin-multitenancy": "0.2.
|
|
19
|
-
"@voltro/protocol": "0.2.
|
|
20
|
-
"@voltro/runtime": "0.2.
|
|
15
|
+
"@voltro/cli": "0.2.1",
|
|
16
|
+
"@voltro/database": "0.2.1",
|
|
17
|
+
"@voltro/env": "0.2.1",
|
|
18
|
+
"@voltro/plugin-multitenancy": "0.2.1",
|
|
19
|
+
"@voltro/protocol": "0.2.1",
|
|
20
|
+
"@voltro/runtime": "0.2.1",
|
|
21
21
|
"effect": "^3.21.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/testing": "0.2.
|
|
24
|
+
"@voltro/testing": "0.2.1",
|
|
25
25
|
"typescript": "^5.7.0",
|
|
26
26
|
"vitest": "^3.0.0"
|
|
27
27
|
}
|
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.2.
|
|
16
|
-
"@voltro/database": "0.2.
|
|
17
|
-
"@voltro/env": "0.2.
|
|
18
|
-
"@voltro/plugin-deactivation": "0.2.
|
|
19
|
-
"@voltro/protocol": "0.2.
|
|
20
|
-
"@voltro/runtime": "0.2.
|
|
15
|
+
"@voltro/cli": "0.2.1",
|
|
16
|
+
"@voltro/database": "0.2.1",
|
|
17
|
+
"@voltro/env": "0.2.1",
|
|
18
|
+
"@voltro/plugin-deactivation": "0.2.1",
|
|
19
|
+
"@voltro/protocol": "0.2.1",
|
|
20
|
+
"@voltro/runtime": "0.2.1",
|
|
21
21
|
"effect": "^3.21.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/testing": "0.2.
|
|
24
|
+
"@voltro/testing": "0.2.1",
|
|
25
25
|
"typescript": "^5.7.0",
|
|
26
26
|
"vitest": "^3.0.0"
|
|
27
27
|
}
|