@voltro/database 0.64.0 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import { $ as e, $t as t, A as n, At as r, B as i, Bt as a, C as o, Ct as s, D as c, Dt as l, E as u, Et as d, F as f, Ft as p, G as m, Gt as h, H as g, Ht as ee, I as te, It as ne, J as re, Jt as _, K as ie, Kt as ae, L as v, Lt as oe, M as y, Mt as se, N as b, Nt as ce, O as le, Ot as ue, P as de, Pt as fe, Q as pe, Qt as me, R as he, Rt as ge, S as _e, St as ve, T as ye, Tt as be, U as xe, Ut as Se, V as Ce, Vt as we, W as Te, Wt as Ee, X as De, Xt as x, Y as Oe, Yt as ke, Z as S, Zt as Ae, _ as je, _t as Me, a as Ne, an as C, at as Pe, b as Fe, bt as Ie, c as Le, ct as w, d as Re, dt as ze, en as Be, et as Ve, f as He, ft as Ue, g as We, gt as Ge, h as Ke, ht as qe, i as Je, in as Ye, it as Xe, j as Ze, jt as Qe, k as $e, kt as et, l as tt, lt as nt, m as rt, mt as it, n as at, nn as ot, nt as st, o as ct, on as T, ot as lt, p as ut, pt as dt, q as ft, qt as E, r as pt, rn as mt, rt as ht, s as gt, sn as _t, st as vt, t as yt, tn as bt, tt as xt, u as St, ut as Ct, v as wt, vt as Tt, w as Et, wt as Dt, x as Ot, xt as kt, y as D, yt as At, z as jt, zt as Mt } from "./frameworkLiveTables-BURogL9N.js";
2
- import { a as Nt, i as Pt, n as Ft, o as It, r as Lt, s as Rt, t as zt } from "./wire-B28cPjEp.js";
3
- import { Cause as Bt, Chunk as Vt, Data as Ht, Effect as O, Exit as Ut, Metric as k, MetricBoundaries as Wt, Option as A, Runtime as Gt, Schedule as Kt, Schema as j, Stream as qt } from "effect";
4
- import { createHash as Jt } from "node:crypto";
5
- import { AsyncLocalStorage as Yt } from "node:async_hooks";
6
- import { TransactionConnection as Xt } from "@effect/sql/SqlClient";
7
- import { ansi as M } from "@voltro/logger";
8
- import { SqlClient as Zt } from "@effect/sql";
1
+ import { $ as e, $t as t, A as n, At as r, B as i, Bt as a, C as o, Ct as s, D as c, Dt as l, E as u, Et as d, F as f, Ft as p, G as m, Gt as h, H as g, Ht as _, I as v, It as ee, J as te, Jt as y, K as ne, Kt as re, L as b, Lt as ie, M as x, Mt as ae, N as oe, Nt as se, O as ce, Ot as le, P as ue, Pt as de, Q as fe, Qt as pe, R as me, Rt as he, S as ge, St as _e, T as ve, Tt as ye, U as be, Ut as xe, V as Se, Vt as Ce, W as we, Wt as Te, X as Ee, Xt as S, Y as De, Yt as Oe, Z as C, Zt as ke, _ as Ae, _t as je, a as Me, an as w, at as Ne, b as Pe, bt as Fe, c as Ie, ct as T, d as Le, dt as Re, en as ze, et as Be, f as Ve, ft as He, g as Ue, gt as We, h as Ge, ht as Ke, i as qe, in as Je, it as Ye, j as Xe, jt as Ze, k as Qe, kt as $e, l as et, lt as tt, m as nt, mt as rt, n as it, nn as at, nt as ot, o as st, on as E, ot as ct, p as lt, pt as ut, q as dt, qt as D, r as ft, rn as pt, rt as mt, s as ht, sn as gt, st as _t, t as vt, tn as yt, tt as bt, u as xt, ut as St, v as Ct, vt as wt, w as Tt, wt as Et, x as Dt, xt as Ot, y as O, yt as kt, z as At, zt as jt } from "./frameworkLiveTables-CWbTSnjk.js";
2
+ import { a as Mt, i as Nt, n as Pt, o as Ft, r as It, s as Lt, t as Rt } from "./wire-B28cPjEp.js";
3
+ import { Cause as zt, Chunk as Bt, Data as Vt, Effect as k, Exit as Ht, Metric as A, MetricBoundaries as Ut, Option as j, Runtime as Wt, Schedule as Gt, Schema as M, Stream as Kt } from "effect";
4
+ import { createHash as qt } from "node:crypto";
5
+ import { AsyncLocalStorage as Jt } from "node:async_hooks";
6
+ import { TransactionConnection as Yt } from "@effect/sql/SqlClient";
7
+ import { ansi as N } from "@voltro/logger";
8
+ import { SqlClient as Xt } from "@effect/sql";
9
9
  //#region src/actorSnapshot.ts
10
- var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n) => {
10
+ var Zt = (e) => typeof e == "string" && e !== "" ? e : null, Qt = async (e, t, n) => {
11
11
  if (t != null && t !== "") try {
12
12
  let r = (await e.query({
13
13
  table: "actors",
@@ -23,20 +23,20 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
23
23
  }))[0];
24
24
  return r === void 0 ? void 0 : {
25
25
  id: t,
26
- type: Qt(r.kind) ?? n,
27
- displayName: Qt(r.displayName),
28
- email: Qt(r.email)
26
+ type: Zt(r.kind) ?? n,
27
+ displayName: Zt(r.displayName),
28
+ email: Zt(r.email)
29
29
  };
30
30
  } catch {
31
31
  return;
32
32
  }
33
- }, en = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", tn = (e) => {
33
+ }, $t = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", en = (e) => {
34
34
  let t = [];
35
35
  for (let [n, r] of Object.entries(e.fields)) r.type === "array" && t.push(n);
36
36
  return t;
37
- }, nn = (e, t, n) => {
38
- if (!en(n) || !t) return e;
39
- let r = tn(t);
37
+ }, tn = (e, t, n) => {
38
+ if (!$t(n) || !t) return e;
39
+ let r = en(t);
40
40
  if (r.length === 0) return e;
41
41
  let i = { ...e };
42
42
  for (let e of r) {
@@ -44,9 +44,9 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
44
44
  Array.isArray(t) && (i[e] = JSON.stringify(t));
45
45
  }
46
46
  return i;
47
- }, rn = (e, t, n) => {
48
- if (!en(n) || !t) return e;
49
- let r = tn(t);
47
+ }, nn = (e, t, n) => {
48
+ if (!$t(n) || !t) return e;
49
+ let r = en(t);
50
50
  return r.length === 0 ? e : e.map((e) => {
51
51
  let t;
52
52
  for (let n of r) {
@@ -58,13 +58,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
58
58
  }
59
59
  return t ?? e;
60
60
  });
61
- }, an = "enc:v1:", on = "enc:v2:", sn = (e, t, n) => {
61
+ }, rn = "enc:v1:", an = "enc:v2:", on = (e, t, n) => {
62
62
  let r = `${e}:${t}`, i = n == null || n === "" ? void 0 : String(n);
63
63
  return i === void 0 ? { column: r } : {
64
64
  column: r,
65
65
  row: `${r}:${i}`
66
66
  };
67
- }, cn = (e) => typeof e == "string" && e.startsWith("enc:v2:"), ln = class extends Error {
67
+ }, sn = (e) => typeof e == "string" && e.startsWith("enc:v2:"), cn = class extends Error {
68
68
  _tag = "FieldDecryptionError";
69
69
  table;
70
70
  column;
@@ -72,7 +72,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
72
72
  constructor(e) {
73
73
  super(`column "${e.table}.${e.column}" is .encrypted() but could not be decrypted (${e.reason}) — the stored value was most likely encrypted under a different key`), this.name = "FieldDecryptionError", this.table = e.table, this.column = e.column, this.reason = e.reason;
74
74
  }
75
- }, un = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", dn = (e) => typeof e == "string" && (e.startsWith("enc:v1:") || e.startsWith("enc:v2:")), fn = (e, t, n) => e.encrypt(JSON.stringify(t), n), pn = /* @__PURE__ */ new Set([
75
+ }, ln = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", un = (e) => typeof e == "string" && (e.startsWith("enc:v1:") || e.startsWith("enc:v2:")), dn = (e, t, n) => e.encrypt(JSON.stringify(t), n), fn = /* @__PURE__ */ new Set([
76
76
  "text",
77
77
  "id",
78
78
  "reference",
@@ -80,51 +80,51 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
80
80
  "uuid",
81
81
  "email",
82
82
  "url"
