@voltro/database 0.40.0 → 0.42.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, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as p, Gt as m, H as h, Ht as g, I as _, It as v, J as y, Jt as b, K as ee, Kt as x, L as te, Lt as S, M as ne, Mt as re, N as ie, Nt as ae, O as oe, Ot as se, P as ce, Pt as le, Q as ue, R as de, Rt as fe, S as pe, St as me, T as he, Tt as ge, U as _e, Ut as ve, V as ye, Vt as be, W as xe, Wt as Se, X as Ce, Y as we, Yt as Te, Z as Ee, _ as De, _t as Oe, a as ke, at as Ae, b as je, bt as Me, c as Ne, ct as Pe, d as Fe, dt as Ie, et as C, f as Le, ft as Re, g as ze, gt as Be, h as Ve, ht as He, i as Ue, it as We, j as w, jt as Ge, k as Ke, kt as qe, l as Je, lt as Ye, m as Xe, mt as Ze, n as Qe, nt as $e, o as et, ot as tt, p as T, pt as nt, q as rt, qt as E, rt as it, s as at, st as ot, t as st, tt as ct, u as lt, ut, v as dt, vt as ft, w as pt, wt as mt, x as ht, xt as gt, y as _t, yt as vt, z as yt, zt as D } from "./frameworkLiveTables-BS6FuivX.js";
2
- import { timestampMs as bt, timestampMsOrNull as xt } from "./wire.js";
3
- import { Cause as St, Chunk as Ct, Data as wt, Effect as O, Exit as Tt, Metric as k, MetricBoundaries as Et, Option as A, Schedule as Dt, Schema as j, Stream as Ot } from "effect";
4
- import { AsyncLocalStorage as kt } from "node:async_hooks";
5
- import { TransactionConnection as At } from "@effect/sql/SqlClient";
6
- import { ansi as M } from "@voltro/logger";
7
- import { SqlClient as jt } from "@effect/sql";
8
- import { createHash as Mt } from "node:crypto";
1
+ import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as p, Gt as m, H as h, Ht as g, I as _, It as ee, J as v, Jt as y, K as te, Kt as b, L as ne, Lt as x, M as re, Mt as ie, N as ae, Nt as oe, O as se, Ot as ce, P as le, Pt as ue, Q as de, R as fe, Rt as S, S as pe, St as me, T as he, Tt as ge, U as _e, Ut as ve, V as ye, Vt as be, W as xe, Wt as Se, X as Ce, Xt as we, Y as Te, Yt as C, Z as Ee, _ as De, _t as Oe, a as ke, at as Ae, b as je, bt as Me, c as Ne, ct as Pe, d as Fe, dt as Ie, et as Le, f as Re, ft as ze, g as Be, gt as Ve, h as He, ht as Ue, i as We, it as Ge, j as w, jt as Ke, k as qe, kt as Je, l as Ye, lt as Xe, m as Ze, mt as Qe, n as $e, nt as et, o as tt, ot as nt, p as T, pt as rt, q as it, qt as at, rt as ot, s as st, st as ct, t as lt, tt as E, u as ut, ut as dt, v as ft, vt as pt, w as mt, wt as ht, x as gt, xt as _t, y as vt, yt, z as bt, zt as xt } from "./frameworkLiveTables-XPFqj8n3.js";
2
+ import { timestampMs as St, timestampMsOrNull as Ct } from "./wire.js";
3
+ import { Cause as wt, Chunk as Tt, Data as Et, Effect as D, Exit as Dt, Metric as O, MetricBoundaries as Ot, Option as k, Runtime as kt, Schedule as At, Schema as A, Stream as jt } from "effect";
4
+ import { AsyncLocalStorage as Mt } from "node:async_hooks";
5
+ import { TransactionConnection as Nt } from "@effect/sql/SqlClient";
6
+ import { ansi as j } from "@voltro/logger";
7
+ import { SqlClient as Pt } from "@effect/sql";
8
+ import { createHash as Ft } from "node:crypto";
9
9
  //#region src/actorSnapshot.ts
10
- var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n) => {
10
+ var It = (e) => typeof e == "string" && e !== "" ? e : null, Lt = 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 Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
23
23
  }))[0];
24
24
  return r === void 0 ? void 0 : {
25
25
  id: t,
26
- type: Nt(r.kind) ?? n,
27
- displayName: Nt(r.displayName),
28
- email: Nt(r.email)
26
+ type: It(r.kind) ?? n,
27
+ displayName: It(r.displayName),
28
+ email: It(r.email)
29
29
  };
30
30
  } catch {
31
31
  return;
32
32
  }
33
- }, Ft = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", It = (e) => {
33
+ }, Rt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", zt = (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
- }, Lt = (e, t, n) => {
38
- if (!Ft(n) || !t) return e;
39
- let r = It(t);
37
+ }, Bt = (e, t, n) => {
38
+ if (!Rt(n) || !t) return e;
39
+ let r = zt(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 Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
44
44
  Array.isArray(t) && (i[e] = JSON.stringify(t));
45
45
  }
46
46
  return i;
47
- }, Rt = (e, t, n) => {
48
- if (!Ft(n) || !t) return e;
49
- let r = It(t);
47
+ }, Vt = (e, t, n) => {
48
+ if (!Rt(n) || !t) return e;
49
+ let r = zt(t);
50
50
  return r.length === 0 ? e : e.map((e) => {
51
51
  let t;
52
52
  for (let n of r) {
@@ -58,7 +58,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
58
58
  }
59
59
  return t ?? e;
60
60
  });
61
- }, zt = "enc:v1:", Bt = class extends Error {
61
+ }, Ht = "enc:v1:", Ut = class extends Error {
62
62
  _tag = "FieldDecryptionError";
63
63
  table;
64
64
  column;
@@ -66,112 +66,270 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
66
66
  constructor(e) {
67
67
  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;
68
68
  }
69
- }, Vt = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", Ht = (e) => typeof e == "string" && e.startsWith("enc:v1:"), Ut = (e) => {
69
+ }, Wt = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", Gt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), Kt = (e, t) => e.encrypt(JSON.stringify(t)), qt = /* @__PURE__ */ new Set([
70
+ "text",
71
+ "id",
72
+ "reference",
73
+ "enum",
74
+ "uuid",
75
+ "email",
76
+ "url"
77
+ ]), Jt = (e, t, n) => {
78
+ let r = e.decrypt(t), i;
79
+ try {
80
+ i = JSON.parse(r);
81
+ } catch {
82
+ return r;
83
+ }
84
+ return typeof i == "string" ? i : n === void 0 || qt.has(n) ? r : i;
85
+ }, Yt = (e, t, n) => {
86
+ let r = e.decrypt(t);
87
+ try {
88
+ return typeof JSON.parse(r) == "string" ? !1 : n === void 0 || qt.has(n) ? !0 : void 0;
89
+ } catch {
90
+ return !0;
91
+ }
92
+ }, Xt = (e, t) => e.fields[t]?.type, Zt = (e) => {
70
93
  let t = [];
71
94
  for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
72
95
  return t;
73
- }, Wt = (e, t, n) => {
96
+ }, Qt = (e, t, n) => {
74
97
  if (!t) return e;
75
- let r = Ut(t);
98
+ let r = Zt(t);
76
99
  if (r.length === 0) return e;
77
100
  let i = { ...e };
78
101
  for (let e of r) {
79
102
  let r = i[e];
80
- if (!(r == null || Ht(r))) {
103
+ if (!(r == null || Gt(r))) {
81
104
  if (!n) throw Error(`column "${t.tableName ?? "?"}.${e}" is .encrypted() but no field cipher is registered — wire @voltro/plugin-governance's fieldEncryption (key via the Secrets-Resolver)`);
82
- i[e] = n.encrypt(JSON.stringify(r));
105
+ i[e] = Kt(n, r);
83
106
  }
84
107
  }
85
108
  return i;
86
- }, Gt = (e, t, n, r) => {
109
+ }, $t = (e, t, n, r) => {
87
110
  if (!t) return e;
88
- let i = Ut(t);
111
+ let i = Zt(t);
89
112
  if (i.length === 0 || !n) return e;
90
113
  let a = r?.onError ?? "throw", o = t.tableName ?? "?";
91
114
  return e.map((e) => {
92
- let t;
93
- for (let s of i) {
94
- let i = e[s];
95
- if (Ht(i)) {
96
- t ??= { ...e };
115
+ let s;
116
+ for (let c of i) {
117
+ let i = e[c];
118
+ if (Gt(i)) {
119
+ s ??= { ...e };
97
120
  try {
98
- t[s] = JSON.parse(n.decrypt(i));
121
+ s[c] = Jt(n, i, Xt(t, c));
99
122
  } catch (e) {
100
- let n = String(e?.message ?? e);
123
+ let t = String(e?.message ?? e);
101
124
  if (a === "null") {
102
- t[s] = null, r?.warn?.({
125
+ s[c] = null, r?.warn?.({
103
126
  table: o,
104
- column: s,
105
- reason: n
127
+ column: c,
128
+ reason: t
106
129
  });
107
130
  continue;
108
131
  }
109
- throw new Bt({
132
+ throw new Ut({
110
133
  table: o,
111
- column: s,
112
- reason: n
134
+ column: c,
135
+ reason: t
113
136
  });
114
137
  }
115
138
  }
116
139
  }
117
- return t ?? e;
140
+ return s ?? e;
118
141
  });
119
- }, Kt = (e) => {
142
+ }, en = (e) => {
143
+ let t = e;
144
+ for (let e = 0; e < 4 && kt.isFiberFailure(t); e++) t = wt.squash(t[kt.FiberFailureCauseId]);
145
+ return t;
146
+ }, tn = (e) => {
147
+ let t = {}, n = [], r = en(e);
148
+ for (let e = 0; e < 8 && typeof r == "object" && r; e++) {
149
+ let e = r;
150
+ 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.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);
151
+ let i = e.sqlMessage ?? e.detail;
152
+ t.dbMessage === void 0 && typeof i == "string" && (t.dbMessage = i);
153
+ 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;
154
+ (o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = e.cause;
155
+ }
156
+ return n.length > 0 && (t.dbCauseChain = n.join(" ← "), t.dbMessage === void 0 && (t.dbMessage = n[n.length - 1])), t;
157
+ }, nn = /^[A-Za-z_][A-Za-z0-9_$]*$/, M = (e) => e !== void 0 && e.length <= 128 && nn.test(e) ? e : void 0, rn = (e) => e === void 0 ? void 0 : e.split(".").pop() ?? e, N = (e, ...t) => {
158
+ for (let n of t) {
159
+ let t = n.exec(e);
160
+ if (t?.[1] !== void 0) return t[1];
161
+ }
162
+ }, an = (e, t) => {
163
+ 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}`;
164
+ if (n === "23503") {
165
+ let t = M(e.dbConstraint);
166
+ return {
167
+ kind: /is still referenced from table/i.test(o) ? "foreignKeyInUse" : "foreignKey",
168
+ ...t === void 0 ? {} : { constraint: t }
169
+ };
170
+ }
171
+ if (n === "23505") {
172
+ let t = M(e.dbConstraint);
173
+ return {
174
+ kind: "unique",
175
+ ...t === void 0 ? {} : { constraint: t }
176
+ };
177
+ }
178
+ if (n === "23502") {
179
+ let t = M(e.dbColumn);
180
+ return {
181
+ kind: "notNull",
182
+ ...t === void 0 ? {} : { column: t }
183
+ };
184
+ }
185
+ if (n === "23514") {
186
+ let t = M(e.dbConstraint);
187
+ return {
188
+ kind: "check",
189
+ ...t === void 0 ? {} : { constraint: t }
190
+ };
191
+ }
192
+ if (r === 1452 || r === 1451) {
193
+ let e = M(N(o, /CONSTRAINT `([^`]+)`/));
194
+ return {
195
+ kind: r === 1451 ? "foreignKeyInUse" : "foreignKey",
196
+ ...e === void 0 ? {} : { constraint: e }
197
+ };
198
+ }
199
+ if (r === 1062) {
200
+ let e = M(rn(N(o, /for key '([^']+)'/)));
201
+ return {
202
+ kind: "unique",
203
+ ...e === void 0 ? {} : { constraint: e }
204
+ };
205
+ }
206
+ if (r === 1048 || r === 1364) {
207
+ let e = M(N(o, /Column '([^']+)' cannot be null/, /Field '([^']+)' doesn't have a default value/));
208
+ return {
209
+ kind: "notNull",
210
+ ...e === void 0 ? {} : { column: e }
211
+ };
212
+ }
213
+ if (r === 3819 || r === 4025) {
214
+ let e = M(N(o, /Check constraint '([^']+)'/, /CONSTRAINT `([^`]+)` failed/));
215
+ return {
216
+ kind: "check",
217
+ ...e === void 0 ? {} : { constraint: e }
218
+ };
219
+ }
220
+ if (i === 547) {
221
+ let e = N(o, /(?:FOREIGN KEY|REFERENCE) constraint "([^"]+)"/), t = N(o, /CHECK constraint "([^"]+)"/);
222
+ if (t !== void 0 && e === void 0) {
223
+ let e = M(t);
224
+ return {
225
+ kind: "check",
226
+ ...e === void 0 ? {} : { constraint: e }
227
+ };
228
+ }
229
+ let n = /REFERENCE constraint/.test(o), r = M(e);
230
+ return {
231
+ kind: n ? "foreignKeyInUse" : "foreignKey",
232
+ ...r === void 0 ? {} : { constraint: r }
233
+ };
234
+ }
235
+ if (i === 2627 || i === 2601) {
236
+ let e = M(N(o, /(?:UNIQUE KEY|PRIMARY KEY) constraint '([^']+)'/, /index '([^']+)'/));
237
+ return {
238
+ kind: "unique",
239
+ ...e === void 0 ? {} : { constraint: e }
240
+ };
241
+ }
242
+ if (i === 515) {
243
+ let e = M(N(o, /Cannot insert the value NULL into column '([^']+)'/));
244
+ return {
245
+ kind: "notNull",
246
+ ...e === void 0 ? {} : { column: e }
247
+ };
248
+ }
249
+ if (n === "SQLITE_CONSTRAINT_FOREIGNKEY") return { kind: t === "delete" || t === "deleteMany" || t === "hardDelete" ? "foreignKeyInUse" : "foreignKey" };
250
+ if (n === "SQLITE_CONSTRAINT_UNIQUE" || n === "SQLITE_CONSTRAINT_PRIMARYKEY") {
251
+ let e = M(rn(N(o, /UNIQUE constraint failed: ([^,\s]+)/)));
252
+ return {
253
+ kind: "unique",
254
+ ...e === void 0 ? {} : { column: e }
255
+ };
256
+ }
257
+ if (n === "SQLITE_CONSTRAINT_NOTNULL") {
258
+ let e = M(rn(N(o, /NOT NULL constraint failed: ([^,\s]+)/)));
259
+ return {
260
+ kind: "notNull",
261
+ ...e === void 0 ? {} : { column: e }
262
+ };
263
+ }
264
+ if (n === "SQLITE_CONSTRAINT_CHECK") {
265
+ let e = M(N(a, /CHECK constraint failed: (.+)$/));
266
+ return {
267
+ kind: "check",
268
+ ...e === void 0 ? {} : { constraint: e }
269
+ };
270
+ }
271
+ }, on = (e) => {
272
+ let t = an(e)?.kind;
273
+ return t === "foreignKey" || t === "foreignKeyInUse";
274
+ }, sn = (e) => {
275
+ let t = e.dbCode, n = e.dbErrno;
276
+ return t === "57014" || n === 3024 || n === 1969 || t === "ETIMEOUT" || t === "SQLITE_INTERRUPT";
277
+ }, cn = (e) => {
120
278
  let t = (() => {
121
279
  switch (e.type) {
122
280
  case "id":
123
281
  case "reference":
124
282
  case "text":
125
- case "enum": return j.String;
283
+ case "enum": return A.String;
126
284
  case "integer":
127
285
  case "real":
128
- case "decimal": return j.Number;
129
- case "boolean": return j.Boolean;
286
+ case "decimal": return A.Number;
287
+ case "boolean": return A.Boolean;
130
288
  case "timestamp":
131
- case "date": return bt;
132
- case "bigint": return j.BigInt;
133
- case "bytes": return j.Uint8ArrayFromBase64;
134
- case "array": return j.Array(j.Unknown);
135
- case "interval": return j.String;
136
- default: return j.Unknown;
289
+ case "date": return St;
290
+ case "bigint": return A.BigInt;
291
+ case "bytes": return A.Uint8ArrayFromBase64;
292
+ case "array": return A.Array(A.Unknown);
293
+ case "interval": return A.String;
294
+ default: return A.Unknown;
137
295
  }
138
296
  })();
139
- return e.nullable === !0 ? j.NullOr(t) : t;
140
- }, qt = (e, t) => {
297
+ return e.nullable === !0 ? A.NullOr(t) : t;
298
+ }, ln = (e, t) => {
141
299
  let n = new Set(t?.omit ?? []), r = {};
142
- for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = Kt(i));
143
- return j.Struct(r);
144
- }, Jt = (e) => typeof e == "function" ? e : () => e, Yt = (e, t) => ({
300
+ for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = cn(i));
301
+ return A.Struct(r);
302
+ }, un = (e) => typeof e == "function" ? e : () => e, dn = (e, t) => ({
145
303
  kind: "one",
146
- target: Jt(e),
304
+ target: un(e),
147
305
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
148
306
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
149
- }), Xt = (e, t) => ({
307
+ }), fn = (e, t) => ({
150
308
  kind: "many",
151
- target: Jt(e),
309
+ target: un(e),
152
310
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
153
311
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
154
- }), Zt = (e, t) => ({
312
+ }), pn = (e, t) => ({
155
313
  kind: "manyToMany",
156
- target: Jt(e),
157
- through: Jt(t.through),
314
+ target: un(e),
315
+ through: un(t.through),
158
316
  sourceKey: t.sourceKey,
159
317
  targetKey: t.targetKey
160
- }), Qt = {
161
- one: Yt,
162
- many: Xt,
163
- manyToMany: Zt
164
- }, $t = (e, t) => {
318
+ }), mn = {
319
+ one: dn,
320
+ many: fn,
321
+ manyToMany: pn
322
+ }, hn = (e, t) => {
165
323
  let n = typeof e == "function" ? e : () => e;
166
324
  return {
167
325
  source: n,
168
- relations: t(Qt, n())
326
+ relations: t(mn, n())
169
327
  };
170
- }, en = (e) => {
328
+ }, gn = (e) => {
171
329
  if (typeof e != "object" || !e) return !1;
172
330
  let t = e;
173
331
  return typeof t.source != "function" || typeof t.relations != "object" || t.relations === null ? !1 : Object.keys(t.relations).length === 0;
174
- }, tn = (e) => {
332
+ }, _n = (e) => {
175
333
  if (typeof e != "object" || !e) return !1;
176
334
  let t = e;
177
335
  if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
@@ -180,32 +338,32 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
180
338
  let t = e?.kind;
181
339
  return t === "one" || t === "many" || t === "manyToMany";
182
340
  });
183
- }, nn = Yt, rn = Xt, an = Zt, on = (e, t, n) => {
341
+ }, vn = dn, yn = fn, bn = pn, xn = (e, t, n) => {
184
342
  let r = [];
185
343
  for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
186
344
  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>' }.`);
187
345
  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.`);
188
346
  return r[0];
189
- }, sn = (e) => Object.keys(e.fields), N = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), cn = (e) => {
190
- let t = sn(e);
347
+ }, Sn = (e) => Object.keys(e.fields), Cn = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), wn = (e) => {
348
+ let t = Sn(e);
191
349
  return t.length === 0 ? "<none>" : t.join(", ");
192
- }, ln = (e, t, n) => {
350
+ }, Tn = (e, t, n) => {
193
351
  let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
194
352
  if (n.kind === "manyToMany") {
195
353
  let t = n.through();
196
- for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!N(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}': ${cn(t)}.`);
354
+ for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!Cn(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}': ${wn(t)}.`);
197
355
  return;
198
356
  }
199
357
  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.`);
200
- if (n.sourceKey !== void 0 && !N(e, n.sourceKey)) {
201
- let t = N(i, n.sourceKey);
202
- 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}': ${cn(e)}.`));
358
+ if (n.sourceKey !== void 0 && !Cn(e, n.sourceKey)) {
359
+ let t = Cn(i, n.sourceKey);
360
+ 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}': ${wn(e)}.`));
203
361
  }
