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