83
- ]), mn = (e, t, n, r) => {
83
+ ]), pn = (e, t, n, r) => {
84
84
  let i = e.decrypt(t, r), a;
85
85
  try {
86
86
  a = JSON.parse(i);
87
87
  } catch {
88
88
  return i;
89
89
  }
90
- return typeof a == "string" ? a : n === void 0 || pn.has(n) ? i : a;
91
- }, hn = (e, t, n, r) => {
90
+ return typeof a == "string" ? a : n === void 0 || fn.has(n) ? i : a;
91
+ }, mn = (e, t, n, r) => {
92
92
  let i = e.decrypt(t, r);
93
93
  try {
94
- return typeof JSON.parse(i) == "string" ? !1 : n === void 0 || pn.has(n) ? !0 : void 0;
94
+ return typeof JSON.parse(i) == "string" ? !1 : n === void 0 || fn.has(n) ? !0 : void 0;
95
95
  } catch {
96
96
  return !0;
97
97
  }
98
- }, gn = (e, t) => e.fields[t]?.type, _n = (e) => {
98
+ }, hn = (e, t) => e.fields[t]?.type, gn = (e) => {
99
99
  let t = [];
100
100
  for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
101
101
  return t;
102
- }, vn = "id", yn = (e, t, n, r) => {
102
+ }, _n = "id", vn = (e, t, n, r) => {
103
103
  if (!t) return e;
104
- let i = _n(t);
104
+ let i = gn(t);
105
105
  if (i.length === 0) return e;
106
- let a = t.tableName ?? "?", o = r ?? e[vn], s = { ...e };
106
+ let a = t.tableName ?? "?", o = r ?? e[_n], s = { ...e };
107
107
  for (let e of i) {
108
108
  let t = s[e];
109
- if (!(t == null || dn(t))) {
109
+ if (!(t == null || un(t))) {
110
110
  if (!n) throw Error(`column "${a}.${e}" is .encrypted() but no field cipher is registered — set VOLTRO_FIELD_ENCRYPTION_KEY (\`voltro dev\` mints one; \`voltro serve\` refuses to boot without it)`);
111
- s[e] = fn(n, t, sn(a, e, o));
111
+ s[e] = dn(n, t, on(a, e, o));
112
112
  }
113
113
  }
114
114
  return s;
115
- }, bn = (e, t, n, r) => {
115
+ }, yn = (e, t, n, r) => {
116
116
  if (!t) return e;
117
- let i = _n(t);
117
+ let i = gn(t);
118
118
  if (i.length === 0 || !n) return e;
119
119
  let a = r?.onError ?? "throw", o = t.tableName ?? "?";
120
120
  return e.map((e) => {
121
121
  let s;
122
122
  for (let c of i) {
123
123
  let i = e[c];
124
- if (dn(i)) {
124
+ if (un(i)) {
125
125
  s ??= { ...e };
126
126
  try {
127
- s[c] = mn(n, i, gn(t, c), sn(o, c, r?.rowId ?? e[vn]));
127
+ s[c] = pn(n, i, hn(t, c), on(o, c, r?.rowId ?? e[_n]));
128
128
  } catch (e) {
129
129
  let t = String(e?.message ?? e);
130
130
  if (a === "null") {
@@ -135,7 +135,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
135
135
  });
136
136
  continue;
137
137
  }
138
- throw new ln({
138
+ throw new cn({
139
139
  table: o,
140
140
  column: c,
141
141
  reason: t
@@ -145,30 +145,30 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
145
145
  }
146
146
  return s ?? e;
147
147
  });
148
- }, xn = (e) => {
148
+ }, bn = (e) => {
149
149
  let t = e;
150
- for (let e = 0; e < 4 && Gt.isFiberFailure(t); e++) t = Bt.squash(t[Gt.FiberFailureCauseId]);
150
+ for (let e = 0; e < 4 && Wt.isFiberFailure(t); e++) t = zt.squash(t[Wt.FiberFailureCauseId]);
151
151
  return t;
152
- }, N = (e, t = 0) => {
153
- if (t >= 4 || !Gt.isFiberFailure(e)) return [e];
154
- let n = e[Gt.FiberFailureCauseId], r = [...Bt.failures(n), ...Bt.defects(n)];
155
- if (r.length === 0) return [Bt.squash(n)];
152
+ }, xn = (e, t = 0) => {
153
+ if (t >= 4 || !Wt.isFiberFailure(e)) return [e];
154
+ let n = e[Wt.FiberFailureCauseId], r = [...zt.failures(n), ...zt.defects(n)];
155
+ if (r.length === 0) return [zt.squash(n)];
156
156
  let i = [];
157
- for (let e of r.slice(0, 8)) i.push(...N(e, t + 1));
157
+ for (let e of r.slice(0, 8)) i.push(...xn(e, t + 1));
158
158
  return i;
159
159
  }, Sn = (e) => e.dbCode !== void 0 || e.dbErrno !== void 0 || e.dbNumber !== void 0 || e.dbSqlState !== void 0 || e.dbConstraint !== void 0, Cn = (e) => {
160
- let t = {}, n = [], r = xn(e);
160
+ let t = {}, n = [], r = bn(e);
161
161
  for (let e = 0; e < 8 && typeof r == "object" && r; e++) {
162
162
  let e = r;
163
163
  t.dbCode === void 0 && (typeof e.code == "string" || typeof e.code == "number") && (t.dbCode = e.code), t.dbErrno === void 0 && typeof e.errno == "number" && (t.dbErrno = e.errno), t.dbNumber === void 0 && typeof e.number == "number" && (t.dbNumber = e.number), t.dbSqlState === void 0 && typeof e.sqlState == "string" && (t.dbSqlState = e.sqlState), t.dbBindings === void 0 && typeof e.voltroBindings == "string" && (t.dbBindings = e.voltroBindings), t.dbStatement === void 0 && typeof e.sql == "string" && e.sql.includes("?") && (t.dbStatement = e.sql, t.dbPlaceholders = (e.sql.match(/\?/g) ?? []).length), t.dbFatal === void 0 && typeof e.fatal == "boolean" && (t.dbFatal = e.fatal), t.dbConstraint === void 0 && typeof e.constraint == "string" && (t.dbConstraint = e.constraint), t.dbTable === void 0 && typeof e.table == "string" && (t.dbTable = e.table), t.dbColumn === void 0 && typeof e.column == "string" && (t.dbColumn = e.column), t.dbSchema === void 0 && typeof e.schema == "string" && (t.dbSchema = e.schema);
164
164
  let i = e.sqlMessage ?? e.detail;
165
165
  t.dbMessage === void 0 && typeof i == "string" && (t.dbMessage = i);
166
166
  let a = typeof e.constructor == "function" ? e.constructor.name : void 0, o = typeof e._tag == "string" && e._tag || typeof e.name == "string" && e.name || (typeof a == "string" && a !== "Object" ? a : void 0), s = typeof e.message == "string" ? e.message : void 0;
167
- (o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = xn(e.cause);
167
+ (o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = bn(e.cause);
168
168
  }
169
169
  return n.length > 0 && (t.dbCauseChain = n.join(" ← "), t.dbMessage === void 0 && (t.dbMessage = n[n.length - 1])), t;
170
170
  }, wn = (e) => {
171
- let t = N(e).map(Cn);
171
+ let t = xn(e).map(Cn);
172
172
  if (t.length <= 1) return t[0] ?? {};
173
173
  let n = t.find(Sn) ?? t[0], r = t.filter((e) => e !== n).map((e) => e.dbCauseChain).filter((e) => typeof e == "string");
174
174
  if (r.length === 0) return n;
@@ -177,12 +177,23 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
177
177
  ...n,
178
178
  dbCauseChain: [i, ...r].filter(Boolean).join(" ‖ ")
179
179
  };
180
- }, Tn = /^[A-Za-z_][A-Za-z0-9_$]*$/, P = (e) => e !== void 0 && e.length <= 128 && Tn.test(e) ? e : void 0, En = (e) => e === void 0 ? void 0 : e.split(".").pop() ?? e, F = (e, ...t) => {
180
+ }, Tn = (e, t) => {
181
+ let n = wn(e), r = jn(n, t);
182
+ if (r !== void 0) {
183
+ let e = r.constraint ?? r.column;
184
+ return e === void 0 ? r.kind : `${r.kind}: ${e}`;
185
+ }
186
+ let i = n.dbCode ?? n.dbSqlState ?? n.dbErrno ?? n.dbNumber, a = On(e);
187
+ return i !== void 0 && En.test(String(i)) ? `${a} (${String(i)})` : a;
188
+ }, En = /^[A-Za-z0-9_]{1,32}$/, Dn = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/, On = (e) => {
189
+ let t = e?._tag, n = e?.name, r = (typeof t == "string" ? t : typeof n == "string" ? n : "").split(/[^A-Za-z0-9_]+/).filter(Boolean).pop();
190
+ return r !== void 0 && Dn.test(r) ? r : "unknown";
191
+ }, kn = /^[A-Za-z_][A-Za-z0-9_$]*$/, P = (e) => e !== void 0 && e.length <= 128 && kn.test(e) ? e : void 0, An = (e) => e === void 0 ? void 0 : e.split(".").pop() ?? e, F = (e, ...t) => {
181
192
  for (let n of t) {
182
193
  let t = n.exec(e);
183
194
  if (t?.[1] !== void 0) return t[1];
184
195
  }
185
- }, Dn = (e, t) => {
196
+ }, jn = (e, t) => {
186
197
  let n = e.dbCode, r = e.dbErrno, i = e.dbNumber, a = typeof e.dbMessage == "string" ? e.dbMessage : "", o = `${typeof e.dbCauseChain == "string" ? e.dbCauseChain : ""} ${a}`;
187
198
  if (n === "23503") {
188
199
  let t = P(e.dbConstraint);
@@ -220,7 +231,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
220
231
  };
221
232
  }
222
233
  if (r === 1062) {
223
- let e = P(En(F(o, /for key '([^']+)'/)));
234
+ let e = P(An(F(o, /for key '([^']+)'/)));
224
235
  return {
225
236
  kind: "unique",
226
237
  ...e === void 0 ? {} : { constraint: e }
@@ -271,14 +282,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
271
282
  }
272
283
  if (n === "SQLITE_CONSTRAINT_FOREIGNKEY") return { kind: t === "delete" || t === "deleteMany" || t === "hardDelete" ? "foreignKeyInUse" : "foreignKey" };
273
284
  if (n === "SQLITE_CONSTRAINT_UNIQUE" || n === "SQLITE_CONSTRAINT_PRIMARYKEY") {
274
- let e = P(En(F(o, /UNIQUE constraint failed: ([^,\s]+)/)));
285
+ let e = P(An(F(o, /UNIQUE constraint failed: ([^,\s]+)/)));
275
286
  return {
276
287
  kind: "unique",
277
288
  ...e === void 0 ? {} : { column: e }
278
289
  };
279
290
  }
280
291
  if (n === "SQLITE_CONSTRAINT_NOTNULL") {
281
- let e = P(En(F(o, /NOT NULL constraint failed: ([^,\s]+)/)));
292
+ let e = P(An(F(o, /NOT NULL constraint failed: ([^,\s]+)/)));
282
293
  return {
283
294
  kind: "notNull",
284
295
  ...e === void 0 ? {} : { column: e }
@@ -291,13 +302,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
291
302
  ...e === void 0 ? {} : { constraint: e }
292
303
  };
293
304
  }
294
- }, On = (e) => {
295
- let t = Dn(e)?.kind;
305
+ }, Mn = (e) => {
306
+ let t = jn(e)?.kind;
296
307
  return t === "foreignKey" || t === "foreignKeyInUse";
297
- }, kn = (e) => {
308
+ }, Nn = (e) => {
298
309
  let t = e.dbCode, n = e.dbErrno;
299
310
  return t === "57014" || n === 3024 || n === 1969 || t === "ETIMEOUT" || t === "SQLITE_INTERRUPT";
300
- }, An = (e) => {
311
+ }, Pn = (e) => {
301
312
  let t = wn(e), n = [
302
313
  t.dbCode === void 0 ? void 0 : `code=${String(t.dbCode)}`,
303
314
  t.dbErrno === void 0 ? void 0 : `errno=${String(t.dbErrno)}`,
@@ -307,7 +318,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
307
318
  t.dbPlaceholders === void 0 ? void 0 : `placeholders=${String(t.dbPlaceholders)}`
308
319
  ].filter((e) => e !== void 0), r = typeof e?.message == "string" ? e.message : void 0, i = typeof t.dbMessage == "string" ? t.dbMessage : void 0, a = i === void 0 ? void 0 : n.length > 0 || i !== r && i !== `Error: ${String(r)}` ? i : void 0, o = typeof t.dbBindings == "string" ? `\n bindings: ${t.dbBindings}` : "", s = typeof t.dbStatement == "string" ? `\n statement: ${t.dbStatement.length <= 400 ? t.dbStatement : `${t.dbStatement.slice(0, 400)}…`}` : "";
309
320
  if (a !== void 0 || n.length !== 0) return [a, n.length > 0 ? `[${n.join(" ")}]` : void 0].filter((e) => e !== void 0 && e !== "").join(" ") + s + o;
310
- }, jn = (e) => Object.entries(e).map(([e, t]) => `${e}:${Mn(t)}`).join(" "), Mn = (e) => {
321
+ }, Fn = (e) => Object.entries(e).map(([e, t]) => `${e}:${In(t)}`).join(" "), In = (e) => {
311
322
  if (e === null) return "null";
312
323
  if (e === void 0) return "undefined";
313
324
  if (typeof e == "bigint") return "bigint";
@@ -317,77 +328,77 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
317
328
  if (globalThis.Buffer !== void 0 && globalThis.Buffer.isBuffer(e)) return "Buffer";
318
329
  let t = e.constructor?.name;
319
330
  return typeof t == "string" && t !== "" ? t : "Object";
320
- }, Nn = Symbol.for("@voltro/database/storeRefusal"), Pn = (e) => {
331
+ }, Ln = Symbol.for("@voltro/database/storeRefusal"), Rn = (e) => {
321
332
  let t = Error(e.detail);
322
- return Object.defineProperty(t, Nn, {
333
+ return Object.defineProperty(t, Ln, {
323
334
  value: e,
324
335
  enumerable: !1
325
336
  }), t;
326
- }, Fn = (e) => {
327
- for (let t of N(e)) {
337
+ }, zn = (e) => {
338
+ for (let t of xn(e)) {
328
339
  let e = t;
329
340
  for (let t = 0; e != null && t < 8; t += 1) {
330
- let t = e[Nn];
341
+ let t = e[Ln];
331
342
  if (t !== void 0) return t;
332
343
  e = e.cause;
333
344
  }
334
345
  }
335
- }, In = (e) => {
346
+ }, Bn = (e) => {
336
347
  let t = (() => {
337
348
  switch (e.type) {
338
- case "id":
339
- case "reference":
349
+ case "id": return e.idScheme?.kind === "numeric" ? M.Number : M.String;
340
350
  case "text":
341
- case "enum": return j.String;
351
+ case "enum": return M.String;
352
+ case "reference": return e.referenceStorage === "numeric" ? M.Number : M.String;
342
353
  case "integer":
343
354
  case "real":
344
- case "decimal": return j.Number;
345
- case "boolean": return j.Boolean;
355
+ case "decimal": return M.Number;
356
+ case "boolean": return M.Boolean;
346
357
  case "timestamp":
347
- case "date": return zt;
348
- case "bigint": return j.BigInt;
349
- case "bytes": return j.Uint8ArrayFromBase64;
350
- case "array": return j.Array(j.Unknown);
351
- case "interval": return j.String;
352
- default: return j.Unknown;
358
+ case "date": return Rt;
359
+ case "bigint": return M.BigInt;
360
+ case "bytes": return M.Uint8ArrayFromBase64;
361
+ case "array": return M.Array(M.Unknown);
362
+ case "interval": return M.String;
363
+ default: return M.Unknown;
353
364
  }
354
365
  })();
355
- return e.nullable === !0 ? j.NullOr(t) : t;
356
- }, Ln = (e, t) => {
366
+ return e.nullable === !0 ? M.NullOr(t) : t;
367
+ }, Vn = (e, t) => {
357
368
  let n = new Set(t?.omit ?? []), r = {};
358
- for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = In(i));
359
- return j.Struct(r);
360
- }, Rn = (e) => typeof e == "function" ? e : () => e, zn = (e, t) => ({
369
+ for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = Bn(i));
370
+ return M.Struct(r);
371
+ }, Hn = (e) => typeof e == "function" ? e : () => e, Un = (e, t) => ({
361
372
  kind: "one",
362
- target: Rn(e),
373
+ target: Hn(e),
363
374
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
364
375
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
365
- }), Bn = (e, t) => ({
376
+ }), Wn = (e, t) => ({
366
377
  kind: "many",
367
- target: Rn(e),
378
+ target: Hn(e),
368
379
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
369
380
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
370
- }), Vn = (e, t) => ({
381
+ }), Gn = (e, t) => ({
371
382
  kind: "manyToMany",
372
- target: Rn(e),
373
- through: Rn(t.through),
383
+ target: Hn(e),
384
+ through: Hn(t.through),
374
385
  sourceKey: t.sourceKey,
375
386
  targetKey: t.targetKey
376
- }), Hn = {
377
- one: zn,
378
- many: Bn,
379
- manyToMany: Vn
380
- }, Un = (e, t) => {
387
+ }), Kn = {
388
+ one: Un,
389
+ many: Wn,
390
+ manyToMany: Gn
391
+ }, qn = (e, t) => {
381
392
  let n = typeof e == "function" ? e : () => e;
382
393
  return {
383
394
  source: n,
384
- relations: t(Hn, n())
395
+ relations: t(Kn, n())
385
396
  };
386
- }, Wn = (e) => {
397
+ }, Jn = (e) => {
387
398
  if (typeof e != "object" || !e) return !1;
388
399
  let t = e;
389
400
  return typeof t.source != "function" || typeof t.relations != "object" || t.relations === null ? !1 : Object.keys(t.relations).length === 0;
390
- }, Gn = (e) => {
401
+ }, Yn = (e) => {
391
402
  if (typeof e != "object" || !e) return !1;
392
403
  let t = e;
393
404
  if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
@@ -396,32 +407,32 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
396
407
  let t = e?.kind;
397
408
  return t === "one" || t === "many" || t === "manyToMany";
398
409
  });
399
- }, Kn = zn, qn = Bn, Jn = Vn, Yn = (e, t, n) => {
410
+ }, Xn = Un, Zn = Wn, Qn = Gn, $n = (e, t, n) => {
400
411
  let r = [];
401
412
  for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
402
413
  if (r.length === 0) throw Error(`relation '${n}': no reference() column on '${e.tableName}' points at '${t}'. Either add one or pass an explicit { foreignKey: '<column>' }.`);
403
414
  if (r.length > 1) throw Error(`relation '${n}': multiple reference() columns on '${e.tableName}' point at '${t}' (${r.join(", ")}). Pass an explicit { foreignKey: '<column>' } to disambiguate.`);
404
415
  return r[0];
405
- }, Xn = (e) => Object.keys(e.fields), Zn = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Qn = (e) => {
406
- let t = Xn(e);
416
+ }, er = (e) => Object.keys(e.fields), tr = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), nr = (e) => {
417
+ let t = er(e);
407
418
  return t.length === 0 ? "<none>" : t.join(", ");
408
- }, $n = (e, t, n) => {
419
+ }, rr = (e, t, n) => {
409
420
  let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
410
421
  if (n.kind === "manyToMany") {
411
422
  let t = n.through();
412
- for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!Zn(t, o)) throw Error(`${r}: manyToMany ${a} '${o}' is not a column on the junction table '${t.tableName}'. Both keys name columns on the JUNCTION — ${a === "sourceKey" ? `sourceKey points at '${e.tableName}'` : `targetKey points at '${i.tableName}'`}. Columns on '${t.tableName}': ${Qn(t)}.`);
423
+ for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!tr(t, o)) throw Error(`${r}: manyToMany ${a} '${o}' is not a column on the junction table '${t.tableName}'. Both keys name columns on the JUNCTION — ${a === "sourceKey" ? `sourceKey points at '${e.tableName}'` : `targetKey points at '${i.tableName}'`}. Columns on '${t.tableName}': ${nr(t)}.`);
413
424
  return;
414
425
  }
415
426
  if (n.sourceKey !== void 0 && n.foreignKey !== void 0) throw Error(`${r}: pass EITHER sourceKey OR foreignKey, not both. sourceKey '${n.sourceKey}' names a column on the source ('${e.tableName}') holding the target's id; foreignKey '${n.foreignKey}' names a column on the target ('${i.tableName}') holding the source's id. With both, foreignKey is ignored.`);
416
- if (n.sourceKey !== void 0 && !Zn(e, n.sourceKey)) {
417
- let t = Zn(i, n.sourceKey);
418
- throw Error(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${Qn(e)}.`));
427
+ if (n.sourceKey !== void 0 && !tr(e, n.sourceKey)) {
428
+ let t = tr(i, n.sourceKey);
429
+ throw Error(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${nr(e)}.`));
419
430
  }
420
- if (n.foreignKey !== void 0 && !Zn(i, n.foreignKey)) {
421
- let t = Zn(e, n.foreignKey);
422
- throw Error(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${Qn(i)}.`));
431
+ if (n.foreignKey !== void 0 && !tr(i, n.foreignKey)) {
432
+ let t = tr(e, n.foreignKey);
433
+ throw Error(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${nr(i)}.`));
423
434
  }
424
- }, er = Symbol.for("@voltro/database/relationsRegistry"), tr = globalThis, I = tr[er] ?? (tr[er] = /* @__PURE__ */ new Map()), nr = (e) => {
435
+ }, ir = Symbol.for("@voltro/database/relationsRegistry"), ar = globalThis, I = ar[ir] ?? (ar[ir] = /* @__PURE__ */ new Map()), or = (e) => {
425
436
  let t = e.source(), n = I.get(t.tableName);
426
437
  if (n === void 0) {
427
438
  I.set(t.tableName, new Map(Object.entries(e.relations)));
@@ -434,14 +445,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
434
445
  n.set(r, i);
435
446
  }
436
447
  }
437
- }, rr = (e) => {
448
+ }, sr = (e) => {
438
449
  let t = 0;
439
- for (let n of Object.values(e)) Gn(n) && (nr(n), t += 1);
450
+ for (let n of Object.values(e)) Yn(n) && (or(n), t += 1);
440
451
  return t;
441
- }, ir = (e) => {
452
+ }, cr = (e) => {
442
453
  let t = I.get(e);
443
454
  if (t !== void 0) return Object.fromEntries(t);
444
- }, ar = (e, t) => I.get(e)?.get(t), or = () => {
455
+ }, lr = (e, t) => I.get(e)?.get(t), ur = () => {
445
456
  let e = [];
446
457
  for (let [t, n] of I) for (let [r, i] of n) e.push({
447
458
  source: t,
@@ -449,18 +460,18 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
449
460
  relation: i
450
461
  });
451
462
  return e;
452
- }, sr = () => {
463
+ }, dr = () => {
453
464
  for (let [e, t] of I) {
454
- let n = S(e);
455
- if (n !== void 0) for (let [e, r] of t) $n(n, e, r);
465
+ let n = C(e);
466
+ if (n !== void 0) for (let [e, r] of t) rr(n, e, r);
456
467
  }
457
- }, cr = () => {
468
+ }, fr = () => {
458
469
  I.clear();
459
- }, lr = 4, ur = (e) => Object.keys(e.fields), dr = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), fr = (e, t) => {
470
+ }, pr = 4, mr = (e) => Object.keys(e.fields), hr = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), gr = (e, t) => {
460
471
  let n = [];
461
472
  for (let [r, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && n.push(r);
462
473
  return n;
463
- }, pr = (e, t) => {
474
+ }, _r = (e, t) => {
464
475
  let n = [];
465
476
  for (let r of t) {
466
477
  if (r.source !== e) continue;
@@ -477,7 +488,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
477
488
  } catch {
478
489
  continue;
479
490
  }
480
- if (!dr(e, t.sourceKey)) continue;
491
+ if (!hr(e, t.sourceKey)) continue;
481
492
  n.push({
482
493
  table: e.tableName,
483
494
  foreignKey: t.sourceKey,
@@ -486,24 +497,29 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
486
497
  continue;
487
498
  }
488
499
  if (t.sourceKey !== void 0) continue;
489
- let a = fr(i, e), o = t.foreignKey ?? (a.length === 1 ? a[0] : void 0);
490
- o === void 0 || !dr(i, o) || n.push({
500
+ let a = gr(i, e), o = t.foreignKey ?? (a.length === 1 ? a[0] : void 0);
501
+ if (o === void 0 || !hr(i, o)) continue;
502
+ let s = i.fields[o];
503
+ n.push({
491
504
  table: i.tableName,
492
505
  foreignKey: o,
493
- parentKey: "id"
506
+ parentKey: s?.referenceColumn ?? "id"
494
507
  });
495
508
  }
496
509
  return n;
497
- }, mr = (e, t) => {
510
+ }, vr = (e, t) => {
498
511
  let n = [];
499
- for (let r of t) if (r.tableName !== e) for (let t of fr(r, e)) n.push({
500
- table: r.tableName,
501
- foreignKey: t,
502
- parentKey: "id"
503
- });
512
+ for (let r of t) if (r.tableName !== e) for (let t of gr(r, e)) {
513
+ let e = r.fields[t];
514
+ n.push({
515
+ table: r.tableName,
516
+ foreignKey: t,
517
+ parentKey: e?.referenceColumn ?? "id"
518
+ });
519
+ }
504
520
  return n;
505
- }, hr = (e) => `${e.table}\u0000${e.hops.map((e) => `${e.table}.${e.foreignKey}<-${e.parentKey}`).join("|")}`, gr = (e) => {
506
- let t = e.tables ?? re(), n = e.relations ?? or(), r = e.maxDepth ?? 4, i = new Set(e.exclude ?? []), a = new Map(t.map((e) => [e.tableName, e])), o = [];
521
+ }, yr = (e) => `${e.table}\u0000${e.hops.map((e) => `${e.table}.${e.foreignKey}<-${e.parentKey}`).join("|")}`, br = (e) => {
522
+ let t = e.tables ?? te(), n = e.relations ?? ur(), r = e.maxDepth ?? 4, i = new Set(e.exclude ?? []), a = new Map(t.map((e) => [e.tableName, e])), o = [];
507
523
  if (!a.has(e.subjectTable)) return {
508
524
  subjectTable: e.subjectTable,
509
525
  paths: [],
@@ -518,11 +534,11 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
518
534
  hops: [],
519
535
  depth: 0,
520
536
  via: "relation"
521
- }, c = [s], l = /* @__PURE__ */ new Set([hr(s)]), u = /* @__PURE__ */ new Set(), d = [s];
537
+ }, c = [s], l = /* @__PURE__ */ new Set([yr(s)]), u = /* @__PURE__ */ new Set(), d = [s];
522
538
  for (let e = 1; e <= r; e++) {
523
539
  let r = [];
524
540
  for (let a of d) {
525
- let s = pr(a.table, n), d = mr(a.table, t), f = [...s.map((e) => [e, "relation"]), ...d.map((e) => [e, "reference"])];
541
+ let s = _r(a.table, n), d = vr(a.table, t), f = [...s.map((e) => [e, "relation"]), ...d.map((e) => [e, "reference"])];
526
542
  for (let [t, n] of f) {
527
543
  if (i.has(t.table)) {
528
544
  o.push({
@@ -540,7 +556,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
540
556
  hops: [...a.hops, t],
541
557
  depth: e,
542
558
  via: n
543
- }, f = hr(d);
559
+ }, f = yr(d);
544
560
  l.has(f) || (l.add(f), c.push(d), r.push(d));
545
561
  }
546
562
  }
@@ -550,7 +566,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
550
566
  }
551
567
  d = r;
552
568
  }
553
- for (let e of d) (pr(e.table, n).length > 0 || mr(e.table, t).length > 0) && o.push({
569
+ for (let e of d) (_r(e.table, n).length > 0 || vr(e.table, t).length > 0) && o.push({
554
570
  kind: "depth-truncated",
555
571
  table: e.table,
556
572
  detail: `stopped at maxDepth ${r}; tables linked FROM '${e.table}' were not explored`
@@ -559,14 +575,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
559
575
  for (let n of t) f.has(n.tableName) || i.has(n.tableName) || o.push({
560
576
  kind: "unreachable",
561
577
  table: n.tableName,
562
- detail: `no relation() and no reference() column links '${n.tableName}' to '${e.subjectTable}'. If it holds subject data through a plain column, a polymorphic (type,id) pair, JSON or free text, add an explicit subjectScopes entry — this derivation cannot see it. Columns: ${ur(n).join(", ")}`
578
+ detail: `no relation() and no reference() column links '${n.tableName}' to '${e.subjectTable}'. If it holds subject data through a plain column, a polymorphic (type,id) pair, JSON or free text, add an explicit subjectScopes entry — this derivation cannot see it. Columns: ${mr(n).join(", ")}`
563
579
  });
564
580
  return {
565
581
  subjectTable: e.subjectTable,
566
582
  paths: c,
567
583
  limitations: o
568
584
  };
569
- }, _r = (e) => {
585
+ }, xr = (e) => {
570
586
  let t = [`subject graph · ${e.subjectTable} · ${e.paths.length} table(s) reachable`];
571
587
  for (let n of e.paths) {
572
588
  let r = n.hops.length === 0 ? `${e.subjectTable} (the subject row itself)` : [e.subjectTable, ...n.hops.map((e) => `${e.table}.${e.foreignKey}`)].join(" → ");
@@ -574,7 +590,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
574
590
  }
575
591
  let n = e.limitations.filter((e) => e.kind === "depth-truncated"), r = e.limitations.filter((e) => e.kind === "unreachable"), i = e.limitations.filter((e) => e.kind === "excluded");
576
592
  return t.push(""), t.push(" WHAT THIS CANNOT SEE — a DSAR is only as complete as this list is short:"), n.length > 0 && t.push(` depth-truncated (${n.length}): ${n.map((e) => e.table).join(", ")}`), i.length > 0 && t.push(` excluded (${i.length}): ${[...new Set(i.map((e) => e.table))].join(", ")}`), t.push(r.length === 0 ? " unreachable: none — every registered table is linked to the subject." : ` unreachable (${r.length}): ${r.map((e) => e.table).join(", ")}`), t.push(" Always outside this graph: object storage / uploaded files, external processors,"), t.push(" log and metric sinks, backups, and any subject id embedded in JSON or free text."), t.join("\n");
577
- }, vr = (e) => e == null || typeof e == "boolean" ? e : typeof e == "number" ? e !== 0 : typeof e == "bigint" ? e !== 0n : typeof e == "string" ? e === "1" || e.toLowerCase() === "true" : e, yr = (e) => {
593
+ }, Sr = (e) => e == null || typeof e == "boolean" ? e : typeof e == "number" ? e !== 0 : typeof e == "bigint" ? e !== 0n : typeof e == "string" ? e === "1" || e.toLowerCase() === "true" : e, Cr = (e) => {
578
594
  if (e == null || typeof e != "string") return e;
579
595
  let t = e.trim();
580
596
  if (t.length === 0) return e;
@@ -585,7 +601,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
585
601
  } catch {
586
602
  return e;
587
603
  }
588
- }, br = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, xr = (e) => {
604
+ }, wr = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Tr = (e) => {
589
605
  if (e == null || e instanceof Date) return e;
590
606
  if (typeof e == "string") {
591
607
  let t = new Date(e);
@@ -596,21 +612,21 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
596
612
  return isNaN(t.getTime()) ? e : t;
597
613
  }
598
614
  return e;
599
- }, Sr = (e, t, n) => {
615
+ }, Er = (e, t, n) => {
600
616
  if (e == null) return e;
601
617
  switch (t) {
602
- case "boolean": return n === "postgres" ? e : vr(e);
618
+ case "boolean": return n === "postgres" ? e : Sr(e);
603
619
  case "json":
604
- case "array": return n === "postgres" ? e : yr(e);
620
+ case "array": return n === "postgres" ? e : Cr(e);
605
621
  case "timestamp":
606
- case "date": return n === "sqlite" || n === "turso" ? xr(e) : e;
622
+ case "date": return n === "sqlite" || n === "turso" ? Tr(e) : e;
607
623
  case "decimal":
608
- case "bigint": return br(e);
624
+ case "bigint": return wr(e);
609
625
  default: return e;
610
626
  }
611
- }, Cr = (e, t, n) => {
627
+ }, Dr = (e, t, n) => {
612
628
  if (e.length === 0) return e;
613
- let r = S(t);
629
+ let r = C(t);
614
630
  if (r === void 0) return e;
615
631
  let i = r.fields, a = [];
616
632
  for (let [e, t] of Object.entries(i)) a.push({
@@ -619,36 +635,136 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
619
635
  });
620
636
  return e.map((e) => {
621
637
  let t = { ...e };
622
- for (let { key: e, type: r } of a) e in t && (t[e] = Sr(t[e], r, n));
638
+ for (let { key: e, type: r } of a) e in t && (t[e] = Er(t[e], r, n));
623
639
  return t;
624
640
  });
625
- }, wr = (e, t) => {
641
+ }, Or = (e, t) => {
626
642
  if (e == null) return e;
627
643
  switch (t) {
628
644
  case "json":
629
645
  case "array": return typeof e == "string" ? e : JSON.stringify(e);
630
646
  default: return e;
631
647
  }
632
- }, Tr = (e, t, n = ["json", "array"]) => {
633
- let r = S(t);
648
+ }, kr = (e, t, n = ["json", "array"]) => {
649
+ let r = C(t);
634
650
  if (r === void 0) return e;
635
651
  let i = r.fields, a = null;
636
652
  for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
637
- let n = wr(e[t], r.type);
653
+ let n = Or(e[t], r.type);
638
654
  n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
639
655
  }
640
656
  return a ?? e;
641
- }, Er = class extends Error {
657
+ }, Ar = (e) => Object.fromEntries(Object.entries(e.updateValues ?? {}).filter(([t, n]) => {
658
+ if (n === void 0) return !1;
659
+ if (t === "id" || e.conflictColumns.includes(t)) throw Error(`upsert: updateValues cannot rewrite row identity column '${t}'`);
660
+ return !0;
661
+ })), jr = (e, t, n) => {
662
+ let r = Ar(n);
663
+ if (typeof n.update == "function") return {
664
+ ...n.update(t),
665
+ ...r
666
+ };
667
+ let i = n.update ?? Object.keys(e).filter((e) => e !== "id" && !n.conflictColumns.includes(e));
668
+ return {
669
+ ...Object.fromEntries(i.filter((t) => t in e).map((t) => [t, e[t]])),
670
+ ...r
671
+ };
672
+ }, Mr = (e) => typeof e == "string" ? [["id", e]] : Object.entries(e).map(([e, t]) => [e, t]), Nr = (e) => {
673
+ if (typeof e == "string") return e;
674
+ let t = Object.entries(e);
675
+ return t.length === 1 ? String(t[0][1]) : t.slice().sort(([e], [t]) => e < t ? -1 : +(e > t)).map(([e, t]) => `${e}=${String(t)}`).join("\0");
676
+ }, Pr = (e) => typeof e != "string", Fr = (e, t, n) => {
677
+ let r = new Set(Mr(e).map(([e]) => e)), i = t.split(".")[0];
678
+ return Object.fromEntries(Object.entries(n ?? {}).filter(([e, t]) => {
679
+ if (t === void 0) return !1;
680
+ if (r.has(e) || e === i) throw Error(`patchJson: additionalPatch cannot rewrite the primary key or patched JSON column '${e}'`);
681
+ return !0;
682
+ }));
683
+ }, Ir = (e) => typeof e == "object" && !!e && !Array.isArray(e), Lr = (e) => JSON.parse(JSON.stringify(e ?? null)), Rr = (e, t, n) => {
684
+ let [r, ...i] = t.split("."), a = Lr(n), o = e[r], s = (e, t) => {
685
+ if (t === i.length) return a;
686
+ let n = Ir(e) ? e : {}, r = i[t], o = Object.hasOwn(n, r) ? n[r] : void 0;
687
+ return {
688
+ ...n,
689
+ [r]: s(o, t + 1)
690
+ };
691
+ };
692
+ return {
693
+ ...e,
694
+ [r]: i.length === 0 ? Ir(o) && Ir(a) ? {
695
+ ...o,
696
+ ...a
697
+ } : a : s(o, 0)
698
+ };
699
+ }, zr = (e, t, n, r, i) => {
700
+ let [a, ...o] = n.split("."), s = i ?? e`${e(a)}`, c = Lr(r), l = (e) => /["\\\u0000-\u001f]/.test(e);
701
+ if ((t === "sqlite" || t === "turso") && (o.some(l) || o.length === 0 && Ir(c) && Object.keys(c).some(l))) {
702
+ let t = 0, n = (t) => e`CASE WHEN (SELECT _voltro_json_escape_probe.key FROM json_each(${String.raw`{"\u0061":0}`}) AS _voltro_json_escape_probe) = ${String.raw`\u0061`}
703
+ THEN json_extract('"' || replace(${t}.key, '"', ${String.raw`\"`}) || '"', '$')
704
+ ELSE ${t}.key END`, r = (r) => {
705
+ let i = e`CASE WHEN json_type(${s}) = 'object' THEN ${s} ELSE '{}' END`;
706
+ for (let a of r) {
707
+ let r = e(`_voltro_json_${t++}`);
708
+ i = e`COALESCE((SELECT ${r}.value FROM json_each(${i}) AS ${r} WHERE ${n(r)} = ${a} AND ${r}.type = 'object'), '{}')`;
709
+ }
710
+ return i;
711
+ }, i = (r, i, a) => {
712
+ let o = e(`_voltro_json_${t++}`), s = e(`_voltro_json_${t++}`);
713
+ return e`(SELECT json_group_object(${s}.k, json(${s}.v)) FROM (
714
+ SELECT ${n(o)} AS k, CASE ${o}.type
715
+ WHEN 'true' THEN 'true' WHEN 'false' THEN 'false'
716
+ WHEN 'object' THEN ${o}.value WHEN 'array' THEN ${o}.value
717
+ ELSE json_quote(${o}.value) END AS v
718
+ FROM json_each(${r}) AS ${o} WHERE ${n(o)} <> ${i}
719
+ UNION ALL SELECT ${i}, ${a}
720
+ ) AS ${s})`;
721
+ }, l;
722
+ if (o.length === 0) {
723
+ l = r([]);
724
+ for (let [t, n] of Object.entries(c)) l = i(l, t, e`${JSON.stringify(n)}`);
725
+ } else {
726
+ l = e`${JSON.stringify(c)}`;
727
+ for (let e = o.length - 1; e >= 0; e--) l = i(r(o.slice(0, e)), o[e], l);
728
+ }
729
+ return e`${e(a)} = ${l}`;
730
+ }
731
+ let u = (e) => "$" + e.map((e) => `.${JSON.stringify(e)}`).join(""), d = (t) => e`ARRAY[${e.csv(t.map((t) => e`${t}`))}]::text[]`, f = (n) => n.length === 0 ? s : t === "postgres" ? e`${s} #> ${d(n)}` : t === "mssql" ? e`JSON_QUERY(${s}, ${u(n)})` : t === "mysql" || t === "mariadb" ? e`JSON_EXTRACT(${s}, ${u(n)})` : e`json_extract(${s}, ${u(n)})`, p = (n) => t === "postgres" ? e`jsonb_typeof(${f(n)}) = 'object'` : t === "mssql" ? e`LEFT(LTRIM(${f(n)}), 1) = '{'` : t === "mysql" || t === "mariadb" ? e`JSON_TYPE(${f(n)}) = 'OBJECT'` : e`json_type(${s}, ${u(n)}) = 'object'`, m = t === "postgres" ? e`'{}'::jsonb` : e`'{}'`, h = (t) => {
732
+ let n = Array.from({ length: t.length + 1 }, (e, n) => p(t.slice(0, n)));
733
+ return e`CASE WHEN ${e.and(n)} THEN ${f(t)} ELSE ${m} END`;
734
+ }, g = (n) => {
735
+ let r = JSON.stringify(n);
736
+ return t === "postgres" ? e`${r}::jsonb` : e`${r}`;
737
+ }, _ = (n, r, i, a) => {
738
+ if (t === "postgres") return e`jsonb_set(${n}, ${d(r)}, ${i}, true)`;
739
+ let o = u(r);
740
+ return t === "mysql" || t === "mariadb" ? e`JSON_SET(${n}, ${o}, JSON_EXTRACT(${i}, '$'))` : t === "mssql" ? a === null ? e`JSON_MODIFY(JSON_MODIFY(${n}, ${o}, 0), ${`strict ${o}`}, NULL)` : typeof a == "boolean" ? e`JSON_MODIFY(${n}, ${o}, CAST(${+!!a} AS bit))` : typeof a == "string" || typeof a == "number" ? e`JSON_MODIFY(${n}, ${o}, ${a})` : e`JSON_MODIFY(${n}, ${o}, JSON_QUERY(${i}))` : e`json_set(${n}, ${o}, json(${i}))`;
741
+ }, v;
742
+ if (o.length === 0) {
743
+ if (!Ir(c)) v = g(c);
744
+ else {
745
+ v = h([]);
746
+ for (let [e, t] of Object.entries(c)) v = _(v, [e], g(t), t);
747
+ }
748
+ } else {
749
+ v = h([]);
750
+ for (let e = 1; e < o.length; e++) {
751
+ let t = o.slice(0, e);
752
+ v = _(v, t, h(t));
753
+ }
754
+ v = _(v, o, g(c), c);
755
+ }
756
+ return e`${e(a)} = ${v}`;
757
+ }, Br = class extends Error {
642
758
  _tag = "EagerCardinalityError";
643
759
  constructor(e) {
644
760
  super(e), this.name = "EagerCardinalityError";
645
761
  }
646
- }, Dr = (e) => {
762
+ }, Vr = (e) => {
647
763
  let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
648
764
  return `relation '${t}' on '${n}' is declared \`one\`, but ${r}.${i} matches MORE than one row for the same ${n}.${a} — so there is no single related row to return.` + (o ? ` Because this relation is self-referential, check which side the key is on: \`foreignKey: '${i}'\` means "rows whose ${i} points AT me" (my children — there can be many). If you meant "the row my ${i} points to" (my parent), that is \`sourceKey: '${i}'\`.` : " Use `many(...)` if several are expected, or narrow the key.");
649
- }, Or = async (e, t, n, r) => {
765
+ }, Hr = async (e, t, n, r) => {
650
766
  if (e.length === 0) return e;
651
- let i = ir(n.tableName);
767
+ let i = cr(n.tableName);
652
768
  if (i === void 0) throw Error(`cannot eager-load on '${n.tableName}': no relations registered. Did you forget to declare \`relations(${n.tableName}, ...)\` or import the file that does?`);
653
769
  let a = e.map((e) => ({ ...e }));
654
770
  for (let [e, o] of Object.entries(t)) {
@@ -657,36 +773,36 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
657
773
  let t = Object.keys(i).join(", ") || "<none>";
658
774
  throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
659
775
  }
660
- $n(n, e, t), await kr(a, e, t, o === !0 ? {} : o, n, r);
776
+ rr(n, e, t), await Ur(a, e, t, o === !0 ? {} : o, n, r);
661
777
  }
662
778
  return a;
663
- }, kr = async (e, t, n, r, i, a) => {
779
+ }, Ur = async (e, t, n, r, i, a) => {
664
780
  switch (n.kind) {
665
781
  case "one":
666
- await Ar(e, t, n, r, i, a);
782
+ await Wr(e, t, n, r, i, a);
667
783
  return;
668
784
  case "many":
669
- await jr(e, t, n, r, i, a);
785
+ await Gr(e, t, n, r, i, a);
670
786
  return;
671
787
  case "manyToMany":
672
- await Nr(e, t, n, r, i, a);
788
+ await qr(e, t, n, r, i, a);
673
789
  return;
674
790
  }
675
- }, Ar = async (e, t, n, r, i, a) => {
676
- let o = n.target(), s = n.sourceKey ?? Pr(i, o.tableName);
791
+ }, Wr = async (e, t, n, r, i, a) => {
792
+ let o = n.target(), s = n.sourceKey ?? Jr(i, o.tableName);
677
793
  if (s !== void 0) {
678
- let n = Fr(e, s), i = n.length === 0 ? [] : await Ir(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
794
+ let n = Yr(e, s), i = n.length === 0 ? [] : await Xr(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
679
795
  for (let n of e) {
680
796
  let e = n[s];
681
797
  n[t] = e == null ? null : c.get(e) ?? null;
682
798
  }
683
- await Lr(i, r.with, o, a);
799
+ await Zr(i, r.with, o, a);
684
800
  return;
685
801
  }
686
- let c = n.foreignKey ?? Yn(o, i.tableName, t), l = n.sourceKey ?? "id", u = Fr(e, l), d = u.length === 0 ? [] : await Ir(o, c, u, r, a), f = /* @__PURE__ */ new Map();
802
+ let c = n.foreignKey ?? $n(o, i.tableName, t), l = n.sourceKey ?? "id", u = Yr(e, l), d = u.length === 0 ? [] : await Xr(o, c, u, r, a), f = /* @__PURE__ */ new Map();
687
803
  for (let e of d) {
688
804
  let n = e[c];
689
- if (f.has(n)) throw new Er(Dr({
805
+ if (f.has(n)) throw new Br(Vr({
690
806
  relationName: t,
691
807
  sourceTableName: i.tableName,
692
808
  targetTableName: o.tableName,
@@ -699,9 +815,9 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
699
815
  let e = n[l];
700
816
  n[t] = e == null ? null : f.get(e) ?? null;
701
817
  }
702
- await Lr(d, r.with, o, a);
703
- }, jr = async (e, t, n, r, i, a) => {
704
- let o = n.target(), s = n.foreignKey ?? Yn(o, i.tableName, t), c = n.sourceKey ?? "id", l = Fr(e, c), u = Mr(r), d = l.length === 0 ? [] : await Ir(o, s, l, u, a), f = /* @__PURE__ */ new Map();
818
+ await Zr(d, r.with, o, a);
819
+ }, Gr = async (e, t, n, r, i, a) => {
820
+ let o = n.target(), s = n.foreignKey ?? $n(o, i.tableName, t), c = n.sourceKey ?? "id", l = Yr(e, c), u = Kr(r), d = l.length === 0 ? [] : await Xr(o, s, l, u, a), f = /* @__PURE__ */ new Map();
705
821
  for (let e of d) {
706
822
  let t = e[s], n = f.get(t);
707
823
  n ? n.push(e) : f.set(t, [e]);
@@ -717,12 +833,12 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
717
833
  let e = n[c];
718
834
  n[t] = f.get(e) ?? [];
719
835
  }
720
- await Lr(d, r.with, o, a);
721
- }, Mr = (e) => {
836
+ await Zr(d, r.with, o, a);
837
+ }, Kr = (e) => {
722
838
  let { limit: t, offset: n, ...r } = e;
723
839
  return r;
724
- }, Nr = async (e, t, n, r, i, a) => {
725
- let o = n.target(), s = n.through(), c = Fr(e, "id");
840
+ }, qr = async (e, t, n, r, i, a) => {
841
+ let o = n.target(), s = n.through(), c = Yr(e, "id");
726
842
  if (c.length === 0) {
727
843
  for (let n of e) n[t] = [];
728
844
  return;
@@ -743,8 +859,8 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
743
859
  for (let n of e) n[t] = [];
744
860
  return;
745
861
  }
746
- let f = await Ir(o, "id", Fr(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
747
- await Lr(f, r.with, o, a);
862
+ let f = await Xr(o, "id", Yr(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
863
+ await Zr(f, r.with, o, a);
748
864
  let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
749
865
  for (let e of d) {
750
866
  let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
@@ -756,16 +872,16 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
756
872
  o ? o.push(a) : h.set(t, [a]);
757
873
  }
758
874
  for (let n of e) n[t] = h.get(n.id) ?? [];
759
- }, Pr = (e, t) => {
875
+ }, Jr = (e, t) => {
760
876
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
761
- }, Fr = (e, t) => {
877
+ }, Yr = (e, t) => {
762
878
  let n = /* @__PURE__ */ new Set();
763
879
  for (let r of e) {
764
880
  let e = r[t];
765
881
  e != null && n.add(e);
766
882
  }
767
883
  return [...n];
768
- }, Ir = (e, t, n, r, i) => {
884
+ }, Xr = (e, t, n, r, i) => {
769
885
  let a = {
770
886
  column: t,
771
887
  op: "in",
@@ -779,63 +895,63 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
779
895
  skip: r.offset,
780
896
  projection: void 0
781
897
  });
782
- }, Lr = async (e, t, n, r) => {
783
- t !== void 0 && e.length !== 0 && (await Or(e, t, n, r)).forEach((t, n) => {
898
+ }, Zr = async (e, t, n, r) => {
899
+ t !== void 0 && e.length !== 0 && (await Hr(e, t, n, r)).forEach((t, n) => {
784
900
  let r = e[n];
785
901
  for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
786
902
  });
787
- }, Rr = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, zr = class extends Error {
903
+ }, Qr = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, $r = class extends Error {
788
904
  _tag = "TenantNamespaceUnresolved";
789
905
  constructor(e) {
790
906
  super(e), this.name = "TenantNamespaceUnresolved";
791
907
  }
792
- }, Br = class extends Error {
908
+ }, ei = class extends Error {
793
909
  _tag = "TenantNamespaceInvalid";
794
910
  constructor(e) {
795
911
  super(e), this.name = "TenantNamespaceInvalid";
796
912
  }
797
- }, Vr = 63, Hr = "tenant_", Ur = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Wr = (e) => {
798
- if (e == null || e === "") throw new zr("namespace isolation is on but the request has no resolvable tenant (subject.tenantId is null/empty). Refusing to run against a shared/default namespace — this would be a cross-tenant read. Authenticate with a tenant-scoped subject, or disable namespace isolation for this surface.");
799
- let t = Ur(e);
800
- if (t.replace(/_/g, "") === "") throw new Br(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
801
- let n = `${Hr}${t}`;
802
- if (n.length > Vr) throw new Br(`namespace '${n}' for tenant '${e}' exceeds the ${Vr}-byte identifier limit. Use a shorter tenant id.`);
913
+ }, ti = 63, ni = "tenant_", ri = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), ii = (e) => {
914
+ if (e == null || e === "") throw new $r("namespace isolation is on but the request has no resolvable tenant (subject.tenantId is null/empty). Refusing to run against a shared/default namespace — this would be a cross-tenant read. Authenticate with a tenant-scoped subject, or disable namespace isolation for this surface.");
915
+ let t = ri(e);
916
+ if (t.replace(/_/g, "") === "") throw new ei(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
917
+ let n = `${ni}${t}`;
918
+ if (n.length > ti) throw new ei(`namespace '${n}' for tenant '${e}' exceeds the ${ti}-byte identifier limit. Use a shorter tenant id.`);
803
919
  return n;
804
- }, Gr = (e, t) => e === null ? t : `${e}.${t}`, Kr = /* @__PURE__ */ new Set(["timestamp", "date"]), qr = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, Jr = (e, t) => {
805
- if (e === void 0 || t == null || !Kr.has(e) || t instanceof Date) return t;
920
+ }, ai = (e, t) => e === null ? t : `${e}.${t}`, oi = /* @__PURE__ */ new Set(["timestamp", "date"]), si = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, ci = (e, t) => {
921
+ if (e === void 0 || t == null || !oi.has(e) || t instanceof Date) return t;
806
922
  if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
807
- if (typeof t == "string" && qr.test(t)) {
923
+ if (typeof t == "string" && si.test(t)) {
808
924
  let e = new Date(t);
809
925
  return Number.isNaN(e.getTime()) ? t : e;
810
926
  }
811
927
  return t;
812
- }, Yr = (e, t) => e === void 0 || !Kr.has(e) ? t : t.map((t) => Jr(e, t)), Xr = (e, t) => {
928
+ }, li = (e, t) => e === void 0 || !oi.has(e) ? t : t.map((t) => ci(e, t)), ui = (e, t) => {
813
929
  let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
814
930
  for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
815
931
  return t`${i}`;
816
- }, Zr = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), L = (e, t, n = null, r) => {
932
+ }, di = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), L = (e, t, n = null, r) => {
817
933
  if ("not" in e) return t`NOT (${L(e.not, t, n, r)})`;
818
934
  if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => L(e, t, n, r)));
819
935
  if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => L(e, t, n, r)));
820
936
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
821
- let r = e, i = ci(r.subquery, t, n);
937
+ let r = e, i = Si(r.subquery, t, n);
822
938
  return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
823
939
  }
824
940
  if (e.op === "exists" || e.op === "not-exists") {
825
- let r = e, i = ci(r.subquery, t, n);
941
+ let r = e, i = Si(r.subquery, t, n);
826
942
  return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
827
943
  }
828
944
  let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
829
- mysql: () => t.unsafe(D(i.column, o, "mysql")),
830
- mssql: () => t.unsafe(D(i.column, o, "mssql")),
831
- sqlite: () => t.unsafe(D(i.column, o, "sqlite")),
832
- orElse: () => t.unsafe(D(i.column, o, "postgres"))
945
+ mysql: () => t.unsafe(O(i.column, o, "mysql")),
946
+ mssql: () => t.unsafe(O(i.column, o, "mssql")),
947
+ sqlite: () => t.unsafe(O(i.column, o, "sqlite")),
948
+ orElse: () => t.unsafe(O(i.column, o, "postgres"))
833
949
  }), l = () => t.onDialectOrElse({
834
- mysql: () => t.unsafe(D(i.column, o, "mysql", { numeric: !0 })),
835
- mssql: () => t.unsafe(D(i.column, o, "mssql", { numeric: !0 })),
836
- sqlite: () => t.unsafe(D(i.column, o, "sqlite", { numeric: !0 })),
837
- orElse: () => t.unsafe(D(i.column, o, "postgres", { numeric: !0 }))
838
- }), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 : S(r)?.fields?.[i.column]?.type, h = (e) => Jr(m, e);
950
+ mysql: () => t.unsafe(O(i.column, o, "mysql", { numeric: !0 })),
951
+ mssql: () => t.unsafe(O(i.column, o, "mssql", { numeric: !0 })),
952
+ sqlite: () => t.unsafe(O(i.column, o, "sqlite", { numeric: !0 })),
953
+ orElse: () => t.unsafe(O(i.column, o, "postgres", { numeric: !0 }))
954
+ }), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 : C(r)?.fields?.[i.column]?.type, h = (e) => ci(m, e);
839
955
  switch (i.op) {
840
956
  case "eq": return t`${u} = ${f(h(i.value))}`;
841
957
  case "neq": return t`${u} <> ${f(h(i.value))}`;
@@ -852,7 +968,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
852
968
  return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
853
969
  }
854
970
  case "contains": {
855
- let e = `%${Zr(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
971
+ let e = `%${di(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
856
972
  return t.onDialectOrElse({
857
973
  mysql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
858
974
  mssql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
@@ -861,7 +977,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
861
977
  });
862
978
  }
863
979
  case "startsWith": {
864
- let e = `${Zr(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
980
+ let e = `${di(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
865
981
  return t.onDialectOrElse({
866
982
  mysql: () => t`${u} LIKE ${e}`,
867
983
  orElse: () => t`${u} LIKE ${e} ESCAPE '\\'`
@@ -909,13 +1025,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
909
1025
  });
910
1026
  }
911
1027
  }
912
- }, Qr = (e, t) => {
1028
+ }, fi = (e, t) => {
913
1029
  let n = [];
914
1030
  return e.partitionBy && e.partitionBy.length > 0 && n.push(t`PARTITION BY ${t.csv(e.partitionBy.map((e) => t`${t(e)}`))}`), e.orderBy && e.orderBy.length > 0 && n.push(t`ORDER BY ${t.csv(e.orderBy.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), n.length === 0 ? t`` : n.length === 1 ? n[0] : n.reduce((e, n, r) => r === 0 ? n : t`${e} ${n}`);
915
- }, $r = (e, t) => t.csv(e.map((e) => {
1031
+ }, pi = (e, t) => t.csv(e.map((e) => {
916
1032
  let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
917
1033
  if (e.op.startsWith("window-")) {
918
- let r = Qr(e.window ?? {}, t);
1034
+ let r = fi(e.window ?? {}, t);
919
1035
  switch (e.op) {
920
1036
  case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
921
1037
  case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
@@ -939,44 +1055,44 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
939
1055
  return t`${t(e.column)} AS ${t(e.alias)}`;
940
1056
  default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
941
1057
  }
942
- })), ei = (e) => `[${e.join(",")}]`, ti = (e, t) => {
1058
+ })), mi = (e) => `[${e.join(",")}]`, hi = (e, t) => {
943
1059
  if (e.queryVector === void 0) return null;
944
- let n = t(e.column), r = ei(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
1060
+ let n = t(e.column), r = mi(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
945
1061
  return t.onDialectOrElse({
946
1062
  mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
947
1063
  mssql: () => t`NULL`,
948
1064
  sqlite: () => t`NULL`,
949
1065
  orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
950
1066
  });
951
- }, ni = (e, t) => {
1067
+ }, gi = (e, t) => {
952
1068
  let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
953
1069
  return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
954
- }, ri = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, ii = (e, t) => t`${t(`${e.indexName}_tsv`)}`, ai = (e, t) => `${t}_${e.indexName}_fts`, oi = (e, t, n) => {
955
- let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${Zr(e.query)}%`;
1070
+ }, _i = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, vi = (e, t) => t`${t(`${e.indexName}_tsv`)}`, yi = (e, t) => `${t}_${e.indexName}_fts`, bi = (e, t, n) => {
1071
+ let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${di(e.query)}%`;
956
1072
  return n.onDialectOrElse({
957
1073
  mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
958
1074
  sqlite: () => {
959
- let r = n(ai(e, t));
1075
+ let r = n(yi(e, t));
960
1076
  return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
961
1077
  },
962
1078
  mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
963
- orElse: () => n`${ii(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
1079
+ orElse: () => n`${vi(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
964
1080
  });
965
- }, si = (e, t, n) => {
966
- let r = `%${Zr(e.query)}%`;
1081
+ }, xi = (e, t, n) => {
1082
+ let r = `%${di(e.query)}%`;
967
1083
  return n.onDialectOrElse({
968
1084
  mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
969
1085
  sqlite: () => {
970
- let r = n(ai(e, t));
1086
+ let r = n(yi(e, t));
971
1087
  return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
972
1088
  },
973
1089
  mssql: () => e.columns.map((e) => n`(CASE WHEN LOWER(${n(e)}) LIKE LOWER(${r}) ESCAPE '\\' THEN 1 ELSE 0 END)`).reduce((e, t, r) => r === 0 ? t : n`${e} + ${t}`),
974
- orElse: () => n`ts_rank(${ii(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
1090
+ orElse: () => n`ts_rank(${vi(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
975
1091
  });
976
- }, ci = (e, t, n = null) => {
1092
+ }, Si = (e, t, n = null) => {
977
1093
  if (e.setOp && e.setOp.queries.length >= 2) {
978
- let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${ci(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
979
- if (v(e).length > 0 && a.push(t` ORDER BY ${t.csv(v(e).map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
1094
+ let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${Si(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
1095
+ if (b(e).length > 0 && a.push(t` ORDER BY ${t.csv(b(e).map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
980
1096
  if (!Number.isInteger(e.take) || e.take < 0) throw Error(`compileSelect: invalid take ${e.take}`);
981
1097
  a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
982
1098
  }
@@ -986,7 +1102,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
986
1102
  }
987
1103
  return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
988
1104
  }
989
- let r = e.annClause === void 0 ? null : ti(e.annClause, t);
1105
+ let r = e.annClause === void 0 ? null : hi(e.annClause, t);
990
1106
  e.spatialClause !== void 0 && t.onDialectOrElse({
991
1107
  mysql: () => {
992
1108
  throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
@@ -999,7 +1115,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
999
1115
  },
1000
1116
  orElse: () => t``
1001
1117
  });
1002
- let i = e.spatialClause?.projectAs === void 0 ? null : ni(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? $r(e.aggregations, t) : e.joinedProjection && e.joinedProjection.length > 0 ? t.csv(e.joinedProjection.map((e) => t`${t(e.source)} AS ${t(e.outputKey)}`)) : e.projection && e.projection.length > 0 ? t.csv(e.projection.map((e) => t`${t(e)}`)) : t`*`, o = (e.aggregations && e.aggregations.length > 0) === !0, s = r !== null && !o ? t`${a}, ${r} AS ${t("distance")}` : a, c = e.fullTextSearch, l = c?.rank !== void 0 && !o ? si(c, e.table, t) : null, u = l !== null && c?.rank !== void 0 ? t`${s}, ${l} AS ${t(c.rank.alias)}` : s, d = i !== null && !o && e.spatialClause?.projectAs !== void 0 ? t`${u}, ${i} AS ${t(e.spatialClause.projectAs)}` : u, f = e.distinctOn && e.distinctOn.length > 0 ? t.onDialectOrElse({
1118
+ let i = e.spatialClause?.projectAs === void 0 ? null : gi(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? pi(e.aggregations, t) : e.joinedProjection && e.joinedProjection.length > 0 ? t.csv(e.joinedProjection.map((e) => t`${t(e.source)} AS ${t(e.outputKey)}`)) : e.projection && e.projection.length > 0 ? t.csv(e.projection.map((e) => t`${t(e)}`)) : t`*`, o = (e.aggregations && e.aggregations.length > 0) === !0, s = r !== null && !o ? t`${a}, ${r} AS ${t("distance")}` : a, c = e.fullTextSearch, l = c?.rank !== void 0 && !o ? xi(c, e.table, t) : null, u = l !== null && c?.rank !== void 0 ? t`${s}, ${l} AS ${t(c.rank.alias)}` : s, d = i !== null && !o && e.spatialClause?.projectAs !== void 0 ? t`${u}, ${i} AS ${t(e.spatialClause.projectAs)}` : u, f = e.distinctOn && e.distinctOn.length > 0 ? t.onDialectOrElse({
1003
1119
  orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
1004
1120
  mysql: () => t`DISTINCT `,
1005
1121
  mssql: () => t`DISTINCT `,
@@ -1011,52 +1127,52 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1011
1127
  mssql: () => t``,
1012
1128
  sqlite: () => t``,
1013
1129
  orElse: () => t` FOR UPDATE`
1014
- }) : t``, g = e.alias === void 0 ? t`${t(Gr(n, e.table))}${m}` : t`${t(Gr(n, e.table))} AS ${t(e.alias)}${m}`, ee = (e.joins ?? []).map((e) => {
1130
+ }) : t``, g = e.alias === void 0 ? t`${t(ai(n, e.table))}${m}` : t`${t(ai(n, e.table))} AS ${t(e.alias)}${m}`, _ = (e.joins ?? []).map((e) => {
1015
1131
  let r = e.kind === "inner" ? "INNER" : "LEFT";
1016
- return t` ${t.unsafe(r)} JOIN ${t(Gr(n, e.table))} AS ${t(e.alias)} ON ${L(e.on, t, n)}`;
1017
- }), te = ee.length > 0 ? ee.reduce((e, n) => t`${e}${n}`, g) : g, ne = c === void 0 ? null : oi(c, e.table, t), re = [e.predicate ? L(e.predicate, t, n, e.table) : null, ne].filter((e) => e !== null), _ = re.length > 0 ? t` WHERE ${t.and(re)}` : t``, ie = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, ae = e.having ? t` HAVING ${L(e.having, t, n, e.table)}` : t``, oe = e.skip !== void 0, y = [];
1018
- r !== null && y.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && y.push(e.spatialClause.order === "desc" ? t`${ri(e.spatialClause, t)} DESC` : t`${ri(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && y.push(t`${l} DESC`);
1019
- for (let n of v(e)) y.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
1020
- let se = y.length > 0 ? t` ORDER BY ${t.csv(y)}` : oe ? t.onDialectOrElse({
1132
+ return t` ${t.unsafe(r)} JOIN ${t(ai(n, e.table))} AS ${t(e.alias)} ON ${L(e.on, t, n)}`;
1133
+ }), v = _.length > 0 ? _.reduce((e, n) => t`${e}${n}`, g) : g, ee = c === void 0 ? null : bi(c, e.table, t), te = [e.predicate ? L(e.predicate, t, n, e.table) : null, ee].filter((e) => e !== null), y = te.length > 0 ? t` WHERE ${t.and(te)}` : t``, ne = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, re = e.having ? t` HAVING ${L(e.having, t, n, e.table)}` : t``, ie = e.skip !== void 0, x = [];
1134
+ r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${_i(e.spatialClause, t)} DESC` : t`${_i(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
1135
+ for (let n of b(e)) x.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
1136
+ let ae = x.length > 0 ? t` ORDER BY ${t.csv(x)}` : ie ? t.onDialectOrElse({
1021
1137
  mssql: () => t` ORDER BY (SELECT NULL)`,
1022
1138
  orElse: () => t``
1023
- }) : t``, b = (e) => {
1139
+ }) : t``, oe = (e) => {
1024
1140
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
1025
1141
  return t.unsafe(String(e));
1026
- }, ce = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${ci(e.descriptor, t, n)})`), le = (e.ctes ?? []).some((e) => e.recursive === !0), ue = ce.length > 0 ? t`WITH ${t.unsafe(le ? "RECURSIVE " : "")}${t.csv(ce)} ` : t``;
1142
+ }, se = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${Si(e.descriptor, t, n)})`), ce = (e.ctes ?? []).some((e) => e.recursive === !0), le = se.length > 0 ? t`WITH ${t.unsafe(ce ? "RECURSIVE " : "")}${t.csv(se)} ` : t``;
1027
1143
  return t.onDialectOrElse({
1028
1144
  mssql: () => {
1029
- let n = e.take !== void 0 && !oe ? t`TOP ${b(e.take)} ` : t``, r = oe ? t` OFFSET ${b(e.skip)} ROWS FETCH NEXT ${b(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
1030
- return t`${ue}SELECT ${n}${f}${d} FROM ${te}${_}${ie}${ae}${se}${r}`;
1145
+ let n = e.take !== void 0 && !ie ? t`TOP ${oe(e.take)} ` : t``, r = ie ? t` OFFSET ${oe(e.skip)} ROWS FETCH NEXT ${oe(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
1146
+ return t`${le}SELECT ${n}${f}${d} FROM ${v}${y}${ne}${re}${ae}${r}`;
1031
1147
  },
1032
1148
  orElse: () => {
1033
- let n = e.take === void 0 ? t`` : t` LIMIT ${b(e.take)}`, r = oe ? t` OFFSET ${b(e.skip)}` : t``;
1034
- return t`${ue}SELECT ${f}${d} FROM ${te}${_}${ie}${ae}${se}${n}${r}${h}`;
1149
+ let n = e.take === void 0 ? t`` : t` LIMIT ${oe(e.take)}`, r = ie ? t` OFFSET ${oe(e.skip)}` : t``;
1150
+ return t`${le}SELECT ${f}${d} FROM ${v}${y}${ne}${re}${ae}${n}${r}${h}`;
1035
1151
  }
1036
1152
  });
1037
- }, li = (e, t, n) => {
1153
+ }, Ci = (e, t, n) => {
1038
1154
  if (e.eager === void 0) return null;
1039
- let r = fi(e.table, e.eager, e.sourceTable);
1155
+ let r = Ei(e.table, e.eager, e.sourceTable);
1040
1156
  if (r === null) return null;
1041
- let i = yi(n, e, r, vi(t, n));
1157
+ let i = Ni(n, e, r, Mi(t, n));
1042
1158
  return i === null ? null : {
1043
1159
  fragment: i,
1044
- decode: Si(r, n)
1160
+ decode: Ii(r, n)
1045
1161
  };
1046
- }, ui = (e) => e.relation.kind === "one" && e.fkSide === "target", di = (e) => ({
1162
+ }, wi = (e) => e.relation.kind === "one" && e.fkSide === "target", Ti = (e) => ({
1047
1163
  ...e,
1048
1164
  branch: {
1049
1165
  ...e.branch,
1050
1166
  limit: 2
1051
1167
  }
1052
- }), fi = (e, t, n) => {
1053
- let r = n ?? Ve(e), i = ir(e);
1168
+ }), Ei = (e, t, n) => {
1169
+ let r = n ?? Be(e), i = cr(e);
1054
1170
  if (i === void 0) return null;
1055
1171
  let a = [];
1056
1172
  for (let [e, n] of Object.entries(t)) {
1057
1173
  let t = i[e];
1058
1174
  if (t === void 0) return null;
1059
- let o = pi(e, t, r, n === !0 ? {} : n);
1175
+ let o = Di(e, t, r, n === !0 ? {} : n);
1060
1176
  if (o === null) return null;
1061
1177
  a.push(o);
1062
1178
  }
@@ -1064,30 +1180,30 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1064
1180
  table: r,
1065
1181
  children: a
1066
1182
  };
1067
- }, pi = (e, t, n, r) => {
1183
+ }, Di = (e, t, n, r) => {
1068
1184
  let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
1069
1185
  if (t.kind === "manyToMany") o = t.targetKey, s = "target";
1070
1186
  else if (t.kind === "one") {
1071
- let r = t.sourceKey ?? _i(n, i.tableName);
1187
+ let r = t.sourceKey ?? ji(n, i.tableName);
1072
1188
  if (r !== void 0) o = r, s = "source";
1073
1189
  else try {
1074
- o = t.foreignKey ?? Yn(i, n.tableName, e), s = "target";
1190
+ o = t.foreignKey ?? $n(i, n.tableName, e), s = "target";
1075
1191
  } catch {
1076
1192
  return null;
1077
1193
  }
1078
1194
  } else try {
1079
- o = t.foreignKey ?? Yn(i, n.tableName, e), s = "target";
1195
+ o = t.foreignKey ?? $n(i, n.tableName, e), s = "target";
1080
1196
  } catch {
1081
1197
  return null;
1082
1198
  }
1083
1199
  let c = r.with === void 0 ? [] : (() => {
1084
- let e = ir(i.tableName);
1200
+ let e = cr(i.tableName);
1085
1201
  if (e === void 0 && Object.keys(r.with).length > 0) return null;
1086
1202
  let t = [];
1087
1203
  for (let [n, a] of Object.entries(r.with)) {
1088
1204
  let r = e?.[n];
1089
1205
  if (r === void 0) return null;
1090
- let o = pi(n, r, i, a === !0 ? {} : a);
1206
+ let o = Di(n, r, i, a === !0 ? {} : a);
1091
1207
  if (o === null) return null;
1092
1208
  t.push(o);
1093
1209
  }
@@ -1103,9 +1219,9 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1103
1219
  fkSide: s,
1104
1220
  branch: r,
1105
1221
  children: c,
1106
- junction: mi(t, r)
1222
+ junction: Oi(t, r)
1107
1223
  };
1108
- }, mi = (e, t) => {
1224
+ }, Oi = (e, t) => {
1109
1225
  if (e.kind !== "manyToMany" || t.junction === void 0) return;
1110
1226
  let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
1111
1227
  return {
@@ -1117,35 +1233,35 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1117
1233
  return t !== void 0 && (t.type === "timestamp" || t.type === "date");
1118
1234
  })
1119
1235
  };
1120
- }, hi = (e) => `__j_${e}`, gi = "__j", _i = (e, t) => {
1236
+ }, ki = (e) => `__j_${e}`, Ai = "__j", ji = (e, t) => {
1121
1237
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
1122
- }, vi = (e, t) => {
1238
+ }, Mi = (e, t) => {
1123
1239
  let n = 0;
1124
1240
  return {
1125
1241
  sql: e,
1126
1242
  dialect: t,
1127
1243
  nextAlias: () => `__a${n++}`
1128
1244
  };
1129
- }, yi = (e, t, n, r) => {
1245
+ }, Ni = (e, t, n, r) => {
1130
1246
  switch (e) {
1131
- case "postgres": return Ti(t, n, r);
1247
+ case "postgres": return zi(t, n, r);
1132
1248
  case "sqlite":
1133
- case "turso": return Ni(t, n, r);
1249
+ case "turso": return qi(t, n, r);
1134
1250
  case "mysql":
1135
- case "mariadb": return Ui(t, n, r);
1136
- case "mssql": return Xi(t, n, r);
1251
+ case "mariadb": return ra(t, n, r);
1252
+ case "mssql": return ua(t, n, r);
1137
1253
  }
1138
- }, bi = (e, t) => t === "mssql" && !xi.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), xi = /(?:Z|[+-]\d{2}:?\d{2})$/, Si = (e, t) => {
1139
- let n = Ci(e.table, e.children, t);
1254
+ }, Pi = (e, t) => t === "mssql" && !Fi.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), Fi = /(?:Z|[+-]\d{2}:?\d{2})$/, Ii = (e, t) => {
1255
+ let n = Li(e.table, e.children, t);
1140
1256
  return (e) => e.map((e) => {
1141
1257
  let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
1142
1258
  return n(r);
1143
1259
  });
1144
- }, Ci = (e, t, n) => {
1260
+ }, Li = (e, t, n) => {
1145
1261
  let r = [];
1146
1262
  for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
1147
1263
  let i = t.map((e) => {
1148
- let t = Ci(e.target, e.children, n), r = e.relation.kind === "one", i = ui(e), a = i ? Dr({
1264
+ let t = Li(e.target, e.children, n), r = e.relation.kind === "one", i = wi(e), a = i ? Vr({
1149
1265
  relationName: e.relationName,
1150
1266
  sourceTableName: e.source.tableName,
1151
1267
  targetTableName: e.target.tableName,
@@ -1158,14 +1274,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1158
1274
  isSingle: r,
1159
1275
  fromOverFetch: i,
1160
1276
  cardinalityMessage: a,
1161
- junction: wi(e.junction, n)
1277
+ junction: Ri(e.junction, n)
1162
1278
  };
1163
1279
  });
1164
1280
  return (e) => {
1165
1281
  let t = { ...e };
1166
1282
  for (let e of r) {
1167
1283
  let r = t[e];
1168
- typeof r == "string" && (t[e] = bi(r, n));
1284
+ typeof r == "string" && (t[e] = Pi(r, n));
1169
1285
  }
1170
1286
  for (let e of i) {
1171
1287
  let n = t[e.name];
@@ -1175,7 +1291,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1175
1291
  }
1176
1292
  if (e.fromOverFetch) {
1177
1293
  let r = n;
1178
- if (r.length > 1) throw new Er(e.cardinalityMessage);
1294
+ if (r.length > 1) throw new Br(e.cardinalityMessage);
1179
1295
  t[e.name] = r.length === 0 ? null : e.decode(r[0]);
1180
1296
  continue;
1181
1297
  }
@@ -1187,202 +1303,202 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1187
1303
  }
1188
1304
  return t;
1189
1305
  };
1190
- }, wi = (e, t) => {
1306
+ }, Ri = (e, t) => {
1191
1307
  if (e === void 0) return;
1192
1308
  let n = new Set(e.dateColumns), r = e.requested;
1193
1309
  return (e) => {
1194
1310
  let i = e._junction ?? {}, a = {};
1195
1311
  for (let e of r) {
1196
1312
  let r = i[e];
1197
- a[e] = n.has(e) && typeof r == "string" ? bi(r, t) : r;
1313
+ a[e] = n.has(e) && typeof r == "string" ? Pi(r, t) : r;
1198
1314
  }
1199
1315
  return {
1200
1316
  ...e,
1201
1317
  _junction: a
1202
1318
  };
1203
1319
  };
1204
- }, Ti = (e, t, n) => {
1205
- let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = Ei(i, t.children, n);
1206
- return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``}${v(e).length > 0 ? r` ORDER BY ${r.csv(v(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`}`;
1207
- }, Ei = (e, t, n, r) => {
1208
- let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${V(gi, i)}::text)`;
1320
+ }, zi = (e, t, n) => {
1321
+ let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = Bi(i, t.children, n);
1322
+ return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``}${b(e).length > 0 ? r` ORDER BY ${r.csv(b(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`}`;
1323
+ }, Bi = (e, t, n, r) => {
1324
+ let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${V(Ai, i)}::text)`;
1209
1325
  if (t.length === 0 && r === void 0) return a;
1210
1326
  let o = [];
1211
- r !== void 0 && o.push(i`${V("_junction", i)}, ${B(e, gi, i)}`);
1327
+ r !== void 0 && o.push(i`${V("_junction", i)}, ${B(e, Ai, i)}`);
1212
1328
  for (let r of t) {
1213
- let t = Di(r, e, n);
1329
+ let t = Vi(r, e, n);
1214
1330
  if (t === null) return null;
1215
1331
  o.push(i`${V(r.relationName, i)}, ${t}`);
1216
1332
  }
1217
1333
  return i`${a} || jsonb_build_object(${i.csv(o)})`;
1218
- }, Di = (e, t, n) => {
1334
+ }, Vi = (e, t, n) => {
1219
1335
  switch (e.relation.kind) {
1220
- case "one": return ui(e) ? ki(di(e), t, n) : Oi(e, t, n);
1221
- case "many": return ki(e, t, n);
1222
- case "manyToMany": return Ai(e, t, n);
1336
+ case "one": return wi(e) ? Ui(Ti(e), t, n) : Hi(e, t, n);
1337
+ case "many": return Ui(e, t, n);
1338
+ case "manyToMany": return Wi(e, t, n);
1223
1339
  }
1224
- }, Oi = (e, t, n) => {
1225
- let r = n.sql, i = n.nextAlias(), a = Ei(i, e.children, n);
1340
+ }, Hi = (e, t, n) => {
1341
+ let r = n.sql, i = n.nextAlias(), a = Bi(i, e.children, n);
1226
1342
  if (a === null) return null;
1227
1343
  let o = e.fkSide === "source" ? r`${B(i, "id", r)} = ${B(t, e.foreignKey, r)}` : r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, i, r)}`, c = R(i, e.branch.orderBy, r);
1228
1344
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
1229
- }, ki = (e, t, n) => {
1230
- let r = n.sql, i = n.nextAlias(), a = Ei(i, e.children, n);
1345
+ }, Ui = (e, t, n) => {
1346
+ let r = n.sql, i = n.nextAlias(), a = Bi(i, e.children, n);
1231
1347
  if (a === null) return null;
1232
- let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, c = Mi(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
1348
+ let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, c = Ki(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
1233
1349
  return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
1234
- }, Ai = (e, t, n) => {
1235
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Ei(o, e.children, n, e.junction);
1350
+ }, Wi = (e, t, n) => {
1351
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Bi(o, e.children, n, e.junction);
1236
1352
  if (c === null) return null;
1237
- let l = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, u = ia(e, s, r), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${ji(e.junction, s, r)} AS ${r(gi)}`;
1353
+ let l = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, u = va(e, s, r), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${Gi(e.junction, s, r)} AS ${r(Ai)}`;
1238
1354
  return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${B(o, "id", r)} = ${B(s, i.targetKey, r)} WHERE ${B(s, i.sourceKey, r)} = ${B(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
1239
- }, ji = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${V(e, n)}, ${B(t, e, n)}`))})`, R = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${B(e, t.column, n)} DESC` : n`${B(e, t.column, n)} ASC`))}`, Mi = (e, t) => e === void 0 || e.length === 0 ? t`` : t` ORDER BY ${t.csv(e.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`, Ni = (e, t, n) => {
1240
- let r = n.sql, i = n.nextAlias(), a = Pi(i, t.table, t.children, n);
1355
+ }, Gi = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${V(e, n)}, ${B(t, e, n)}`))})`, R = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${B(e, t.column, n)} DESC` : n`${B(e, t.column, n)} ASC`))}`, Ki = (e, t) => e === void 0 || e.length === 0 ? t`` : t` ORDER BY ${t.csv(e.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`, qi = (e, t, n) => {
1356
+ let r = n.sql, i = n.nextAlias(), a = Ji(i, t.table, t.children, n);
1241
1357
  if (a === null) return null;
1242
- let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = v(e).length > 0 ? r` ORDER BY ${r.csv(v(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`;
1358
+ let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = b(e).length > 0 ? r` ORDER BY ${r.csv(b(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`;
1243
1359
  return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
1244
- }, Pi = (e, t, n, r, i) => {
1360
+ }, Ji = (e, t, n, r, i) => {
1245
1361
  let a = r.sql, o = [];
1246
1362
  for (let n of Object.keys(t.fields)) o.push(a`${V(n, a)}, ${B(e, n, a)}`);
1247
1363
  if (i !== void 0) {
1248
- let e = Fi(i.projection, i.source, a);
1364
+ let e = Yi(i.projection, i.source, a);
1249
1365
  o.push(a`${V("_junction", a)}, json_object(${e})`);
1250
1366
  }
1251
1367
  for (let t of n) {
1252
- let n = zi(t, e, r);
1368
+ let n = $i(t, e, r);
1253
1369
  if (n === null) return null;
1254
1370
  o.push(a`${V(t.relationName, a)}, ${n}`);
1255
1371
  }
1256
1372
  return a`json_object(${a.csv(o)})`;
1257
- }, Fi = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${V(e, n)}, ${B(t.alias, t.physical(e), n)}`)), Ii = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${B(t, e, n)} AS ${n(hi(e))}`))}`, Li = (e) => ({
1373
+ }, Yi = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${V(e, n)}, ${B(t.alias, t.physical(e), n)}`)), Xi = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${B(t, e, n)} AS ${n(ki(e))}`))}`, Zi = (e) => ({
1258
1374
  alias: e,
1259
- physical: hi
1260
- }), Ri = (e) => ({
1375
+ physical: ki
1376
+ }), Qi = (e) => ({
1261
1377
  alias: e,
1262
1378
  physical: (e) => e
1263
- }), zi = (e, t, n) => {
1379
+ }), $i = (e, t, n) => {
1264
1380
  switch (e.relation.kind) {
1265
- case "one": return ui(e) ? Vi(di(e), t, n) : Bi(e, t, n);
1266
- case "many": return Vi(e, t, n);
1267
- case "manyToMany": return Hi(e, t, n);
1381
+ case "one": return wi(e) ? ta(Ti(e), t, n) : ea(e, t, n);
1382
+ case "many": return ta(e, t, n);
1383
+ case "manyToMany": return na(e, t, n);
1268
1384
  }
1269
- }, Bi = (e, t, n) => {
1270
- let r = n.sql, i = n.nextAlias(), a = Pi(i, e.target, e.children, n);
1385
+ }, ea = (e, t, n) => {
1386
+ let r = n.sql, i = n.nextAlias(), a = Ji(i, e.target, e.children, n);
1271
1387
  if (a === null) return null;
1272
1388
  let o = e.fkSide === "source" ? r`${B(i, "id", r)} = ${B(t, e.foreignKey, r)}` : r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`;
1273
1389
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
1274
- }, Vi = (e, t, n) => {
1275
- let r = n.sql, i = n.nextAlias(), a = Pi(i, e.target, e.children, n);
1390
+ }, ta = (e, t, n) => {
1391
+ let r = n.sql, i = n.nextAlias(), a = Ji(i, e.target, e.children, n);
1276
1392
  if (a === null) return null;
1277
- let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c = Mi(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
1393
+ let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c = Ki(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
1278
1394
  return r`COALESCE((SELECT json_group_array(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), json('[]'))`;
1279
- }, Hi = (e, t, n) => {
1280
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Pi(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1395
+ }, na = (e, t, n) => {
1396
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Ji(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1281
1397
  projection: e.junction,
1282
- source: Li(o)
1398
+ source: Zi(o)
1283
1399
  });
1284
1400
  if (c === null) return null;
1285
- let l = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, u = ia(e, s, r, !0), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Ii(e.junction, s, r);
1401
+ let l = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, u = va(e, s, r, !0), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Xi(e.junction, s, r);
1286
1402
  return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${B(o, "id", r)} = ${B(s, i.targetKey, r)} WHERE ${B(s, i.sourceKey, r)} = ${B(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
1287
- }, Ui = (e, t, n) => {
1403
+ }, ra = (e, t, n) => {
1288
1404
  let r = n.sql, i = n.nextAlias(), a = z(i, t.table, t.children, n);
1289
1405
  if (a === null) return null;
1290
- let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = v(e).length > 0 ? r` ORDER BY ${r.csv(v(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`;
1406
+ let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = b(e).length > 0 ? r` ORDER BY ${r.csv(b(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`;
1291
1407
  return r`SELECT ${a} AS \`__row\` FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
1292
1408
  }, z = (e, t, n, r, i) => {
1293
1409
  let a = r.sql, o = [];
1294
1410
  for (let n of Object.keys(t.fields)) o.push(a`${V(n, a)}, ${B(e, n, a)}`);
1295
1411
  if (i !== void 0) {
1296
- let e = Fi(i.projection, i.source, a);
1412
+ let e = Yi(i.projection, i.source, a);
1297
1413
  o.push(a`${V("_junction", a)}, JSON_OBJECT(${e})`);
1298
1414
  }
1299
1415
  for (let t of n) {
1300
- let n = Wi(t, e, r);
1416
+ let n = ia(t, e, r);
1301
1417
  if (n === null) return null;
1302
1418
  o.push(a`${V(t.relationName, a)}, ${n}`);
1303
1419
  }
1304
1420
  return a`JSON_OBJECT(${a.csv(o)})`;
1305
- }, Wi = (e, t, n) => {
1421
+ }, ia = (e, t, n) => {
1306
1422
  switch (e.relation.kind) {
1307
1423
  case "one":
1308
- if (ui(e)) {
1309
- let r = di(e);
1310
- return n.dialect === "mariadb" ? Ji(r, t, n) : Ki(r, t, n);
1424
+ if (wi(e)) {
1425
+ let r = Ti(e);
1426
+ return n.dialect === "mariadb" ? ca(r, t, n) : oa(r, t, n);
1311
1427
  }
1312
- return Gi(e, t, n);
1313
- case "many": return n.dialect === "mariadb" ? Ji(e, t, n) : Ki(e, t, n);
1314
- case "manyToMany": return n.dialect === "mariadb" ? Yi(e, t, n) : qi(e, t, n);
1428
+ return aa(e, t, n);
1429
+ case "many": return n.dialect === "mariadb" ? ca(e, t, n) : oa(e, t, n);
1430
+ case "manyToMany": return n.dialect === "mariadb" ? la(e, t, n) : sa(e, t, n);
1315
1431
  }
1316
- }, Gi = (e, t, n) => {
1432
+ }, aa = (e, t, n) => {
1317
1433
  let r = n.sql, i = n.nextAlias(), a = z(i, e.target, e.children, n);
1318
1434
  if (a === null) return null;
1319
1435
  let o = e.fkSide === "source" ? r`${B(i, "id", r)} = ${B(t, e.foreignKey, r)}` : r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`;
1320
1436
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
1321
- }, Ki = (e, t, n) => {
1437
+ }, oa = (e, t, n) => {
1322
1438
  let r = n.sql, i = n.nextAlias(), a = z(i, e.target, e.children, n);
1323
1439
  if (a === null) return null;
1324
- let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c = Mi(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
1440
+ let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c = Ki(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
1325
1441
  return r`COALESCE((SELECT JSON_ARRAYAGG(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), JSON_ARRAY())`;
1326
- }, qi = (e, t, n) => {
1442
+ }, sa = (e, t, n) => {
1327
1443
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = z(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1328
1444
  projection: e.junction,
1329
- source: Li(o)
1445
+ source: Zi(o)
1330
1446
  });
1331
1447
  if (c === null) return null;
1332
- let l = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, u = ia(e, s, r, !0), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Ii(e.junction, s, r);
1448
+ let l = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, u = va(e, s, r, !0), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Xi(e.junction, s, r);
1333
1449
  return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${B(o, "id", r)} = ${B(s, i.targetKey, r)} WHERE ${B(s, i.sourceKey, r)} = ${B(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
1334
- }, Ji = (e, t, n) => {
1450
+ }, ca = (e, t, n) => {
1335
1451
  let r = n.sql, i = n.nextAlias(), a = z(i, e.target, e.children, n);
1336
1452
  if (a === null) return null;
1337
1453
  let o = r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
1338
1454
  if (e.branch.limit === void 0 && e.branch.offset === void 0) return r`COALESCE((SELECT JSON_ARRAYAGG(${a}${c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
1339
1455
  let l = c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${r(e.column)} DESC` : r`${r(e.column)} ASC`))}` : r` ORDER BY ${r("id")}`, u = e.branch.limit, d = e.branch.offset, f = u !== void 0 && d !== void 0 ? r` AND ${B(i, "rn", r)} > ${H(d, r)} AND ${B(i, "rn", r)} <= ${H(d + u, r)}` : u === void 0 ? r` AND ${B(i, "rn", r)} > ${H(d, r)}` : r` AND ${B(i, "rn", r)} <= ${H(u, r)}`;
1340
1456
  return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${B(i, "rn", r)}) FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ${r(e.foreignKey)}${l}) AS rn FROM ${r(e.target.tableName)}) AS ${r(i)} WHERE ${o}${s}${f}), JSON_ARRAY())`;
1341
- }, Yi = (e, t, n) => {
1457
+ }, la = (e, t, n) => {
1342
1458
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
1343
1459
  projection: e.junction,
1344
1460
  source: t
1345
- }, l = r`${B(s, i.sourceKey, r)} = ${B(t, "id", r)}`, u = r`${B(o, "id", r)} = ${B(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, f = ia(e, s, r, !0), p = e.branch.orderBy ?? [];
1461
+ }, l = r`${B(s, i.sourceKey, r)} = ${B(t, "id", r)}`, u = r`${B(o, "id", r)} = ${B(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, f = va(e, s, r, !0), p = e.branch.orderBy ?? [];
1346
1462
  if (e.branch.limit === void 0 && e.branch.offset === void 0) {
1347
- let t = z(o, e.target, e.children, n, c(Ri(s)));
1463
+ let t = z(o, e.target, e.children, n, c(Qi(s)));
1348
1464
  return t === null ? null : r`COALESCE((SELECT JSON_ARRAYAGG(${t}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${B(o, e.column, r)} DESC` : r`${B(o, e.column, r)} ASC`))}` : r``}) FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u} WHERE ${l}${f}${d}), JSON_ARRAY())`;
1349
1465
  }
1350
- let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${B(o, e.column, r)} DESC` : r`${B(o, e.column, r)} ASC`))}` : r` ORDER BY ${B(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, ee = h !== void 0 && g !== void 0 ? r` AND ${B(o, "rn", r)} > ${H(g, r)} AND ${B(o, "rn", r)} <= ${H(g + h, r)}` : h === void 0 ? r` AND ${B(o, "rn", r)} > ${H(g, r)}` : r` AND ${B(o, "rn", r)} <= ${H(h, r)}`, te = e.branch.onJunction === void 0 ? r`` : r` WHERE ${U(W(e.branch.onJunction), s, r)}`, ne = z(o, e.target, e.children, n, c(Li(o)));
1351
- if (ne === null) return null;
1352
- let re = e.junction === void 0 ? r`` : Ii(e.junction, s, r);
1353
- return r`COALESCE((SELECT JSON_ARRAYAGG(${ne} ORDER BY ${B(o, "rn", r)}) FROM (SELECT ${r(o)}.*${re}, ${B(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${B(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${te}) AS ${r(o)} WHERE ${B(o, `__src_${i.sourceKey}`, r)} = ${B(t, "id", r)}${d}${ee}), JSON_ARRAY())`;
1354
- }, Xi = (e, t, n) => {
1355
- let r = n.sql, i = n.nextAlias(), a = Zi(i, t.table, t.children, n);
1466
+ let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${B(o, e.column, r)} DESC` : r`${B(o, e.column, r)} ASC`))}` : r` ORDER BY ${B(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${B(o, "rn", r)} > ${H(g, r)} AND ${B(o, "rn", r)} <= ${H(g + h, r)}` : h === void 0 ? r` AND ${B(o, "rn", r)} > ${H(g, r)}` : r` AND ${B(o, "rn", r)} <= ${H(h, r)}`, v = e.branch.onJunction === void 0 ? r`` : r` WHERE ${U(W(e.branch.onJunction), s, r)}`, ee = z(o, e.target, e.children, n, c(Zi(o)));
1467
+ if (ee === null) return null;
1468
+ let te = e.junction === void 0 ? r`` : Xi(e.junction, s, r);
1469
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${ee} ORDER BY ${B(o, "rn", r)}) FROM (SELECT ${r(o)}.*${te}, ${B(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${B(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${v}) AS ${r(o)} WHERE ${B(o, `__src_${i.sourceKey}`, r)} = ${B(t, "id", r)}${d}${_}), JSON_ARRAY())`;
1470
+ }, ua = (e, t, n) => {
1471
+ let r = n.sql, i = n.nextAlias(), a = da(i, t.table, t.children, n);
1356
1472
  if (a === null) return null;
1357
- let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = v(e).length > 0 ? r` ORDER BY ${r.csv(v(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
1473
+ let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = b(e).length > 0 ? r` ORDER BY ${r.csv(b(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
1358
1474
  if (e.skip !== void 0) {
1359
- let t = v(e).length > 0 ? s : r` ORDER BY (SELECT NULL)`;
1475
+ let t = b(e).length > 0 ? s : r` ORDER BY (SELECT NULL)`;
1360
1476
  l = e.take === void 0 ? r`${t} OFFSET ${H(e.skip, r)} ROWS` : r`${t} OFFSET ${H(e.skip, r)} ROWS FETCH NEXT ${H(e.take, r)} ROWS ONLY`;
1361
1477
  } else e.take !== void 0 && (c = r`TOP ${H(e.take, r)} `);
1362
1478
  let u = e.skip === void 0 ? s : r``;
1363
1479
  return r`SELECT ${c}(SELECT ${a} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER) AS ${r("__row")} FROM ${r(t.table.tableName)} AS ${r(i)}${o}${u}${l}`;
1364
- }, Zi = (e, t, n, r, i) => {
1480
+ }, da = (e, t, n, r, i) => {
1365
1481
  let a = r.sql, o = [];
1366
1482
  for (let n of Object.keys(t.fields)) o.push(a`${B(e, n, a)} AS ${a(n)}`);
1367
- if (i !== void 0) for (let e of i.projection.present) o.push(a`${B(i.source.alias, i.source.physical(e), a)} AS ${Qi(`_junction.${e}`, a)}`);
1483
+ if (i !== void 0) for (let e of i.projection.present) o.push(a`${B(i.source.alias, i.source.physical(e), a)} AS ${fa(`_junction.${e}`, a)}`);
1368
1484
  for (let t of n) {
1369
- let n = $i(t, e, r);
1485
+ let n = pa(t, e, r);
1370
1486
  if (n === null) return null;
1371
1487
  o.push(n);
1372
1488
  }
1373
1489
  return a.csv(o);
1374
- }, Qi = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), $i = (e, t, n) => {
1490
+ }, fa = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), pa = (e, t, n) => {
1375
1491
  switch (e.relation.kind) {
1376
- case "one": return ui(e) ? na(di(e), t, n) : ea(e, t, n);
1377
- case "many": return na(e, t, n);
1378
- case "manyToMany": return ra(e, t, n);
1492
+ case "one": return wi(e) ? ga(Ti(e), t, n) : ma(e, t, n);
1493
+ case "many": return ga(e, t, n);
1494
+ case "manyToMany": return _a(e, t, n);
1379
1495
  }
1380
- }, ea = (e, t, n) => {
1381
- let r = n.sql, i = n.nextAlias(), a = Zi(i, e.target, e.children, n);
1496
+ }, ma = (e, t, n) => {
1497
+ let r = n.sql, i = n.nextAlias(), a = da(i, e.target, e.children, n);
1382
1498
  if (a === null) return null;
1383
1499
  let o = e.fkSide === "source" ? r`${B(i, "id", r)} = ${B(t, e.foreignKey, r)}` : r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`;
1384
1500
  return r`JSON_QUERY((SELECT TOP 1 ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) AS ${r(e.relationName)}`;
1385
- }, ta = (e, t, n) => {
1501
+ }, ha = (e, t, n) => {
1386
1502
  if (e.offset !== void 0) {
1387
1503
  let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${H(e.offset, n)} ROWS` : n`${r} OFFSET ${H(e.offset, n)} ROWS FETCH NEXT ${H(e.limit, n)} ROWS ONLY`;
1388
1504
  return {
@@ -1396,29 +1512,29 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1396
1512
  pagination: n``,
1397
1513
  finalOrder: t
1398
1514
  };
1399
- }, na = (e, t, n) => {
1400
- let r = n.sql, i = n.nextAlias(), a = Zi(i, e.target, e.children, n);
1515
+ }, ga = (e, t, n) => {
1516
+ let r = n.sql, i = n.nextAlias(), a = da(i, e.target, e.children, n);
1401
1517
  if (a === null) return null;
1402
- let o = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, i, r)}`, s = R(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = ta(e.branch, s, r);
1518
+ let o = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, i, r)}`, s = R(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = ha(e.branch, s, r);
1403
1519
  return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1404
- }, ra = (e, t, n) => {
1405
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Zi(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1520
+ }, _a = (e, t, n) => {
1521
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = da(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1406
1522
  projection: e.junction,
1407
- source: Ri(s)
1523
+ source: Qi(s)
1408
1524
  });
1409
1525
  if (c === null) return null;
1410
- let l = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, o, r)}`, u = ia(e, s, r), d = R(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = ta(e.branch, d, r);
1526
+ let l = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, o, r)}`, u = va(e, s, r), d = R(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = ha(e.branch, d, r);
1411
1527
  return r`ISNULL(JSON_QUERY((SELECT ${f}${c} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${B(o, "id", r)} = ${B(s, i.targetKey, r)} WHERE ${B(s, i.sourceKey, r)} = ${B(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1412
1528
  }, B = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, V = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), H = (e, t) => {
1413
1529
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
1414
1530
  return t.unsafe(String(e));
1415
- }, U = (e, t, n) => L(aa(e, t), n), ia = (e, t, n, r = !1) => {
1531
+ }, U = (e, t, n) => L(ya(e, t), n), va = (e, t, n, r = !1) => {
1416
1532
  let i = e.branch.onJunction;
1417
1533
  return i === void 0 ? n`` : n` AND ${U(r ? W(i) : i, t, n)}`;
1418
- }, aa = (e, t) => {
1419
- if ("not" in e) return { not: aa(e.not, t) };
1420
- if ("and" in e) return { and: e.and.map((e) => aa(e, t)) };
1421
- if ("or" in e) return { or: e.or.map((e) => aa(e, t)) };
1534
+ }, ya = (e, t) => {
1535
+ if ("not" in e) return { not: ya(e.not, t) };
1536
+ if ("and" in e) return { and: e.and.map((e) => ya(e, t)) };
1537
+ if ("or" in e) return { or: e.or.map((e) => ya(e, t)) };
1422
1538
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
1423
1539
  let n = e;
1424
1540
  return {
@@ -1440,91 +1556,91 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1440
1556
  let t = e;
1441
1557
  return {
1442
1558
  ...t,
1443
- value: oa(t.value)
1559
+ value: ba(t.value)
1444
1560
  };
1445
- }, oa = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => oa(e)) : e, sa = Symbol.for("@voltro/database/coreTablesRegistry"), ca = globalThis, la = ca[sa] ?? (ca[sa] = {}), ua = (e) => {
1446
- e.actors !== void 0 && (la.actors = e.actors), e.tenants !== void 0 && (la.tenants = e.tenants);
1447
- }, da = (e, t) => () => {
1561
+ }, ba = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => ba(e)) : e, xa = Symbol.for("@voltro/database/coreTablesRegistry"), Sa = globalThis, Ca = Sa[xa] ?? (Sa[xa] = {}), wa = (e) => {
1562
+ e.actors !== void 0 && (Ca.actors = e.actors), e.tenants !== void 0 && (Ca.tenants = e.tenants);
1563
+ }, Ta = (e, t) => () => {
1448
1564
  let n = e();
1449
1565
  if (n === void 0) throw Error(`core '${t}' table not registered; expected the framework CLI or your migrate step to call registerCoreTables({ ${t}: () => ${t}Table }) before the database handle is constructed`);
1450
1566
  return n();
1451
- }, fa = () => da(() => la.actors, "actors"), pa = () => da(() => la.tenants, "tenants"), ma = w("actors", {
1452
- id: E(),
1453
- kind: C().oneOf([
1567
+ }, Ea = () => Ta(() => Ca.actors, "actors"), Da = () => Ta(() => Ca.tenants, "tenants"), Oa = T("actors", {
1568
+ id: D(),
1569
+ kind: w().oneOf([
1454
1570
  "user",
1455
1571
  "serviceAccount",
1456
1572
  "apiKey",
1457
1573
  "system"
1458
1574
  ]),
1459
- displayName: C().nullable(),
1460
- createdAt: T().default("now")
1461
- }), ha = (e, t) => ({
1575
+ displayName: w().nullable(),
1576
+ createdAt: E().default("now")
1577
+ }), ka = (e, t) => ({
1462
1578
  column: e,
1463
1579
  op: "eq",
1464
1580
  value: t
1465
- }), ga = (e, t) => ({
1581
+ }), Aa = (e, t) => ({
1466
1582
  column: e,
1467
1583
  op: "neq",
1468
1584
  value: t
1469
- }), _a = (e, t) => ({
1585
+ }), ja = (e, t) => ({
1470
1586
  column: e,
1471
1587
  op: "gt",
1472
1588
  value: t
1473
- }), va = (e, t) => ({
1589
+ }), Ma = (e, t) => ({
1474
1590
  column: e,
1475
1591
  op: "gte",
1476
1592
  value: t
1477
- }), ya = (e, t) => ({
1593
+ }), Na = (e, t) => ({
1478
1594
  column: e,
1479
1595
  op: "lt",
1480
1596
  value: t
1481
- }), ba = (e, t) => ({
1597
+ }), Pa = (e, t) => ({
1482
1598
  column: e,
1483
1599
  op: "lte",
1484
1600
  value: t
1485
- }), xa = (e, t) => ({
1601
+ }), Fa = (e, t) => ({
1486
1602
  column: e,
1487
1603
  op: "in",
1488
1604
  value: t
1489
- }), Sa = (e, t) => ({
1605
+ }), Ia = (e, t) => ({
1490
1606
  column: e,
1491
1607
  op: "notIn",
1492
1608
  value: t
1493
- }), Ca = (e, t) => ({
1609
+ }), La = (e, t) => ({
1494
1610
  column: e,
1495
1611
  op: "contains",
1496
1612
  value: t
1497
- }), wa = (e, t) => ({
1613
+ }), Ra = (e, t) => ({
1498
1614
  column: e,
1499
1615
  op: "startsWith",
1500
1616
  value: t
1501
- }), Ta = (e, t) => ({
1617
+ }), za = (e, t) => ({
1502
1618
  column: e,
1503
1619
  op: "arrayContains",
1504
1620
  value: t
1505
- }), Ea = (e, t) => ({
1621
+ }), Ba = (e, t) => ({
1506
1622
  column: e,
1507
1623
  op: "arrayOverlaps",
1508
1624
  value: t
1509
- }), Da = (e, t) => ({
1625
+ }), Va = (e, t) => ({
1510
1626
  column: e,
1511
1627
  op: "arrayHas",
1512
1628
  value: t
1513
- }), Oa = {
1629
+ }), Ha = {
1514
1630
  column: "id",
1515
1631
  op: "in",
1516
1632
  value: []
1517
- }, ka = (e) => ({
1633
+ }, Ua = (e) => ({
1518
1634
  column: e,
1519
1635
  op: "isNull"
1520
- }), Aa = (e) => ({
1636
+ }), Wa = (e) => ({
1521
1637
  column: e,
1522
1638
  op: "isNotNull"
1523
- }), ja = (e, t) => ({
1639
+ }), Ga = (e, t) => ({
1524
1640
  column: e,
1525
1641
  op: "spatial",
1526
1642
  value: t
1527
- }), Ma = (...e) => ({ and: e }), Na = (...e) => ({ or: e }), Pa = (e) => ({ not: e }), Fa = (e, ...t) => {
1643
+ }), Ka = (...e) => ({ and: e }), qa = (...e) => ({ or: e }), Ja = (e) => ({ not: e }), Ya = (e, ...t) => {
1528
1644
  if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
1529
1645
  let n = (n, r) => ({
1530
1646
  column: e,
@@ -1546,33 +1662,33 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1546
1662
  isNull: () => n("isNull"),
1547
1663
  isNotNull: () => n("isNotNull")
1548
1664
  };
1549
- }, Ia = (e) => "descriptor" in e ? e.descriptor : e, La = (e, t) => ({
1665
+ }, Xa = (e) => "descriptor" in e ? e.descriptor : e, Za = (e, t) => ({
1550
1666
  column: e,
1551
1667
  op: "subquery-in",
1552
- subquery: Ia(t)
1553
- }), Ra = (e, t) => ({
1668
+ subquery: Xa(t)
1669
+ }), Qa = (e, t) => ({
1554
1670
  column: e,
1555
1671
  op: "subquery-not-in",
1556
- subquery: Ia(t)
1557
- }), za = (e) => ({
1672
+ subquery: Xa(t)
1673
+ }), $a = (e) => ({
1558
1674
  op: "exists",
1559
- subquery: Ia(e)
1560
- }), Ba = (e) => ({
1675
+ subquery: Xa(e)
1676
+ }), eo = (e) => ({
1561
1677
  op: "not-exists",
1562
- subquery: Ia(e)
1563
- }), Va = (e, t) => e === t || e instanceof Date && t instanceof Date && e.getTime() === t.getTime(), Ha = (e, t) => {
1678
+ subquery: Xa(e)
1679
+ }), to = (e, t) => e === t || e instanceof Date && t instanceof Date && e.getTime() === t.getTime(), no = (e, t) => {
1564
1680
  if (e == null || t == null) return null;
1565
1681
  let n = e instanceof Date ? e.getTime() : e, r = t instanceof Date ? t.getTime() : t;
1566
1682
  return typeof n == typeof r ? n === r ? 0 : n > r ? 1 : -1 : null;
1567
- }, Ua = (e, t, n = null) => {
1683
+ }, ro = (e, t, n = null) => {
1568
1684
  if (!t) return !1;
1569
- if ("not" in e) return !Ua(e.not, t, n);
1685
+ if ("not" in e) return !ro(e.not, t, n);
1570
1686
  if ("and" in e) {
1571
- for (let r of e.and) if (!Ua(r, t, n)) return !1;
1687
+ for (let r of e.and) if (!ro(r, t, n)) return !1;
1572
1688
  return !0;
1573
1689
  }
1574
1690
  if ("or" in e) {
1575
- for (let r of e.or) if (Ua(r, t, n)) return !0;
1691
+ for (let r of e.or) if (ro(r, t, n)) return !0;
1576
1692
  return !1;
1577
1693
  }
1578
1694
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
@@ -1589,14 +1705,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1589
1705
  }
1590
1706
  let r = e, i = t[r.column];
1591
1707
  switch (r.op) {
1592
- case "eq": return Va(i, r.value);
1593
- case "neq": return !Va(i, r.value);
1594
- case "gt": return (Ha(i, r.value) ?? -1) > 0;
1595
- case "gte": return (Ha(i, r.value) ?? -1) >= 0;
1596
- case "lt": return (Ha(i, r.value) ?? 1) < 0;
1597
- case "lte": return (Ha(i, r.value) ?? 1) <= 0;
1598
- case "in": return Array.isArray(r.value) && r.value.some((e) => Va(i, e));
1599
- case "notIn": return Array.isArray(r.value) && !r.value.some((e) => Va(i, e));
1708
+ case "eq": return to(i, r.value);
1709
+ case "neq": return !to(i, r.value);
1710
+ case "gt": return (no(i, r.value) ?? -1) > 0;
1711
+ case "gte": return (no(i, r.value) ?? -1) >= 0;
1712
+ case "lt": return (no(i, r.value) ?? 1) < 0;
1713
+ case "lte": return (no(i, r.value) ?? 1) <= 0;
1714
+ case "in": return Array.isArray(r.value) && r.value.some((e) => to(i, e));
1715
+ case "notIn": return Array.isArray(r.value) && !r.value.some((e) => to(i, e));
1600
1716
  case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
1601
1717
  case "startsWith": return typeof i == "string" && typeof r.value == "string" && i.startsWith(r.value);
1602
1718
  case "arrayContains": {
@@ -1612,17 +1728,17 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1612
1728
  case "isNotNull": return i != null;
1613
1729
  case "spatial": throw Error("@voltro/plugin-postgis: spatial predicates (ST_DWithin / ST_Contains / ST_Within / ST_Intersects / bbox &&) are not evaluable in-memory — use them in one-shot ctx.store.query reads, not reactive subscriptions.");
1614
1730
  }
1615
- }, Wa = function* (e) {
1731
+ }, io = function* (e) {
1616
1732
  if ("not" in e) {
1617
- yield* Wa(e.not);
1733
+ yield* io(e.not);
1618
1734
  return;
1619
1735
  }
1620
1736
  if ("and" in e) {
1621
- for (let t of e.and) yield* Wa(t);
1737
+ for (let t of e.and) yield* io(t);
1622
1738
  return;
1623
1739
  }
1624
1740
  if ("or" in e) {
1625
- for (let t of e.or) yield* Wa(t);
1741
+ for (let t of e.or) yield* io(t);
1626
1742
  return;
1627
1743
  }
1628
1744
  e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
@@ -1632,46 +1748,46 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1632
1748
  kind: "exists",
1633
1749
  descriptor: e.subquery
1634
1750
  });
1635
- }, Ga = function* (e, t = !0) {
1751
+ }, ao = function* (e, t = !0) {
1636
1752
  if ("not" in e) {
1637
- yield* Ga(e.not, !1);
1753
+ yield* ao(e.not, !1);
1638
1754
  return;
1639
1755
  }
1640
1756
  if ("and" in e) {
1641
- for (let n of e.and) yield* Ga(n, t);
1757
+ for (let n of e.and) yield* ao(n, t);
1642
1758
  return;
1643
1759
  }
1644
1760
  if ("or" in e) {
1645
- for (let t of e.or) yield* Ga(t, !1);
1761
+ for (let t of e.or) yield* ao(t, !1);
1646
1762
  return;
1647
1763
  }
1648
1764
  e.op !== "subquery-in" && e.op !== "subquery-not-in" && e.op !== "exists" && e.op !== "not-exists" && (yield {
1649
1765
  ...e,
1650
1766
  conjunctive: t
1651
1767
  });
1652
- }, Ka = (e, t) => ({
1768
+ }, oo = (e, t) => ({
1653
1769
  ...t,
1654
1770
  ...e,
1655
1771
  origin: e.origin ?? "injected"
1656
- }), qa = (e, t, n = {}) => ({
1772
+ }), so = (e, t, n = {}) => ({
1657
1773
  table: e,
1658
1774
  op: "insert",
1659
1775
  old: null,
1660
1776
  new: t,
1661
1777
  ...n
1662
- }), Ja = (e, t, n, r = {}) => ({
1778
+ }), co = (e, t, n, r = {}) => ({
1663
1779
  table: e,
1664
1780
  op: "update",
1665
1781
  old: t,
1666
1782
  new: n,
1667
1783
  ...r
1668
- }), Ya = (e, t, n = {}) => ({
1784
+ }), lo = (e, t, n = {}) => ({
1669
1785
  table: e,
1670
1786
  op: "delete",
1671
1787
  old: t,
1672
1788
  new: null,
1673
1789
  ...n
1674
- }), Xa = (e, t, n = {}) => {
1790
+ }), uo = (e, t, n = {}) => {
1675
1791
  let { at: r = "2026-01-01T00:00:00.000Z", column: i = "deletedAt", ...a } = n;
1676
1792
  return {
1677
1793
  table: e,
@@ -1686,13 +1802,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1686
1802
  },
1687
1803
  ...a
1688
1804
  };
1689
- }, Za = (e) => e == null ? "null" : e instanceof Date ? JSON.stringify(e.toISOString()) : typeof e == "bigint" ? JSON.stringify(e.toString()) : Array.isArray(e) ? `[${e.map(Za).join(",")}]` : typeof e == "object" ? `{${Object.entries(e).filter(([, e]) => e !== void 0).sort(([e], [t]) => e < t ? -1 : +(e > t)).map(([e, t]) => `${JSON.stringify(e)}:${Za(t)}`).join(",")}}` : JSON.stringify(e) ?? "null", Qa = (e) => Jt("sha256").update([
1805
+ }, fo = (e) => e == null ? "null" : e instanceof Date ? JSON.stringify(e.toISOString()) : typeof e == "bigint" ? JSON.stringify(e.toString()) : Array.isArray(e) ? `[${e.map(fo).join(",")}]` : typeof e == "object" ? `{${Object.entries(e).filter(([, e]) => e !== void 0).sort(([e], [t]) => e < t ? -1 : +(e > t)).map(([e, t]) => `${JSON.stringify(e)}:${fo(t)}`).join(",")}}` : JSON.stringify(e) ?? "null", po = (e) => qt("sha256").update([
1690
1806
  e.pipe,
1691
1807
  e.op,
1692
1808
  e.key,
1693
- Za(e.next),
1694
- Za(e.prev)
1695
- ].join("\0")).digest("hex").slice(0, 32), $a = (e, t) => `${e}:${t}`, eo = (e) => {
1809
+ fo(e.next),
1810
+ fo(e.prev)
1811
+ ].join("\0")).digest("hex").slice(0, 32), mo = (e, t) => `${e}:${t}`, ho = (e) => {
1696
1812
  let t = e.lastIndexOf(":");
1697
1813
  if (t <= 0) return null;
1698
1814
  let n = Number(e.slice(t + 1));
@@ -1700,7 +1816,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1700
1816
  digest: e.slice(0, t),
1701
1817
  occurrence: n
1702
1818
  };
1703
- }, to = class {
1819
+ }, go = class {
1704
1820
  #e = /* @__PURE__ */ new Map();
1705
1821
  #t;
1706
1822
  #n;
@@ -1722,7 +1838,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1722
1838
  }
1723
1839
  seedFromChangeKeys(e, t) {
1724
1840
  for (let n of e) {
1725
- let e = eo(n);
1841
+ let e = ho(n);
1726
1842
  if (e === null) continue;
1727
1843
  let r = this.#e.get(e.digest), i = Math.max(r?.count ?? 0, e.occurrence + 1);
1728
1844
  this.#e.set(e.digest, {
@@ -1743,29 +1859,29 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1743
1859
  this.#e.delete(e.value);
1744
1860
  }
1745
1861
  }
1746
- }, no = "VOLTRO_CHANGE_CLAIMS_TTL_HOURS", ro = 1, io = (e = process.env) => {
1747
- let t = Number(e[no]);
1862
+ }, _o = "VOLTRO_CHANGE_CLAIMS_TTL_HOURS", vo = 1, yo = (e = process.env) => {
1863
+ let t = Number(e[_o]);
1748
1864
  return (Number.isFinite(t) && t > 0 ? t : 1) * 2 * 36e5;
1749
- }, ao = new Yt(), oo = (e, t) => ao.run(e, t), so = () => ao.getStore(), co = (e) => {
1750
- let t = e ?? ao.getStore();
1865
+ }, bo = new Jt(), xo = (e, t) => bo.run(e, t), So = () => bo.getStore(), Co = (e) => {
1866
+ let t = e ?? bo.getStore();
1751
1867
  return t === void 0 ? {} : {
1752
1868
  ...t.traceId === void 0 ? {} : { traceId: t.traceId },
1753
1869
  ...t.subjectId === void 0 ? {} : { subjectId: t.subjectId },
1754
1870
  ...t.procedure === void 0 ? {} : { procedure: t.procedure },
1755
1871
  ...t.via === void 0 ? {} : { via: t.via }
1756
1872
  };
1757
- }, lo = (e) => {
1758
- let t = ao.getStore();
1759
- return t === void 0 ? e(void 0) : ao.run(t, () => e(t));
1760
- }, uo = 3e4, fo = 1e4, G = /* @__PURE__ */ new Map(), K = 0, po = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, mo = (e) => {
1873
+ }, wo = (e) => {
1874
+ let t = bo.getStore();
1875
+ return t === void 0 ? e(void 0) : bo.run(t, () => e(t));
1876
+ }, To = 3e4, Eo = 1e4, G = /* @__PURE__ */ new Map(), K = 0, Do = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, Oo = (e) => {
1761
1877
  for (let [t, n] of G) {
1762
- let r = n.filter((t) => e - t.at < uo);
1878
+ let r = n.filter((t) => e - t.at < To);
1763
1879
  K -= n.length - r.length, r.length === 0 ? G.delete(t) : r.length !== n.length && G.set(t, r);
1764
1880
  }
1765
- }, ho = (e, t) => {
1881
+ }, ko = (e, t) => {
1766
1882
  if (t.traceId === void 0 && t.subjectId === void 0 && t.procedure === void 0) return;
1767
1883
  let n = Date.now();
1768
- if (K >= fo && mo(n), K >= fo) return;
1884
+ if (K >= Eo && Oo(n), K >= Eo) return;
1769
1885
  let r = G.get(e);
1770
1886
  r === void 0 ? G.set(e, [{
1771
1887
  attribution: t,
@@ -1774,38 +1890,38 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1774
1890
  attribution: t,
1775
1891
  at: n
1776
1892
  }), K += 1;
1777
- }, go = (e) => {
1893
+ }, Ao = (e) => {
1778
1894
  let t = G.get(e);
1779
1895
  if (t === void 0 || t.length === 0) return;
1780
1896
  let n = t.shift();
1781
- if (--K, t.length === 0 && G.delete(e), !(Date.now() - n.at >= uo)) return n.attribution;
1782
- }, _o = (e) => (G.get(e)?.length ?? 0) > 0, q = /* @__PURE__ */ new Map(), vo = /* @__PURE__ */ new Map(), yo = /* @__PURE__ */ new Map(), bo = 250, xo = (e) => {
1783
- let t = vo.get(e);
1897
+ if (--K, t.length === 0 && G.delete(e), !(Date.now() - n.at >= To)) return n.attribution;
1898
+ }, jo = (e) => (G.get(e)?.length ?? 0) > 0, q = /* @__PURE__ */ new Map(), Mo = /* @__PURE__ */ new Map(), No = /* @__PURE__ */ new Map(), Po = 250, Fo = (e) => {
1899
+ let t = Mo.get(e);
1784
1900
  if (t === void 0) return;
1785
- vo.delete(e);
1786
- let n = yo.get(e);
1787
- n !== void 0 && (clearTimeout(n), yo.delete(e));
1901
+ Mo.delete(e);
1902
+ let n = No.get(e);
1903
+ n !== void 0 && (clearTimeout(n), No.delete(e));
1788
1904
  for (let e of t) e();
1789
- }, So = (e) => {
1905
+ }, Io = (e) => {
1790
1906
  q.set(e, (q.get(e) ?? 0) + 1);
1791
- }, Co = (e) => {
1907
+ }, Lo = (e) => {
1792
1908
  let t = (q.get(e) ?? 0) - 1;
1793
1909
  if (t > 0) {
1794
1910
  q.set(e, t);
1795
1911
  return;
1796
1912
  }
1797
- q.delete(e), xo(e);
1798
- }, wo = (e, t, n, r) => {
1799
- let i = n == null ? void 0 : po(e, t, n), a = () => r(i === void 0 ? void 0 : go(i));
1913
+ q.delete(e), Fo(e);
1914
+ }, Ro = (e, t, n, r) => {
1915
+ let i = n == null ? void 0 : Do(e, t, n), a = () => r(i === void 0 ? void 0 : Ao(i));
1800
1916
  if (i === void 0) {
1801
1917
  a();
1802
1918
  return;
1803
1919
  }
1804
- if (_o(i)) {
1920
+ if (jo(i)) {
1805
1921
  a();
1806
1922
  return;
1807
1923
  }
1808
- let o = vo.get(e);
1924
+ let o = Mo.get(e);
1809
1925
  if (o === void 0 && (q.get(e) ?? 0) === 0) {
1810
1926
  a();
1811
1927
  return;
@@ -1814,91 +1930,91 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1814
1930
  o.push(a);
1815
1931
  return;
1816
1932
  }
1817
- vo.set(e, [a]);
1818
- let s = setTimeout(() => xo(e), bo);
1819
- typeof s == "object" && typeof s.unref == "function" && s.unref(), yo.set(e, s);
1820
- }, To = () => {
1933
+ Mo.set(e, [a]);
1934
+ let s = setTimeout(() => Fo(e), Po);
1935
+ typeof s == "object" && typeof s.unref == "function" && s.unref(), No.set(e, s);
1936
+ }, zo = () => {
1821
1937
  G.clear(), K = 0, q.clear();
1822
- for (let e of yo.values()) clearTimeout(e);
1823
- yo.clear(), vo.clear();
1824
- }, Eo = () => K, Do = 64, Oo = "\0", ko = 32, Ao = (e, ...t) => `${e}_${Jt("sha256").update(t.map(String).join(Oo)).digest("hex").slice(0, ko)}`, jo = (e) => e.length + 1 + ko, J = /* @__PURE__ */ new Map(), Mo = (e, t) => {
1938
+ for (let e of No.values()) clearTimeout(e);
1939
+ No.clear(), Mo.clear();
1940
+ }, Bo = () => K, Vo = 64, Ho = "\0", Uo = 32, Wo = (e, ...t) => `${e}_${qt("sha256").update(t.map(String).join(Ho)).digest("hex").slice(0, Uo)}`, Go = (e) => e.length + 1 + Uo, J = /* @__PURE__ */ new Map(), Ko = (e, t) => {
1825
1941
  J.set(e, {
1826
1942
  recorder: t.recorder,
1827
1943
  tables: new Set(t.tables),
1828
1944
  ownTables: new Set(t.ownTables)
1829
1945
  });
1830
- }, No = (e) => {
1946
+ }, qo = (e) => {
1831
1947
  J.delete(e);
1832
- }, Po = () => J.clear(), Fo = new Yt(), Io = (e) => Fo.run({ n: 1 }, e), Lo = (e) => O.suspend(() => {
1833
- let t = Fo.getStore();
1834
- if (t !== void 0) return t.n += 1, O.ensuring(e, O.sync(() => {
1948
+ }, Jo = () => J.clear(), Yo = new Jt(), Xo = (e) => Yo.run({ n: 1 }, e), Zo = (e) => k.suspend(() => {
1949
+ let t = Yo.getStore();
1950
+ if (t !== void 0) return t.n += 1, k.ensuring(e, k.sync(() => {
1835
1951
  --t.n;
1836
1952
  }));
1837
1953
  let n = { n: 1 };
1838
- return Fo.enterWith(n), O.ensuring(e, O.sync(() => {
1954
+ return Yo.enterWith(n), k.ensuring(e, k.sync(() => {
1839
1955
  --n.n;
1840
1956
  }));
1841
- }), Ro = () => (Fo.getStore()?.n ?? 0) > 0, zo = (e) => {
1842
- if (J.size === 0 || (Fo.getStore()?.n ?? 0) > 0) return !1;
1957
+ }), Qo = () => (Yo.getStore()?.n ?? 0) > 0, $o = (e) => {
1958
+ if (J.size === 0 || (Yo.getStore()?.n ?? 0) > 0) return !1;
1843
1959
  for (let t of J.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
1844
1960
  return !1;
1845
- }, Bo = async (e, t) => {
1961
+ }, es = async (e, t) => {
1846
1962
  if (J.size !== 0) {
1847
1963
  for (let [n, r] of J.entries()) if (!r.ownTables.has(t.table) && r.tables.has(t.table)) try {
1848
1964
  await r.recorder(e, t);
1849
1965
  } catch (e) {
1850
- let r = An(e);
1966
+ let r = Pn(e);
1851
1967
  throw r === void 0 ? e : Error(`write recorder '${n}' failed while recording a ${t.op} on '${t.table}': ${r}`, { cause: e });
1852
1968
  }
1853
1969
  }
1854
- }, Vo = Wt.exponential({
1970
+ }, ts = Ut.exponential({
1855
1971
  start: 5e-4,
1856
1972
  factor: 2,
1857
1973
  count: 16
1858
- }), Ho = k.counter("voltro_db_queries_total", { description: "Database operations executed, by dialect and operation kind." }), Uo = k.histogram("voltro_db_query_duration_seconds", Vo, "Database operation duration in seconds, by dialect and operation kind."), Wo = k.counter("voltro_db_errors_total", { description: "Database operations that threw, by dialect and operation kind." }), Go = k.gauge("voltro_db_operations_in_flight", { description: "Database operations currently executing, by dialect. An upper bound on connections the framework holds; NOT the driver pool's waiting count." }), Ko = k.counter("voltro_db_eager_fallback_total", { description: "Eager-load queries that degraded from the single-roundtrip JSON-agg path to the multi-query walker, by dialect and reason." }), qo = [], Jo = /* @__PURE__ */ new Map(), Yo = /* @__PURE__ */ new Map(), Xo = /* @__PURE__ */ new Map(), Zo = (e, t) => {
1859
- let n = `${e}\u0000${t}`, r = Jo.get(n);
1974
+ }), ns = A.counter("voltro_db_queries_total", { description: "Database operations executed, by dialect and operation kind." }), rs = A.histogram("voltro_db_query_duration_seconds", ts, "Database operation duration in seconds, by dialect and operation kind."), is = A.counter("voltro_db_errors_total", { description: "Database operations that threw, by dialect and operation kind." }), as = A.gauge("voltro_db_operations_in_flight", { description: "Database operations currently executing, by dialect. An upper bound on connections the framework holds; NOT the driver pool's waiting count." }), os = A.counter("voltro_db_eager_fallback_total", { description: "Eager-load queries that degraded from the single-roundtrip JSON-agg path to the multi-query walker, by dialect and reason." }), ss = [], cs = /* @__PURE__ */ new Map(), ls = /* @__PURE__ */ new Map(), us = /* @__PURE__ */ new Map(), ds = (e, t) => {
1975
+ let n = `${e}\u0000${t}`, r = cs.get(n);
1860
1976
  if (r !== void 0) return r;
1861
- let i = (n) => k.tagged(k.tagged(n, "dialect", e), "op", t), a = {
1862
- count: i(Ho),
1863
- duration: i(Uo),
1864
- errors: i(Wo)
1977
+ let i = (n) => A.tagged(A.tagged(n, "dialect", e), "op", t), a = {
1978
+ count: i(ns),
1979
+ duration: i(rs),
1980
+ errors: i(is)
1865
1981
  };
1866
- return Jo.set(n, a), a;
1867
- }, Qo = () => {
1868
- Jo.clear(), Yo.clear(), Xo.clear();
1869
- }, $o = () => Jo.size + Yo.size + Xo.size, es = /* @__PURE__ */ new Map(), ts = (e, t) => {
1870
- let n = Math.max(0, (es.get(e) ?? 0) + t);
1871
- n === 0 ? es.delete(e) : es.set(e, n);
1872
- let r = Yo.get(e);
1873
- r === void 0 && (r = k.tagged(Go, "dialect", e), Yo.set(e, r)), r.unsafeUpdate(n, qo);
1874
- }, ns = (e) => es.get(e) ?? 0, rs = (e) => {
1875
- let t = Zo(String(e.dialect), e.op);
1876
- t.count.unsafeUpdate(1, qo), t.duration.unsafeUpdate(e.durationMs / 1e3, qo), e.status === "error" && t.errors.unsafeUpdate(1, qo);
1877
- }, is = async (e, t, n) => {
1982
+ return cs.set(n, a), a;
1983
+ }, fs = () => {
1984
+ cs.clear(), ls.clear(), us.clear();
1985
+ }, ps = () => cs.size + ls.size + us.size, ms = /* @__PURE__ */ new Map(), hs = (e, t) => {
1986
+ let n = Math.max(0, (ms.get(e) ?? 0) + t);
1987
+ n === 0 ? ms.delete(e) : ms.set(e, n);
1988
+ let r = ls.get(e);
1989
+ r === void 0 && (r = A.tagged(as, "dialect", e), ls.set(e, r)), r.unsafeUpdate(n, ss);
1990
+ }, gs = (e) => ms.get(e) ?? 0, _s = (e) => {
1991
+ let t = ds(String(e.dialect), e.op);
1992
+ t.count.unsafeUpdate(1, ss), t.duration.unsafeUpdate(e.durationMs / 1e3, ss), e.status === "error" && t.errors.unsafeUpdate(1, ss);
1993
+ }, vs = async (e, t, n) => {
1878
1994
  let r = performance.now(), i = String(e);
1879
- ts(i, 1);
1995
+ hs(i, 1);
1880
1996
  let a = "ok";
1881
1997
  try {
1882
1998
  return await n();
1883
1999
  } catch (e) {
1884
2000
  throw a = "error", e;
1885
2001
  } finally {
1886
- ts(i, -1), rs({
2002
+ hs(i, -1), _s({
1887
2003
  dialect: e,
1888
2004
  op: t,
1889
2005
  durationMs: performance.now() - r,
1890
2006
  status: a
1891
2007
  });
1892
2008
  }
1893
- }, as = 3e5, os = (e) => {
2009
+ }, ys = 3e5, bs = (e) => {
1894
2010
  if (e == null || e === "") return;
1895
2011
  let t = Number(e);
1896
2012
  return Number.isFinite(t) && t >= 0 ? Math.floor(t) : void 0;
1897
- }, ss = (e, t = process.env) => os(t.VOLTRO_DB_EAGER_FALLBACK_WARN_INTERVAL_MS) ?? os(e) ?? 3e5, cs = (e, t = {}) => {
1898
- let n = ss(t.warnIntervalMs), r = t.now ?? (() => Date.now()), i = /* @__PURE__ */ new Map();
2013
+ }, xs = (e, t = process.env) => bs(t.VOLTRO_DB_EAGER_FALLBACK_WARN_INTERVAL_MS) ?? bs(e) ?? 3e5, Ss = (e, t = {}) => {
2014
+ let n = xs(t.warnIntervalMs), r = t.now ?? (() => Date.now()), i = /* @__PURE__ */ new Map();
1899
2015
  return (t) => {
1900
- let a = `${t.dialect} ${t.reason}`, o = Xo.get(a);
1901
- o === void 0 && (o = k.tagged(k.tagged(Ko, "dialect", String(t.dialect)), "reason", t.reason), Xo.set(a, o)), o.unsafeUpdate(1, qo);
2016
+ let a = `${t.dialect} ${t.reason}`, o = us.get(a);
2017
+ o === void 0 && (o = A.tagged(A.tagged(os, "dialect", String(t.dialect)), "reason", t.reason), us.set(a, o)), o.unsafeUpdate(1, ss);
1902
2018
  let s = `${t.table}\u0000${t.reason}`, c = i.get(s), l = c === void 0 || n > 0 && r() - c >= n, u = {
1903
2019
  table: t.table,
1904
2020
  dialect: String(t.dialect),
@@ -1912,24 +2028,24 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1912
2028
  }
1913
2029
  i.set(s, r()), e.warn(t.reason === "execute-failed" ? "eager-load JSON-agg statement FAILED and was re-run on the multi-query walker — this query pays both paths on every call. Counted as voltro_db_eager_fallback_total{reason=\"execute-failed\"}." : "eager-load could not be compiled to a single JSON-agg roundtrip and is running on the multi-query walker — one round trip per relation level, on every call. Counted as voltro_db_eager_fallback_total{reason=\"not-compilable\"}.", u);
1914
2030
  };
1915
- }, ls = (e) => {
1916
- if (Ut.isSuccess(e)) return e.value;
1917
- throw Bt.squash(e.cause);
1918
- }, us = "10 millis", ds = 3, fs = async (e) => {
1919
- let t = 0, n = O.suspend(() => {
2031
+ }, Cs = (e) => {
2032
+ if (Ht.isSuccess(e)) return e.value;
2033
+ throw zt.squash(e.cause);
2034
+ }, ws = "10 millis", Ts = 3, Es = async (e) => {
2035
+ let t = 0, n = k.suspend(() => {
1920
2036
  let n = ++t;
1921
- return e.withTransaction(O.flatMap(O.serviceOption(Xt), (t) => {
1922
- if (A.isNone(t)) return O.fail(/* @__PURE__ */ Error(`${e.label}: TransactionConnection unexpectedly missing inside withTransaction.`));
1923
- let r = t.value, i = O.tryPromise({
2037
+ return e.withTransaction(k.flatMap(k.serviceOption(Yt), (t) => {
2038
+ if (j.isNone(t)) return k.fail(/* @__PURE__ */ Error(`${e.label}: TransactionConnection unexpectedly missing inside withTransaction.`));
2039
+ let r = t.value, i = k.tryPromise({
1924
2040
  try: () => e.body(r, n),
1925
2041
  catch: (e) => e
1926
2042
  });
1927
- return e.prepare === void 0 ? i : O.flatMap(e.prepare(r), () => i);
1928
- })).pipe(O.catchAllDefect((t) => e.isRetryable(t) ? O.fail(t) : O.die(t)));
1929
- }), r = Kt.exponential(us).pipe(Kt.compose(Kt.recurs(ds)), Kt.whileInput(e.isRetryable)), i = n.pipe(O.retry(r), O.withSpan(e.span.name, { attributes: { ...e.span.attributes } }));
1930
- return is(e.dialect, "transaction", async () => ls(await e.runPromiseExit(e.wrapProgram === void 0 ? i : e.wrapProgram(i))));
1931
- }, ps = async (e) => {
1932
- let t = so(), n = t === void 0 ? (e) => e() : (e) => oo(t, e), r = await fs({
2043
+ return e.prepare === void 0 ? i : k.flatMap(e.prepare(r), () => i);
2044
+ })).pipe(k.catchAllDefect((t) => e.isRetryable(t) ? k.fail(t) : k.die(t)));
2045
+ }), r = Gt.exponential(ws).pipe(Gt.compose(Gt.recurs(Ts)), Gt.whileInput(e.isRetryable)), i = n.pipe(k.retry(r), k.withSpan(e.span.name, { attributes: { ...e.span.attributes } }));
2046
+ return vs(e.dialect, "transaction", async () => Cs(await e.runPromiseExit(e.wrapProgram === void 0 ? i : e.wrapProgram(i))));
2047
+ }, Ds = async (e) => {
2048
+ let t = So(), n = t === void 0 ? (e) => e() : (e) => xo(t, e), r = await Es({
1933
2049
  ...e,
1934
2050
  body: (r) => {
1935
2051
  let i = e.makeView(r, t);
@@ -1940,50 +2056,50 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1940
2056
  }
1941
2057
  });
1942
2058
  return r.view.commitEvents(), r.result;
1943
- }, ms = /* @__PURE__ */ new Set([
2059
+ }, Os = /* @__PURE__ */ new Set([
1944
2060
  "1213",
1945
2061
  "ER_LOCK_DEADLOCK",
1946
2062
  "1205",
1947
2063
  "ER_LOCK_WAIT_TIMEOUT",
1948
2064
  "1020",
1949
2065
  "ER_CHECKREAD"
1950
- ]), hs = /* @__PURE__ */ new Set(["40001", "40P01"]), gs = /* @__PURE__ */ new Set(["1205"]), _s = /* @__PURE__ */ new Set([
2066
+ ]), ks = /* @__PURE__ */ new Set(["40001", "40P01"]), As = /* @__PURE__ */ new Set(["1205"]), js = /* @__PURE__ */ new Set([
1951
2067
  "SQLITE_BUSY",
1952
2068
  "5",
1953
2069
  "SQLITE_LOCKED",
1954
2070
  "6"
1955
- ]), vs = /write-write conflict|write-read conflict|database is locked|table is locked|database is busy/i, ys = /* @__PURE__ */ new Set([
2071
+ ]), Ms = /write-write conflict|write-read conflict|database is locked|table is locked|database is busy/i, Ns = /* @__PURE__ */ new Set([
1956
2072
  1213,
1957
2073
  1205,
1958
2074
  1020
1959
- ]), bs = /* @__PURE__ */ new Set([
1960
- ...ms,
1961
- ...hs,
1962
- ...gs,
1963
- ..._s
1964
- ]), xs = (e) => N(e).some(Ss), Ss = (e) => {
2075
+ ]), Ps = /* @__PURE__ */ new Set([
2076
+ ...Os,
2077
+ ...ks,
2078
+ ...As,
2079
+ ...js
2080
+ ]), Fs = (e) => xn(e).some(Is), Is = (e) => {
1965
2081
  let t = e;
1966
2082
  for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
1967
2083
  let e = t;
1968
- if (typeof e.errno == "number" && ys.has(e.errno) || typeof e.number == "number" && gs.has(String(e.number)) || typeof e.code == "string" && bs.has(e.code) || typeof e.sqlState == "string" && hs.has(e.sqlState) || typeof e.message == "string" && vs.test(e.message)) return !0;
2084
+ if (typeof e.errno == "number" && Ns.has(e.errno) || typeof e.number == "number" && As.has(String(e.number)) || typeof e.code == "string" && Ps.has(e.code) || typeof e.sqlState == "string" && ks.has(e.sqlState) || typeof e.message == "string" && Ms.test(e.message)) return !0;
1969
2085
  t = e.cause;
1970
2086
  }
1971
2087
  return !1;
1972
- }, Cs = "voltro/expires", ws = () => Ct({
1973
- id: Cs,
1974
- fields: { expiresAt: T().nullable() },
2088
+ }, Ls = "voltro/expires", Rs = () => St({
2089
+ id: Ls,
2090
+ fields: { expiresAt: E().nullable() },
1975
2091
  behaviors: { defaultWhere: () => "expiresAt IS NULL OR expiresAt > now()" }
1976
- }), Ts = "voltro/localFirst", Es = () => Ct({
1977
- id: Ts,
2092
+ }), zs = "voltro/localFirst", Bs = () => St({
2093
+ id: zs,
1978
2094
  fields: {}
1979
- }), Ds = (e) => e.appliedMixins.some((e) => e.id === Ts), Os = (e) => {
2095
+ }), Vs = (e) => e.appliedMixins.some((e) => e.id === zs), Hs = (e) => {
1980
2096
  let t = [];
1981
- for (let n of Object.values(e)) Ds(n) && t.push(n.tableName);
2097
+ for (let n of Object.values(e)) Vs(n) && t.push(n.tableName);
1982
2098
  return t;
1983
- }, ks = class extends Ht.TaggedError("TableStreamError") {}, As = 1e3, js = (e, t, n, r) => {
1984
- let i = A.match(r, {
2099
+ }, Us = class extends Vt.TaggedError("TableStreamError") {}, Ws = 1e3, Gs = (e, t, n, r) => {
2100
+ let i = j.match(r, {
1985
2101
  onNone: () => e.where,
1986
- onSome: (n) => e.where ? Ma(e.where, _a(t, n)) : _a(t, n)
2102
+ onSome: (n) => e.where ? Ka(e.where, ja(t, n)) : ja(t, n)
1987
2103
  });
1988
2104
  return {
1989
2105
  table: e.table,
@@ -1998,19 +2114,19 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
1998
2114
  ...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
1999
2115
  ...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
2000
2116
  };
2001
- }, Ms = (e, t) => {
2002
- let n = t.pk ?? "id", r = t.chunkSize ?? As;
2003
- return qt.paginateChunkEffect(A.none(), (i) => {
2004
- let a = O.tryPromise({
2005
- try: () => e.query(js(t, n, r, i)),
2006
- catch: (e) => new ks({
2117
+ }, Ks = (e, t) => {
2118
+ let n = t.pk ?? "id", r = t.chunkSize ?? Ws;
2119
+ return Kt.paginateChunkEffect(j.none(), (i) => {
2120
+ let a = k.tryPromise({
2121
+ try: () => e.query(Gs(t, n, r, i)),
2122
+ catch: (e) => new Us({
2007
2123
  table: t.table,
2008
2124
  cause: e
2009
2125
  })
2010
2126
  });
2011
- return (t.retry ? a.pipe(O.retry(t.retry)) : a).pipe(O.map((e) => [Vt.fromIterable(e), e.length === r && e.length > 0 ? A.some(A.some(e[e.length - 1][n])) : A.none()]));
2127
+ return (t.retry ? a.pipe(k.retry(t.retry)) : a).pipe(k.map((e) => [Bt.fromIterable(e), e.length === r && e.length > 0 ? j.some(j.some(e[e.length - 1][n])) : j.none()]));
2012
2128
  });
2013
- }, Ns = (e) => {
2129
+ }, qs = (e) => {
2014
2130
  let t = e.alpha ?? .5;
2015
2131
  if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
2016
2132
  return (n) => {
@@ -2037,17 +2153,17 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
2037
2153
  }
2038
2154
  };
2039
2155
  };
2040
- }, Ps = async (e, t) => {
2156
+ }, Js = async (e, t) => {
2041
2157
  let n = e.as ?? "embedding", r = t.row[e.from];
2042
2158
  if (typeof r != "string" || r.length === 0) return {};
2043
2159
  let i = await t.embed(r);
2044
2160
  return { [n]: i };
2045
- }, Fs = (e) => {
2161
+ }, Ys = (e) => {
2046
2162
  if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
2047
- let t = e.as ?? "embedding", n = (t) => Ps(e, t);
2048
- return Ct({
2163
+ let t = e.as ?? "embedding", n = (t) => Js(e, t);
2164
+ return St({
2049
2165
  id: "voltro/vectorEmbedding",
2050
- fields: { [t]: _t(e.dimensions) },
2166
+ fields: { [t]: gt(e.dimensions) },
2051
2167
  ...e.index === !1 ? {} : { indexes: [{
2052
2168
  fields: [t],
2053
2169
  kind: "hnsw",
@@ -2062,19 +2178,19 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
2062
2178
  beforeUpdate: n
2063
2179
  }
2064
2180
  });
2065
- }, Is = 63, Ls = "br_pr", Y = class extends Error {
2181
+ }, Xs = 63, Zs = "br_pr", Y = class extends Error {
2066
2182
  _tag = "BranchNameInvalid";
2067
2183
  constructor(e) {
2068
2184
  super(e), this.name = "BranchNameInvalid";
2069
2185
  }
2070
- }, Rs = (e, t) => {
2186
+ }, Qs = (e, t) => {
2071
2187
  if (!Number.isInteger(t) || t < 0) throw new Y(`prNumber must be a non-negative integer, got ${String(t)}`);
2072
- let n = Ur(e);
2188
+ let n = ri(e);
2073
2189
  if (n.replace(/_/g, "") === "") throw new Y(`app slug '${e}' has no usable identifier characters`);
2074
- let r = `${Ls}${t}_${n}`;
2075
- if (r.length > Is) throw new Y(`branch namespace '${r}' exceeds the ${Is}-byte identifier limit — use a shorter app slug`);
2190
+ let r = `${Zs}${t}_${n}`;
2191
+ if (r.length > Xs) throw new Y(`branch namespace '${r}' exceeds the ${Xs}-byte identifier limit — use a shorter app slug`);
2076
2192
  return r;
2077
- }, zs = (e) => e.startsWith(Ls), Bs = {
2193
+ }, $s = (e) => e.startsWith(Zs), ec = {
2078
2194
  requested: {
2079
2195
  provision: "provisioning",
2080
2196
  destroy: "destroying"
@@ -2093,18 +2209,18 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
2093
2209
  fail: "failed"
2094
2210
  },
2095
2211
  destroyed: {}
2096
- }, Vs = class extends Error {
2212
+ }, tc = class extends Error {
2097
2213
  from;
2098
2214
  event;
2099
2215
  _tag = "BranchTransitionInvalid";
2100
2216
  constructor(e, t) {
2101
2217
  super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
2102
2218
  }
2103
- }, Hs = (e, t) => {
2104
- let n = Bs[e][t];
2105
- if (n === void 0) throw new Vs(e, t);
2219
+ }, nc = (e, t) => {
2220
+ let n = ec[e][t];
2221
+ if (n === void 0) throw new tc(e, t);
2106
2222
  return n;
2107
- }, Us = (e, t, n, r, i = [], a = []) => {
2223
+ }, rc = (e, t, n, r, i = [], a = []) => {
2108
2224
  if (n === "copy" && (r === void 0 || r === "")) throw new Y("seed 'copy' requires a parentNamespace to snapshot from");
2109
2225
  let o = [{
2110
2226
  kind: "create-namespace",
@@ -2134,13 +2250,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
2134
2250
  kind: "seed",
2135
2251
  detail: `run boot seeds into ${e}`
2136
2252
  }), o;
2137
- }, Ws = (e) => {
2138
- if (!zs(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
2253
+ }, ic = (e) => {
2254
+ if (!$s(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
2139
2255
  return [{
2140
2256
  kind: "drop-namespace",
2141
2257
  detail: e
2142
2258
  }];
2143
- }, Gs = (e) => {
2259
+ }, ac = (e) => {
2144
2260
  if (e === void 0 || e === "") return !1;
2145
2261
  try {
2146
2262
  let t = new URL(e).hostname.toLowerCase();
@@ -2148,27 +2264,27 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
2148
2264
  } catch {
2149
2265
  return /\bneon\.(tech|build)\b/i.test(e);
2150
2266
  }
2151
- }, Ks = (e) => e.prefer === void 0 ? e.seed === "copy" && Gs(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, qs = (e, t = {}) => [{
2267
+ }, oc = (e) => e.prefer === void 0 ? e.seed === "copy" && ac(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, sc = (e, t = {}) => [{
2152
2268
  kind: "neon-branch-create",
2153
2269
  detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
2154
- }], Js = (e) => {
2155
- if (!zs(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
2270
+ }], cc = (e) => {
2271
+ if (!$s(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
2156
2272
  return [{
2157
2273
  kind: "neon-branch-delete",
2158
2274
  detail: e
2159
2275
  }];
2160
- }, Ys = (e) => e.mechanism === "neon-cow" ? qs(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : Us(e.branchId, e.tableNames, e.seed, e.parentNamespace, e.foreignKeys, e.indexNames), Xs = (e, t) => e === "neon-cow" ? Js(t) : Ws(t), Zs = (e, t, n) => {
2276
+ }, lc = (e) => e.mechanism === "neon-cow" ? sc(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : rc(e.branchId, e.tableNames, e.seed, e.parentNamespace, e.foreignKeys, e.indexNames), uc = (e, t) => e === "neon-cow" ? cc(t) : ic(t), dc = (e, t, n) => {
2161
2277
  let r = e.filter((e) => e.state !== "destroyed" && e.state !== "destroying"), i = r.filter((e) => n - e.createdAtMs > t.ttlMs).map((e) => e.namespace), a = new Set(i);
2162
2278
  return {
2163
2279
  evict: i,
2164
2280
  rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
2165
2281
  };
2166
- }, Qs = async (e, t) => {
2167
- let n = Rs(e.appSlug, e.prNumber), r = Ks({
2282
+ }, fc = async (e, t) => {
2283
+ let n = Qs(e.appSlug, e.prNumber), r = oc({
2168
2284
  seed: e.seed,
2169
2285
  ...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
2170
2286
  ...e.prefer === void 0 ? {} : { prefer: e.prefer }
2171
- }), i = Ys({
2287
+ }), i = lc({
2172
2288
  mechanism: r,
2173
2289
  branchId: n,
2174
2290
  tableNames: e.tableNames,
@@ -2197,15 +2313,15 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
2197
2313
  mechanism: r,
2198
2314
  steps: i
2199
2315
  };
2200
- }, $s = async (e, t, n) => {
2201
- let r = Xs(t, e);
2316
+ }, pc = async (e, t, n) => {
2317
+ let r = uc(t, e);
2202
2318
  return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
2203
- }, ec = (e, t, n) => Zs(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, tc = {
2319
+ }, mc = (e, t, n) => dc(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, hc = {
2204
2320
  cascade: "CASCADE",
2205
2321
  restrict: "RESTRICT",
2206
2322
  setNull: "SET NULL",
2207
2323
  noAction: "NO ACTION"
2208
- }, Z = (e) => `'${e.replace(/'/g, "''")}'`, nc = (e, t) => {
2324
+ }, Z = (e) => `'${e.replace(/'/g, "''")}'`, gc = (e, t) => {
2209
2325
  let n = t.columns.map(Z).join(", ");
2210
2326
  return `DO $voltro_branch$
2211
2327
  DECLARE derived name;
@@ -2232,10 +2348,10 @@ BEGIN
2232
2348
  END IF;
2233
2349
  END
2234
2350
  $voltro_branch$`;
2235
- }, rc = (e, t) => {
2236
- let n = t.onDelete === void 0 ? "" : ` ON DELETE ${tc[t.onDelete]}`, r = t.onUpdate === void 0 ? "" : ` ON UPDATE ${tc[t.onUpdate]}`;
2351
+ }, _c = (e, t) => {
2352
+ let n = t.onDelete === void 0 ? "" : ` ON DELETE ${hc[t.onDelete]}`, r = t.onUpdate === void 0 ? "" : ` ON UPDATE ${hc[t.onUpdate]}`;
2237
2353
  return `ALTER TABLE ${X(e)}.${X(t.table)} ADD FOREIGN KEY (${X(t.column)}) REFERENCES ${X(e)}.${X(t.targetTable)} (${X(t.targetColumn)})${n}${r}`;
2238
- }, ic = (e) => {
2354
+ }, vc = (e) => {
2239
2355
  let t = () => {
2240
2356
  throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
2241
2357
  };
@@ -2243,24 +2359,24 @@ $voltro_branch$`;
2243
2359
  createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${X(t)}`),
2244
2360
  createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${X(t)}.${X(n)} (LIKE ${X(n)} INCLUDING ALL)`),
2245
2361
  copyTable: (t, n, r) => e.run(`INSERT INTO ${X(n)}.${X(r)} SELECT * FROM ${X(t)}.${X(r)}`),
2246
- addForeignKey: (t, n) => e.run(rc(t, n)),
2247
- restoreIndexName: (t, n) => e.run(nc(t, n)),
2362
+ addForeignKey: (t, n) => e.run(_c(t, n)),
2363
+ restoreIndexName: (t, n) => e.run(gc(t, n)),
2248
2364
  dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${X(t)} CASCADE`),
2249
2365
  neonBranchCreate: t,
2250
2366
  neonBranchDelete: t
2251
2367
  };
2252
- }, ac = class extends Error {
2368
+ }, yc = class extends Error {
2253
2369
  _tag = "TenantResidencyUnresolved";
2254
2370
  constructor(e) {
2255
2371
  super(e), this.name = "TenantResidencyUnresolved";
2256
2372
  }
2257
- }, oc = class extends Error {
2373
+ }, bc = class extends Error {
2258
2374
  region;
2259
2375
  _tag = "TenantRegionUnavailable";
2260
2376
  constructor(e, t) {
2261
2377
  super(t), this.region = e, this.name = "TenantRegionUnavailable";
2262
2378
  }
2263
- }, sc, cc = (e) => {
2379
+ }, xc, Sc = (e) => {
2264
2380
  if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
2265
2381
  if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
2266
2382
  let t = /* @__PURE__ */ new Map();
@@ -2269,55 +2385,55 @@ $voltro_branch$`;
2269
2385
  if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
2270
2386
  t.set(n.tenantId, n.region);
2271
2387
  }
2272
- return sc = e, e;
2273
- }, lc = () => sc, uc = () => {
2274
- sc = void 0;
2275
- }, dc = (e, t) => {
2276
- if (e == null || e === "") throw new ac("residency is on but the request has no resolvable tenant — refusing to bind a store");
2388
+ return xc = e, e;
2389
+ }, Cc = () => xc, wc = () => {
2390
+ xc = void 0;
2391
+ }, Tc = (e, t) => {
2392
+ if (e == null || e === "") throw new yc("residency is on but the request has no resolvable tenant — refusing to bind a store");
2277
2393
  let n = t.homes.find((t) => t.tenantId === e);
2278
- if (n === void 0) throw new ac(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
2394
+ if (n === void 0) throw new yc(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
2279
2395
  return n;
2280
- }, fc = (e, t) => t.servableRegions.includes(e), pc = (e, t) => {
2281
- let n = dc(e.tenantId, t), r = Wr(n.tenantId);
2396
+ }, Ec = (e, t) => t.servableRegions.includes(e), Dc = (e, t) => {
2397
+ let n = Tc(e.tenantId, t), r = ii(n.tenantId);
2282
2398
  return {
2283
2399
  region: n.region,
2284
2400
  namespace: r,
2285
2401
  ...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
2286
2402
  };
2287
- }, mc = (e, t, n) => {
2288
- let r = pc(e, t);
2289
- if (!fc(r.region, t)) throw new oc(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
2403
+ }, Oc = (e, t, n) => {
2404
+ let r = Dc(e, t);
2405
+ if (!Ec(r.region, t)) throw new bc(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
2290
2406
  let i = n.get(r.region);
2291
- if (i === void 0) throw new oc(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
2407
+ if (i === void 0) throw new bc(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
2292
2408
  return {
2293
2409
  store: i,
2294
2410
  placement: r
2295
2411
  };
2296
- }, hc = async (e, t, n, r) => {
2297
- let { store: i, placement: a } = mc(e, t, n);
2412
+ }, kc = async (e, t, n, r) => {
2413
+ let { store: i, placement: a } = Oc(e, t, n);
2298
2414
  return await r(i, a), a;
2299
- }, gc = (e) => {
2415
+ }, Ac = (e) => {
2300
2416
  if (typeof e == "string") return e;
2301
2417
  if ("jsonPath" in e) {
2302
2418
  let { column: t, path: n, numeric: r } = e.jsonPath;
2303
2419
  return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
2304
2420
  }
2305
2421
  return `(${e.expr})`;
2306
- }, Q = (e) => e.map(gc), _c = (e, t) => {
2422
+ }, Q = (e) => e.map(Ac), jc = (e, t) => {
2307
2423
  if (e.length !== t.length) return !1;
2308
- for (let n = 0; n < e.length; n++) if (gc(e[n]) !== gc(t[n])) return !1;
2424
+ for (let n = 0; n < e.length; n++) if (Ac(e[n]) !== Ac(t[n])) return !1;
2309
2425
  return !0;
2310
- }, vc = (e, t) => {
2426
+ }, Mc = (e, t) => {
2311
2427
  if (e.length >= t.length) return !1;
2312
- for (let n = 0; n < e.length; n++) if (gc(e[n]) !== gc(t[n])) return !1;
2428
+ for (let n = 0; n < e.length; n++) if (Ac(e[n]) !== Ac(t[n])) return !1;
2313
2429
  return !0;
2314
- }, yc = (e) => {
2430
+ }, Nc = (e) => {
2315
2431
  let t = [], n = e.appliedIndexes, r = e.tableName;
2316
2432
  for (let e = 0; e < n.length; e++) {
2317
2433
  let i = n[e];
2318
2434
  for (let a = e + 1; a < n.length; a++) {
2319
2435
  let e = n[a];
2320
- if (_c(i.fields, e.fields)) {
2436
+ if (jc(i.fields, e.fields)) {
2321
2437
  let [n, a] = i.name < e.name ? [i, e] : [e, i];
2322
2438
  t.push({
2323
2439
  kind: "duplicate-fields",
@@ -2328,13 +2444,13 @@ $voltro_branch$`;
2328
2444
  });
2329
2445
  continue;
2330
2446
  }
2331
- vc(i.fields, e.fields) ? t.push({
2447
+ Mc(i.fields, e.fields) ? t.push({
2332
2448
  kind: "redundant-prefix",
2333
2449
  table: r,
2334
2450
  redundant: i,
2335
2451
  coveredBy: e,
2336
2452
  message: `'${r}' index '${i.name}' on [${Q(i.fields).join(", ")}] is a leading prefix of '${e.name}' on [${Q(e.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Q(i.fields).join(", ")}] query from '${e.name}' too via the leading-prefix rule, so '${i.name}' adds write cost without read benefit. Drop '${i.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
2337
- }) : vc(e.fields, i.fields) && t.push({
2453
+ }) : Mc(e.fields, i.fields) && t.push({
2338
2454
  kind: "redundant-prefix",
2339
2455
  table: r,
2340
2456
  redundant: e,
@@ -2344,23 +2460,23 @@ $voltro_branch$`;
2344
2460
  }
2345
2461
  }
2346
2462
  return t;
2347
- }, bc = (e) => {
2463
+ }, Pc = (e) => {
2348
2464
  let t = [];
2349
- for (let n of e) t.push(...yc(n));
2465
+ for (let n of e) t.push(...Nc(n));
2350
2466
  return t;
2351
- }, xc = "\x1B[", Sc = `${xc}38;2;245;158;11m`, Cc = `${xc}38;2;16;185;129m`, wc = (e, t) => `${e}${t}${M.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : wc(t, n) : n, Tc = (e, t = {}) => {
2352
- let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, M.dim, e.padEnd(11)), a = (e) => $(n, (e) => M.bold(M.brand(e)), e), o = (e) => $(n, M.brightRed24, e), s = (e) => $(n, Cc, e), c = (e) => $(n, Sc, e), l = (e) => $(n, M.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, M.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
2467
+ }, Fc = "\x1B[", Ic = `${Fc}38;2;245;158;11m`, Lc = `${Fc}38;2;16;185;129m`, Rc = (e, t) => `${e}${t}${N.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : Rc(t, n) : n, zc = (e, t = {}) => {
2468
+ let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, N.dim, e.padEnd(11)), a = (e) => $(n, (e) => N.bold(N.brand(e)), e), o = (e) => $(n, N.brightRed24, e), s = (e) => $(n, Lc, e), c = (e) => $(n, Ic, e), l = (e) => $(n, N.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, N.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
2353
2469
  let n = e.slice(0, t), r = e.slice(t), i = [];
2354
2470
  return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
2355
2471
  }, m = [];
2356
- return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Q(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Q(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${$(n, M.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
2357
- }, Ec = (e, { apply: t, undo: n }) => ({
2472
+ return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Q(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Q(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${$(n, N.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
2473
+ }, Bc = (e, { apply: t, undo: n }) => ({
2358
2474
  name: e,
2359
2475
  apply: t,
2360
2476
  undo: n
2361
- }), Dc = (e) => {
2477
+ }), Vc = (e) => {
2362
2478
  if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
2363
- let t = e.steps({ step: Ec });
2479
+ let t = e.steps({ step: Bc });
2364
2480
  if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
2365
2481
  return {
2366
2482
  __migration: !0,
@@ -2368,106 +2484,106 @@ $voltro_branch$`;
2368
2484
  name: e.name,
2369
2485
  steps: t
2370
2486
  };
2371
- }, Oc = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, kc = w("_voltro_migrations", {
2372
- id: E({ prefix: "mig" }),
2373
- name: C(),
2374
- hash: C(),
2375
- status: C(),
2376
- appliedAt: T().nullable(),
2377
- durationMs: _().nullable(),
2378
- errorMessage: C().nullable(),
2379
- errorStack: C().nullable(),
2380
- workflowRunId: C().nullable(),
2381
- createdAt: T().default("now"),
2382
- updatedAt: T().default("now").onUpdate("now")
2383
- }).index(["status"]), Ac = w("_voltro_seeds", {
2384
- id: E({ prefix: "seed" }),
2385
- name: C(),
2386
- lifecycle: C(),
2387
- fingerprint: C(),
2388
- cronSchedule: C().nullable(),
2389
- watchedTables: x().nullable(),
2390
- nextRunAt: T().nullable(),
2391
- lastRunStatus: C().nullable(),
2392
- lastRunAt: T().nullable(),
2393
- lastRunDurationMs: _().nullable(),
2394
- lastRunRowsTouched: _().nullable(),
2395
- lastError: C().nullable(),
2396
- workflowRunId: C().nullable(),
2397
- createdAt: T().default("now"),
2398
- updatedAt: T().default("now").onUpdate("now")
2399
- }).index(["lifecycle"]).index(["nextRunAt"]), jc = w("_voltro_migration_plans", {
2400
- id: E({ prefix: "plan" }),
2401
- fingerprint: C(),
2402
- liveFingerprint: C().nullable(),
2403
- operations: x(),
2404
- rollbackPlan: x().nullable(),
2405
- appliedBy: C(),
2406
- environment: C(),
2407
- source: C(),
2408
- onlineStrategy: C().nullable(),
2409
- durationMs: _(),
2410
- notes: C().nullable(),
2411
- squashedAt: T().nullable(),
2412
- appliedAt: T().default("now"),
2413
- createdAt: T().default("now"),
2414
- updatedAt: T().default("now").onUpdate("now")
2415
- }).index(["fingerprint"]).index(["environment"]), Mc = w("_voltro_idempotency", {
2416
- id: E({ prefix: "idem" }),
2417
- scope: C(),
2418
- key: C(),
2419
- status: C(),
2420
- response: x().nullable(),
2421
- createdAt: T().default("now")
2422
- }).unique(["scope", "key"]).index(["createdAt"]), Nc = w("_voltro_kv", {
2423
- id: E({ prefix: "kv" }),
2424
- key: C().unique(),
2425
- value: C().nullable(),
2426
- expiresAt: T().nullable(),
2427
- createdAt: T().default("now"),
2428
- updatedAt: T().default("now").onUpdate("now")
2429
- }).index(["expiresAt"]), Pc = w("_voltro_api_keys", {
2430
- id: E({ prefix: "apikey" }),
2431
- tenantId: C().nullable(),
2432
- name: C(),
2433
- hashedKey: C().maxLength(64).unique(),
2434
- keyPrefix: C(),
2435
- scopes: x().nullable(),
2436
- lastUsedAt: T().nullable(),
2437
- requestCount: _().default(0),
2438
- expiresAt: T().nullable(),
2439
- revokedAt: T().nullable(),
2440
- createdBy: C().nullable(),
2441
- onBehalfOf: C().nullable(),
2442
- metadata: x().nullable(),
2443
- createdAt: T().default("now")
2444
- }).index("byApiKeyTenant", ["tenantId"]), Fc = w("_voltro_replica_observations", {
2445
- id: E({ prefix: "robs" }),
2446
- replicaId: C().maxLength(191),
2447
- startedAt: T(),
2448
- version: C().maxLength(64).nullable(),
2449
- kind: C().maxLength(64),
2450
- payload: C().nullable(),
2451
- reachableAt: C().maxLength(255).nullable(),
2452
- writtenAt: T().default("now").onUpdate("now")
2453
- }).unique(["replicaId", "kind"]).index(["kind"]), Ic = [
2454
- kc,
2455
- Ac,
2456
- jc
2457
- ], Lc = "_voltro_replace_in_progress", Rc = w(Lc, {
2458
- id: E({ prefix: "repl" }),
2459
- startedAt: T().default("now"),
2460
- kind: C().default("replace"),
2461
- tables: C().nullable(),
2462
- capture: C().nullable(),
2463
- via: C(),
2464
- staging: C().nullable(),
2465
- heartbeatAt: T().nullable(),
2487
+ }, Hc = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Uc = T("_voltro_migrations", {
2488
+ id: D({ prefix: "mig" }),
2489
+ name: w(),
2490
+ hash: w(),
2491
+ status: w(),
2492
+ appliedAt: E().nullable(),
2493
+ durationMs: y().nullable(),
2494
+ errorMessage: w().nullable(),
2495
+ errorStack: w().nullable(),
2496
+ workflowRunId: w().nullable(),
2497
+ createdAt: E().default("now"),
2498
+ updatedAt: E().default("now").onUpdate("now")
2499
+ }).index(["status"]), Wc = T("_voltro_seeds", {
2500
+ id: D({ prefix: "seed" }),
2501
+ name: w(),
2502
+ lifecycle: w(),
2503
+ fingerprint: w(),
2504
+ cronSchedule: w().nullable(),
2505
+ watchedTables: S().nullable(),
2506
+ nextRunAt: E().nullable(),
2507
+ lastRunStatus: w().nullable(),
2508
+ lastRunAt: E().nullable(),
2509
+ lastRunDurationMs: y().nullable(),
2510
+ lastRunRowsTouched: y().nullable(),
2511
+ lastError: w().nullable(),
2512
+ workflowRunId: w().nullable(),
2513
+ createdAt: E().default("now"),
2514
+ updatedAt: E().default("now").onUpdate("now")
2515
+ }).index(["lifecycle"]).index(["nextRunAt"]), Gc = T("_voltro_migration_plans", {
2516
+ id: D({ prefix: "plan" }),
2517
+ fingerprint: w(),
2518
+ liveFingerprint: w().nullable(),
2519
+ operations: S(),
2520
+ rollbackPlan: S().nullable(),
2521
+ appliedBy: w(),
2522
+ environment: w(),
2523
+ source: w(),
2524
+ onlineStrategy: w().nullable(),
2525
+ durationMs: y(),
2526
+ notes: w().nullable(),
2527
+ squashedAt: E().nullable(),
2528
+ appliedAt: E().default("now"),
2529
+ createdAt: E().default("now"),
2530
+ updatedAt: E().default("now").onUpdate("now")
2531
+ }).index(["fingerprint"]).index(["environment"]), Kc = T("_voltro_idempotency", {
2532
+ id: D({ prefix: "idem" }),
2533
+ scope: w(),
2534
+ key: w(),
2535
+ status: w(),
2536
+ response: S().nullable(),
2537
+ createdAt: E().default("now")
2538
+ }).unique(["scope", "key"]).index(["createdAt"]), qc = T("_voltro_kv", {
2539
+ id: D({ prefix: "kv" }),
2540
+ key: w().unique(),
2541
+ value: w().nullable(),
2542
+ expiresAt: E().nullable(),
2543
+ createdAt: E().default("now"),
2544
+ updatedAt: E().default("now").onUpdate("now")
2545
+ }).index(["expiresAt"]), Jc = T("_voltro_api_keys", {
2546
+ id: D({ prefix: "apikey" }),
2547
+ tenantId: w().nullable(),
2548
+ name: w(),
2549
+ hashedKey: w().maxLength(64).unique(),
2550
+ keyPrefix: w(),
2551
+ scopes: S().nullable(),
2552
+ lastUsedAt: E().nullable(),
2553
+ requestCount: y().default(0),
2554
+ expiresAt: E().nullable(),
2555
+ revokedAt: E().nullable(),
2556
+ createdBy: w().nullable(),
2557
+ onBehalfOf: w().nullable(),
2558
+ metadata: S().nullable(),
2559
+ createdAt: E().default("now")
2560
+ }).index("byApiKeyTenant", ["tenantId"]), Yc = T("_voltro_replica_observations", {
2561
+ id: D({ prefix: "robs" }),
2562
+ replicaId: w().maxLength(191),
2563
+ startedAt: E(),
2564
+ version: w().maxLength(64).nullable(),
2565
+ kind: w().maxLength(64),
2566
+ payload: w().nullable(),
2567
+ reachableAt: w().maxLength(255).nullable(),
2568
+ writtenAt: E().default("now").onUpdate("now")
2569
+ }).unique(["replicaId", "kind"]).index(["kind"]), Xc = [
2570
+ Uc,
2571
+ Wc,
2572
+ Gc
2573
+ ], Zc = "_voltro_replace_in_progress", Qc = T(Zc, {
2574
+ id: D({ prefix: "repl" }),
2575
+ startedAt: E().default("now"),
2576
+ kind: w().default("replace"),
2577
+ tables: w().nullable(),
2578
+ capture: w().nullable(),
2579
+ via: w(),
2580
+ staging: w().nullable(),
2581
+ heartbeatAt: E().nullable(),
2466
2582
  resumable: p().nullable()
2467
- }), zc = 30, Bc = (e, t) => {
2583
+ }), $c = 30, el = (e, t) => {
2468
2584
  let n = typeof t == "number" && Number.isFinite(t) && t > 0 ? t : 30, r = Number(e.VOLTRO_STAGING_STALE_MINUTES);
2469
2585
  return (Number.isFinite(r) && r > 0 ? r : n) * 6e4;
2470
- }, Vc = (e) => e == null || String(e).length === 0 ? [] : String(e).split(",").map((e) => e.trim()).filter((e) => e.length > 0), Hc = (e) => {
2586
+ }, tl = (e) => e == null || String(e).length === 0 ? [] : String(e).split(",").map((e) => e.trim()).filter((e) => e.length > 0), nl = (e) => {
2471
2587
  let t = e.filter((e) => e.kind !== "staging");
2472
2588
  if (t.length !== 0) return `refusing to start: a destructive data operation did not finish.
2473
2589
  ${t.map((e) => {
@@ -2482,7 +2598,7 @@ ${t.map((e) => {
2482
2598
 
2483
2599
  When the data is back, or you have decided the current state is correct, clear the marker:
2484
2600
  voltro data clear-replace-marker --yes`;
2485
- }, Uc = (e, t, n) => {
2601
+ }, rl = (e, t, n) => {
2486
2602
  let r = e.filter((e) => e.kind === "staging");
2487
2603
  return {
2488
2604
  all: r,
@@ -2492,7 +2608,7 @@ ${t.map((e) => {
2492
2608
  return Number.isFinite(r) ? t - r >= n : !1;
2493
2609
  })
2494
2610
  };
2495
- }, Wc = (e, t) => {
2611
+ }, il = (e, t) => {
2496
2612
  if (e.all.length === 0) return;
2497
2613
  let n = new Set(e.droppable.map((e) => e.id));
2498
2614
  return `staged data-import leftovers:
@@ -2501,22 +2617,22 @@ ${e.all.map((e) => {
2501
2617
  return n.has(e.id) ? ` - ${a} — DROPPED: the run is not resumable and has been silent long enough that nothing is loading into them.` : e.resumable ? ` - ${a} — KEPT: the run was started \`--no-atomic\`, so these ARE its resume point. Re-run the same\n bundle to continue from them, or drop them with: voltro data clear-staging --yes` : ` - ${a} — KEPT: still beating, so an import is loading into them right now.`;
2502
2618
  }).join("\n")}\n The target of a staged \`replace\` is untouched until one short swap at the end, so none of this is
2503
2619
  a reason to refuse the boot — it is a reason to know the disk is holding a copy of a bundle.`;
2504
- }, Gc = "id", Kc = (e, t) => {
2505
- let n = S(e);
2620
+ }, al = "id", ol = (e, t) => {
2621
+ let n = C(e);
2506
2622
  if (n === void 0) return t;
2507
- let r = n.fields[Gc]?.idScheme;
2508
- if (r === void 0 || t[Gc] != null) return t;
2623
+ let r = n.fields[al]?.idScheme;
2624
+ if (r === void 0 || t[al] != null) return t;
2509
2625
  if (r.kind === "numeric") {
2510
- if (!(Gc in t)) return t;
2626
+ if (!(al in t)) return t;
2511
2627
  let e = { ...t };
2512
- return delete e[Gc], e;
2628
+ return delete e[al], e;
2513
2629
  }
2514
- let i = it(r, e);
2630
+ let i = rt(r, e);
2515
2631
  return i === null ? t : {
2516
2632
  ...t,
2517
- [Gc]: i
2633
+ [al]: i
2518
2634
  };
2519
- }, qc = (e, t) => t.map((t) => Kc(e, t)), Jc = {
2635
+ }, sl = (e, t) => t.map((t) => ol(e, t)), cl = {
2520
2636
  postgres: { maxBindParameters: 65535 },
2521
2637
  mysql: { maxBindParameters: 65535 },
2522
2638
  mariadb: { maxBindParameters: 65535 },
@@ -2526,25 +2642,25 @@ ${e.all.map((e) => {
2526
2642
  },
2527
2643
  sqlite: { maxBindParameters: 32766 },
2528
2644
  turso: { maxBindParameters: 32766 }
2529
- }, Yc = (e) => Jc[e], Xc = (e) => {
2645
+ }, ll = (e) => cl[e], ul = (e) => {
2530
2646
  let t = /* @__PURE__ */ new Set();
2531
2647
  for (let n of e) for (let e of Object.keys(n)) t.add(e);
2532
2648
  return t.size;
2533
- }, Zc = (e, t) => {
2649
+ }, dl = (e, t) => {
2534
2650
  if (t === void 0 || e.length === 0) return [e];
2535
- let n = Math.max(1, Xc(e)), r = Math.floor(t.maxBindParameters / n), i = t.maxRowsPerStatement ?? Infinity, a = Math.max(1, Math.min(r, i));
2651
+ let n = Math.max(1, ul(e)), r = Math.floor(t.maxBindParameters / n), i = t.maxRowsPerStatement ?? Infinity, a = Math.max(1, Math.min(r, i));
2536
2652
  if (e.length <= a) return [e];
2537
2653
  let o = [];
2538
2654
  for (let t = 0; t < e.length; t += a) o.push(e.slice(t, t + a));
2539
2655
  return o;
2540
- }, Qc = (e, t) => {
2656
+ }, fl = (e, t) => {
2541
2657
  let n = [], r = t;
2542
2658
  for (let [t, i] of Object.entries(e.fields)) {
2543
2659
  let e = i;
2544
2660
  e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
2545
2661
  }
2546
2662
  return n;
2547
- }, $c = (e, t, n) => {
2663
+ }, pl = (e, t, n) => {
2548
2664
  let r = n, i = new Set(e === void 0 ? [] : Object.entries(e.fields).filter(([, e]) => e.generatedAs !== void 0).map(([e]) => e)), a = [];
2549
2665
  for (let e of t) i.has(e) || (r[e] === void 0 ? a.push({
2550
2666
  column: e,
@@ -2554,28 +2670,29 @@ ${e.all.map((e) => {
2554
2670
  reason: "null"
2555
2671
  }));
2556
2672
  return a;
2557
- }, el = (e, t, n) => e.insert(t.tableName, n), tl = (e, t, n, r) => e.upsert(t.tableName, n, {
2673
+ }, ml = (e, t, n) => e.insert(t.tableName, n), hl = (e, t, n, r) => e.upsert(t.tableName, n, {
2558
2674
  conflictColumns: r.conflictColumns,
2559
- ...r.update === void 0 ? {} : { update: r.update }
2560
- }), nl = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), rl = 512, il = (e) => {
2675
+ ...r.update === void 0 ? {} : { update: r.update },
2676
+ ...r.updateValues === void 0 ? {} : { updateValues: r.updateValues }
2677
+ }), gl = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), _l = 512, vl = (e) => {
2561
2678
  e.setMaxListeners(512);
2562
- }, al = (e, t, n) => ({
2679
+ }, yl = (e, t, n) => ({
2563
2680
  _tag: "PrimaryKeyConflictError",
2564
2681
  table: e,
2565
2682
  key: t,
2566
2683
  cause: n
2567
- }), ol = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", sl = {
2684
+ }), bl = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", xl = {
2568
2685
  postgres: 5432,
2569
2686
  mysql: 3306,
2570
2687
  mariadb: 3306,
2571
2688
  mssql: 1433
2572
- }, cl = /* @__PURE__ */ new Set([
2689
+ }, Sl = /* @__PURE__ */ new Set([
2573
2690
  "localhost",
2574
2691
  "127.0.0.1",
2575
2692
  "::1",
2576
2693
  "[::1]",
2577
2694
  "0.0.0.0"
2578
- ]), ll = (e) => {
2695
+ ]), Cl = (e) => {
2579
2696
  let t = e.host, n = e.port, r = e.database;
2580
2697
  if (e.url !== void 0 && e.url !== "") try {
2581
2698
  let i = new URL(e.url);
@@ -2584,29 +2701,29 @@ ${e.all.map((e) => {
2584
2701
  return;
2585
2702
  }
2586
2703
  if (t === void 0 || t === "" || r === void 0 || r === "") return;
2587
- let i = n ?? sl[(e.dialect ?? "").toLowerCase()];
2704
+ let i = n ?? xl[(e.dialect ?? "").toLowerCase()];
2588
2705
  if (i === void 0 || !Number.isFinite(i)) return;
2589
2706
  let a = t.toLowerCase();
2590
2707
  return {
2591
- host: cl.has(a) ? "localhost" : a,
2708
+ host: Sl.has(a) ? "localhost" : a,
2592
2709
  port: i,
2593
2710
  database: r.toLowerCase()
2594
2711
  };
2595
- }, ul = (e) => {
2596
- let t = ll(e);
2597
- if (t !== void 0) return Jt("sha256").update(`${t.host}\u0000${t.port}\u0000${t.database}`).digest("hex").slice(0, 32);
2598
- }, dl = (e, t) => e === void 0 || t === void 0 ? "unknown" : e === t ? "same" : "different", fl = {
2712
+ }, wl = (e) => {
2713
+ let t = Cl(e);
2714
+ if (t !== void 0) return qt("sha256").update(`${t.host}\u0000${t.port}\u0000${t.database}`).digest("hex").slice(0, 32);
2715
+ }, Tl = (e, t) => e === void 0 || t === void 0 ? "unknown" : e === t ? "same" : "different", El = {
2599
2716
  app: 3,
2600
2717
  plugin: 2,
2601
2718
  framework: 1
2602
- }, pl = /* @__PURE__ */ new Map(), ml = [], hl = () => [...ml], gl = (e) => {
2719
+ }, Dl = /* @__PURE__ */ new Map(), Ol = [], kl = () => [...Ol], Al = (e) => {
2603
2720
  if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
2604
2721
  if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
2605
- let t = e.source ?? "app", n = pl.get(e.table);
2722
+ let t = e.source ?? "app", n = Dl.get(e.table);
2606
2723
  if (n !== void 0) {
2607
2724
  let r = n.source ?? "app", i = n.ttlMs !== e.ttlMs || n.where !== void 0 != (e.where !== void 0);
2608
- if (fl[t] < fl[r]) {
2609
- i && ml.push({
2725
+ if (El[t] < El[r]) {
2726
+ i && Ol.push({
2610
2727
  table: e.table,
2611
2728
  kept: {
2612
2729
  source: r,
@@ -2619,7 +2736,7 @@ ${e.all.map((e) => {
2619
2736
  });
2620
2737
  return;
2621
2738
  }
2622
- i && r !== t && ml.push({
2739
+ i && r !== t && Ol.push({
2623
2740
  table: e.table,
2624
2741
  kept: {
2625
2742
  source: t,
@@ -2631,13 +2748,13 @@ ${e.all.map((e) => {
2631
2748
  }
2632
2749
  });
2633
2750
  }
2634
- pl.set(e.table, {
2751
+ Dl.set(e.table, {
2635
2752
  ...e,
2636
2753
  source: t
2637
2754
  });
2638
- }, _l = () => [...pl.values()], vl = () => {
2639
- pl.clear(), ml.length = 0;
2640
- }, yl = async (e, t, n, r = 2e4) => {
2755
+ }, jl = () => [...Dl.values()], Ml = () => {
2756
+ Dl.clear(), Ol.length = 0;
2757
+ }, Nl = async (e, t, n, r = 2e4) => {
2641
2758
  let i = new Date(t - e.ttlMs), a = 0;
2642
2759
  try {
2643
2760
  for (;;) {
@@ -2645,45 +2762,45 @@ ${e.all.map((e) => {
2645
2762
  if (a += t, t < r) break;
2646
2763
  }
2647
2764
  } catch (t) {
2648
- throw O.runSync(k.increment(k.tagged(xl, "table", e.table))), t;
2765
+ throw k.runSync(A.increment(A.tagged(Fl, "table", e.table))), t;
2649
2766
  }
2650
- return a > 0 && O.runSync(k.incrementBy(k.tagged(bl, "table", e.table), a)), a;
2651
- }, bl = k.counter("voltro_retention_swept_rows_total"), xl = k.counter("voltro_retention_sweep_errors_total"), Sl = (e, t) => {
2767
+ return a > 0 && k.runSync(A.incrementBy(A.tagged(Pl, "table", e.table), a)), a;
2768
+ }, Pl = A.counter("voltro_retention_swept_rows_total"), Fl = A.counter("voltro_retention_sweep_errors_total"), Il = (e, t) => {
2652
2769
  let n = Number(e ?? String(t));
2653
2770
  return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
2654
- }, Cl = "_voltro_cdc_offsets", wl = w(Cl, {
2655
- id: E({ prefix: "cdcoff" }),
2656
- replicaId: C(),
2657
- streamName: C(),
2658
- binlogFile: C(),
2659
- binlogPosition: C(),
2660
- updatedAt: T()
2661
- }).index(["replicaId"]), Tl = w(Cl, {
2662
- id: E({ prefix: "cdcoff" }),
2663
- replicaId: C(),
2664
- streamName: C(),
2665
- ctVersion: C(),
2666
- updatedAt: T()
2667
- }).index(["replicaId"]), El = "_voltro_data_transfers", Dl = w(El, {
2668
- id: E({ prefix: "dimp" }),
2669
- startedAt: T().default("now"),
2670
- finishedAt: T().nullable(),
2671
- direction: C().default("import"),
2672
- mode: C(),
2673
- via: C(),
2674
- bundle: C().nullable(),
2675
- sourceFingerprint: C().nullable(),
2676
- tablesWritten: _().default(0),
2677
- rowsWritten: _().default(0),
2678
- failure: C().nullable(),
2771
+ }, Ll = "_voltro_cdc_offsets", Rl = T(Ll, {
2772
+ id: D({ prefix: "cdcoff" }),
2773
+ replicaId: w(),
2774
+ streamName: w(),
2775
+ binlogFile: w(),
2776
+ binlogPosition: w(),
2777
+ updatedAt: E()
2778
+ }).index(["replicaId"]), zl = T(Ll, {
2779
+ id: D({ prefix: "cdcoff" }),
2780
+ replicaId: w(),
2781
+ streamName: w(),
2782
+ ctVersion: w(),
2783
+ updatedAt: E()
2784
+ }).index(["replicaId"]), Bl = "_voltro_data_transfers", Vl = T(Bl, {
2785
+ id: D({ prefix: "dimp" }),
2786
+ startedAt: E().default("now"),
2787
+ finishedAt: E().nullable(),
2788
+ direction: w().default("import"),
2789
+ mode: w(),
2790
+ via: w(),
2791
+ bundle: w().nullable(),
2792
+ sourceFingerprint: w().nullable(),
2793
+ tablesWritten: y().default(0),
2794
+ rowsWritten: y().default(0),
2795
+ failure: w().nullable(),
2679
2796
  staged: p().nullable()
2680
- }).renamedFrom("_voltro_data_imports").nonReactive(), Ol = (e) => {
2797
+ }).renamedFrom("_voltro_data_imports").nonReactive(), Hl = (e) => {
2681
2798
  let t = Number.isFinite(e.startedAt.getTime()) ? e.startedAt.toISOString() : "an unknown time", n = e.direction === "import" ? e.mode : `${e.direction} ${e.mode}`, r = e.failure === null ? e.finishedAt === null ? `${n} — started and never reported finishing` : e.direction === "backup" || e.direction === "restore" ? `${n} — finished${e.rowsWritten > 0 ? ` (${e.rowsWritten} blob(s))` : ""}` : `${n} — ${e.rowsWritten} row(s) across ${e.tablesWritten} table(s)` : `FAILED ${n} — ${e.failure}`, i = e.staged === null ? "" : e.staged ? " · staged (target untouched until the swap)" : " · NOT staged (target emptied first)";
2682
2799
  return `${t} · ${r} · via ${e.via}${i}` + (e.bundle === null ? "" : ` · from ${e.bundle}`) + (e.sourceFingerprint === null ? "" : ` · source schema ${e.sourceFingerprint}`);
2683
- }, kl = 255, Al = (e) => e == null ? "null" : typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? JSON.stringify(e) : Array.isArray(e) ? `[${e.map(Al).join(",")}]` : typeof e == "object" ? `{${Object.entries(e).filter(([, e]) => e !== void 0).sort(([e], [t]) => e < t ? -1 : +(e > t)).map(([e, t]) => `${JSON.stringify(e)}:${Al(t)}`).join(",")}}` : JSON.stringify(String(e)), jl = (e) => {
2800
+ }, Ul = 255, Wl = (e) => e == null ? "null" : typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? JSON.stringify(e) : Array.isArray(e) ? `[${e.map(Wl).join(",")}]` : typeof e == "object" ? `{${Object.entries(e).filter(([, e]) => e !== void 0).sort(([e], [t]) => e < t ? -1 : +(e > t)).map(([e, t]) => `${JSON.stringify(e)}:${Wl(t)}`).join(",")}}` : JSON.stringify(String(e)), Gl = (e) => {
2684
2801
  if (e == null) return null;
2685
- let t = typeof e == "string" ? e : Al(e);
2802
+ let t = typeof e == "string" ? e : Wl(e);
2686
2803
  return t.length > 255 ? t.slice(0, 255) : t;
2687
- }, Ml = "postgres";
2804
+ }, Kl = "postgres";
2688
2805
  //#endregion
2689
- export { lt as AUTO_FILLED_COLUMNS, on as BOUND_ENCRYPTED_PREFIX, Jc as BULK_INSERT_LIMITS, Y as BranchNameInvalid, Vs as BranchTransitionInvalid, Cl as CDC_OFFSETS_TABLE, no as CHANGE_CLAIM_TTL_ENV, rl as CHANGE_LISTENER_CEILING, Qe as ColumnBuilder, El as DATA_TRANSFERS_TABLE, st as DEFAULT_ACQUIRE_TIMEOUT_MS, ro as DEFAULT_CHANGE_CLAIM_TTL_HOURS, as as DEFAULT_EAGER_FALLBACK_WARN_INTERVAL_MS, yt as DEFAULT_SOFT_DROP_RETENTION_DAYS, lr as DEFAULT_SUBJECT_GRAPH_DEPTH, an as ENCRYPTED_PREFIX, Ml as ENGINE, Er as EagerCardinalityError, St as FILE_MIGRATION_PATTERN, at as FRAMEWORK_LIVE_TABLES, ln as FieldDecryptionError, Do as ID_COLUMN_MAX_LENGTH, Lt as INITIAL_VERSION, Oa as MATCHES_NO_ROWS, Tt as MAX_IDENTIFIER_LENGTH, gs as MSSQL_TRANSIENT_NUMBERS, ms as MYSQL_TRANSIENT_CODES, to as OccurrenceCounter, hs as POSTGRES_TRANSIENT_STATES, Lc as REPLACE_IN_PROGRESS_TABLE, kl as SCOPE_KEY_MAX_LENGTH, se as SELF_REFERENCE_TARGET, _s as SQLITE_TRANSIENT_CODES, zc as STAGING_STALE_MINUTES, pt as STAGING_TABLE_PREFIX, Zt as SqlClient, vs as TURSO_TRANSIENT_MESSAGE, ks as TableStreamError, Br as TenantNamespaceInvalid, zr as TenantNamespaceUnresolved, oc as TenantRegionUnavailable, ac as TenantResidencyUnresolved, Cs as VOLTRO_EXPIRES_MIXIN_ID, Ts as VOLTRO_LOCAL_FIRST_MIXIN_ID, Pt as VersionConflict, At as WARN_IDENTIFIER_LENGTH, Pc as _voltroApiKeysTable, wl as _voltroCdcOffsetsTable, Dl as _voltroDataTransfersTable, Mc as _voltroIdempotencyTable, Nc as _voltroKvTable, jc as _voltroMigrationPlansTable, kc as _voltroMigrationsTable, Tl as _voltroMssqlCdcOffsetsTable, Rc as _voltroReplaceInProgressTable, Fc as _voltroReplicaObservationsTable, Ac as _voltroSeedsTable, ma as actorsTable, ec as admitBranch, Je as agedSoftDropSnapshots, be as allEnumRenames, or as allRegisteredRelations, re as allRegisteredTables, Ma as and, ce as array, Ta as arrayContains, Da as arrayHas, Ea as arrayOverlaps, Or as attachEagerLoads, co as attributionFields, po as attributionKey, bc as auditAllTableIndexes, yc as auditTableIndexes, Et as avg, ye as avgOver, So as beginLocalWrite, fe as bigint, mc as bindResidentStore, p as boolean, Rs as branchNamespaceName, Yc as bulkInsertLimitsFor, ne as bytes, N as causeBranches, Ya as changeDelete, Qa as changeDigest, qa as changeInsert, Xa as changeSoftDelete, Ja as changeUpdate, Zc as chunkRowsForInsert, go as claimPendingAttribution, Dn as classifyConstraintViolation, d as clearEnumRenames, To as clearPendingAttribution, cr as clearRelationsRegistry, uc as clearResidencyConfig, vl as clearRetentions, Oe as clearTableRegistry, Po as clearWriteRecorders, W as coercePredicateForSqlite, Jr as coercePredicateValue, Yr as coercePredicateValues, oa as coerceValueForSqlite, Wa as collectSubqueries, u as column, In as columnSchema, Xc as columnsPerRow, li as compileEagerJson, L as compilePredicate, Xr as compileRawFragment, ci as compileSelect, $a as composeChangeKey, Ps as computeEmbedding, ul as connectionIdentity, Ca as contains, c as count, le as countDistinct, oe as crdtDoc, ge as crdtManagedColumns, Mt as crdtManagedColumnsOf, a as crdtText, so as currentWriteAttribution, $e as databaseHandle, we as date, ee as dbEnum, $o as dbMetricTagCacheSizeForTests, ns as dbOperationsInFlight, Se as decimal, l as declareEnumRename, mn as decodeFieldValue, Cr as decodeRowsFromSchema, bn as decryptFieldsOnRead, Dc as defineMigration, Ct as defineMixin, ut as defineSeed, n as denseRank, gr as deriveSubjectGraph, dt as deriveTypeIdPrefix, Ao as derivedRowId, jo as derivedRowIdLength, Ne as describeAgedSoftDropSnapshots, An as describeDriverError, jn as describeRowBindings, Ol as describeTransferRun, rn as deserializeArraysOnRead, Ie as drainIdentifierWarnings, Ee as dropped, fn as encodeFieldValue, Tr as encodeRowForSchema, yn as encryptFieldsForWrite, _n as encryptedColumnsOf, Co as endLocalWrite, Zs as enforceBranchLimits, De as ensureTableRegistered, ha as eq, Zr as escapeLike, Ua as evaluatePredicate, Ze as except, za as exists, ws as expires, Ka as externalChangeEvent, wn as extractDbCause, sn as fieldBinding, rt as fireSchemaChangeSeeds, Ke as fireTenantCreateSeeds, Tc as formatIndexAuditIssue, _r as formatSubjectGraph, Ic as frameworkTables, it as generateId, Ge as generateSnowflake, h as geography, ae as geometry, ue as getEnumRenames, ar as getRelation, ir as getRelations, lc as getResidencyConfig, S as getTable, _a as gt, va as gte, Rr as hasEagerLoads, Ns as hybridSearch, E as id, xa as inSet, La as inSubquery, Yn as inferForeignKey, el as insertRow, _ as integer, Hc as interruptedReplaceRefusal, y as intersect, ke as interval, cn as isBoundCiphertext, zs as isBranchNamespace, Wn as isEmptyRelationsSpec, dn as isEncrypted, un as isFieldDecryptionError, Re as isFileMigration, On as isForeignKeyViolation, ct as isFrameworkOwnedLiveTable, Ds as isLocalFirst, Oc as isMigrationDefinition, ht as isMysqlFamily, Gs as isNeonConnection, Aa as isNotNull, ka as isNull, ol as isPrimaryKeyConflictError, kn as isQueryTimeout, hn as isRawEncoding, fc as isRegionServable, Gn as isRelationsSpec, We as isSeedDefinition, gt as isSoftDropSnapshotName, Xe as isSqliteFamily, Le as isStagingTableName, pe as isTableReactive, xs as isTransientContention, Fe as isView, x as json, Fa as jsonField, vt as jsonIndex, b as lag, de as lead, hl as listRetentionConflicts, _l as listRetentions, Es as localFirst, Os as localFirstTables, ya as lt, ba as lte, cs as makeEagerFallbackReporter, ic as makeNamespaceBranchExecutor, qn as many, Jn as manyToMany, Ae as materializeFields, f as max, He as migration, te as min, $c as missingConflictColumns, Qc as missingRequiredColumns, ze as mixin, ga as neq, Hs as nextBranchState, ll as normaliseTarget, Pa as not, Ba as notExists, Sa as notInSet, Ra as notInSubquery, me as numeric, is as observeDbOp, io as occurrenceWindowMs, Kn as one, Dr as oneCardinalityMessage, Na as or, v as orderClausesOf, he as paginateBy, jt as paginateById, eo as parseChangeKey, Eo as pendingAttributionCount, Ys as planBranch, Us as planBranchProvision, Ws as planBranchTeardown, Xs as planBranchTeardownFor, qs as planNeonBranchProvision, Js as planNeonBranchTeardown, Nt as planVersionedUpdate, et as pluginRef, r as pluginRefSpecOf, al as primaryKeyConflictError, Qs as provisionBranch, hc as provisionResidentTenant, Gr as qualifyTable, i as queryFor, Ot as queryForView, Pe as quoteIdent, il as raiseChangeListenerCeiling, Ce as rank, t as raw, Be as readableByColumns, bt as real, rs as recordDbOp, zo as recordsTable, ot as reference, Pn as refuseWrite, ua as registerCoreTables, rr as registerDiscoveredRelations, ho as registerPendingAttribution, nr as registerRelations, gl as registerRetention, e as registerTable, Mo as registerWriteRecorder, Un as relations, fa as requireActors, Ve as requireTable, pa as requireTenants, Qo as resetDbMetricTagCacheForTests, Me as resetSnowflake, pc as residentPlacement, $t as resolveActorSnapshot, Ks as resolveBranchMechanism, ss as resolveEagerFallbackWarnIntervalMs, wo as resolveEchoAttribution, g as resolveFullTextIndex, qe as resolveIdScheme, Ue as resolveMixinGraph, dc as resolveTenantHome, Wr as resolveTenantNamespace, Sl as retentionTtlMsFromEnv, xe as rowNumber, Ln as rowSchema, fs as runRetryingTransaction, ps as runStoreTransaction, oo as runWithWriteAttribution, Bo as runWriteRecorders, dl as sameDatabase, Ur as sanitizeIdentifierFragment, jl as scopeKeyOf, mt as selfReference, nn as serializeArraysForWrite, Ye as serverOnlyColumns, cc as setResidencyConfig, je as setSchemaChangeSeedHook, wt as setTenantCreateSeedHook, ls as settleTransactionExit, It as settleVersionedUpdate, tt as softDropSnapshotStamp, ja as spatialPredicate, Wc as stagingLeftoverReport, Uc as stagingLeftovers, Vc as stagingNamesOf, Bc as stagingStaleAfterMs, Kc as stampGeneratedId, qc as stampGeneratedIds, wa as startsWith, Fn as storeRefusalOf, Ms as streamTable, Te as sum, m as sumOver, Io as suspendWriteRecorders, Lo as suspendWriteRecordersEffect, yl as sweepRetention, w as table, $s as teardownBranch, C as text, T as timestamp, zt as timestampMs, Ft as timestampMsOrNull, ie as union, ft as unionAll, xt as unregisterTable, No as unregisterWriteRecorder, nl as updateManyRow, tl as upsertRow, kt as validateColumnName, ve as validateIndexName, sr as validateRegisteredRelations, $n as validateRelationConfig, s as validateTableName, Dt as validateTypeIdPrefix, _t as vector, nt as vectorDistanceToOpclass, Fs as vectorEmbedding, Rt as versionColumnOf, _e as view, o as viewSql, Ga as walkLeaves, lo as withCapturedAttribution, Ro as writeRecordersSuspended };
2806
+ export { ct as AUTO_FILLED_COLUMNS, an as BOUND_ENCRYPTED_PREFIX, cl as BULK_INSERT_LIMITS, Y as BranchNameInvalid, tc as BranchTransitionInvalid, Ll as CDC_OFFSETS_TABLE, _o as CHANGE_CLAIM_TTL_ENV, _l as CHANGE_LISTENER_CEILING, Ze as ColumnBuilder, Bl as DATA_TRANSFERS_TABLE, ot as DEFAULT_ACQUIRE_TIMEOUT_MS, vo as DEFAULT_CHANGE_CLAIM_TTL_HOURS, ys as DEFAULT_EAGER_FALLBACK_WARN_INTERVAL_MS, vt as DEFAULT_SOFT_DROP_RETENTION_DAYS, pr as DEFAULT_SUBJECT_GRAPH_DEPTH, rn as ENCRYPTED_PREFIX, Kl as ENGINE, Br as EagerCardinalityError, xt as FILE_MIGRATION_PATTERN, it as FRAMEWORK_LIVE_TABLES, cn as FieldDecryptionError, Vo as ID_COLUMN_MAX_LENGTH, It as INITIAL_VERSION, Ha as MATCHES_NO_ROWS, wt as MAX_IDENTIFIER_LENGTH, As as MSSQL_TRANSIENT_NUMBERS, Os as MYSQL_TRANSIENT_CODES, go as OccurrenceCounter, ks as POSTGRES_TRANSIENT_STATES, Zc as REPLACE_IN_PROGRESS_TABLE, Ul as SCOPE_KEY_MAX_LENGTH, ae as SELF_REFERENCE_TARGET, js as SQLITE_TRANSIENT_CODES, $c as STAGING_STALE_MINUTES, ft as STAGING_TABLE_PREFIX, Xt as SqlClient, Ms as TURSO_TRANSIENT_MESSAGE, Us as TableStreamError, ei as TenantNamespaceInvalid, $r as TenantNamespaceUnresolved, bc as TenantRegionUnavailable, yc as TenantResidencyUnresolved, Ls as VOLTRO_EXPIRES_MIXIN_ID, zs as VOLTRO_LOCAL_FIRST_MIXIN_ID, Nt as VersionConflict, kt as WARN_IDENTIFIER_LENGTH, Jc as _voltroApiKeysTable, Rl as _voltroCdcOffsetsTable, Vl as _voltroDataTransfersTable, Kc as _voltroIdempotencyTable, qc as _voltroKvTable, Gc as _voltroMigrationPlansTable, Uc as _voltroMigrationsTable, zl as _voltroMssqlCdcOffsetsTable, Qc as _voltroReplaceInProgressTable, Yc as _voltroReplicaObservationsTable, Wc as _voltroSeedsTable, Oa as actorsTable, mc as admitBranch, qe as agedSoftDropSnapshots, ye as allEnumRenames, ur as allRegisteredRelations, te as allRegisteredTables, Ka as and, Rr as applyJsonPatch, se as array, za as arrayContains, Va as arrayHas, Ba as arrayOverlaps, Hr as attachEagerLoads, Co as attributionFields, Do as attributionKey, Pc as auditAllTableIndexes, Nc as auditTableIndexes, Tt as avg, ve as avgOver, Io as beginLocalWrite, de as bigint, Oc as bindResidentStore, p as boolean, Qs as branchNamespaceName, ll as bulkInsertLimitsFor, ee as bytes, xn as causeBranches, lo as changeDelete, po as changeDigest, so as changeInsert, uo as changeSoftDelete, co as changeUpdate, dl as chunkRowsForInsert, Ao as claimPendingAttribution, jn as classifyConstraintViolation, d as clearEnumRenames, zo as clearPendingAttribution, fr as clearRelationsRegistry, wc as clearResidencyConfig, Ml as clearRetentions, De as clearTableRegistry, Jo as clearWriteRecorders, W as coercePredicateForSqlite, ci as coercePredicateValue, li as coercePredicateValues, ba as coerceValueForSqlite, io as collectSubqueries, u as column, Bn as columnSchema, ul as columnsPerRow, Ci as compileEagerJson, zr as compileJsonPatch, L as compilePredicate, ui as compileRawFragment, Si as compileSelect, mo as composeChangeKey, Js as computeEmbedding, wl as connectionIdentity, La as contains, c as count, ce as countDistinct, ie as crdtDoc, he as crdtManagedColumns, jt as crdtManagedColumnsOf, a as crdtText, So as currentWriteAttribution, Qe as databaseHandle, Ce as date, _ as dbEnum, ps as dbMetricTagCacheSizeForTests, gs as dbOperationsInFlight, xe as decimal, l as declareEnumRename, pn as decodeFieldValue, Dr as decodeRowsFromSchema, yn as decryptFieldsOnRead, Vc as defineMigration, St as defineMixin, lt as defineSeed, n as denseRank, br as deriveSubjectGraph, ut as deriveTypeIdPrefix, Wo as derivedRowId, Go as derivedRowIdLength, Me as describeAgedSoftDropSnapshots, Pn as describeDriverError, Fn as describeRowBindings, Hl as describeTransferRun, nn as deserializeArraysOnRead, Fe as drainIdentifierWarnings, Te as dropped, dn as encodeFieldValue, kr as encodeRowForSchema, vn as encryptFieldsForWrite, gn as encryptedColumnsOf, Lo as endLocalWrite, dc as enforceBranchLimits, Ee as ensureTableRegistered, ka as eq, di as escapeLike, ro as evaluatePredicate, Xe as except, $a as exists, Rs as expires, oo as externalChangeEvent, wn as extractDbCause, on as fieldBinding, nt as fireSchemaChangeSeeds, Ge as fireTenantCreateSeeds, zc as formatIndexAuditIssue, xr as formatSubjectGraph, Xc as frameworkTables, rt as generateId, We as generateSnowflake, h as geography, re as geometry, le as getEnumRenames, lr as getRelation, cr as getRelations, Cc as getResidencyConfig, C as getTable, ja as gt, Ma as gte, Qr as hasEagerLoads, qs as hybridSearch, D as id, Fa as inSet, Za as inSubquery, $n as inferForeignKey, ml as insertRow, y as integer, nl as interruptedReplaceRefusal, x as intersect, Oe as interval, sn as isBoundCiphertext, $s as isBranchNamespace, Pr as isCompositeRowKey, Jn as isEmptyRelationsSpec, un as isEncrypted, ln as isFieldDecryptionError, Le as isFileMigration, Mn as isForeignKeyViolation, st as isFrameworkOwnedLiveTable, Vs as isLocalFirst, Hc as isMigrationDefinition, mt as isMysqlFamily, ac as isNeonConnection, Wa as isNotNull, Ua as isNull, bl as isPrimaryKeyConflictError, Nn as isQueryTimeout, mn as isRawEncoding, Ec as isRegionServable, Yn as isRelationsSpec, Ue as isSeedDefinition, ht as isSoftDropSnapshotName, Ye as isSqliteFamily, Ie as isStagingTableName, fe as isTableReactive, Fs as isTransientContention, Pe as isView, S as json, Ya as jsonField, _t as jsonIndex, Fr as jsonPatchAssignments, oe as lag, ue as lead, kl as listRetentionConflicts, jl as listRetentions, Bs as localFirst, Hs as localFirstTables, Na as lt, Pa as lte, Ss as makeEagerFallbackReporter, vc as makeNamespaceBranchExecutor, Zn as many, Qn as manyToMany, ke as materializeFields, f as max, Ve as migration, v as min, pl as missingConflictColumns, fl as missingRequiredColumns, Re as mixin, Aa as neq, nc as nextBranchState, Cl as normaliseTarget, Lr as normalizeJsonPatchValue, Ja as not, eo as notExists, Ia as notInSet, Qa as notInSubquery, pe as numeric, vs as observeDbOp, yo as occurrenceWindowMs, Xn as one, Vr as oneCardinalityMessage, qa as or, b as orderClausesOf, me as paginateBy, At as paginateById, ho as parseChangeKey, Bo as pendingAttributionCount, lc as planBranch, rc as planBranchProvision, ic as planBranchTeardown, uc as planBranchTeardownFor, sc as planNeonBranchProvision, cc as planNeonBranchTeardown, Mt as planVersionedUpdate, $e as pluginRef, r as pluginRefSpecOf, yl as primaryKeyConflictError, fc as provisionBranch, kc as provisionResidentTenant, ai as qualifyTable, i as queryFor, Dt as queryForView, Ne as quoteIdent, vl as raiseChangeListenerCeiling, Se as rank, t as raw, ze as readableByColumns, yt as real, _s as recordDbOp, $o as recordsTable, at as reference, Rn as refuseWrite, wa as registerCoreTables, sr as registerDiscoveredRelations, ko as registerPendingAttribution, or as registerRelations, Al as registerRetention, e as registerTable, Ko as registerWriteRecorder, qn as relations, Ea as requireActors, Be as requireTable, Da as requireTenants, fs as resetDbMetricTagCacheForTests, je as resetSnowflake, Dc as residentPlacement, Qt as resolveActorSnapshot, oc as resolveBranchMechanism, xs as resolveEagerFallbackWarnIntervalMs, Ro as resolveEchoAttribution, g as resolveFullTextIndex, Ke as resolveIdScheme, He as resolveMixinGraph, Tc as resolveTenantHome, ii as resolveTenantNamespace, Il as retentionTtlMsFromEnv, Mr as rowKeyColumns, Nr as rowKeyIdentity, be as rowNumber, Vn as rowSchema, Es as runRetryingTransaction, Ds as runStoreTransaction, xo as runWithWriteAttribution, es as runWriteRecorders, Tl as sameDatabase, ri as sanitizeIdentifierFragment, Gl as scopeKeyOf, pt as selfReference, tn as serializeArraysForWrite, Je as serverOnlyColumns, Sc as setResidencyConfig, Ae as setSchemaChangeSeedHook, Ct as setTenantCreateSeedHook, Cs as settleTransactionExit, Ft as settleVersionedUpdate, et as softDropSnapshotStamp, Ga as spatialPredicate, il as stagingLeftoverReport, rl as stagingLeftovers, tl as stagingNamesOf, el as stagingStaleAfterMs, ol as stampGeneratedId, sl as stampGeneratedIds, Ra as startsWith, zn as storeRefusalOf, Ks as streamTable, we as sum, m as sumOver, Xo as suspendWriteRecorders, Zo as suspendWriteRecordersEffect, Nl as sweepRetention, T as table, pc as teardownBranch, w as text, E as timestamp, Rt as timestampMs, Pt as timestampMsOrNull, ne as union, dt as unionAll, bt as unregisterTable, qo as unregisterWriteRecorder, gl as updateManyRow, hl as upsertRow, jr as upsertUpdatePatch, Ar as upsertUpdateValues, Ot as validateColumnName, _e as validateIndexName, dr as validateRegisteredRelations, rr as validateRelationConfig, s as validateTableName, Et as validateTypeIdPrefix, gt as vector, tt as vectorDistanceToOpclass, Ys as vectorEmbedding, Lt as versionColumnOf, ge as view, o as viewSql, ao as walkLeaves, Tn as wireSafeCause, wo as withCapturedAttribution, Qo as writeRecordersSuspended };