204
- if (n.foreignKey !== void 0 && !N(i, n.foreignKey)) {
205
- let t = N(e, n.foreignKey);
206
- 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}': ${cn(i)}.`));
362
+ if (n.foreignKey !== void 0 && !Cn(i, n.foreignKey)) {
363
+ let t = Cn(e, n.foreignKey);
364
+ 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}': ${wn(i)}.`));
207
365
  }
208
- }, un = Symbol.for("@voltro/database/relationsRegistry"), dn = globalThis, P = dn[un] ?? (dn[un] = /* @__PURE__ */ new Map()), fn = (e) => {
366
+ }, En = Symbol.for("@voltro/database/relationsRegistry"), Dn = globalThis, P = Dn[En] ?? (Dn[En] = /* @__PURE__ */ new Map()), On = (e) => {
209
367
  let t = e.source(), n = P.get(t.tableName);
210
368
  if (n === void 0) {
211
369
  P.set(t.tableName, new Map(Object.entries(e.relations)));
@@ -218,14 +376,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
218
376
  n.set(r, i);
219
377
  }
220
378
  }
221
- }, pn = (e) => {
379
+ }, kn = (e) => {
222
380
  let t = 0;
223
- for (let n of Object.values(e)) tn(n) && (fn(n), t += 1);
381
+ for (let n of Object.values(e)) _n(n) && (On(n), t += 1);
224
382
  return t;
225
- }, mn = (e) => {
383
+ }, An = (e) => {
226
384
  let t = P.get(e);
227
385
  if (t !== void 0) return Object.fromEntries(t);
228
- }, hn = (e, t) => P.get(e)?.get(t), gn = () => {
386
+ }, jn = (e, t) => P.get(e)?.get(t), Mn = () => {
229
387
  let e = [];
230
388
  for (let [t, n] of P) for (let [r, i] of n) e.push({
231
389
  source: t,
@@ -233,18 +391,18 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
233
391
  relation: i
234
392
  });
235
393
  return e;
236
- }, _n = () => {
394
+ }, Nn = () => {
237
395
  for (let [e, t] of P) {
238
396
  let n = p(e);
239
- if (n !== void 0) for (let [e, r] of t) ln(n, e, r);
397
+ if (n !== void 0) for (let [e, r] of t) Tn(n, e, r);
240
398
  }
241
- }, vn = () => {
399
+ }, Pn = () => {
242
400
  P.clear();
243
- }, yn = 4, bn = (e) => Object.keys(e.fields), xn = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Sn = (e, t) => {
401
+ }, Fn = 4, In = (e) => Object.keys(e.fields), Ln = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Rn = (e, t) => {
244
402
  let n = [];
245
403
  for (let [r, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && n.push(r);
246
404
  return n;
247
- }, Cn = (e, t) => {
405
+ }, zn = (e, t) => {
248
406
  let n = [];
249
407
  for (let r of t) {
250
408
  if (r.source !== e) continue;
@@ -261,7 +419,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
261
419
  } catch {
262
420
  continue;
263
421
  }
264
- if (!xn(e, t.sourceKey)) continue;
422
+ if (!Ln(e, t.sourceKey)) continue;
265
423
  n.push({
266
424
  table: e.tableName,
267
425
  foreignKey: t.sourceKey,
@@ -270,24 +428,24 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
270
428
  continue;
271
429
  }
272
430
  if (t.sourceKey !== void 0) continue;
273
- let a = Sn(i, e), o = t.foreignKey ?? (a.length === 1 ? a[0] : void 0);
274
- o === void 0 || !xn(i, o) || n.push({
431
+ let a = Rn(i, e), o = t.foreignKey ?? (a.length === 1 ? a[0] : void 0);
432
+ o === void 0 || !Ln(i, o) || n.push({
275
433
  table: i.tableName,
276
434
  foreignKey: o,
277
435
  parentKey: "id"
278
436
  });
279
437
  }
280
438
  return n;
281
- }, wn = (e, t) => {
439
+ }, Bn = (e, t) => {
282
440
  let n = [];
283
- for (let r of t) if (r.tableName !== e) for (let t of Sn(r, e)) n.push({
441
+ for (let r of t) if (r.tableName !== e) for (let t of Rn(r, e)) n.push({
284
442
  table: r.tableName,
285
443
  foreignKey: t,
286
444
  parentKey: "id"
287
445
  });
288
446
  return n;
289
- }, Tn = (e) => `${e.table}\u0000${e.hops.map((e) => `${e.table}.${e.foreignKey}<-${e.parentKey}`).join("|")}`, En = (e) => {
290
- let t = e.tables ?? h(), n = e.relations ?? gn(), r = e.maxDepth ?? 4, i = new Set(e.exclude ?? []), a = new Map(t.map((e) => [e.tableName, e])), o = [];
447
+ }, Vn = (e) => `${e.table}\u0000${e.hops.map((e) => `${e.table}.${e.foreignKey}<-${e.parentKey}`).join("|")}`, Hn = (e) => {
448
+ let t = e.tables ?? h(), n = e.relations ?? Mn(), r = e.maxDepth ?? 4, i = new Set(e.exclude ?? []), a = new Map(t.map((e) => [e.tableName, e])), o = [];
291
449
  if (!a.has(e.subjectTable)) return {
292
450
  subjectTable: e.subjectTable,
293
451
  paths: [],
@@ -302,11 +460,11 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
302
460
  hops: [],
303
461
  depth: 0,
304
462
  via: "relation"
305
- }, c = [s], l = /* @__PURE__ */ new Set([Tn(s)]), u = /* @__PURE__ */ new Set(), d = [s];
463
+ }, c = [s], l = /* @__PURE__ */ new Set([Vn(s)]), u = /* @__PURE__ */ new Set(), d = [s];
306
464
  for (let e = 1; e <= r; e++) {
307
465
  let r = [];
308
466
  for (let a of d) {
309
- let s = Cn(a.table, n), d = wn(a.table, t), f = [...s.map((e) => [e, "relation"]), ...d.map((e) => [e, "reference"])];
467
+ let s = zn(a.table, n), d = Bn(a.table, t), f = [...s.map((e) => [e, "relation"]), ...d.map((e) => [e, "reference"])];
310
468
  for (let [t, n] of f) {
311
469
  if (i.has(t.table)) {
312
470
  o.push({
@@ -324,7 +482,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
324
482
  hops: [...a.hops, t],
325
483
  depth: e,
326
484
  via: n
327
- }, f = Tn(d);
485
+ }, f = Vn(d);
328
486
  l.has(f) || (l.add(f), c.push(d), r.push(d));
329
487
  }
330
488
  }
@@ -334,7 +492,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
334
492
  }
335
493
  d = r;
336
494
  }
337
- for (let e of d) (Cn(e.table, n).length > 0 || wn(e.table, t).length > 0) && o.push({
495
+ for (let e of d) (zn(e.table, n).length > 0 || Bn(e.table, t).length > 0) && o.push({
338
496
  kind: "depth-truncated",
339
497
  table: e.table,
340
498
  detail: `stopped at maxDepth ${r}; tables linked FROM '${e.table}' were not explored`
@@ -343,14 +501,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
343
501
  for (let n of t) f.has(n.tableName) || i.has(n.tableName) || o.push({
344
502
  kind: "unreachable",
345
503
  table: n.tableName,
346
- 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: ${bn(n).join(", ")}`
504
+ 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: ${In(n).join(", ")}`
347
505
  });
348
506
  return {
349
507
  subjectTable: e.subjectTable,
350
508
  paths: c,
351
509
  limitations: o
352
510
  };
353
- }, Dn = (e) => {
511
+ }, Un = (e) => {
354
512
  let t = [`subject graph · ${e.subjectTable} · ${e.paths.length} table(s) reachable`];
355
513
  for (let n of e.paths) {
356
514
  let r = n.hops.length === 0 ? `${e.subjectTable} (the subject row itself)` : [e.subjectTable, ...n.hops.map((e) => `${e.table}.${e.foreignKey}`)].join(" → ");
@@ -358,7 +516,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
358
516
  }
359
517
  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");
360
518
  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");
361
- }, On = (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, kn = (e) => {
519
+ }, Wn = (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, Gn = (e) => {
362
520
  if (e == null || typeof e != "string") return e;
363
521
  let t = e.trim();
364
522
  if (t.length === 0) return e;
@@ -369,7 +527,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
369
527
  } catch {
370
528
  return e;
371
529
  }
372
- }, An = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, jn = (e) => {
530
+ }, Kn = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, qn = (e) => {
373
531
  if (e == null || e instanceof Date) return e;
374
532
  if (typeof e == "string") {
375
533
  let t = new Date(e);
@@ -380,19 +538,19 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
380
538
  return isNaN(t.getTime()) ? e : t;
381
539
  }
382
540
  return e;
383
- }, Mn = (e, t, n) => {
541
+ }, Jn = (e, t, n) => {
384
542
  if (e == null) return e;
385
543
  switch (t) {
386
- case "boolean": return n === "postgres" ? e : On(e);
544
+ case "boolean": return n === "postgres" ? e : Wn(e);
387
545
  case "json":
388
- case "array": return n === "postgres" ? e : kn(e);
546
+ case "array": return n === "postgres" ? e : Gn(e);
389
547
  case "timestamp":
390
- case "date": return n === "sqlite" || n === "turso" ? jn(e) : e;
548
+ case "date": return n === "sqlite" || n === "turso" ? qn(e) : e;
391
549
  case "decimal":
392
- case "bigint": return An(e);
550
+ case "bigint": return Kn(e);
393
551
  default: return e;
394
552
  }
395
- }, Nn = (e, t, n) => {
553
+ }, Yn = (e, t, n) => {
396
554
  if (e.length === 0) return e;
397
555
  let r = p(t);
398
556
  if (r === void 0) return e;
@@ -403,36 +561,36 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
403
561
  });
404
562
  return e.map((e) => {
405
563
  let t = { ...e };
406
- for (let { key: e, type: r } of a) e in t && (t[e] = Mn(t[e], r, n));
564
+ for (let { key: e, type: r } of a) e in t && (t[e] = Jn(t[e], r, n));
407
565
  return t;
408
566
  });
409
- }, Pn = (e, t) => {
567
+ }, Xn = (e, t) => {
410
568
  if (e == null) return e;
411
569
  switch (t) {
412
570
  case "json":
413
571
  case "array": return typeof e == "string" ? e : JSON.stringify(e);
414
572
  default: return e;
415
573
  }
416
- }, Fn = (e, t, n = ["json", "array"]) => {
574
+ }, Zn = (e, t, n = ["json", "array"]) => {
417
575
  let r = p(t);
418
576
  if (r === void 0) return e;
419
577
  let i = r.fields, a = null;
420
578
  for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
421
- let n = Pn(e[t], r.type);
579
+ let n = Xn(e[t], r.type);
422
580
  n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
423
581
  }
424
582
  return a ?? e;
425
- }, In = class extends Error {
583
+ }, Qn = class extends Error {
426
584
  _tag = "EagerCardinalityError";
427
585
  constructor(e) {
428
586
  super(e), this.name = "EagerCardinalityError";
429
587
  }
430
- }, Ln = (e) => {
588
+ }, $n = (e) => {
431
589
  let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
432
590
  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.");
433
- }, Rn = async (e, t, n, r) => {
591
+ }, er = async (e, t, n, r) => {
434
592
  if (e.length === 0) return e;
435
- let i = mn(n.tableName);
593
+ let i = An(n.tableName);
436
594
  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?`);
437
595
  let a = e.map((e) => ({ ...e }));
438
596
  for (let [e, o] of Object.entries(t)) {
@@ -441,36 +599,36 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
441
599
  let t = Object.keys(i).join(", ") || "<none>";
442
600
  throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
443
601
  }
444
- ln(n, e, t), await zn(a, e, t, o === !0 ? {} : o, n, r);
602
+ Tn(n, e, t), await tr(a, e, t, o === !0 ? {} : o, n, r);
445
603
  }
446
604
  return a;
447
- }, zn = async (e, t, n, r, i, a) => {
605
+ }, tr = async (e, t, n, r, i, a) => {
448
606
  switch (n.kind) {
449
607
  case "one":
450
- await Bn(e, t, n, r, i, a);
608
+ await nr(e, t, n, r, i, a);
451
609
  return;
452
610
  case "many":
453
- await Vn(e, t, n, r, i, a);
611
+ await rr(e, t, n, r, i, a);
454
612
  return;
455
613
  case "manyToMany":
456
- await Un(e, t, n, r, i, a);
614
+ await ar(e, t, n, r, i, a);
457
615
  return;
458
616
  }
459
- }, Bn = async (e, t, n, r, i, a) => {
460
- let o = n.target(), s = n.sourceKey ?? Wn(i, o.tableName);
617
+ }, nr = async (e, t, n, r, i, a) => {
618
+ let o = n.target(), s = n.sourceKey ?? or(i, o.tableName);
461
619
  if (s !== void 0) {
462
- let n = Gn(e, s), i = n.length === 0 ? [] : await Kn(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
620
+ let n = sr(e, s), i = n.length === 0 ? [] : await cr(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
463
621
  for (let n of e) {
464
622
  let e = n[s];
465
623
  n[t] = e == null ? null : c.get(e) ?? null;
466
624
  }
467
- await qn(i, r.with, o, a);
625
+ await lr(i, r.with, o, a);
468
626
  return;
469
627
  }
470
- let c = n.foreignKey ?? on(o, i.tableName, t), l = n.sourceKey ?? "id", u = Gn(e, l), d = u.length === 0 ? [] : await Kn(o, c, u, r, a), f = /* @__PURE__ */ new Map();
628
+ let c = n.foreignKey ?? xn(o, i.tableName, t), l = n.sourceKey ?? "id", u = sr(e, l), d = u.length === 0 ? [] : await cr(o, c, u, r, a), f = /* @__PURE__ */ new Map();
471
629
  for (let e of d) {
472
630
  let n = e[c];
473
- if (f.has(n)) throw new In(Ln({
631
+ if (f.has(n)) throw new Qn($n({
474
632
  relationName: t,
475
633
  sourceTableName: i.tableName,
476
634
  targetTableName: o.tableName,
@@ -483,9 +641,9 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
483
641
  let e = n[l];
484
642
  n[t] = e == null ? null : f.get(e) ?? null;
485
643
  }
486
- await qn(d, r.with, o, a);
487
- }, Vn = async (e, t, n, r, i, a) => {
488
- let o = n.target(), s = n.foreignKey ?? on(o, i.tableName, t), c = n.sourceKey ?? "id", l = Gn(e, c), u = Hn(r), d = l.length === 0 ? [] : await Kn(o, s, l, u, a), f = /* @__PURE__ */ new Map();
644
+ await lr(d, r.with, o, a);
645
+ }, rr = async (e, t, n, r, i, a) => {
646
+ let o = n.target(), s = n.foreignKey ?? xn(o, i.tableName, t), c = n.sourceKey ?? "id", l = sr(e, c), u = ir(r), d = l.length === 0 ? [] : await cr(o, s, l, u, a), f = /* @__PURE__ */ new Map();
489
647
  for (let e of d) {
490
648
  let t = e[s], n = f.get(t);
491
649
  n ? n.push(e) : f.set(t, [e]);
@@ -501,12 +659,12 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
501
659
  let e = n[c];
502
660
  n[t] = f.get(e) ?? [];
503
661
  }
504
- await qn(d, r.with, o, a);
505
- }, Hn = (e) => {
662
+ await lr(d, r.with, o, a);
663
+ }, ir = (e) => {
506
664
  let { limit: t, offset: n, ...r } = e;
507
665
  return r;
508
- }, Un = async (e, t, n, r, i, a) => {
509
- let o = n.target(), s = n.through(), c = Gn(e, "id");
666
+ }, ar = async (e, t, n, r, i, a) => {
667
+ let o = n.target(), s = n.through(), c = sr(e, "id");
510
668
  if (c.length === 0) {
511
669
  for (let n of e) n[t] = [];
512
670
  return;
@@ -527,8 +685,8 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
527
685
  for (let n of e) n[t] = [];
528
686
  return;
529
687
  }
530
- let f = await Kn(o, "id", Gn(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
531
- await qn(f, r.with, o, a);
688
+ let f = await cr(o, "id", sr(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
689
+ await lr(f, r.with, o, a);
532
690
  let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
533
691
  for (let e of d) {
534
692
  let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
@@ -540,16 +698,16 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
540
698
  o ? o.push(a) : h.set(t, [a]);
541
699
  }
542
700
  for (let n of e) n[t] = h.get(n.id) ?? [];
543
- }, Wn = (e, t) => {
701
+ }, or = (e, t) => {
544
702
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
545
- }, Gn = (e, t) => {
703
+ }, sr = (e, t) => {
546
704
  let n = /* @__PURE__ */ new Set();
547
705
  for (let r of e) {
548
706
  let e = r[t];
549
707
  e != null && n.add(e);
550
708
  }
551
709
  return [...n];
552
- }, Kn = (e, t, n, r, i) => {
710
+ }, cr = (e, t, n, r, i) => {
553
711
  let a = {
554
712
  column: t,
555
713
  op: "in",
@@ -563,50 +721,50 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
563
721
  skip: r.offset,
564
722
  projection: void 0
565
723
  });
566
- }, qn = async (e, t, n, r) => {
567
- t !== void 0 && e.length !== 0 && (await Rn(e, t, n, r)).forEach((t, n) => {
724
+ }, lr = async (e, t, n, r) => {
725
+ t !== void 0 && e.length !== 0 && (await er(e, t, n, r)).forEach((t, n) => {
568
726
  let r = e[n];
569
727
  for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
570
728
  });
571
- }, Jn = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, Yn = class extends Error {
729
+ }, ur = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, dr = class extends Error {
572
730
  _tag = "TenantNamespaceUnresolved";
573
731
  constructor(e) {
574
732
  super(e), this.name = "TenantNamespaceUnresolved";
575
733
  }
576
- }, Xn = class extends Error {
734
+ }, fr = class extends Error {
577
735
  _tag = "TenantNamespaceInvalid";
578
736
  constructor(e) {
579
737
  super(e), this.name = "TenantNamespaceInvalid";
580
738
  }
581
- }, Zn = 63, Qn = "tenant_", $n = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), er = (e) => {
582
- if (e == null || e === "") throw new Yn("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.");
583
- let t = $n(e);
584
- if (t.replace(/_/g, "") === "") throw new Xn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
585
- let n = `${Qn}${t}`;
586
- if (n.length > Zn) throw new Xn(`namespace '${n}' for tenant '${e}' exceeds the ${Zn}-byte identifier limit. Use a shorter tenant id.`);
739
+ }, pr = 63, mr = "tenant_", hr = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), gr = (e) => {
740
+ if (e == null || e === "") throw new dr("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.");
741
+ let t = hr(e);
742
+ if (t.replace(/_/g, "") === "") throw new fr(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
743
+ let n = `${mr}${t}`;
744
+ if (n.length > pr) throw new fr(`namespace '${n}' for tenant '${e}' exceeds the ${pr}-byte identifier limit. Use a shorter tenant id.`);
587
745
  return n;
588
- }, tr = (e, t) => e === null ? t : `${e}.${t}`, nr = /* @__PURE__ */ new Set(["timestamp", "date"]), rr = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, ir = (e, t) => {
589
- if (e === void 0 || t == null || !nr.has(e) || t instanceof Date) return t;
746
+ }, _r = (e, t) => e === null ? t : `${e}.${t}`, vr = /* @__PURE__ */ new Set(["timestamp", "date"]), yr = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, br = (e, t) => {
747
+ if (e === void 0 || t == null || !vr.has(e) || t instanceof Date) return t;
590
748
  if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
591
- if (typeof t == "string" && rr.test(t)) {
749
+ if (typeof t == "string" && yr.test(t)) {
592
750
  let e = new Date(t);
593
751
  return Number.isNaN(e.getTime()) ? t : e;
594
752
  }
595
753
  return t;
596
- }, ar = (e, t) => e === void 0 || !nr.has(e) ? t : t.map((t) => ir(e, t)), or = (e, t) => {
754
+ }, xr = (e, t) => e === void 0 || !vr.has(e) ? t : t.map((t) => br(e, t)), Sr = (e, t) => {
597
755
  let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
598
756
  for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
599
757
  return t`${i}`;
600
- }, sr = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), F = (e, t, n = null, r) => {
758
+ }, Cr = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), F = (e, t, n = null, r) => {
601
759
  if ("not" in e) return t`NOT (${F(e.not, t, n, r)})`;
602
760
  if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => F(e, t, n, r)));
603
761
  if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => F(e, t, n, r)));
604
762
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
605
- let r = e, i = vr(r.subquery, t, n);
763
+ let r = e, i = Pr(r.subquery, t, n);
606
764
  return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
607
765
  }
608
766
  if (e.op === "exists" || e.op === "not-exists") {
609
- let r = e, i = vr(r.subquery, t, n);
767
+ let r = e, i = Pr(r.subquery, t, n);
610
768
  return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
611
769
  }
612
770
  let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
@@ -619,7 +777,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
619
777
  mssql: () => t.unsafe(T(i.column, o, "mssql", { numeric: !0 })),
620
778
  sqlite: () => t.unsafe(T(i.column, o, "sqlite", { numeric: !0 })),
621
779
  orElse: () => t.unsafe(T(i.column, o, "postgres", { numeric: !0 }))
622
- }), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, m = (e) => s ? Number(e) : e, h = s || r === void 0 ? void 0 : p(r)?.fields?.[i.column]?.type, g = (e) => ir(h, e);
780
+ }), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, m = (e) => s ? Number(e) : e, h = s || r === void 0 ? void 0 : p(r)?.fields?.[i.column]?.type, g = (e) => br(h, e);
623
781
  switch (i.op) {
624
782
  case "eq": return t`${u} = ${f(g(i.value))}`;
625
783
  case "neq": return t`${u} <> ${f(g(i.value))}`;
@@ -636,7 +794,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
636
794
  return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
637
795
  }
638
796
  case "contains": {
639
- let e = `%${sr(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
797
+ let e = `%${Cr(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
640
798
  return t.onDialectOrElse({
641
799
  mysql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
642
800
  mssql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
@@ -645,7 +803,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
645
803
  });
646
804
  }
647
805
  case "startsWith": {
648
- let e = `${sr(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
806
+ let e = `${Cr(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
649
807
  return t.onDialectOrElse({
650
808
  mysql: () => t`${u} LIKE ${e}`,
651
809
  orElse: () => t`${u} LIKE ${e} ESCAPE '\\'`
@@ -693,13 +851,13 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
693
851
  });
694
852
  }
695
853
  }
696
- }, cr = (e, t) => {
854
+ }, wr = (e, t) => {
697
855
  let n = [];
698
856
  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}`);
699
- }, lr = (e, t) => t.csv(e.map((e) => {
857
+ }, Tr = (e, t) => t.csv(e.map((e) => {
700
858
  let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
701
859
  if (e.op.startsWith("window-")) {
702
- let r = cr(e.window ?? {}, t);
860
+ let r = wr(e.window ?? {}, t);
703
861
  switch (e.op) {
704
862
  case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
705
863
  case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
@@ -723,43 +881,43 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
723
881
  return t`${t(e.column)} AS ${t(e.alias)}`;
724
882
  default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
725
883
  }
726
- })), ur = (e) => `[${e.join(",")}]`, dr = (e, t) => {
884
+ })), Er = (e) => `[${e.join(",")}]`, Dr = (e, t) => {
727
885
  if (e.queryVector === void 0) return null;
728
- let n = t(e.column), r = ur(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
886
+ let n = t(e.column), r = Er(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
729
887
  return t.onDialectOrElse({
730
888
  mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
731
889
  mssql: () => t`NULL`,
732
890
  sqlite: () => t`NULL`,
733
891
  orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
734
892
  });
735
- }, fr = (e, t) => {
893
+ }, Or = (e, t) => {
736
894
  let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
737
895
  return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
738
- }, pr = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, mr = (e, t) => t`${t(`${e.indexName}_tsv`)}`, hr = (e, t) => `${t}_${e.indexName}_fts`, gr = (e, t, n) => {
739
- let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${sr(e.query)}%`;
896
+ }, kr = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Ar = (e, t) => t`${t(`${e.indexName}_tsv`)}`, jr = (e, t) => `${t}_${e.indexName}_fts`, Mr = (e, t, n) => {
897
+ let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${Cr(e.query)}%`;
740
898
  return n.onDialectOrElse({
741
899
  mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
742
900
  sqlite: () => {
743
- let r = n(hr(e, t));
901
+ let r = n(jr(e, t));
744
902
  return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
745
903
  },
746
904
  mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
747
- orElse: () => n`${mr(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
905
+ orElse: () => n`${Ar(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
748
906
  });
749
- }, _r = (e, t, n) => {
750
- let r = `%${sr(e.query)}%`;
907
+ }, Nr = (e, t, n) => {
908
+ let r = `%${Cr(e.query)}%`;
751
909
  return n.onDialectOrElse({
752
910
  mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
753
911
  sqlite: () => {
754
- let r = n(hr(e, t));
912
+ let r = n(jr(e, t));
755
913
  return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
756
914
  },
757
915
  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}`),
758
- orElse: () => n`ts_rank(${mr(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
916
+ orElse: () => n`ts_rank(${Ar(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
759
917
  });
760
- }, vr = (e, t, n = null) => {
918
+ }, Pr = (e, t, n = null) => {
761
919
  if (e.setOp && e.setOp.queries.length >= 2) {
762
- 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`(${vr(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
920
+ 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`(${Pr(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
763
921
  if (w(e).length > 0 && a.push(t` ORDER BY ${t.csv(w(e).map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
764
922
  if (!Number.isInteger(e.take) || e.take < 0) throw Error(`compileSelect: invalid take ${e.take}`);
765
923
  a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
@@ -770,7 +928,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
770
928
  }
771
929
  return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
772
930
  }
773
- let r = e.annClause === void 0 ? null : dr(e.annClause, t);
931
+ let r = e.annClause === void 0 ? null : Dr(e.annClause, t);
774
932
  e.spatialClause !== void 0 && t.onDialectOrElse({
775
933
  mysql: () => {
776
934
  throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
@@ -783,57 +941,57 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
783
941
  },
784
942
  orElse: () => t``
785
943
  });
786
- let i = e.spatialClause?.projectAs === void 0 ? null : fr(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? lr(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 ? _r(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({
944
+ let i = e.spatialClause?.projectAs === void 0 ? null : Or(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? Tr(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 ? Nr(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({
787
945
  orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
788
946
  mysql: () => t`DISTINCT `,
789
947
  mssql: () => t`DISTINCT `,
790
948
  sqlite: () => t`DISTINCT `
791
- }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(tr(n, e.table))}` : t`${t(tr(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
949
+ }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(_r(n, e.table))}` : t`${t(_r(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
792
950
  let r = e.kind === "inner" ? "INNER" : "LEFT";
793
- return t` ${t.unsafe(r)} JOIN ${t(tr(n, e.table))} AS ${t(e.alias)} ON ${F(e.on, t, n)}`;
794
- }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : gr(c, e.table, t), _ = [e.predicate ? F(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), v = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, y = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, b = e.having ? t` HAVING ${F(e.having, t, n, e.table)}` : t``, ee = e.skip !== void 0, x = [];
795
- r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${pr(e.spatialClause, t)} DESC` : t`${pr(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
796
- for (let n of w(e)) x.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
797
- let te = x.length > 0 ? t` ORDER BY ${t.csv(x)}` : ee ? t.onDialectOrElse({
951
+ return t` ${t.unsafe(r)} JOIN ${t(_r(n, e.table))} AS ${t(e.alias)} ON ${F(e.on, t, n)}`;
952
+ }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Mr(c, e.table, t), _ = [e.predicate ? F(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), ee = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, y = e.having ? t` HAVING ${F(e.having, t, n, e.table)}` : t``, te = e.skip !== void 0, b = [];
953
+ r !== null && b.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && b.push(e.spatialClause.order === "desc" ? t`${kr(e.spatialClause, t)} DESC` : t`${kr(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && b.push(t`${l} DESC`);
954
+ for (let n of w(e)) b.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
955
+ let ne = b.length > 0 ? t` ORDER BY ${t.csv(b)}` : te ? t.onDialectOrElse({
798
956
  mssql: () => t` ORDER BY (SELECT NULL)`,
799
957
  orElse: () => t``
800
- }) : t``, S = (e) => {
958
+ }) : t``, x = (e) => {
801
959
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
802
960
  return t.unsafe(String(e));
803
- }, ne = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${vr(e.descriptor, t, n)})`), re = (e.ctes ?? []).some((e) => e.recursive === !0), ie = ne.length > 0 ? t`WITH ${t.unsafe(re ? "RECURSIVE " : "")}${t.csv(ne)} ` : t``;
961
+ }, re = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${Pr(e.descriptor, t, n)})`), ie = (e.ctes ?? []).some((e) => e.recursive === !0), ae = re.length > 0 ? t`WITH ${t.unsafe(ie ? "RECURSIVE " : "")}${t.csv(re)} ` : t``;
804
962
  return t.onDialectOrElse({
805
963
  mssql: () => {
806
- let n = e.take !== void 0 && !ee ? t`TOP ${S(e.take)} ` : t``, r = ee ? t` OFFSET ${S(e.skip)} ROWS FETCH NEXT ${S(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
807
- return t`${ie}SELECT ${n}${f}${d} FROM ${h}${v}${y}${b}${te}${r}`;
964
+ let n = e.take !== void 0 && !te ? t`TOP ${x(e.take)} ` : t``, r = te ? t` OFFSET ${x(e.skip)} ROWS FETCH NEXT ${x(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
965
+ return t`${ae}SELECT ${n}${f}${d} FROM ${h}${ee}${v}${y}${ne}${r}`;
808
966
  },
809
967
  orElse: () => {
810
- let n = e.take === void 0 ? t`` : t` LIMIT ${S(e.take)}`, r = ee ? t` OFFSET ${S(e.skip)}` : t``;
811
- return t`${ie}SELECT ${f}${d} FROM ${h}${v}${y}${b}${te}${n}${r}`;
968
+ let n = e.take === void 0 ? t`` : t` LIMIT ${x(e.take)}`, r = te ? t` OFFSET ${x(e.skip)}` : t``;
969
+ return t`${ae}SELECT ${f}${d} FROM ${h}${ee}${v}${y}${ne}${n}${r}`;
812
970
  }
813
971
  });
814
- }, yr = (e, t, n) => {
972
+ }, Fr = (e, t, n) => {
815
973
  if (e.eager === void 0) return null;
816
- let r = Sr(e.table, e.eager, e.sourceTable);
974
+ let r = Rr(e.table, e.eager, e.sourceTable);
817
975
  if (r === null) return null;
818
- let i = kr(n, e, r, Or(t, n));
976
+ let i = Gr(n, e, r, Wr(t, n));
819
977
  return i === null ? null : {
820
978
  fragment: i,
821
- decode: Mr(r, n)
979
+ decode: Jr(r, n)
822
980
  };
823
- }, br = (e) => e.relation.kind === "one" && e.fkSide === "target", xr = (e) => ({
981
+ }, Ir = (e) => e.relation.kind === "one" && e.fkSide === "target", Lr = (e) => ({
824
982
  ...e,
825
983
  branch: {
826
984
  ...e.branch,
827
985
  limit: 2
828
986
  }
829
- }), Sr = (e, t, n) => {
830
- let r = n ?? y(e), i = mn(e);
987
+ }), Rr = (e, t, n) => {
988
+ let r = n ?? v(e), i = An(e);
831
989
  if (i === void 0) return null;
832
990
  let a = [];
833
991
  for (let [e, n] of Object.entries(t)) {
834
992
  let t = i[e];
835
993
  if (t === void 0) return null;
836
- let o = Cr(e, t, r, n === !0 ? {} : n);
994
+ let o = zr(e, t, r, n === !0 ? {} : n);
837
995
  if (o === null) return null;
838
996
  a.push(o);
839
997
  }
@@ -841,30 +999,30 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
841
999
  table: r,
842
1000
  children: a
843
1001
  };
844
- }, Cr = (e, t, n, r) => {
1002
+ }, zr = (e, t, n, r) => {
845
1003
  let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
846
1004
  if (t.kind === "manyToMany") o = t.targetKey, s = "target";
847
1005
  else if (t.kind === "one") {
848
- let r = t.sourceKey ?? Dr(n, i.tableName);
1006
+ let r = t.sourceKey ?? Ur(n, i.tableName);
849
1007
  if (r !== void 0) o = r, s = "source";
850
1008
  else try {
851
- o = t.foreignKey ?? on(i, n.tableName, e), s = "target";
1009
+ o = t.foreignKey ?? xn(i, n.tableName, e), s = "target";
852
1010
  } catch {
853
1011
  return null;
854
1012
  }
855
1013
  } else try {
856
- o = t.foreignKey ?? on(i, n.tableName, e), s = "target";
1014
+ o = t.foreignKey ?? xn(i, n.tableName, e), s = "target";
857
1015
  } catch {
858
1016
  return null;
859
1017
  }
860
1018
  let c = r.with === void 0 ? [] : (() => {
861
- let e = mn(i.tableName);
1019
+ let e = An(i.tableName);
862
1020
  if (e === void 0 && Object.keys(r.with).length > 0) return null;
863
1021
  let t = [];
864
1022
  for (let [n, a] of Object.entries(r.with)) {
865
1023
  let r = e?.[n];
866
1024
  if (r === void 0) return null;
867
- let o = Cr(n, r, i, a === !0 ? {} : a);
1025
+ let o = zr(n, r, i, a === !0 ? {} : a);
868
1026
  if (o === null) return null;
869
1027
  t.push(o);
870
1028
  }
@@ -880,9 +1038,9 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
880
1038
  fkSide: s,
881
1039
  branch: r,
882
1040
  children: c,
883
- junction: wr(t, r)
1041
+ junction: Br(t, r)
884
1042
  };
885
- }, wr = (e, t) => {
1043
+ }, Br = (e, t) => {
886
1044
  if (e.kind !== "manyToMany" || t.junction === void 0) return;
887
1045
  let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
888
1046
  return {
@@ -894,35 +1052,35 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
894
1052
  return t !== void 0 && (t.type === "timestamp" || t.type === "date");
895
1053
  })
896
1054
  };
897
- }, Tr = (e) => `__j_${e}`, Er = "__j", Dr = (e, t) => {
1055
+ }, Vr = (e) => `__j_${e}`, Hr = "__j", Ur = (e, t) => {
898
1056
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
899
- }, Or = (e, t) => {
1057
+ }, Wr = (e, t) => {
900
1058
  let n = 0;
901
1059
  return {
902
1060
  sql: e,
903
1061
  dialect: t,
904
1062
  nextAlias: () => `__a${n++}`
905
1063
  };
906
- }, kr = (e, t, n, r) => {
1064
+ }, Gr = (e, t, n, r) => {
907
1065
  switch (e) {
908
- case "postgres": return Fr(t, n, r);
1066
+ case "postgres": return Zr(t, n, r);
909
1067
  case "sqlite":
910
- case "turso": return Ur(t, n, r);
1068
+ case "turso": return ai(t, n, r);
911
1069
  case "mysql":
912
- case "mariadb": return $r(t, n, r);
913
- case "mssql": return oi(t, n, r);
1070
+ case "mariadb": return hi(t, n, r);
1071
+ case "mssql": return Si(t, n, r);
914
1072
  }
915
- }, Ar = (e, t) => t === "mssql" && !jr.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), jr = /(?:Z|[+-]\d{2}:?\d{2})$/, Mr = (e, t) => {
916
- let n = Nr(e.table, e.children, t);
1073
+ }, Kr = (e, t) => t === "mssql" && !qr.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), qr = /(?:Z|[+-]\d{2}:?\d{2})$/, Jr = (e, t) => {
1074
+ let n = Yr(e.table, e.children, t);
917
1075
  return (e) => e.map((e) => {
918
1076
  let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
919
1077
  return n(r);
920
1078
  });
921
- }, Nr = (e, t, n) => {
1079
+ }, Yr = (e, t, n) => {
922
1080
  let r = [];
923
1081
  for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
924
1082
  let i = t.map((e) => {
925
- let t = Nr(e.target, e.children, n), r = e.relation.kind === "one", i = br(e), a = i ? Ln({
1083
+ let t = Yr(e.target, e.children, n), r = e.relation.kind === "one", i = Ir(e), a = i ? $n({
926
1084
  relationName: e.relationName,
927
1085
  sourceTableName: e.source.tableName,
928
1086
  targetTableName: e.target.tableName,
@@ -935,14 +1093,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
935
1093
  isSingle: r,
936
1094
  fromOverFetch: i,
937
1095
  cardinalityMessage: a,
938
- junction: Pr(e.junction, n)
1096
+ junction: Xr(e.junction, n)
939
1097
  };
940
1098
  });
941
1099
  return (e) => {
942
1100
  let t = { ...e };
943
1101
  for (let e of r) {
944
1102
  let r = t[e];
945
- typeof r == "string" && (t[e] = Ar(r, n));
1103
+ typeof r == "string" && (t[e] = Kr(r, n));
946
1104
  }
947
1105
  for (let e of i) {
948
1106
  let n = t[e.name];
@@ -952,7 +1110,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
952
1110
  }
953
1111
  if (e.fromOverFetch) {
954
1112
  let r = n;
955
- if (r.length > 1) throw new In(e.cardinalityMessage);
1113
+ if (r.length > 1) throw new Qn(e.cardinalityMessage);
956
1114
  t[e.name] = r.length === 0 ? null : e.decode(r[0]);
957
1115
  continue;
958
1116
  }
@@ -964,104 +1122,104 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
964
1122
  }
965
1123
  return t;
966
1124
  };
967
- }, Pr = (e, t) => {
1125
+ }, Xr = (e, t) => {
968
1126
  if (e === void 0) return;
969
1127
  let n = new Set(e.dateColumns), r = e.requested;
970
1128
  return (e) => {
971
1129
  let i = e._junction ?? {}, a = {};
972
1130
  for (let e of r) {
973
1131
  let r = i[e];
974
- a[e] = n.has(e) && typeof r == "string" ? Ar(r, t) : r;
1132
+ a[e] = n.has(e) && typeof r == "string" ? Kr(r, t) : r;
975
1133
  }
976
1134
  return {
977
1135
  ...e,
978
1136
  _junction: a
979
1137
  };
980
1138
  };
981
- }, Fr = (e, t, n) => {
982
- let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = Ir(i, t.children, n);
1139
+ }, Zr = (e, t, n) => {
1140
+ let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = Qr(i, t.children, n);
983
1141
  return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``}${w(e).length > 0 ? r` ORDER BY ${r.csv(w(e).map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`}`;
984
- }, Ir = (e, t, n, r) => {
985
- let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${z(Er, i)}::text)`;
1142
+ }, Qr = (e, t, n, r) => {
1143
+ let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${z(Hr, i)}::text)`;
986
1144
  if (t.length === 0 && r === void 0) return a;
987
1145
  let o = [];
988
- r !== void 0 && o.push(i`${z("_junction", i)}, ${R(e, Er, i)}`);
1146
+ r !== void 0 && o.push(i`${z("_junction", i)}, ${R(e, Hr, i)}`);
989
1147
  for (let r of t) {
990
- let t = Lr(r, e, n);
1148
+ let t = $r(r, e, n);
991
1149
  if (t === null) return null;
992
1150
  o.push(i`${z(r.relationName, i)}, ${t}`);
993
1151
  }
994
1152
  return i`${a} || jsonb_build_object(${i.csv(o)})`;
995
- }, Lr = (e, t, n) => {
1153
+ }, $r = (e, t, n) => {
996
1154
  switch (e.relation.kind) {
997
- case "one": return br(e) ? zr(xr(e), t, n) : Rr(e, t, n);
998
- case "many": return zr(e, t, n);
999
- case "manyToMany": return Br(e, t, n);
1155
+ case "one": return Ir(e) ? ti(Lr(e), t, n) : ei(e, t, n);
1156
+ case "many": return ti(e, t, n);
1157
+ case "manyToMany": return ni(e, t, n);
1000
1158
  }
1001
- }, Rr = (e, t, n) => {
1002
- let r = n.sql, i = n.nextAlias(), a = Ir(i, e.children, n);
1159
+ }, ei = (e, t, n) => {
1160
+ let r = n.sql, i = n.nextAlias(), a = Qr(i, e.children, n);
1003
1161
  if (a === null) return null;
1004
1162
  let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, i, r)}`, c = I(i, e.branch.orderBy, r);
1005
1163
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
1006
- }, zr = (e, t, n) => {
1007
- let r = n.sql, i = n.nextAlias(), a = Ir(i, e.children, n);
1164
+ }, ti = (e, t, n) => {
1165
+ let r = n.sql, i = n.nextAlias(), a = Qr(i, e.children, n);
1008
1166
  if (a === null) return null;
1009
- let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(e.branch.where, r)}`, c = Hr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
1167
+ let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(e.branch.where, r)}`, c = ii(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
1010
1168
  return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
1011
- }, Br = (e, t, n) => {
1012
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Ir(o, e.children, n, e.junction);
1169
+ }, ni = (e, t, n) => {
1170
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Qr(o, e.children, n, e.junction);
1013
1171
  if (c === null) return null;
1014
- let l = e.branch.where === void 0 ? r`` : r` AND ${F(e.branch.where, r)}`, u = mi(e, s, r), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${Vr(e.junction, s, r)} AS ${r(Er)}`;
1172
+ let l = e.branch.where === void 0 ? r`` : r` AND ${F(e.branch.where, r)}`, u = Ai(e, s, r), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${ri(e.junction, s, r)} AS ${r(Hr)}`;
1015
1173
  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 ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
1016
- }, Vr = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${z(e, n)}, ${R(t, e, n)}`))})`, I = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${R(e, t.column, n)} DESC` : n`${R(e, t.column, n)} ASC`))}`, Hr = (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`))}`, Ur = (e, t, n) => {
1017
- let r = n.sql, i = n.nextAlias(), a = Wr(i, t.table, t.children, n);
1174
+ }, ri = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${z(e, n)}, ${R(t, e, n)}`))})`, I = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${R(e, t.column, n)} DESC` : n`${R(e, t.column, n)} ASC`))}`, ii = (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`))}`, ai = (e, t, n) => {
1175
+ let r = n.sql, i = n.nextAlias(), a = oi(i, t.table, t.children, n);
1018
1176
  if (a === null) return null;
1019
1177
  let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = w(e).length > 0 ? r` ORDER BY ${r.csv(w(e).map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`;
1020
1178
  return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
1021
- }, Wr = (e, t, n, r, i) => {
1179
+ }, oi = (e, t, n, r, i) => {
1022
1180
  let a = r.sql, o = [];
1023
1181
  for (let n of Object.keys(t.fields)) o.push(a`${z(n, a)}, ${R(e, n, a)}`);
1024
1182
  if (i !== void 0) {
1025
- let e = Gr(i.projection, i.source, a);
1183
+ let e = si(i.projection, i.source, a);
1026
1184
  o.push(a`${z("_junction", a)}, json_object(${e})`);
1027
1185
  }
1028
1186
  for (let t of n) {
1029
- let n = Yr(t, e, r);
1187
+ let n = di(t, e, r);
1030
1188
  if (n === null) return null;
1031
1189
  o.push(a`${z(t.relationName, a)}, ${n}`);
1032
1190
  }
1033
1191
  return a`json_object(${a.csv(o)})`;
1034
- }, Gr = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${z(e, n)}, ${R(t.alias, t.physical(e), n)}`)), Kr = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${R(t, e, n)} AS ${n(Tr(e))}`))}`, qr = (e) => ({
1192
+ }, si = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${z(e, n)}, ${R(t.alias, t.physical(e), n)}`)), ci = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${R(t, e, n)} AS ${n(Vr(e))}`))}`, li = (e) => ({
1035
1193
  alias: e,
1036
- physical: Tr
1037
- }), Jr = (e) => ({
1194
+ physical: Vr
1195
+ }), ui = (e) => ({
1038
1196
  alias: e,
1039
1197
  physical: (e) => e
1040
- }), Yr = (e, t, n) => {
1198
+ }), di = (e, t, n) => {
1041
1199
  switch (e.relation.kind) {
1042
- case "one": return br(e) ? Zr(xr(e), t, n) : Xr(e, t, n);
1043
- case "many": return Zr(e, t, n);
1044
- case "manyToMany": return Qr(e, t, n);
1200
+ case "one": return Ir(e) ? pi(Lr(e), t, n) : fi(e, t, n);
1201
+ case "many": return pi(e, t, n);
1202
+ case "manyToMany": return mi(e, t, n);
1045
1203
  }
1046
- }, Xr = (e, t, n) => {
1047
- let r = n.sql, i = n.nextAlias(), a = Wr(i, e.target, e.children, n);
1204
+ }, fi = (e, t, n) => {
1205
+ let r = n.sql, i = n.nextAlias(), a = oi(i, e.target, e.children, n);
1048
1206
  if (a === null) return null;
1049
1207
  let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
1050
1208
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
1051
- }, Zr = (e, t, n) => {
1052
- let r = n.sql, i = n.nextAlias(), a = Wr(i, e.target, e.children, n);
1209
+ }, pi = (e, t, n) => {
1210
+ let r = n.sql, i = n.nextAlias(), a = oi(i, e.target, e.children, n);
1053
1211
  if (a === null) return null;
1054
- let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c = Hr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
1212
+ let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c = ii(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
1055
1213
  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('[]'))`;
1056
- }, Qr = (e, t, n) => {
1057
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Wr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1214
+ }, mi = (e, t, n) => {
1215
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = oi(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1058
1216
  projection: e.junction,
1059
- source: qr(o)
1217
+ source: li(o)
1060
1218
  });
1061
1219
  if (c === null) return null;
1062
- let l = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, u = mi(e, s, r, !0), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Kr(e.junction, s, r);
1220
+ let l = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, u = Ai(e, s, r, !0), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : ci(e.junction, s, r);
1063
1221
  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 ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
1064
- }, $r = (e, t, n) => {
1222
+ }, hi = (e, t, n) => {
1065
1223
  let r = n.sql, i = n.nextAlias(), a = L(i, t.table, t.children, n);
1066
1224
  if (a === null) return null;
1067
1225
  let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = w(e).length > 0 ? r` ORDER BY ${r.csv(w(e).map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`;
@@ -1070,66 +1228,66 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1070
1228
  let a = r.sql, o = [];
1071
1229
  for (let n of Object.keys(t.fields)) o.push(a`${z(n, a)}, ${R(e, n, a)}`);
1072
1230
  if (i !== void 0) {
1073
- let e = Gr(i.projection, i.source, a);
1231
+ let e = si(i.projection, i.source, a);
1074
1232
  o.push(a`${z("_junction", a)}, JSON_OBJECT(${e})`);
1075
1233
  }
1076
1234
  for (let t of n) {
1077
- let n = ei(t, e, r);
1235
+ let n = gi(t, e, r);
1078
1236
  if (n === null) return null;
1079
1237
  o.push(a`${z(t.relationName, a)}, ${n}`);
1080
1238
  }
1081
1239
  return a`JSON_OBJECT(${a.csv(o)})`;
1082
- }, ei = (e, t, n) => {
1240
+ }, gi = (e, t, n) => {
1083
1241
  switch (e.relation.kind) {
1084
1242
  case "one":
1085
- if (br(e)) {
1086
- let r = xr(e);
1087
- return n.dialect === "mariadb" ? ii(r, t, n) : ni(r, t, n);
1243
+ if (Ir(e)) {
1244
+ let r = Lr(e);
1245
+ return n.dialect === "mariadb" ? bi(r, t, n) : vi(r, t, n);
1088
1246
  }
1089
- return ti(e, t, n);
1090
- case "many": return n.dialect === "mariadb" ? ii(e, t, n) : ni(e, t, n);
1091
- case "manyToMany": return n.dialect === "mariadb" ? ai(e, t, n) : ri(e, t, n);
1247
+ return _i(e, t, n);
1248
+ case "many": return n.dialect === "mariadb" ? bi(e, t, n) : vi(e, t, n);
1249
+ case "manyToMany": return n.dialect === "mariadb" ? xi(e, t, n) : yi(e, t, n);
1092
1250
  }
1093
- }, ti = (e, t, n) => {
1251
+ }, _i = (e, t, n) => {
1094
1252
  let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
1095
1253
  if (a === null) return null;
1096
1254
  let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
1097
1255
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
1098
- }, ni = (e, t, n) => {
1256
+ }, vi = (e, t, n) => {
1099
1257
  let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
1100
1258
  if (a === null) return null;
1101
- let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c = Hr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
1259
+ let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c = ii(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
1102
1260
  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())`;
1103
- }, ri = (e, t, n) => {
1261
+ }, yi = (e, t, n) => {
1104
1262
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = L(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1105
1263
  projection: e.junction,
1106
- source: qr(o)
1264
+ source: li(o)
1107
1265
  });
1108
1266
  if (c === null) return null;
1109
- let l = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, u = mi(e, s, r, !0), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Kr(e.junction, s, r);
1267
+ let l = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, u = Ai(e, s, r, !0), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : ci(e.junction, s, r);
1110
1268
  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 ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
1111
- }, ii = (e, t, n) => {
1269
+ }, bi = (e, t, n) => {
1112
1270
  let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
1113
1271
  if (a === null) return null;
1114
1272
  let o = r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
1115
1273
  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`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
1116
1274
  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 ${R(i, "rn", r)} > ${B(d, r)} AND ${R(i, "rn", r)} <= ${B(d + u, r)}` : u === void 0 ? r` AND ${R(i, "rn", r)} > ${B(d, r)}` : r` AND ${R(i, "rn", r)} <= ${B(u, r)}`;
1117
1275
  return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${R(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())`;
1118
- }, ai = (e, t, n) => {
1276
+ }, xi = (e, t, n) => {
1119
1277
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
1120
1278
  projection: e.junction,
1121
1279
  source: t
1122
- }, l = r`${R(s, i.sourceKey, r)} = ${R(t, "id", r)}`, u = r`${R(o, "id", r)} = ${R(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, f = mi(e, s, r, !0), p = e.branch.orderBy ?? [];
1280
+ }, l = r`${R(s, i.sourceKey, r)} = ${R(t, "id", r)}`, u = r`${R(o, "id", r)} = ${R(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, f = Ai(e, s, r, !0), p = e.branch.orderBy ?? [];
1123
1281
  if (e.branch.limit === void 0 && e.branch.offset === void 0) {
1124
- let t = L(o, e.target, e.children, n, c(Jr(s)));
1282
+ let t = L(o, e.target, e.children, n, c(ui(s)));
1125
1283
  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`${R(o, e.column, r)} DESC` : r`${R(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())`;
1126
1284
  }
1127
- let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${R(o, e.column, r)} DESC` : r`${R(o, e.column, r)} ASC`))}` : r` ORDER BY ${R(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)} AND ${R(o, "rn", r)} <= ${B(g + h, r)}` : h === void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)}` : r` AND ${R(o, "rn", r)} <= ${B(h, r)}`, v = e.branch.onJunction === void 0 ? r`` : r` WHERE ${V(H(e.branch.onJunction), s, r)}`, y = L(o, e.target, e.children, n, c(qr(o)));
1128
- if (y === null) return null;
1129
- let b = e.junction === void 0 ? r`` : Kr(e.junction, s, r);
1130
- return r`COALESCE((SELECT JSON_ARRAYAGG(${y} ORDER BY ${R(o, "rn", r)}) FROM (SELECT ${r(o)}.*${b}, ${R(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${R(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 ${R(o, `__src_${i.sourceKey}`, r)} = ${R(t, "id", r)}${d}${_}), JSON_ARRAY())`;
1131
- }, oi = (e, t, n) => {
1132
- let r = n.sql, i = n.nextAlias(), a = si(i, t.table, t.children, n);
1285
+ let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${R(o, e.column, r)} DESC` : r`${R(o, e.column, r)} ASC`))}` : r` ORDER BY ${R(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)} AND ${R(o, "rn", r)} <= ${B(g + h, r)}` : h === void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)}` : r` AND ${R(o, "rn", r)} <= ${B(h, r)}`, ee = e.branch.onJunction === void 0 ? r`` : r` WHERE ${V(H(e.branch.onJunction), s, r)}`, v = L(o, e.target, e.children, n, c(li(o)));
1286
+ if (v === null) return null;
1287
+ let y = e.junction === void 0 ? r`` : ci(e.junction, s, r);
1288
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${R(o, "rn", r)}) FROM (SELECT ${r(o)}.*${y}, ${R(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${R(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}${ee}) AS ${r(o)} WHERE ${R(o, `__src_${i.sourceKey}`, r)} = ${R(t, "id", r)}${d}${_}), JSON_ARRAY())`;
1289
+ }, Si = (e, t, n) => {
1290
+ let r = n.sql, i = n.nextAlias(), a = Ci(i, t.table, t.children, n);
1133
1291
  if (a === null) return null;
1134
1292
  let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = w(e).length > 0 ? r` ORDER BY ${r.csv(w(e).map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
1135
1293
  if (e.skip !== void 0) {
@@ -1138,28 +1296,28 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1138
1296
  } else e.take !== void 0 && (c = r`TOP ${B(e.take, r)} `);
1139
1297
  let u = e.skip === void 0 ? s : r``;
1140
1298
  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}`;
1141
- }, si = (e, t, n, r, i) => {
1299
+ }, Ci = (e, t, n, r, i) => {
1142
1300
  let a = r.sql, o = [];
1143
1301
  for (let n of Object.keys(t.fields)) o.push(a`${R(e, n, a)} AS ${a(n)}`);
1144
- if (i !== void 0) for (let e of i.projection.present) o.push(a`${R(i.source.alias, i.source.physical(e), a)} AS ${ci(`_junction.${e}`, a)}`);
1302
+ if (i !== void 0) for (let e of i.projection.present) o.push(a`${R(i.source.alias, i.source.physical(e), a)} AS ${wi(`_junction.${e}`, a)}`);
1145
1303
  for (let t of n) {
1146
- let n = li(t, e, r);
1304
+ let n = Ti(t, e, r);
1147
1305
  if (n === null) return null;
1148
1306
  o.push(n);
1149
1307
  }
1150
1308
  return a.csv(o);
1151
- }, ci = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), li = (e, t, n) => {
1309
+ }, wi = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), Ti = (e, t, n) => {
1152
1310
  switch (e.relation.kind) {
1153
- case "one": return br(e) ? fi(xr(e), t, n) : ui(e, t, n);
1154
- case "many": return fi(e, t, n);
1155
- case "manyToMany": return pi(e, t, n);
1311
+ case "one": return Ir(e) ? Oi(Lr(e), t, n) : Ei(e, t, n);
1312
+ case "many": return Oi(e, t, n);
1313
+ case "manyToMany": return ki(e, t, n);
1156
1314
  }
1157
- }, ui = (e, t, n) => {
1158
- let r = n.sql, i = n.nextAlias(), a = si(i, e.target, e.children, n);
1315
+ }, Ei = (e, t, n) => {
1316
+ let r = n.sql, i = n.nextAlias(), a = Ci(i, e.target, e.children, n);
1159
1317
  if (a === null) return null;
1160
1318
  let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
1161
1319
  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)}`;
1162
- }, di = (e, t, n) => {
1320
+ }, Di = (e, t, n) => {
1163
1321
  if (e.offset !== void 0) {
1164
1322
  let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${B(e.offset, n)} ROWS` : n`${r} OFFSET ${B(e.offset, n)} ROWS FETCH NEXT ${B(e.limit, n)} ROWS ONLY`;
1165
1323
  return {
@@ -1173,29 +1331,29 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1173
1331
  pagination: n``,
1174
1332
  finalOrder: t
1175
1333
  };
1176
- }, fi = (e, t, n) => {
1177
- let r = n.sql, i = n.nextAlias(), a = si(i, e.target, e.children, n);
1334
+ }, Oi = (e, t, n) => {
1335
+ let r = n.sql, i = n.nextAlias(), a = Ci(i, e.target, e.children, n);
1178
1336
  if (a === null) return null;
1179
- let o = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, i, r)}`, s = I(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = di(e.branch, s, r);
1337
+ let o = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, i, r)}`, s = I(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = Di(e.branch, s, r);
1180
1338
  return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1181
- }, pi = (e, t, n) => {
1182
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = si(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1339
+ }, ki = (e, t, n) => {
1340
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Ci(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1183
1341
  projection: e.junction,
1184
- source: Jr(s)
1342
+ source: ui(s)
1185
1343
  });
1186
1344
  if (c === null) return null;
1187
- let l = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, o, r)}`, u = mi(e, s, r), d = I(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = di(e.branch, d, r);
1345
+ let l = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, o, r)}`, u = Ai(e, s, r), d = I(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Di(e.branch, d, r);
1188
1346
  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 ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1189
1347
  }, R = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, z = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), B = (e, t) => {
1190
1348
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
1191
1349
  return t.unsafe(String(e));
1192
- }, V = (e, t, n) => F(hi(e, t), n), mi = (e, t, n, r = !1) => {
1350
+ }, V = (e, t, n) => F(ji(e, t), n), Ai = (e, t, n, r = !1) => {
1193
1351
  let i = e.branch.onJunction;
1194
1352
  return i === void 0 ? n`` : n` AND ${V(r ? H(i) : i, t, n)}`;
1195
- }, hi = (e, t) => {
1196
- if ("not" in e) return { not: hi(e.not, t) };
1197
- if ("and" in e) return { and: e.and.map((e) => hi(e, t)) };
1198
- if ("or" in e) return { or: e.or.map((e) => hi(e, t)) };
1353
+ }, ji = (e, t) => {
1354
+ if ("not" in e) return { not: ji(e.not, t) };
1355
+ if ("and" in e) return { and: e.and.map((e) => ji(e, t)) };
1356
+ if ("or" in e) return { or: e.or.map((e) => ji(e, t)) };
1199
1357
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
1200
1358
  let n = e;
1201
1359
  return {
@@ -1217,91 +1375,91 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1217
1375
  let t = e;
1218
1376
  return {
1219
1377
  ...t,
1220
- value: gi(t.value)
1378
+ value: Mi(t.value)
1221
1379
  };
1222
- }, gi = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => gi(e)) : e, _i = Symbol.for("@voltro/database/coreTablesRegistry"), vi = globalThis, yi = vi[_i] ?? (vi[_i] = {}), bi = (e) => {
1223
- e.actors !== void 0 && (yi.actors = e.actors), e.tenants !== void 0 && (yi.tenants = e.tenants);
1224
- }, xi = (e, t) => () => {
1380
+ }, Mi = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Mi(e)) : e, Ni = Symbol.for("@voltro/database/coreTablesRegistry"), Pi = globalThis, Fi = Pi[Ni] ?? (Pi[Ni] = {}), Ii = (e) => {
1381
+ e.actors !== void 0 && (Fi.actors = e.actors), e.tenants !== void 0 && (Fi.tenants = e.tenants);
1382
+ }, Li = (e, t) => () => {
1225
1383
  let n = e();
1226
1384
  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`);
1227
1385
  return n();
1228
- }, Si = () => xi(() => yi.actors, "actors"), Ci = () => xi(() => yi.tenants, "tenants"), wi = C("actors", {
1229
- id: v(),
1230
- kind: E().oneOf([
1386
+ }, Ri = () => Li(() => Fi.actors, "actors"), zi = () => Li(() => Fi.tenants, "tenants"), Bi = E("actors", {
1387
+ id: x(),
1388
+ kind: y().oneOf([
1231
1389
  "user",
1232
1390
  "serviceAccount",
1233
1391
  "apiKey",
1234
1392
  "system"
1235
1393
  ]),
1236
- displayName: E().nullable(),
1237
- createdAt: b().default("now")
1238
- }), Ti = (e, t) => ({
1394
+ displayName: y().nullable(),
1395
+ createdAt: C().default("now")
1396
+ }), Vi = (e, t) => ({
1239
1397
  column: e,
1240
1398
  op: "eq",
1241
1399
  value: t
1242
- }), Ei = (e, t) => ({
1400
+ }), Hi = (e, t) => ({
1243
1401
  column: e,
1244
1402
  op: "neq",
1245
1403
  value: t
1246
- }), Di = (e, t) => ({
1404
+ }), Ui = (e, t) => ({
1247
1405
  column: e,
1248
1406
  op: "gt",
1249
1407
  value: t
1250
- }), Oi = (e, t) => ({
1408
+ }), Wi = (e, t) => ({
1251
1409
  column: e,
1252
1410
  op: "gte",
1253
1411
  value: t
1254
- }), ki = (e, t) => ({
1412
+ }), Gi = (e, t) => ({
1255
1413
  column: e,
1256
1414
  op: "lt",
1257
1415
  value: t
1258
- }), Ai = (e, t) => ({
1416
+ }), Ki = (e, t) => ({
1259
1417
  column: e,
1260
1418
  op: "lte",
1261
1419
  value: t
1262
- }), ji = (e, t) => ({
1420
+ }), qi = (e, t) => ({
1263
1421
  column: e,
1264
1422
  op: "in",
1265
1423
  value: t
1266
- }), Mi = (e, t) => ({
1424
+ }), Ji = (e, t) => ({
1267
1425
  column: e,
1268
1426
  op: "notIn",
1269
1427
  value: t
1270
- }), Ni = (e, t) => ({
1428
+ }), Yi = (e, t) => ({
1271
1429
  column: e,
1272
1430
  op: "contains",
1273
1431
  value: t
1274
- }), Pi = (e, t) => ({
1432
+ }), Xi = (e, t) => ({
1275
1433
  column: e,
1276
1434
  op: "startsWith",
1277
1435
  value: t
1278
- }), Fi = (e, t) => ({
1436
+ }), Zi = (e, t) => ({
1279
1437
  column: e,
1280
1438
  op: "arrayContains",
1281
1439
  value: t
1282
- }), Ii = (e, t) => ({
1440
+ }), Qi = (e, t) => ({
1283
1441
  column: e,
1284
1442
  op: "arrayOverlaps",
1285
1443
  value: t
1286
- }), Li = (e, t) => ({
1444
+ }), $i = (e, t) => ({
1287
1445
  column: e,
1288
1446
  op: "arrayHas",
1289
1447
  value: t
1290
- }), Ri = {
1448
+ }), ea = {
1291
1449
  column: "id",
1292
1450
  op: "in",
1293
1451
  value: []
1294
- }, zi = (e) => ({
1452
+ }, ta = (e) => ({
1295
1453
  column: e,
1296
1454
  op: "isNull"
1297
- }), Bi = (e) => ({
1455
+ }), na = (e) => ({
1298
1456
  column: e,
1299
1457
  op: "isNotNull"
1300
- }), Vi = (e, t) => ({
1458
+ }), ra = (e, t) => ({
1301
1459
  column: e,
1302
1460
  op: "spatial",
1303
1461
  value: t
1304
- }), Hi = (...e) => ({ and: e }), Ui = (...e) => ({ or: e }), Wi = (e) => ({ not: e }), Gi = (e, ...t) => {
1462
+ }), ia = (...e) => ({ and: e }), aa = (...e) => ({ or: e }), oa = (e) => ({ not: e }), sa = (e, ...t) => {
1305
1463
  if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
1306
1464
  let n = (n, r) => ({
1307
1465
  column: e,
@@ -1323,33 +1481,33 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1323
1481
  isNull: () => n("isNull"),
1324
1482
  isNotNull: () => n("isNotNull")
1325
1483
  };
1326
- }, Ki = (e) => "descriptor" in e ? e.descriptor : e, qi = (e, t) => ({
1484
+ }, ca = (e) => "descriptor" in e ? e.descriptor : e, la = (e, t) => ({
1327
1485
  column: e,
1328
1486
  op: "subquery-in",
1329
- subquery: Ki(t)
1330
- }), Ji = (e, t) => ({
1487
+ subquery: ca(t)
1488
+ }), ua = (e, t) => ({
1331
1489
  column: e,
1332
1490
  op: "subquery-not-in",
1333
- subquery: Ki(t)
1334
- }), Yi = (e) => ({
1491
+ subquery: ca(t)
1492
+ }), da = (e) => ({
1335
1493
  op: "exists",
1336
- subquery: Ki(e)
1337
- }), Xi = (e) => ({
1494
+ subquery: ca(e)
1495
+ }), fa = (e) => ({
1338
1496
  op: "not-exists",
1339
- subquery: Ki(e)
1340
- }), Zi = (e, t) => e === t || e instanceof Date && t instanceof Date && e.getTime() === t.getTime(), Qi = (e, t) => {
1497
+ subquery: ca(e)
1498
+ }), pa = (e, t) => e === t || e instanceof Date && t instanceof Date && e.getTime() === t.getTime(), ma = (e, t) => {
1341
1499
  if (e == null || t == null) return null;
1342
1500
  let n = e instanceof Date ? e.getTime() : e, r = t instanceof Date ? t.getTime() : t;
1343
1501
  return typeof n == typeof r ? n === r ? 0 : n > r ? 1 : -1 : null;
1344
- }, $i = (e, t, n = null) => {
1502
+ }, ha = (e, t, n = null) => {
1345
1503
  if (!t) return !1;
1346
- if ("not" in e) return !$i(e.not, t, n);
1504
+ if ("not" in e) return !ha(e.not, t, n);
1347
1505
  if ("and" in e) {
1348
- for (let r of e.and) if (!$i(r, t, n)) return !1;
1506
+ for (let r of e.and) if (!ha(r, t, n)) return !1;
1349
1507
  return !0;
1350
1508
  }
1351
1509
  if ("or" in e) {
1352
- for (let r of e.or) if ($i(r, t, n)) return !0;
1510
+ for (let r of e.or) if (ha(r, t, n)) return !0;
1353
1511
  return !1;
1354
1512
  }
1355
1513
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
@@ -1366,14 +1524,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1366
1524
  }
1367
1525
  let r = e, i = t[r.column];
1368
1526
  switch (r.op) {
1369
- case "eq": return Zi(i, r.value);
1370
- case "neq": return !Zi(i, r.value);
1371
- case "gt": return (Qi(i, r.value) ?? -1) > 0;
1372
- case "gte": return (Qi(i, r.value) ?? -1) >= 0;
1373
- case "lt": return (Qi(i, r.value) ?? 1) < 0;
1374
- case "lte": return (Qi(i, r.value) ?? 1) <= 0;
1375
- case "in": return Array.isArray(r.value) && r.value.some((e) => Zi(i, e));
1376
- case "notIn": return Array.isArray(r.value) && !r.value.some((e) => Zi(i, e));
1527
+ case "eq": return pa(i, r.value);
1528
+ case "neq": return !pa(i, r.value);
1529
+ case "gt": return (ma(i, r.value) ?? -1) > 0;
1530
+ case "gte": return (ma(i, r.value) ?? -1) >= 0;
1531
+ case "lt": return (ma(i, r.value) ?? 1) < 0;
1532
+ case "lte": return (ma(i, r.value) ?? 1) <= 0;
1533
+ case "in": return Array.isArray(r.value) && r.value.some((e) => pa(i, e));
1534
+ case "notIn": return Array.isArray(r.value) && !r.value.some((e) => pa(i, e));
1377
1535
  case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
1378
1536
  case "startsWith": return typeof i == "string" && typeof r.value == "string" && i.startsWith(r.value);
1379
1537
  case "arrayContains": {
@@ -1389,17 +1547,17 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1389
1547
  case "isNotNull": return i != null;
1390
1548
  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.");
1391
1549
  }
1392
- }, ea = function* (e) {
1550
+ }, ga = function* (e) {
1393
1551
  if ("not" in e) {
1394
- yield* ea(e.not);
1552
+ yield* ga(e.not);
1395
1553
  return;
1396
1554
  }
1397
1555
  if ("and" in e) {
1398
- for (let t of e.and) yield* ea(t);
1556
+ for (let t of e.and) yield* ga(t);
1399
1557
  return;
1400
1558
  }
1401
1559
  if ("or" in e) {
1402
- for (let t of e.or) yield* ea(t);
1560
+ for (let t of e.or) yield* ga(t);
1403
1561
  return;
1404
1562
  }
1405
1563
  e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
@@ -1409,46 +1567,46 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1409
1567
  kind: "exists",
1410
1568
  descriptor: e.subquery
1411
1569
  });
1412
- }, ta = function* (e, t = !0) {
1570
+ }, _a = function* (e, t = !0) {
1413
1571
  if ("not" in e) {
1414
- yield* ta(e.not, !1);
1572
+ yield* _a(e.not, !1);
1415
1573
  return;
1416
1574
  }
1417
1575
  if ("and" in e) {
1418
- for (let n of e.and) yield* ta(n, t);
1576
+ for (let n of e.and) yield* _a(n, t);
1419
1577
  return;
1420
1578
  }
1421
1579
  if ("or" in e) {
1422
- for (let t of e.or) yield* ta(t, !1);
1580
+ for (let t of e.or) yield* _a(t, !1);
1423
1581
  return;
1424
1582
  }
1425
1583
  e.op !== "subquery-in" && e.op !== "subquery-not-in" && e.op !== "exists" && e.op !== "not-exists" && (yield {
1426
1584
  ...e,
1427
1585
  conjunctive: t
1428
1586
  });
1429
- }, na = (e, t) => ({
1587
+ }, va = (e, t) => ({
1430
1588
  ...t,
1431
1589
  ...e,
1432
1590
  origin: e.origin ?? "injected"
1433
- }), ra = (e, t, n = {}) => ({
1591
+ }), ya = (e, t, n = {}) => ({
1434
1592
  table: e,
1435
1593
  op: "insert",
1436
1594
  old: null,
1437
1595
  new: t,
1438
1596
  ...n
1439
- }), ia = (e, t, n, r = {}) => ({
1597
+ }), ba = (e, t, n, r = {}) => ({
1440
1598
  table: e,
1441
1599
  op: "update",
1442
1600
  old: t,
1443
1601
  new: n,
1444
1602
  ...r
1445
- }), aa = (e, t, n = {}) => ({
1603
+ }), xa = (e, t, n = {}) => ({
1446
1604
  table: e,
1447
1605
  op: "delete",
1448
1606
  old: t,
1449
1607
  new: null,
1450
1608
  ...n
1451
- }), oa = (e, t, n = {}) => {
1609
+ }), Sa = (e, t, n = {}) => {
1452
1610
  let { at: r = "2026-01-01T00:00:00.000Z", column: i = "deletedAt", ...a } = n;
1453
1611
  return {
1454
1612
  table: e,
@@ -1463,26 +1621,26 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1463
1621
  },
1464
1622
  ...a
1465
1623
  };
1466
- }, sa = new kt(), ca = (e, t) => sa.run(e, t), la = () => sa.getStore(), ua = (e) => {
1467
- let t = e ?? sa.getStore();
1624
+ }, Ca = new Mt(), wa = (e, t) => Ca.run(e, t), Ta = () => Ca.getStore(), Ea = (e) => {
1625
+ let t = e ?? Ca.getStore();
1468
1626
  return t === void 0 ? {} : {
1469
1627
  ...t.traceId === void 0 ? {} : { traceId: t.traceId },
1470
1628
  ...t.subjectId === void 0 ? {} : { subjectId: t.subjectId },
1471
1629
  ...t.procedure === void 0 ? {} : { procedure: t.procedure },
1472
1630
  ...t.via === void 0 ? {} : { via: t.via }
1473
1631
  };
1474
- }, da = (e) => {
1475
- let t = sa.getStore();
1476
- return t === void 0 ? e(void 0) : sa.run(t, () => e(t));
1477
- }, fa = 3e4, pa = 1e4, U = /* @__PURE__ */ new Map(), W = 0, ma = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, ha = (e) => {
1632
+ }, Da = (e) => {
1633
+ let t = Ca.getStore();
1634
+ return t === void 0 ? e(void 0) : Ca.run(t, () => e(t));
1635
+ }, Oa = 3e4, ka = 1e4, U = /* @__PURE__ */ new Map(), W = 0, Aa = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, ja = (e) => {
1478
1636
  for (let [t, n] of U) {
1479
- let r = n.filter((t) => e - t.at < fa);
1637
+ let r = n.filter((t) => e - t.at < Oa);
1480
1638
  W -= n.length - r.length, r.length === 0 ? U.delete(t) : r.length !== n.length && U.set(t, r);
1481
1639
  }
1482
- }, ga = (e, t) => {
1640
+ }, Ma = (e, t) => {
1483
1641
  if (t.traceId === void 0 && t.subjectId === void 0 && t.procedure === void 0) return;
1484
1642
  let n = Date.now();
1485
- if (W >= pa && ha(n), W >= pa) return;
1643
+ if (W >= ka && ja(n), W >= ka) return;
1486
1644
  let r = U.get(e);
1487
1645
  r === void 0 ? U.set(e, [{
1488
1646
  attribution: t,
@@ -1491,34 +1649,34 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1491
1649
  attribution: t,
1492
1650
  at: n
1493
1651
  }), W += 1;
1494
- }, _a = (e) => {
1652
+ }, Na = (e) => {
1495
1653
  let t = U.get(e);
1496
1654
  if (t === void 0 || t.length === 0) return;
1497
1655
  let n = t.shift();
1498
- if (--W, t.length === 0 && U.delete(e), !(Date.now() - n.at >= fa)) return n.attribution;
1499
- }, va = (e) => (U.get(e)?.length ?? 0) > 0, G = /* @__PURE__ */ new Map(), K = /* @__PURE__ */ new Map(), ya = /* @__PURE__ */ new Map(), ba = 250, xa = (e) => {
1656
+ if (--W, t.length === 0 && U.delete(e), !(Date.now() - n.at >= Oa)) return n.attribution;
1657
+ }, Pa = (e) => (U.get(e)?.length ?? 0) > 0, G = /* @__PURE__ */ new Map(), K = /* @__PURE__ */ new Map(), Fa = /* @__PURE__ */ new Map(), Ia = 250, La = (e) => {
1500
1658
  let t = K.get(e);
1501
1659
  if (t === void 0) return;
1502
1660
  K.delete(e);
1503
- let n = ya.get(e);
1504
- n !== void 0 && (clearTimeout(n), ya.delete(e));
1661
+ let n = Fa.get(e);
1662
+ n !== void 0 && (clearTimeout(n), Fa.delete(e));
1505
1663
  for (let e of t) e();
1506
- }, Sa = (e) => {
1664
+ }, Ra = (e) => {
1507
1665
  G.set(e, (G.get(e) ?? 0) + 1);
1508
- }, Ca = (e) => {
1666
+ }, za = (e) => {
1509
1667
  let t = (G.get(e) ?? 0) - 1;
1510
1668
  if (t > 0) {
1511
1669
  G.set(e, t);
1512
1670
  return;
1513
1671
  }
1514
- G.delete(e), xa(e);
1515
- }, wa = (e, t, n, r) => {
1516
- let i = n == null ? void 0 : ma(e, t, n), a = () => r(i === void 0 ? void 0 : _a(i));
1672
+ G.delete(e), La(e);
1673
+ }, Ba = (e, t, n, r) => {
1674
+ let i = n == null ? void 0 : Aa(e, t, n), a = () => r(i === void 0 ? void 0 : Na(i));
1517
1675
  if (i === void 0) {
1518
1676
  a();
1519
1677
  return;
1520
1678
  }
1521
- if (va(i)) {
1679
+ if (Pa(i)) {
1522
1680
  a();
1523
1681
  return;
1524
1682
  }
@@ -1532,74 +1690,74 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1532
1690
  return;
1533
1691
  }
1534
1692
  K.set(e, [a]);
1535
- let s = setTimeout(() => xa(e), ba);
1536
- typeof s == "object" && typeof s.unref == "function" && s.unref(), ya.set(e, s);
1537
- }, Ta = () => {
1693
+ let s = setTimeout(() => La(e), Ia);
1694
+ typeof s == "object" && typeof s.unref == "function" && s.unref(), Fa.set(e, s);
1695
+ }, Va = () => {
1538
1696
  U.clear(), W = 0, G.clear();
1539
- for (let e of ya.values()) clearTimeout(e);
1540
- ya.clear(), K.clear();
1541
- }, Ea = () => W, q = /* @__PURE__ */ new Map(), Da = (e, t) => {
1697
+ for (let e of Fa.values()) clearTimeout(e);
1698
+ Fa.clear(), K.clear();
1699
+ }, Ha = () => W, q = /* @__PURE__ */ new Map(), Ua = (e, t) => {
1542
1700
  q.set(e, {
1543
1701
  recorder: t.recorder,
1544
1702
  tables: new Set(t.tables),
1545
1703
  ownTables: new Set(t.ownTables)
1546
1704
  });
1547
- }, Oa = (e) => {
1705
+ }, Wa = (e) => {
1548
1706
  q.delete(e);
1549
- }, ka = () => q.clear(), Aa = (e) => {
1707
+ }, Ga = () => q.clear(), Ka = (e) => {
1550
1708
  if (q.size === 0) return !1;
1551
1709
  for (let t of q.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
1552
1710
  return !1;
1553
- }, ja = async (e, t) => {
1711
+ }, qa = async (e, t) => {
1554
1712
  if (q.size !== 0) for (let n of q.values()) n.ownTables.has(t.table) || n.tables.has(t.table) && await n.recorder(e, t);
1555
- }, Ma = Et.exponential({
1713
+ }, Ja = Ot.exponential({
1556
1714
  start: 5e-4,
1557
1715
  factor: 2,
1558
1716
  count: 16
1559
- }), Na = k.counter("voltro_db_queries_total", { description: "Database operations executed, by dialect and operation kind." }), Pa = k.histogram("voltro_db_query_duration_seconds", Ma, "Database operation duration in seconds, by dialect and operation kind."), Fa = k.counter("voltro_db_errors_total", { description: "Database operations that threw, by dialect and operation kind." }), Ia = 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." }), La = 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." }), Ra = [], za = /* @__PURE__ */ new Map(), Ba = /* @__PURE__ */ new Map(), Va = /* @__PURE__ */ new Map(), Ha = (e, t) => {
1560
- let n = `${e}\u0000${t}`, r = za.get(n);
1717
+ }), Ya = O.counter("voltro_db_queries_total", { description: "Database operations executed, by dialect and operation kind." }), Xa = O.histogram("voltro_db_query_duration_seconds", Ja, "Database operation duration in seconds, by dialect and operation kind."), Za = O.counter("voltro_db_errors_total", { description: "Database operations that threw, by dialect and operation kind." }), Qa = O.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." }), $a = O.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." }), eo = [], to = /* @__PURE__ */ new Map(), no = /* @__PURE__ */ new Map(), ro = /* @__PURE__ */ new Map(), io = (e, t) => {
1718
+ let n = `${e}\u0000${t}`, r = to.get(n);
1561
1719
  if (r !== void 0) return r;
1562
- let i = (n) => k.tagged(k.tagged(n, "dialect", e), "op", t), a = {
1563
- count: i(Na),
1564
- duration: i(Pa),
1565
- errors: i(Fa)
1720
+ let i = (n) => O.tagged(O.tagged(n, "dialect", e), "op", t), a = {
1721
+ count: i(Ya),
1722
+ duration: i(Xa),
1723
+ errors: i(Za)
1566
1724
  };
1567
- return za.set(n, a), a;
1568
- }, Ua = () => {
1569
- za.clear(), Ba.clear(), Va.clear();
1570
- }, Wa = () => za.size + Ba.size + Va.size, Ga = /* @__PURE__ */ new Map(), Ka = (e, t) => {
1571
- let n = Math.max(0, (Ga.get(e) ?? 0) + t);
1572
- n === 0 ? Ga.delete(e) : Ga.set(e, n);
1573
- let r = Ba.get(e);
1574
- r === void 0 && (r = k.tagged(Ia, "dialect", e), Ba.set(e, r)), r.unsafeUpdate(n, Ra);
1575
- }, qa = (e) => Ga.get(e) ?? 0, Ja = (e) => {
1576
- let t = Ha(String(e.dialect), e.op);
1577
- t.count.unsafeUpdate(1, Ra), t.duration.unsafeUpdate(e.durationMs / 1e3, Ra), e.status === "error" && t.errors.unsafeUpdate(1, Ra);
1578
- }, Ya = async (e, t, n) => {
1725
+ return to.set(n, a), a;
1726
+ }, ao = () => {
1727
+ to.clear(), no.clear(), ro.clear();
1728
+ }, oo = () => to.size + no.size + ro.size, so = /* @__PURE__ */ new Map(), co = (e, t) => {
1729
+ let n = Math.max(0, (so.get(e) ?? 0) + t);
1730
+ n === 0 ? so.delete(e) : so.set(e, n);
1731
+ let r = no.get(e);
1732
+ r === void 0 && (r = O.tagged(Qa, "dialect", e), no.set(e, r)), r.unsafeUpdate(n, eo);
1733
+ }, lo = (e) => so.get(e) ?? 0, uo = (e) => {
1734
+ let t = io(String(e.dialect), e.op);
1735
+ t.count.unsafeUpdate(1, eo), t.duration.unsafeUpdate(e.durationMs / 1e3, eo), e.status === "error" && t.errors.unsafeUpdate(1, eo);
1736
+ }, fo = async (e, t, n) => {
1579
1737
  let r = performance.now(), i = String(e);
1580
- Ka(i, 1);
1738
+ co(i, 1);
1581
1739
  let a = "ok";
1582
1740
  try {
1583
1741
  return await n();
1584
1742
  } catch (e) {
1585
1743
  throw a = "error", e;
1586
1744
  } finally {
1587
- Ka(i, -1), Ja({
1745
+ co(i, -1), uo({
1588
1746
  dialect: e,
1589
1747
  op: t,
1590
1748
  durationMs: performance.now() - r,
1591
1749
  status: a
1592
1750
  });
1593
1751
  }
1594
- }, Xa = 3e5, Za = (e) => {
1752
+ }, po = 3e5, mo = (e) => {
1595
1753
  if (e == null || e === "") return;
1596
1754
  let t = Number(e);
1597
1755
  return Number.isFinite(t) && t >= 0 ? Math.floor(t) : void 0;
1598
- }, Qa = (e, t = process.env) => Za(t.VOLTRO_DB_EAGER_FALLBACK_WARN_INTERVAL_MS) ?? Za(e) ?? 3e5, $a = (e, t = {}) => {
1599
- let n = Qa(t.warnIntervalMs), r = t.now ?? (() => Date.now()), i = /* @__PURE__ */ new Map();
1756
+ }, ho = (e, t = process.env) => mo(t.VOLTRO_DB_EAGER_FALLBACK_WARN_INTERVAL_MS) ?? mo(e) ?? 3e5, go = (e, t = {}) => {
1757
+ let n = ho(t.warnIntervalMs), r = t.now ?? (() => Date.now()), i = /* @__PURE__ */ new Map();
1600
1758
  return (t) => {
1601
- let a = `${t.dialect} ${t.reason}`, o = Va.get(a);
1602
- o === void 0 && (o = k.tagged(k.tagged(La, "dialect", String(t.dialect)), "reason", t.reason), Va.set(a, o)), o.unsafeUpdate(1, Ra);
1759
+ let a = `${t.dialect} ${t.reason}`, o = ro.get(a);
1760
+ o === void 0 && (o = O.tagged(O.tagged($a, "dialect", String(t.dialect)), "reason", t.reason), ro.set(a, o)), o.unsafeUpdate(1, eo);
1603
1761
  let s = `${t.table}\u0000${t.reason}`, c = i.get(s), l = c === void 0 || n > 0 && r() - c >= n, u = {
1604
1762
  table: t.table,
1605
1763
  dialect: String(t.dialect),
@@ -1613,24 +1771,24 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1613
1771
  }
1614
1772
  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);
1615
1773
  };
1616
- }, eo = (e) => {
1617
- if (Tt.isSuccess(e)) return e.value;
1618
- throw St.squash(e.cause);
1619
- }, to = "10 millis", no = 3, ro = async (e) => {
1620
- let t = 0, n = O.suspend(() => {
1774
+ }, _o = (e) => {
1775
+ if (Dt.isSuccess(e)) return e.value;
1776
+ throw wt.squash(e.cause);
1777
+ }, vo = "10 millis", yo = 3, bo = async (e) => {
1778
+ let t = 0, n = D.suspend(() => {
1621
1779
  let n = ++t;
1622
- return e.withTransaction(O.flatMap(O.serviceOption(At), (t) => {
1623
- if (A.isNone(t)) return O.fail(/* @__PURE__ */ Error(`${e.label}: TransactionConnection unexpectedly missing inside withTransaction.`));
1624
- let r = t.value, i = O.tryPromise({
1780
+ return e.withTransaction(D.flatMap(D.serviceOption(Nt), (t) => {
1781
+ if (k.isNone(t)) return D.fail(/* @__PURE__ */ Error(`${e.label}: TransactionConnection unexpectedly missing inside withTransaction.`));
1782
+ let r = t.value, i = D.tryPromise({
1625
1783
  try: () => e.body(r, n),
1626
1784
  catch: (e) => e
1627
1785
  });
1628
- return e.prepare === void 0 ? i : O.flatMap(e.prepare(r), () => i);
1629
- })).pipe(O.catchAllDefect((t) => e.isRetryable(t) ? O.fail(t) : O.die(t)));
1630
- }), r = Dt.exponential(to).pipe(Dt.compose(Dt.recurs(no)), Dt.whileInput(e.isRetryable)), i = n.pipe(O.retry(r), O.withSpan(e.span.name, { attributes: { ...e.span.attributes } }));
1631
- return Ya(e.dialect, "transaction", async () => eo(await e.runPromiseExit(e.wrapProgram === void 0 ? i : e.wrapProgram(i))));
1632
- }, io = async (e) => {
1633
- let t = la(), n = t === void 0 ? (e) => e() : (e) => ca(t, e), r = await ro({
1786
+ return e.prepare === void 0 ? i : D.flatMap(e.prepare(r), () => i);
1787
+ })).pipe(D.catchAllDefect((t) => e.isRetryable(t) ? D.fail(t) : D.die(t)));
1788
+ }), r = At.exponential(vo).pipe(At.compose(At.recurs(yo)), At.whileInput(e.isRetryable)), i = n.pipe(D.retry(r), D.withSpan(e.span.name, { attributes: { ...e.span.attributes } }));
1789
+ return fo(e.dialect, "transaction", async () => _o(await e.runPromiseExit(e.wrapProgram === void 0 ? i : e.wrapProgram(i))));
1790
+ }, xo = async (e) => {
1791
+ let t = Ta(), n = t === void 0 ? (e) => e() : (e) => wa(t, e), r = await bo({
1634
1792
  ...e,
1635
1793
  body: (r) => {
1636
1794
  let i = e.makeView(r, t);
@@ -1641,14 +1799,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1641
1799
  }
1642
1800
  });
1643
1801
  return r.view.commitEvents(), r.result;
1644
- }, ao = class extends j.TaggedError()("VersionConflict", {
1645
- table: j.String,
1646
- id: j.String,
1647
- expected: j.Number,
1648
- actual: j.NullOr(j.Number)
1649
- }) {}, oo = (e) => {
1802
+ }, So = class extends A.TaggedError()("VersionConflict", {
1803
+ table: A.String,
1804
+ id: A.String,
1805
+ expected: A.Number,
1806
+ actual: A.NullOr(A.Number)
1807
+ }) {}, Co = (e) => {
1650
1808
  for (let [t, n] of Object.entries(e)) if (n?.definition?.versionColumn === !0) return t;
1651
- }, so = (e) => {
1809
+ }, wo = (e) => {
1652
1810
  let { versionColumn: t, patch: n } = e;
1653
1811
  if (t === void 0) return {
1654
1812
  nextVersion: void 0,
@@ -1661,28 +1819,28 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1661
1819
  expected: i,
1662
1820
  patch: a
1663
1821
  };
1664
- }, co = (e) => {
1665
- if (e.expected !== void 0 && (e.current === null || e.current !== e.expected)) return new ao({
1822
+ }, To = (e) => {
1823
+ if (e.expected !== void 0 && (e.current === null || e.current !== e.expected)) return new So({
1666
1824
  table: e.table,
1667
1825
  id: e.id,
1668
1826
  expected: e.expected,
1669
1827
  actual: e.current
1670
1828
  });
1671
- }, lo = 1, uo = "voltro/expires", fo = () => $e({
1672
- id: uo,
1673
- fields: { expiresAt: b().nullable() },
1829
+ }, Eo = 1, Do = "voltro/expires", Oo = () => ot({
1830
+ id: Do,
1831
+ fields: { expiresAt: C().nullable() },
1674
1832
  behaviors: { defaultWhere: () => "expiresAt IS NULL OR expiresAt > now()" }
1675
- }), po = "voltro/localFirst", mo = () => $e({
1676
- id: po,
1833
+ }), ko = "voltro/localFirst", Ao = () => ot({
1834
+ id: ko,
1677
1835
  fields: {}
1678
- }), ho = (e) => e.appliedMixins.some((e) => e.id === po), go = (e) => {
1836
+ }), jo = (e) => e.appliedMixins.some((e) => e.id === ko), Mo = (e) => {
1679
1837
  let t = [];
1680
- for (let n of Object.values(e)) ho(n) && t.push(n.tableName);
1838
+ for (let n of Object.values(e)) jo(n) && t.push(n.tableName);
1681
1839
  return t;
1682
- }, _o = class extends wt.TaggedError("TableStreamError") {}, vo = 1e3, yo = (e, t, n, r) => {
1683
- let i = A.match(r, {
1840
+ }, No = class extends Et.TaggedError("TableStreamError") {}, Po = 1e3, Fo = (e, t, n, r) => {
1841
+ let i = k.match(r, {
1684
1842
  onNone: () => e.where,
1685
- onSome: (n) => e.where ? Hi(e.where, Di(t, n)) : Di(t, n)
1843
+ onSome: (n) => e.where ? ia(e.where, Ui(t, n)) : Ui(t, n)
1686
1844
  });
1687
1845
  return {
1688
1846
  table: e.table,
@@ -1697,19 +1855,19 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1697
1855
  ...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
1698
1856
  ...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
1699
1857
  };
1700
- }, bo = (e, t) => {
1701
- let n = t.pk ?? "id", r = t.chunkSize ?? vo;
1702
- return Ot.paginateChunkEffect(A.none(), (i) => {
1703
- let a = O.tryPromise({
1704
- try: () => e.query(yo(t, n, r, i)),
1705
- catch: (e) => new _o({
1858
+ }, Io = (e, t) => {
1859
+ let n = t.pk ?? "id", r = t.chunkSize ?? Po;
1860
+ return jt.paginateChunkEffect(k.none(), (i) => {
1861
+ let a = D.tryPromise({
1862
+ try: () => e.query(Fo(t, n, r, i)),
1863
+ catch: (e) => new No({
1706
1864
  table: t.table,
1707
1865
  cause: e
1708
1866
  })
1709
1867
  });
1710
- return (t.retry ? a.pipe(O.retry(t.retry)) : a).pipe(O.map((e) => [Ct.fromIterable(e), e.length === r && e.length > 0 ? A.some(A.some(e[e.length - 1][n])) : A.none()]));
1868
+ return (t.retry ? a.pipe(D.retry(t.retry)) : a).pipe(D.map((e) => [Tt.fromIterable(e), e.length === r && e.length > 0 ? k.some(k.some(e[e.length - 1][n])) : k.none()]));
1711
1869
  });
1712
- }, xo = (e) => {
1870
+ }, Lo = (e) => {
1713
1871
  let t = e.alpha ?? .5;
1714
1872
  if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
1715
1873
  return (n) => {
@@ -1736,17 +1894,17 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1736
1894
  }
1737
1895
  };
1738
1896
  };
1739
- }, So = async (e, t) => {
1897
+ }, Ro = async (e, t) => {
1740
1898
  let n = e.as ?? "embedding", r = t.row[e.from];
1741
1899
  if (typeof r != "string" || r.length === 0) return {};
1742
1900
  let i = await t.embed(r);
1743
1901
  return { [n]: i };
1744
- }, Co = (e) => {
1902
+ }, zo = (e) => {
1745
1903
  if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
1746
- let t = e.as ?? "embedding", n = (t) => So(e, t);
1747
- return $e({
1904
+ let t = e.as ?? "embedding", n = (t) => Ro(e, t);
1905
+ return ot({
1748
1906
  id: "voltro/vectorEmbedding",
1749
- fields: { [t]: Te(e.dimensions) },
1907
+ fields: { [t]: we(e.dimensions) },
1750
1908
  ...e.index === !1 ? {} : { indexes: [{
1751
1909
  fields: [t],
1752
1910
  kind: "hnsw",
@@ -1761,19 +1919,19 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1761
1919
  beforeUpdate: n
1762
1920
  }
1763
1921
  });
1764
- }, wo = 63, To = "br_pr", J = class extends Error {
1922
+ }, Bo = 63, Vo = "br_pr", J = class extends Error {
1765
1923
  _tag = "BranchNameInvalid";
1766
1924
  constructor(e) {
1767
1925
  super(e), this.name = "BranchNameInvalid";
1768
1926
  }
1769
- }, Eo = (e, t) => {
1927
+ }, Ho = (e, t) => {
1770
1928
  if (!Number.isInteger(t) || t < 0) throw new J(`prNumber must be a non-negative integer, got ${String(t)}`);
1771
- let n = $n(e);
1929
+ let n = hr(e);
1772
1930
  if (n.replace(/_/g, "") === "") throw new J(`app slug '${e}' has no usable identifier characters`);
1773
- let r = `${To}${t}_${n}`;
1774
- if (r.length > wo) throw new J(`branch namespace '${r}' exceeds the ${wo}-byte identifier limit — use a shorter app slug`);
1931
+ let r = `${Vo}${t}_${n}`;
1932
+ if (r.length > Bo) throw new J(`branch namespace '${r}' exceeds the ${Bo}-byte identifier limit — use a shorter app slug`);
1775
1933
  return r;
1776
- }, Do = (e) => e.startsWith(To), Oo = {
1934
+ }, Uo = (e) => e.startsWith(Vo), Wo = {
1777
1935
  requested: {
1778
1936
  provision: "provisioning",
1779
1937
  destroy: "destroying"
@@ -1792,18 +1950,18 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1792
1950
  fail: "failed"
1793
1951
  },
1794
1952
  destroyed: {}
1795
- }, ko = class extends Error {
1953
+ }, Go = class extends Error {
1796
1954
  from;
1797
1955
  event;
1798
1956
  _tag = "BranchTransitionInvalid";
1799
1957
  constructor(e, t) {
1800
1958
  super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
1801
1959
  }
1802
- }, Ao = (e, t) => {
1803
- let n = Oo[e][t];
1804
- if (n === void 0) throw new ko(e, t);
1960
+ }, Ko = (e, t) => {
1961
+ let n = Wo[e][t];
1962
+ if (n === void 0) throw new Go(e, t);
1805
1963
  return n;
1806
- }, jo = (e, t, n, r, i = [], a = []) => {
1964
+ }, qo = (e, t, n, r, i = [], a = []) => {
1807
1965
  if (n === "copy" && (r === void 0 || r === "")) throw new J("seed 'copy' requires a parentNamespace to snapshot from");
1808
1966
  let o = [{
1809
1967
  kind: "create-namespace",
@@ -1833,13 +1991,13 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1833
1991
  kind: "seed",
1834
1992
  detail: `run boot seeds into ${e}`
1835
1993
  }), o;
1836
- }, Mo = (e) => {
1837
- if (!Do(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
1994
+ }, Jo = (e) => {
1995
+ if (!Uo(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
1838
1996
  return [{
1839
1997
  kind: "drop-namespace",
1840
1998
  detail: e
1841
1999
  }];
1842
- }, No = (e) => {
2000
+ }, Yo = (e) => {
1843
2001
  if (e === void 0 || e === "") return !1;
1844
2002
  try {
1845
2003
  let t = new URL(e).hostname.toLowerCase();
@@ -1847,27 +2005,27 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1847
2005
  } catch {
1848
2006
  return /\bneon\.(tech|build)\b/i.test(e);
1849
2007
  }
1850
- }, Po = (e) => e.prefer === void 0 ? e.seed === "copy" && No(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Fo = (e, t = {}) => [{
2008
+ }, Xo = (e) => e.prefer === void 0 ? e.seed === "copy" && Yo(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Zo = (e, t = {}) => [{
1851
2009
  kind: "neon-branch-create",
1852
2010
  detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
1853
- }], Io = (e) => {
1854
- if (!Do(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
2011
+ }], Qo = (e) => {
2012
+ if (!Uo(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
1855
2013
  return [{
1856
2014
  kind: "neon-branch-delete",
1857
2015
  detail: e
1858
2016
  }];
1859
- }, Lo = (e) => e.mechanism === "neon-cow" ? Fo(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : jo(e.branchId, e.tableNames, e.seed, e.parentNamespace, e.foreignKeys, e.indexNames), Ro = (e, t) => e === "neon-cow" ? Io(t) : Mo(t), zo = (e, t, n) => {
2017
+ }, $o = (e) => e.mechanism === "neon-cow" ? Zo(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : qo(e.branchId, e.tableNames, e.seed, e.parentNamespace, e.foreignKeys, e.indexNames), es = (e, t) => e === "neon-cow" ? Qo(t) : Jo(t), ts = (e, t, n) => {
1860
2018
  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);
1861
2019
  return {
1862
2020
  evict: i,
1863
2021
  rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
1864
2022
  };
1865
- }, Bo = async (e, t) => {
1866
- let n = Eo(e.appSlug, e.prNumber), r = Po({
2023
+ }, ns = async (e, t) => {
2024
+ let n = Ho(e.appSlug, e.prNumber), r = Xo({
1867
2025
  seed: e.seed,
1868
2026
  ...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
1869
2027
  ...e.prefer === void 0 ? {} : { prefer: e.prefer }
1870
- }), i = Lo({
2028
+ }), i = $o({
1871
2029
  mechanism: r,
1872
2030
  branchId: n,
1873
2031
  tableNames: e.tableNames,
@@ -1896,15 +2054,15 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
1896
2054
  mechanism: r,
1897
2055
  steps: i
1898
2056
  };
1899
- }, Vo = async (e, t, n) => {
1900
- let r = Ro(t, e);
2057
+ }, rs = async (e, t, n) => {
2058
+ let r = es(t, e);
1901
2059
  return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
1902
- }, Ho = (e, t, n) => zo(e, t, n), Y = (e) => `"${e.replace(/"/g, "\"\"")}"`, Uo = {
2060
+ }, is = (e, t, n) => ts(e, t, n), Y = (e) => `"${e.replace(/"/g, "\"\"")}"`, as = {
1903
2061
  cascade: "CASCADE",
1904
2062
  restrict: "RESTRICT",
1905
2063
  setNull: "SET NULL",
1906
2064
  noAction: "NO ACTION"
1907
- }, X = (e) => `'${e.replace(/'/g, "''")}'`, Wo = (e, t) => {
2065
+ }, X = (e) => `'${e.replace(/'/g, "''")}'`, os = (e, t) => {
1908
2066
  let n = t.columns.map(X).join(", ");
1909
2067
  return `DO $voltro_branch$
1910
2068
  DECLARE derived name;
@@ -1931,10 +2089,10 @@ BEGIN
1931
2089
  END IF;
1932
2090
  END
1933
2091
  $voltro_branch$`;
1934
- }, Go = (e, t) => {
1935
- let n = t.onDelete === void 0 ? "" : ` ON DELETE ${Uo[t.onDelete]}`, r = t.onUpdate === void 0 ? "" : ` ON UPDATE ${Uo[t.onUpdate]}`;
2092
+ }, ss = (e, t) => {
2093
+ let n = t.onDelete === void 0 ? "" : ` ON DELETE ${as[t.onDelete]}`, r = t.onUpdate === void 0 ? "" : ` ON UPDATE ${as[t.onUpdate]}`;
1936
2094
  return `ALTER TABLE ${Y(e)}.${Y(t.table)} ADD FOREIGN KEY (${Y(t.column)}) REFERENCES ${Y(e)}.${Y(t.targetTable)} (${Y(t.targetColumn)})${n}${r}`;
1937
- }, Ko = (e) => {
2095
+ }, cs = (e) => {
1938
2096
  let t = () => {
1939
2097
  throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
1940
2098
  };
@@ -1942,24 +2100,24 @@ $voltro_branch$`;
1942
2100
  createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${Y(t)}`),
1943
2101
  createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${Y(t)}.${Y(n)} (LIKE ${Y(n)} INCLUDING ALL)`),
1944
2102
  copyTable: (t, n, r) => e.run(`INSERT INTO ${Y(n)}.${Y(r)} SELECT * FROM ${Y(t)}.${Y(r)}`),
1945
- addForeignKey: (t, n) => e.run(Go(t, n)),
1946
- restoreIndexName: (t, n) => e.run(Wo(t, n)),
2103
+ addForeignKey: (t, n) => e.run(ss(t, n)),
2104
+ restoreIndexName: (t, n) => e.run(os(t, n)),
1947
2105
  dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${Y(t)} CASCADE`),
1948
2106
  neonBranchCreate: t,
1949
2107
  neonBranchDelete: t
1950
2108
  };
1951
- }, qo = class extends Error {
2109
+ }, ls = class extends Error {
1952
2110
  _tag = "TenantResidencyUnresolved";
1953
2111
  constructor(e) {
1954
2112
  super(e), this.name = "TenantResidencyUnresolved";
1955
2113
  }
1956
- }, Jo = class extends Error {
2114
+ }, us = class extends Error {
1957
2115
  region;
1958
2116
  _tag = "TenantRegionUnavailable";
1959
2117
  constructor(e, t) {
1960
2118
  super(t), this.region = e, this.name = "TenantRegionUnavailable";
1961
2119
  }
1962
- }, Yo, Xo = (e) => {
2120
+ }, ds, fs = (e) => {
1963
2121
  if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
1964
2122
  if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
1965
2123
  let t = /* @__PURE__ */ new Map();
@@ -1968,32 +2126,32 @@ $voltro_branch$`;
1968
2126
  if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
1969
2127
  t.set(n.tenantId, n.region);
1970
2128
  }
1971
- return Yo = e, e;
1972
- }, Zo = () => Yo, Qo = () => {
1973
- Yo = void 0;
1974
- }, $o = (e, t) => {
1975
- if (e == null || e === "") throw new qo("residency is on but the request has no resolvable tenant — refusing to bind a store");
2129
+ return ds = e, e;
2130
+ }, ps = () => ds, ms = () => {
2131
+ ds = void 0;
2132
+ }, hs = (e, t) => {
2133
+ if (e == null || e === "") throw new ls("residency is on but the request has no resolvable tenant — refusing to bind a store");
1976
2134
  let n = t.homes.find((t) => t.tenantId === e);
1977
- if (n === void 0) throw new qo(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
2135
+ if (n === void 0) throw new ls(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1978
2136
  return n;
1979
- }, es = (e, t) => t.servableRegions.includes(e), ts = (e, t) => {
1980
- let n = $o(e.tenantId, t), r = er(n.tenantId);
2137
+ }, gs = (e, t) => t.servableRegions.includes(e), _s = (e, t) => {
2138
+ let n = hs(e.tenantId, t), r = gr(n.tenantId);
1981
2139
  return {
1982
2140
  region: n.region,
1983
2141
  namespace: r,
1984
2142
  ...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
1985
2143
  };
1986
- }, ns = (e, t, n) => {
1987
- let r = ts(e, t);
1988
- if (!es(r.region, t)) throw new Jo(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
2144
+ }, vs = (e, t, n) => {
2145
+ let r = _s(e, t);
2146
+ if (!gs(r.region, t)) throw new us(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1989
2147
  let i = n.get(r.region);
1990
- if (i === void 0) throw new Jo(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
2148
+ if (i === void 0) throw new us(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1991
2149
  return {
1992
2150
  store: i,
1993
2151
  placement: r
1994
2152
  };
1995
- }, rs = async (e, t, n, r) => {
1996
- let { store: i, placement: a } = ns(e, t, n);
2153
+ }, ys = async (e, t, n, r) => {
2154
+ let { store: i, placement: a } = vs(e, t, n);
1997
2155
  return await r(i, a), a;
1998
2156
  }, Z = (e) => {
1999
2157
  if (typeof e == "string") return e;
@@ -2002,21 +2160,21 @@ $voltro_branch$`;
2002
2160
  return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
2003
2161
  }
2004
2162
  return `(${e.expr})`;
2005
- }, Q = (e) => e.map(Z), is = (e, t) => {
2163
+ }, Q = (e) => e.map(Z), bs = (e, t) => {
2006
2164
  if (e.length !== t.length) return !1;
2007
2165
  for (let n = 0; n < e.length; n++) if (Z(e[n]) !== Z(t[n])) return !1;
2008
2166
  return !0;
2009
- }, as = (e, t) => {
2167
+ }, xs = (e, t) => {
2010
2168
  if (e.length >= t.length) return !1;
2011
2169
  for (let n = 0; n < e.length; n++) if (Z(e[n]) !== Z(t[n])) return !1;
2012
2170
  return !0;
2013
- }, os = (e) => {
2171
+ }, Ss = (e) => {
2014
2172
  let t = [], n = e.appliedIndexes, r = e.tableName;
2015
2173
  for (let e = 0; e < n.length; e++) {
2016
2174
  let i = n[e];
2017
2175
  for (let a = e + 1; a < n.length; a++) {
2018
2176
  let e = n[a];
2019
- if (is(i.fields, e.fields)) {
2177
+ if (bs(i.fields, e.fields)) {
2020
2178
  let [n, a] = i.name < e.name ? [i, e] : [e, i];
2021
2179
  t.push({
2022
2180
  kind: "duplicate-fields",
@@ -2027,13 +2185,13 @@ $voltro_branch$`;
2027
2185
  });
2028
2186
  continue;
2029
2187
  }
2030
- as(i.fields, e.fields) ? t.push({
2188
+ xs(i.fields, e.fields) ? t.push({
2031
2189
  kind: "redundant-prefix",
2032
2190
  table: r,
2033
2191
  redundant: i,
2034
2192
  coveredBy: e,
2035
2193
  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).`
2036
- }) : as(e.fields, i.fields) && t.push({
2194
+ }) : xs(e.fields, i.fields) && t.push({
2037
2195
  kind: "redundant-prefix",
2038
2196
  table: r,
2039
2197
  redundant: e,
@@ -2043,23 +2201,23 @@ $voltro_branch$`;
2043
2201
  }
2044
2202
  }
2045
2203
  return t;
2046
- }, ss = (e) => {
2204
+ }, Cs = (e) => {
2047
2205
  let t = [];
2048
- for (let n of e) t.push(...os(n));
2206
+ for (let n of e) t.push(...Ss(n));
2049
2207
  return t;
2050
- }, cs = "\x1B[", ls = `${cs}38;2;245;158;11m`, us = `${cs}38;2;16;185;129m`, ds = (e, t) => `${e}${t}${M.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : ds(t, n) : n, fs = (e, t = {}) => {
2051
- 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, us, e), c = (e) => $(n, ls, 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) => {
2208
+ }, ws = "\x1B[", Ts = `${ws}38;2;245;158;11m`, Es = `${ws}38;2;16;185;129m`, Ds = (e, t) => `${e}${t}${j.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : Ds(t, n) : n, Os = (e, t = {}) => {
2209
+ let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, j.dim, e.padEnd(11)), a = (e) => $(n, (e) => j.bold(j.brand(e)), e), o = (e) => $(n, j.brightRed24, e), s = (e) => $(n, Es, e), c = (e) => $(n, Ts, e), l = (e) => $(n, j.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, j.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
2052
2210
  let n = e.slice(0, t), r = e.slice(t), i = [];
2053
2211
  return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
2054
2212
  }, m = [];
2055
- 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");
2056
- }, ps = (e, { apply: t, undo: n }) => ({
2213
+ 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, j.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");
2214
+ }, ks = (e, { apply: t, undo: n }) => ({
2057
2215
  name: e,
2058
2216
  apply: t,
2059
2217
  undo: n
2060
- }), ms = (e) => {
2218
+ }), As = (e) => {
2061
2219
  if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
2062
- let t = e.steps({ step: ps });
2220
+ let t = e.steps({ step: ks });
2063
2221
  if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
2064
2222
  return {
2065
2223
  __migration: !0,
@@ -2067,99 +2225,99 @@ $voltro_branch$`;
2067
2225
  name: e.name,
2068
2226
  steps: t
2069
2227
  };
2070
- }, hs = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, gs = C("_voltro_migrations", {
2071
- id: v({ prefix: "mig" }),
2072
- name: E(),
2073
- hash: E(),
2074
- status: E(),
2075
- appliedAt: b().nullable(),
2228
+ }, js = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Ms = E("_voltro_migrations", {
2229
+ id: x({ prefix: "mig" }),
2230
+ name: y(),
2231
+ hash: y(),
2232
+ status: y(),
2233
+ appliedAt: C().nullable(),
2076
2234
  durationMs: S().nullable(),
2077
- errorMessage: E().nullable(),
2078
- errorStack: E().nullable(),
2079
- workflowRunId: E().nullable(),
2080
- createdAt: b().default("now"),
2081
- updatedAt: b().default("now").onUpdate("now")
2082
- }).index(["status"]), _s = C("_voltro_seeds", {
2083
- id: v({ prefix: "seed" }),
2084
- name: E(),
2085
- lifecycle: E(),
2086
- fingerprint: E(),
2087
- cronSchedule: E().nullable(),
2088
- watchedTables: D().nullable(),
2089
- nextRunAt: b().nullable(),
2090
- lastRunStatus: E().nullable(),
2091
- lastRunAt: b().nullable(),
2235
+ errorMessage: y().nullable(),
2236
+ errorStack: y().nullable(),
2237
+ workflowRunId: y().nullable(),
2238
+ createdAt: C().default("now"),
2239
+ updatedAt: C().default("now").onUpdate("now")
2240
+ }).index(["status"]), Ns = E("_voltro_seeds", {
2241
+ id: x({ prefix: "seed" }),
2242
+ name: y(),
2243
+ lifecycle: y(),
2244
+ fingerprint: y(),
2245
+ cronSchedule: y().nullable(),
2246
+ watchedTables: i().nullable(),
2247
+ nextRunAt: C().nullable(),
2248
+ lastRunStatus: y().nullable(),
2249
+ lastRunAt: C().nullable(),
2092
2250
  lastRunDurationMs: S().nullable(),
2093
2251
  lastRunRowsTouched: S().nullable(),
2094
- lastError: E().nullable(),
2095
- workflowRunId: E().nullable(),
2096
- createdAt: b().default("now"),
2097
- updatedAt: b().default("now").onUpdate("now")
2098
- }).index(["lifecycle"]).index(["nextRunAt"]), vs = C("_voltro_migration_plans", {
2099
- id: v({ prefix: "plan" }),
2100
- fingerprint: E(),
2101
- liveFingerprint: E().nullable(),
2102
- operations: D(),
2103
- rollbackPlan: D().nullable(),
2104
- appliedBy: E(),
2105
- environment: E(),
2106
- source: E(),
2107
- onlineStrategy: E().nullable(),
2252
+ lastError: y().nullable(),
2253
+ workflowRunId: y().nullable(),
2254
+ createdAt: C().default("now"),
2255
+ updatedAt: C().default("now").onUpdate("now")
2256
+ }).index(["lifecycle"]).index(["nextRunAt"]), Ps = E("_voltro_migration_plans", {
2257
+ id: x({ prefix: "plan" }),
2258
+ fingerprint: y(),
2259
+ liveFingerprint: y().nullable(),
2260
+ operations: i(),
2261
+ rollbackPlan: i().nullable(),
2262
+ appliedBy: y(),
2263
+ environment: y(),
2264
+ source: y(),
2265
+ onlineStrategy: y().nullable(),
2108
2266
  durationMs: S(),
2109
- notes: E().nullable(),
2110
- squashedAt: b().nullable(),
2111
- appliedAt: b().default("now"),
2112
- createdAt: b().default("now"),
2113
- updatedAt: b().default("now").onUpdate("now")
2114
- }).index(["fingerprint"]).index(["environment"]), ys = C("_voltro_idempotency", {
2115
- id: v({ prefix: "idem" }),
2116
- scope: E(),
2117
- key: E(),
2118
- status: E(),
2119
- response: D().nullable(),
2120
- createdAt: b().default("now")
2121
- }).unique(["scope", "key"]).index(["createdAt"]), bs = C("_voltro_kv", {
2122
- id: v({ prefix: "kv" }),
2123
- key: E().unique(),
2124
- value: E().nullable(),
2125
- expiresAt: b().nullable(),
2126
- createdAt: b().default("now"),
2127
- updatedAt: b().default("now").onUpdate("now")
2128
- }).index(["expiresAt"]), xs = C("_voltro_api_keys", {
2129
- id: v({ prefix: "apikey" }),
2130
- tenantId: E().nullable(),
2131
- name: E(),
2132
- hashedKey: E().maxLength(64).unique(),
2133
- keyPrefix: E(),
2134
- scopes: D().nullable(),
2135
- lastUsedAt: b().nullable(),
2267
+ notes: y().nullable(),
2268
+ squashedAt: C().nullable(),
2269
+ appliedAt: C().default("now"),
2270
+ createdAt: C().default("now"),
2271
+ updatedAt: C().default("now").onUpdate("now")
2272
+ }).index(["fingerprint"]).index(["environment"]), Fs = E("_voltro_idempotency", {
2273
+ id: x({ prefix: "idem" }),
2274
+ scope: y(),
2275
+ key: y(),
2276
+ status: y(),
2277
+ response: i().nullable(),
2278
+ createdAt: C().default("now")
2279
+ }).unique(["scope", "key"]).index(["createdAt"]), Is = E("_voltro_kv", {
2280
+ id: x({ prefix: "kv" }),
2281
+ key: y().unique(),
2282
+ value: y().nullable(),
2283
+ expiresAt: C().nullable(),
2284
+ createdAt: C().default("now"),
2285
+ updatedAt: C().default("now").onUpdate("now")
2286
+ }).index(["expiresAt"]), Ls = E("_voltro_api_keys", {
2287
+ id: x({ prefix: "apikey" }),
2288
+ tenantId: y().nullable(),
2289
+ name: y(),
2290
+ hashedKey: y().maxLength(64).unique(),
2291
+ keyPrefix: y(),
2292
+ scopes: i().nullable(),
2293
+ lastUsedAt: C().nullable(),
2136
2294
  requestCount: S().default(0),
2137
- expiresAt: b().nullable(),
2138
- revokedAt: b().nullable(),
2139
- createdBy: E().nullable(),
2140
- onBehalfOf: E().nullable(),
2141
- metadata: D().nullable(),
2142
- createdAt: b().default("now")
2143
- }).index("byApiKeyTenant", ["tenantId"]), Ss = [
2144
- gs,
2145
- _s,
2146
- vs
2147
- ], Cs = "id", ws = (e, t) => {
2295
+ expiresAt: C().nullable(),
2296
+ revokedAt: C().nullable(),
2297
+ createdBy: y().nullable(),
2298
+ onBehalfOf: y().nullable(),
2299
+ metadata: i().nullable(),
2300
+ createdAt: C().default("now")
2301
+ }).index("byApiKeyTenant", ["tenantId"]), Rs = [
2302
+ Ms,
2303
+ Ns,
2304
+ Ps
2305
+ ], zs = "id", Bs = (e, t) => {
2148
2306
  let n = p(e);
2149
2307
  if (n === void 0) return t;
2150
- let r = n.fields[Cs]?.idScheme;
2151
- if (r === void 0 || t[Cs] != null) return t;
2308
+ let r = n.fields[zs]?.idScheme;
2309
+ if (r === void 0 || t[zs] != null) return t;
2152
2310
  if (r.kind === "numeric") {
2153
- if (!(Cs in t)) return t;
2311
+ if (!(zs in t)) return t;
2154
2312
  let e = { ...t };
2155
- return delete e[Cs], e;
2313
+ return delete e[zs], e;
2156
2314
  }
2157
- let i = tt(r, e);
2315
+ let i = ct(r, e);
2158
2316
  return i === null ? t : {
2159
2317
  ...t,
2160
- [Cs]: i
2318
+ [zs]: i
2161
2319
  };
2162
- }, Ts = (e, t) => t.map((t) => ws(e, t)), Es = {
2320
+ }, Vs = (e, t) => t.map((t) => Bs(e, t)), Hs = {
2163
2321
  postgres: { maxBindParameters: 65535 },
2164
2322
  mysql: { maxBindParameters: 65535 },
2165
2323
  mariadb: { maxBindParameters: 65535 },
@@ -2169,49 +2327,49 @@ $voltro_branch$`;
2169
2327
  },
2170
2328
  sqlite: { maxBindParameters: 32766 },
2171
2329
  turso: { maxBindParameters: 32766 }
2172
- }, Ds = (e) => Es[e], Os = (e) => {
2330
+ }, Us = (e) => Hs[e], Ws = (e) => {
2173
2331
  let t = /* @__PURE__ */ new Set();
2174
2332
  for (let n of e) for (let e of Object.keys(n)) t.add(e);
2175
2333
  return t.size;
2176
- }, ks = (e, t) => {
2334
+ }, Gs = (e, t) => {
2177
2335
  if (t === void 0 || e.length === 0) return [e];
2178
- let n = Math.max(1, Os(e)), r = Math.floor(t.maxBindParameters / n), i = t.maxRowsPerStatement ?? Infinity, a = Math.max(1, Math.min(r, i));
2336
+ let n = Math.max(1, Ws(e)), r = Math.floor(t.maxBindParameters / n), i = t.maxRowsPerStatement ?? Infinity, a = Math.max(1, Math.min(r, i));
2179
2337
  if (e.length <= a) return [e];
2180
2338
  let o = [];
2181
2339
  for (let t = 0; t < e.length; t += a) o.push(e.slice(t, t + a));
2182
2340
  return o;
2183
- }, As = (e, t) => {
2341
+ }, Ks = (e, t) => {
2184
2342
  let n = [], r = t;
2185
2343
  for (let [t, i] of Object.entries(e.fields)) {
2186
2344
  let e = i;
2187
2345
  e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
2188
2346
  }
2189
2347
  return n;
2190
- }, js = (e, t) => {
2348
+ }, qs = (e, t) => {
2191
2349
  let n = t;
2192
2350
  return e.filter((e) => n[e] === void 0 || n[e] === null);
2193
- }, Ms = (e, t, n) => e.insert(t.tableName, n), Ns = (e, t, n, r) => e.upsert(t.tableName, n, {
2351
+ }, Js = (e, t, n) => e.insert(t.tableName, n), Ys = (e, t, n, r) => e.upsert(t.tableName, n, {
2194
2352
  conflictColumns: r.conflictColumns,
2195
2353
  ...r.update === void 0 ? {} : { update: r.update }
2196
- }), Ps = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), Fs = 512, Is = (e) => {
2354
+ }), Xs = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), Zs = 512, Qs = (e) => {
2197
2355
  e.setMaxListeners(512);
2198
- }, Ls = (e, t, n) => ({
2356
+ }, $s = (e, t, n) => ({
2199
2357
  _tag: "PrimaryKeyConflictError",
2200
2358
  table: e,
2201
2359
  key: t,
2202
2360
  cause: n
2203
- }), Rs = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", zs = {
2361
+ }), ec = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", tc = {
2204
2362
  postgres: 5432,
2205
2363
  mysql: 3306,
2206
2364
  mariadb: 3306,
2207
2365
  mssql: 1433
2208
- }, Bs = /* @__PURE__ */ new Set([
2366
+ }, nc = /* @__PURE__ */ new Set([
2209
2367
  "localhost",
2210
2368
  "127.0.0.1",
2211
2369
  "::1",
2212
2370
  "[::1]",
2213
2371
  "0.0.0.0"
2214
- ]), Vs = (e) => {
2372
+ ]), rc = (e) => {
2215
2373
  let t = e.host, n = e.port, r = e.database;
2216
2374
  if (e.url !== void 0 && e.url !== "") try {
2217
2375
  let i = new URL(e.url);
@@ -2220,29 +2378,29 @@ $voltro_branch$`;
2220
2378
  return;
2221
2379
  }
2222
2380
  if (t === void 0 || t === "" || r === void 0 || r === "") return;
2223
- let i = n ?? zs[(e.dialect ?? "").toLowerCase()];
2381
+ let i = n ?? tc[(e.dialect ?? "").toLowerCase()];
2224
2382
  if (i === void 0 || !Number.isFinite(i)) return;
2225
2383
  let a = t.toLowerCase();
2226
2384
  return {
2227
- host: Bs.has(a) ? "localhost" : a,
2385
+ host: nc.has(a) ? "localhost" : a,
2228
2386
  port: i,
2229
2387
  database: r.toLowerCase()
2230
2388
  };
2231
- }, Hs = (e) => {
2232
- let t = Vs(e);
2233
- if (t !== void 0) return Mt("sha256").update(`${t.host}\u0000${t.port}\u0000${t.database}`).digest("hex").slice(0, 32);
2234
- }, Us = (e, t) => e === void 0 || t === void 0 ? "unknown" : e === t ? "same" : "different", Ws = {
2389
+ }, ic = (e) => {
2390
+ let t = rc(e);
2391
+ if (t !== void 0) return Ft("sha256").update(`${t.host}\u0000${t.port}\u0000${t.database}`).digest("hex").slice(0, 32);
2392
+ }, ac = (e, t) => e === void 0 || t === void 0 ? "unknown" : e === t ? "same" : "different", oc = {
2235
2393
  app: 3,
2236
2394
  plugin: 2,
2237
2395
  framework: 1
2238
- }, Gs = /* @__PURE__ */ new Map(), Ks = [], qs = () => [...Ks], Js = (e) => {
2396
+ }, sc = /* @__PURE__ */ new Map(), cc = [], lc = () => [...cc], uc = (e) => {
2239
2397
  if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
2240
2398
  if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
2241
- let t = e.source ?? "app", n = Gs.get(e.table);
2399
+ let t = e.source ?? "app", n = sc.get(e.table);
2242
2400
  if (n !== void 0) {
2243
2401
  let r = n.source ?? "app", i = n.ttlMs !== e.ttlMs || n.where !== void 0 != (e.where !== void 0);
2244
- if (Ws[t] < Ws[r]) {
2245
- i && Ks.push({
2402
+ if (oc[t] < oc[r]) {
2403
+ i && cc.push({
2246
2404
  table: e.table,
2247
2405
  kept: {
2248
2406
  source: r,
@@ -2255,7 +2413,7 @@ $voltro_branch$`;
2255
2413
  });
2256
2414
  return;
2257
2415
  }
2258
- i && r !== t && Ks.push({
2416
+ i && r !== t && cc.push({
2259
2417
  table: e.table,
2260
2418
  kept: {
2261
2419
  source: t,
@@ -2267,35 +2425,35 @@ $voltro_branch$`;
2267
2425
  }
2268
2426
  });
2269
2427
  }
2270
- Gs.set(e.table, {
2428
+ sc.set(e.table, {
2271
2429
  ...e,
2272
2430
  source: t
2273
2431
  });
2274
- }, Ys = () => [...Gs.values()], Xs = () => {
2275
- Gs.clear(), Ks.length = 0;
2276
- }, Zs = async (e, t, n, r = 2e4) => {
2432
+ }, dc = () => [...sc.values()], fc = () => {
2433
+ sc.clear(), cc.length = 0;
2434
+ }, pc = async (e, t, n, r = 2e4) => {
2277
2435
  let i = new Date(t - e.ttlMs), a = 0;
2278
2436
  for (;;) {
2279
2437
  let t = await n(e.table, e.timeColumn, i, r, e.where);
2280
2438
  if (a += t, t < r) break;
2281
2439
  }
2282
2440
  return a;
2283
- }, Qs = (e, t) => {
2441
+ }, mc = (e, t) => {
2284
2442
  let n = Number(e ?? String(t));
2285
2443
  return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
2286
- }, $s = "_voltro_cdc_offsets", ec = C($s, {
2287
- id: v({ prefix: "cdcoff" }),
2288
- replicaId: E(),
2289
- streamName: E(),
2290
- binlogFile: E(),
2291
- binlogPosition: E(),
2292
- updatedAt: b()
2293
- }).index(["replicaId"]), tc = C($s, {
2294
- id: v({ prefix: "cdcoff" }),
2295
- replicaId: E(),
2296
- streamName: E(),
2297
- ctVersion: E(),
2298
- updatedAt: b()
2299
- }).index(["replicaId"]), nc = "postgres";
2444
+ }, hc = "_voltro_cdc_offsets", gc = E(hc, {
2445
+ id: x({ prefix: "cdcoff" }),
2446
+ replicaId: y(),
2447
+ streamName: y(),
2448
+ binlogFile: y(),
2449
+ binlogPosition: y(),
2450
+ updatedAt: C()
2451
+ }).index(["replicaId"]), _c = E(hc, {
2452
+ id: x({ prefix: "cdcoff" }),
2453
+ replicaId: y(),
2454
+ streamName: y(),
2455
+ ctVersion: y(),
2456
+ updatedAt: C()
2457
+ }).index(["replicaId"]), vc = "postgres";
2300
2458
  //#endregion
2301
- export { ue as AUTO_FILLED_COLUMNS, Es as BULK_INSERT_LIMITS, J as BranchNameInvalid, ko as BranchTransitionInvalid, $s as CDC_OFFSETS_TABLE, Fs as CHANGE_LISTENER_CEILING, o as ColumnBuilder, we as DEFAULT_ACQUIRE_TIMEOUT_MS, Xa as DEFAULT_EAGER_FALLBACK_WARN_INTERVAL_MS, yn as DEFAULT_SUBJECT_GRAPH_DEPTH, zt as ENCRYPTED_PREFIX, nc as ENGINE, In as EagerCardinalityError, Ue as FILE_MIGRATION_PATTERN, st as FRAMEWORK_LIVE_TABLES, Bt as FieldDecryptionError, lo as INITIAL_VERSION, Ri as MATCHES_NO_ROWS, ut as MAX_IDENTIFIER_LENGTH, jt as SqlClient, _o as TableStreamError, Xn as TenantNamespaceInvalid, Yn as TenantNamespaceUnresolved, Jo as TenantRegionUnavailable, qo as TenantResidencyUnresolved, uo as VOLTRO_EXPIRES_MIXIN_ID, po as VOLTRO_LOCAL_FIRST_MIXIN_ID, ao as VersionConflict, Ie as WARN_IDENTIFIER_LENGTH, xs as _voltroApiKeysTable, ec as _voltroCdcOffsetsTable, ys as _voltroIdempotencyTable, bs as _voltroKvTable, vs as _voltroMigrationPlansTable, gs as _voltroMigrationsTable, tc as _voltroMssqlCdcOffsetsTable, _s as _voltroSeedsTable, wi as actorsTable, Ho as admitBranch, Oe as allEnumRenames, gn as allRegisteredRelations, h as allRegisteredTables, Hi as and, mt as array, Fi as arrayContains, Li as arrayHas, Ii as arrayOverlaps, Rn as attachEagerLoads, ua as attributionFields, ma as attributionKey, ss as auditAllTableIndexes, os as auditTableIndexes, dt as avg, _t as avgOver, Sa as beginLocalWrite, ge as bigint, ns as bindResidentStore, u as boolean, Eo as branchNamespaceName, Ds as bulkInsertLimitsFor, c as bytes, aa as changeDelete, ra as changeInsert, oa as changeSoftDelete, ia as changeUpdate, ks as chunkRowsForInsert, _a as claimPendingAttribution, ft as clearEnumRenames, Ta as clearPendingAttribution, vn as clearRelationsRegistry, Qo as clearResidencyConfig, Xs as clearRetentions, _e as clearTableRegistry, ka as clearWriteRecorders, ir as coercePredicateValue, ar as coercePredicateValues, ea as collectSubqueries, je as column, Kt as columnSchema, Os as columnsPerRow, yr as compileEagerJson, F as compilePredicate, or as compileRawFragment, vr as compileSelect, So as computeEmbedding, Hs as connectionIdentity, Ni as contains, ht as count, pe as countDistinct, se as crdtManagedColumns, qe as crdtText, la as currentWriteAttribution, a as databaseHandle, n as date, Ge as dbEnum, Wa as dbMetricTagCacheSizeForTests, qa as dbOperationsInFlight, re as decimal, vt as declareEnumRename, Nn as decodeRowsFromSchema, Gt as decryptFieldsOnRead, ms as defineMigration, $e as defineMixin, at as defineSeed, pt as denseRank, En as deriveSubjectGraph, Ae as deriveTypeIdPrefix, Rt as deserializeArraysOnRead, Re as drainIdentifierWarnings, ae as dropped, Fn as encodeRowForSchema, Wt as encryptFieldsForWrite, Ut as encryptedColumnsOf, Ca as endLocalWrite, zo as enforceBranchLimits, xe as ensureTableRegistered, Ti as eq, sr as escapeLike, $i as evaluatePredicate, he as except, Yi as exists, fo as expires, na as externalChangeEvent, Ne as fireSchemaChangeSeeds, Je as fireTenantCreateSeeds, fs as formatIndexAuditIssue, Dn as formatSubjectGraph, Ss as frameworkTables, tt as generateId, Pe as generateSnowflake, le as geography, f as geometry, Me as getEnumRenames, hn as getRelation, mn as getRelations, Zo as getResidencyConfig, p as getTable, Di as gt, Oi as gte, Jn as hasEagerLoads, xo as hybridSearch, v as id, ji as inSet, qi as inSubquery, on as inferForeignKey, Ms as insertRow, S as integer, l as intersect, fe as interval, Do as isBranchNamespace, en as isEmptyRelationsSpec, Ht as isEncrypted, Vt as isFieldDecryptionError, ke as isFileMigration, Qe as isFrameworkOwnedLiveTable, ho as isLocalFirst, hs as isMigrationDefinition, No as isNeonConnection, Bi as isNotNull, zi as isNull, Rs as isPrimaryKeyConflictError, es as isRegionServable, tn as isRelationsSpec, lt as isSeedDefinition, Ce as isSqliteFamily, ee as isTableReactive, Xe as isView, D as json, Gi as jsonField, e as jsonIndex, s as lag, oe as lead, qs as listRetentionConflicts, Ys as listRetentions, mo as localFirst, go as localFirstTables, ki as lt, Ai as lte, $a as makeEagerFallbackReporter, Ko as makeNamespaceBranchExecutor, rn as many, an as manyToMany, i as materializeFields, Ke as max, et as migration, t as min, js as missingConflictColumns, As as missingRequiredColumns, it as mixin, Ei as neq, Ao as nextBranchState, Vs as normaliseTarget, Wi as not, Xi as notExists, Mi as notInSet, Ji as notInSubquery, be as numeric, Ya as observeDbOp, nn as one, Ln as oneCardinalityMessage, Ui as or, w as orderClausesOf, ne as paginateBy, ie as paginateById, Ea as pendingAttributionCount, Lo as planBranch, jo as planBranchProvision, Mo as planBranchTeardown, Ro as planBranchTeardownFor, Fo as planNeonBranchProvision, Io as planNeonBranchTeardown, so as planVersionedUpdate, gt as pluginRef, me as pluginRefSpecOf, Ls as primaryKeyConflictError, Bo as provisionBranch, rs as provisionResidentTenant, tr as qualifyTable, ce as queryFor, Ve as queryForView, Ee as quoteIdent, Is as raiseChangeListenerCeiling, d as rank, g as raw, ve as readableByColumns, Se as real, Ja as recordDbOp, Aa as recordsTable, m as reference, bi as registerCoreTables, pn as registerDiscoveredRelations, ga as registerPendingAttribution, fn as registerRelations, Js as registerRetention, rt as registerTable, Da as registerWriteRecorder, $t as relations, Si as requireActors, y as requireTable, Ci as requireTenants, Ua as resetDbMetricTagCacheForTests, Ye as resetSnowflake, ts as residentPlacement, Pt as resolveActorSnapshot, Po as resolveBranchMechanism, Qa as resolveEagerFallbackWarnIntervalMs, wa as resolveEchoAttribution, _ as resolveFullTextIndex, ot as resolveIdScheme, We as resolveMixinGraph, $o as resolveTenantHome, er as resolveTenantNamespace, Qs as retentionTtlMsFromEnv, te as rowNumber, qt as rowSchema, ro as runRetryingTransaction, io as runStoreTransaction, ca as runWithWriteAttribution, ja as runWriteRecorders, Us as sameDatabase, $n as sanitizeIdentifierFragment, Lt as serializeArraysForWrite, x as serverOnlyColumns, Xo as setResidencyConfig, Fe as setSchemaChangeSeedHook, Le as setTenantCreateSeedHook, eo as settleTransactionExit, co as settleVersionedUpdate, Vi as spatialPredicate, ws as stampGeneratedId, Ts as stampGeneratedIds, Pi as startsWith, bo as streamTable, de as sum, yt as sumOver, Zs as sweepRetention, C as table, Vo as teardownBranch, E as text, b as timestamp, bt as timestampMs, xt as timestampMsOrNull, r as union, ye as unionAll, Oa as unregisterWriteRecorder, Ps as updateManyRow, Ns as upsertRow, nt as validateColumnName, Ze as validateIndexName, _n as validateRegisteredRelations, ln as validateRelationConfig, He as validateTableName, Be as validateTypeIdPrefix, Te as vector, ct as vectorDistanceToOpclass, Co as vectorEmbedding, oo as versionColumnOf, ze as view, De as viewSql, ta as walkLeaves, da as withCapturedAttribution };
2459
+ export { e as AUTO_FILLED_COLUMNS, Hs as BULK_INSERT_LIMITS, J as BranchNameInvalid, Go as BranchTransitionInvalid, hc as CDC_OFFSETS_TABLE, Zs as CHANGE_LISTENER_CEILING, ht as ColumnBuilder, Te as DEFAULT_ACQUIRE_TIMEOUT_MS, po as DEFAULT_EAGER_FALLBACK_WARN_INTERVAL_MS, Fn as DEFAULT_SUBJECT_GRAPH_DEPTH, Ht as ENCRYPTED_PREFIX, vc as ENGINE, Qn as EagerCardinalityError, We as FILE_MIGRATION_PATTERN, lt as FRAMEWORK_LIVE_TABLES, Ut as FieldDecryptionError, Eo as INITIAL_VERSION, ea as MATCHES_NO_ROWS, Ie as MAX_IDENTIFIER_LENGTH, Pt as SqlClient, No as TableStreamError, fr as TenantNamespaceInvalid, dr as TenantNamespaceUnresolved, us as TenantRegionUnavailable, ls as TenantResidencyUnresolved, Do as VOLTRO_EXPIRES_MIXIN_ID, ko as VOLTRO_LOCAL_FIRST_MIXIN_ID, So as VersionConflict, ze as WARN_IDENTIFIER_LENGTH, Ls as _voltroApiKeysTable, gc as _voltroCdcOffsetsTable, Fs as _voltroIdempotencyTable, Is as _voltroKvTable, Ps as _voltroMigrationPlansTable, Ms as _voltroMigrationsTable, _c as _voltroMssqlCdcOffsetsTable, Ns as _voltroSeedsTable, Bi as actorsTable, is as admitBranch, pt as allEnumRenames, Mn as allRegisteredRelations, h as allRegisteredTables, ia as and, ge as array, Zi as arrayContains, $i as arrayHas, Qi as arrayOverlaps, er as attachEagerLoads, Ea as attributionFields, Aa as attributionKey, Cs as auditAllTableIndexes, Ss as auditTableIndexes, ft as avg, vt as avgOver, Ra as beginLocalWrite, u as bigint, vs as bindResidentStore, c as boolean, Ho as branchNamespaceName, Us as bulkInsertLimitsFor, ce as bytes, xa as changeDelete, ya as changeInsert, Sa as changeSoftDelete, ba as changeUpdate, Gs as chunkRowsForInsert, Na as claimPendingAttribution, an as classifyConstraintViolation, yt as clearEnumRenames, Va as clearPendingAttribution, Pn as clearRelationsRegistry, ms as clearResidencyConfig, fc as clearRetentions, _e as clearTableRegistry, Ga as clearWriteRecorders, br as coercePredicateValue, xr as coercePredicateValues, ga as collectSubqueries, je as column, cn as columnSchema, Ws as columnsPerRow, Fr as compileEagerJson, F as compilePredicate, Sr as compileRawFragment, Pr as compileSelect, Ro as computeEmbedding, ic as connectionIdentity, Yi as contains, gt as count, pe as countDistinct, Je as crdtManagedColumns, n as crdtText, Ta as currentWriteAttribution, a as databaseHandle, Ke as date, ie as dbEnum, oo as dbMetricTagCacheSizeForTests, lo as dbOperationsInFlight, oe as decimal, Me as declareEnumRename, Jt as decodeFieldValue, Yn as decodeRowsFromSchema, $t as decryptFieldsOnRead, As as defineMigration, ot as defineMixin, st as defineSeed, mt as denseRank, Hn as deriveSubjectGraph, nt as deriveTypeIdPrefix, Vt as deserializeArraysOnRead, rt as drainIdentifierWarnings, ue as dropped, Kt as encodeFieldValue, Zn as encodeRowForSchema, Qt as encryptFieldsForWrite, Zt as encryptedColumnsOf, za as endLocalWrite, ts as enforceBranchLimits, xe as ensureTableRegistered, Vi as eq, Cr as escapeLike, ha as evaluatePredicate, he as except, da as exists, Oo as expires, va as externalChangeEvent, tn as extractDbCause, Ne as fireSchemaChangeSeeds, Ye as fireTenantCreateSeeds, Os as formatIndexAuditIssue, Un as formatSubjectGraph, Rs as frameworkTables, ct as generateId, Xe as generateSnowflake, f as geography, ee as geometry, _t as getEnumRenames, jn as getRelation, An as getRelations, ps as getResidencyConfig, p as getTable, Ui as gt, Wi as gte, ur as hasEagerLoads, Lo as hybridSearch, x as id, qi as inSet, la as inSubquery, xn as inferForeignKey, Js as insertRow, S as integer, l as intersect, xt as interval, Uo as isBranchNamespace, gn as isEmptyRelationsSpec, Gt as isEncrypted, Wt as isFieldDecryptionError, ke as isFileMigration, on as isForeignKeyViolation, $e as isFrameworkOwnedLiveTable, jo as isLocalFirst, js as isMigrationDefinition, Ce as isMysqlFamily, Yo as isNeonConnection, na as isNotNull, ta as isNull, ec as isPrimaryKeyConflictError, sn as isQueryTimeout, Yt as isRawEncoding, gs as isRegionServable, _n as isRelationsSpec, ut as isSeedDefinition, Ee as isSqliteFamily, te as isTableReactive, Ze as isView, i as json, sa as jsonField, Le as jsonIndex, s as lag, se as lead, lc as listRetentionConflicts, dc as listRetentions, Ao as localFirst, Mo as localFirstTables, Gi as lt, Ki as lte, go as makeEagerFallbackReporter, cs as makeNamespaceBranchExecutor, yn as many, bn as manyToMany, be as materializeFields, qe as max, tt as migration, t as min, qs as missingConflictColumns, Ks as missingRequiredColumns, Ge as mixin, Hi as neq, Ko as nextBranchState, rc as normaliseTarget, oa as not, fa as notExists, Ji as notInSet, ua as notInSubquery, g as numeric, fo as observeDbOp, vn as one, $n as oneCardinalityMessage, aa as or, w as orderClausesOf, re as paginateBy, ae as paginateById, Ha as pendingAttributionCount, $o as planBranch, qo as planBranchProvision, Jo as planBranchTeardown, es as planBranchTeardownFor, Zo as planNeonBranchProvision, Qo as planNeonBranchTeardown, wo as planVersionedUpdate, me as pluginRef, o as pluginRefSpecOf, $s as primaryKeyConflictError, ns as provisionBranch, ys as provisionResidentTenant, _r as qualifyTable, le as queryFor, He as queryForView, de as quoteIdent, Qs as raiseChangeListenerCeiling, d as rank, ve as raw, Se as readableByColumns, m as real, uo as recordDbOp, Ka as recordsTable, b as reference, Ii as registerCoreTables, kn as registerDiscoveredRelations, Ma as registerPendingAttribution, On as registerRelations, uc as registerRetention, it as registerTable, Ua as registerWriteRecorder, hn as relations, Ri as requireActors, v as requireTable, zi as requireTenants, ao as resetDbMetricTagCacheForTests, dt as resetSnowflake, _s as residentPlacement, Lt as resolveActorSnapshot, Xo as resolveBranchMechanism, ho as resolveEagerFallbackWarnIntervalMs, Ba as resolveEchoAttribution, _ as resolveFullTextIndex, Pe as resolveIdScheme, Ae as resolveMixinGraph, hs as resolveTenantHome, gr as resolveTenantNamespace, mc as retentionTtlMsFromEnv, ne as rowNumber, ln as rowSchema, bo as runRetryingTransaction, xo as runStoreTransaction, wa as runWithWriteAttribution, qa as runWriteRecorders, ac as sameDatabase, hr as sanitizeIdentifierFragment, Bt as serializeArraysForWrite, at as serverOnlyColumns, fs as setResidencyConfig, Fe as setSchemaChangeSeedHook, Re as setTenantCreateSeedHook, _o as settleTransactionExit, To as settleVersionedUpdate, ra as spatialPredicate, Bs as stampGeneratedId, Vs as stampGeneratedIds, Xi as startsWith, Io as streamTable, fe as sum, bt as sumOver, pc as sweepRetention, E as table, rs as teardownBranch, y as text, C as timestamp, St as timestampMs, Ct as timestampMsOrNull, r as union, ye as unionAll, Wa as unregisterWriteRecorder, Xs as updateManyRow, Ys as upsertRow, Qe as validateColumnName, Ue as validateIndexName, Nn as validateRegisteredRelations, Tn as validateRelationConfig, Ve as validateTableName, Oe as validateTypeIdPrefix, we as vector, et as vectorDistanceToOpclass, zo as vectorEmbedding, Co as versionColumnOf, Be as view, De as viewSql, _a as walkLeaves, Da as withCapturedAttribution };