@voltro/database 0.18.0 → 0.20.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,16 +1,17 @@
1
1
  import { $ as e, A as t, At as n, B as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, G as d, H as f, I as p, J as m, K as h, L as g, M as ee, Mt as _, N as v, Nt as y, O as b, Ot as x, P as te, Q as S, R as ne, S as re, St as C, T as ie, Tt as ae, U as w, V as oe, W as se, X as ce, Y as le, Z as ue, _ as de, _t as fe, a as pe, at as me, b as he, bt as ge, c as _e, ct as ve, d as ye, dt as be, et as xe, f as Se, ft as Ce, g as we, gt as Te, h as Ee, ht as De, i as T, it as Oe, j as ke, jt as E, k as Ae, kt as je, l as Me, lt as Ne, m as Pe, mt as Fe, n as Ie, nt as Le, o as Re, ot as ze, p as Be, pt as Ve, q as He, r as Ue, rt as We, s as Ge, st as Ke, t as qe, tt as Je, u as Ye, ut as Xe, v as Ze, vt as Qe, w as $e, wt as D, x as et, xt as O, y as tt, yt as nt, z as rt } from "./fileBased-Dfuv6JWP.js";
2
2
  import { timestampMs as it, timestampMsOrNull as at } from "./wire.js";
3
3
  import { Chunk as ot, Data as st, Effect as ct, Option as k, Schema as A, Stream as lt } from "effect";
4
+ import { AsyncLocalStorage as ut } from "node:async_hooks";
4
5
  import { ansi as j } from "@voltro/logger";
5
- import { SqlClient as ut } from "@effect/sql";
6
+ import { SqlClient as dt } from "@effect/sql";
6
7
  //#region src/arrayCodec.ts
7
- var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", ft = (e) => {
8
+ var ft = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", pt = (e) => {
8
9
  let t = [];
9
10
  for (let [n, r] of Object.entries(e.fields)) r.type === "array" && t.push(n);
10
11
  return t;
11
- }, pt = (e, t, n) => {
12
- if (!dt(n) || !t) return e;
13
- let r = ft(t);
12
+ }, mt = (e, t, n) => {
13
+ if (!ft(n) || !t) return e;
14
+ let r = pt(t);
14
15
  if (r.length === 0) return e;
15
16
  let i = { ...e };
16
17
  for (let e of r) {
@@ -18,9 +19,9 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
18
19
  Array.isArray(t) && (i[e] = JSON.stringify(t));
19
20
  }
20
21
  return i;
21
- }, mt = (e, t, n) => {
22
- if (!dt(n) || !t) return e;
23
- let r = ft(t);
22
+ }, ht = (e, t, n) => {
23
+ if (!ft(n) || !t) return e;
24
+ let r = pt(t);
24
25
  return r.length === 0 ? e : e.map((e) => {
25
26
  let t;
26
27
  for (let n of r) {
@@ -32,7 +33,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
32
33
  }
33
34
  return t ?? e;
34
35
  });
35
- }, ht = "enc:v1:", gt = class extends Error {
36
+ }, gt = "enc:v1:", _t = class extends Error {
36
37
  _tag = "FieldDecryptionError";
37
38
  table;
38
39
  column;
@@ -40,33 +41,33 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
40
41
  constructor(e) {
41
42
  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;
42
43
  }
43
- }, _t = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", vt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), yt = (e) => {
44
+ }, vt = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", yt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), bt = (e) => {
44
45
  let t = [];
45
46
  for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
46
47
  return t;
47
- }, bt = (e, t, n) => {
48
+ }, xt = (e, t, n) => {
48
49
  if (!t) return e;
49
- let r = yt(t);
50
+ let r = bt(t);
50
51
  if (r.length === 0) return e;
51
52
  let i = { ...e };
52
53
  for (let e of r) {
53
54
  let r = i[e];
54
- if (!(r == null || vt(r))) {
55
+ if (!(r == null || yt(r))) {
55
56
  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)`);
56
57
  i[e] = n.encrypt(JSON.stringify(r));
57
58
  }
58
59
  }
59
60
  return i;
60
- }, xt = (e, t, n, r) => {
61
+ }, St = (e, t, n, r) => {
61
62
  if (!t) return e;
62
- let i = yt(t);
63
+ let i = bt(t);
63
64
  if (i.length === 0 || !n) return e;
64
65
  let a = r?.onError ?? "throw", o = t.tableName ?? "?";
65
66
  return e.map((e) => {
66
67
  let t;
67
68
  for (let s of i) {
68
69
  let i = e[s];
69
- if (vt(i)) {
70
+ if (yt(i)) {
70
71
  t ??= { ...e };
71
72
  try {
72
73
  t[s] = JSON.parse(n.decrypt(i));
@@ -80,7 +81,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
80
81
  });
81
82
  continue;
82
83
  }
83
- throw new gt({
84
+ throw new _t({
84
85
  table: o,
85
86
  column: s,
86
87
  reason: n
@@ -90,7 +91,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
90
91
  }
91
92
  return t ?? e;
92
93
  });
93
- }, St = (e) => {
94
+ }, Ct = (e) => {
94
95
  let t = (() => {
95
96
  switch (e.type) {
96
97
  case "id":
@@ -111,37 +112,37 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
111
112
  }
112
113
  })();
113
114
  return e.nullable === !0 ? A.NullOr(t) : t;
114
- }, Ct = (e, t) => {
115
+ }, wt = (e, t) => {
115
116
  let n = new Set(t?.omit ?? []), r = {};
116
- for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = St(i));
117
+ for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = Ct(i));
117
118
  return A.Struct(r);
118
- }, wt = (e) => typeof e == "function" ? e : () => e, Tt = (e, t) => ({
119
+ }, Tt = (e) => typeof e == "function" ? e : () => e, Et = (e, t) => ({
119
120
  kind: "one",
120
- target: wt(e),
121
+ target: Tt(e),
121
122
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
122
123
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
123
- }), Et = (e, t) => ({
124
+ }), Dt = (e, t) => ({
124
125
  kind: "many",
125
- target: wt(e),
126
+ target: Tt(e),
126
127
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
127
128
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
128
- }), Dt = (e, t) => ({
129
+ }), Ot = (e, t) => ({
129
130
  kind: "manyToMany",
130
- target: wt(e),
131
- through: wt(t.through),
131
+ target: Tt(e),
132
+ through: Tt(t.through),
132
133
  sourceKey: t.sourceKey,
133
134
  targetKey: t.targetKey
134
- }), Ot = {
135
- one: Tt,
136
- many: Et,
137
- manyToMany: Dt
138
- }, kt = (e, t) => {
135
+ }), kt = {
136
+ one: Et,
137
+ many: Dt,
138
+ manyToMany: Ot
139
+ }, At = (e, t) => {
139
140
  let n = typeof e == "function" ? e : () => e;
140
141
  return {
141
142
  source: n,
142
- relations: t(Ot, n())
143
+ relations: t(kt, n())
143
144
  };
144
- }, At = (e) => {
145
+ }, jt = (e) => {
145
146
  if (typeof e != "object" || !e) return !1;
146
147
  let t = e;
147
148
  if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
@@ -150,64 +151,64 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
150
151
  let t = e?.kind;
151
152
  return t === "one" || t === "many" || t === "manyToMany";
152
153
  });
153
- }, jt = Tt, Mt = Et, Nt = Dt, M = (e, t, n) => {
154
+ }, Mt = Et, Nt = Dt, Pt = Ot, Ft = (e, t, n) => {
154
155
  let r = [];
155
156
  for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
156
157
  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>' }.`);
157
158
  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.`);
158
159
  return r[0];
159
- }, Pt = (e) => Object.keys(e.fields), N = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Ft = (e) => {
160
- let t = Pt(e);
160
+ }, It = (e) => Object.keys(e.fields), Lt = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Rt = (e) => {
161
+ let t = It(e);
161
162
  return t.length === 0 ? "<none>" : t.join(", ");
162
- }, It = (e, t, n) => {
163
+ }, zt = (e, t, n) => {
163
164
  let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
164
165
  if (n.kind === "manyToMany") {
165
166
  let t = n.through();
166
- for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!N(t, o)) throw Error(`${r}: manyToMany ${a} '${o}' is not a column on the junction table '${t.tableName}'. Both keys name columns on the JUNCTION — ${a === "sourceKey" ? `sourceKey points at '${e.tableName}'` : `targetKey points at '${i.tableName}'`}. Columns on '${t.tableName}': ${Ft(t)}.`);
167
+ for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!Lt(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}': ${Rt(t)}.`);
167
168
  return;
168
169
  }
169
170
  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.`);
170
- if (n.sourceKey !== void 0 && !N(e, n.sourceKey)) {
171
- let t = N(i, n.sourceKey);
172
- 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}': ${Ft(e)}.`));
171
+ if (n.sourceKey !== void 0 && !Lt(e, n.sourceKey)) {
172
+ let t = Lt(i, n.sourceKey);
173
+ 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}': ${Rt(e)}.`));
173
174
  }
174
- if (n.foreignKey !== void 0 && !N(i, n.foreignKey)) {
175
- let t = N(e, n.foreignKey);
176
- 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}': ${Ft(i)}.`));
175
+ if (n.foreignKey !== void 0 && !Lt(i, n.foreignKey)) {
176
+ let t = Lt(e, n.foreignKey);
177
+ 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}': ${Rt(i)}.`));
177
178
  }
178
- }, Lt = Symbol.for("@voltro/database/relationsRegistry"), Rt = globalThis, P = Rt[Lt] ?? (Rt[Lt] = /* @__PURE__ */ new Map()), zt = (e) => {
179
- let t = e.source(), n = P.get(t.tableName);
179
+ }, Bt = Symbol.for("@voltro/database/relationsRegistry"), Vt = globalThis, M = Vt[Bt] ?? (Vt[Bt] = /* @__PURE__ */ new Map()), Ht = (e) => {
180
+ let t = e.source(), n = M.get(t.tableName);
180
181
  if (n === void 0) {
181
- P.set(t.tableName, new Map(Object.entries(e.relations)));
182
+ M.set(t.tableName, new Map(Object.entries(e.relations)));
182
183
  return;
183
184
  }
184
185
  for (let [r, i] of Object.entries(e.relations)) {
185
186
  if (n.has(r)) throw Error(`duplicate relation '${r}' on '${t.tableName}': two relations() blocks both declare it. Pick distinct names or merge them into one block.`);
186
187
  n.set(r, i);
187
188
  }
188
- }, Bt = (e) => {
189
+ }, Ut = (e) => {
189
190
  let t = 0;
190
- for (let n of Object.values(e)) At(n) && (zt(n), t += 1);
191
+ for (let n of Object.values(e)) jt(n) && (Ht(n), t += 1);
191
192
  return t;
192
- }, Vt = (e) => {
193
- let t = P.get(e);
193
+ }, Wt = (e) => {
194
+ let t = M.get(e);
194
195
  if (t !== void 0) return Object.fromEntries(t);
195
- }, Ht = (e, t) => P.get(e)?.get(t), Ut = () => {
196
+ }, Gt = (e, t) => M.get(e)?.get(t), Kt = () => {
196
197
  let e = [];
197
- for (let [t, n] of P) for (let [r, i] of n) e.push({
198
+ for (let [t, n] of M) for (let [r, i] of n) e.push({
198
199
  source: t,
199
200
  name: r,
200
201
  relation: i
201
202
  });
202
203
  return e;
203
- }, Wt = () => {
204
- for (let [e, t] of P) {
204
+ }, qt = () => {
205
+ for (let [e, t] of M) {
205
206
  let n = u(e);
206
- if (n !== void 0) for (let [e, r] of t) It(n, e, r);
207
+ if (n !== void 0) for (let [e, r] of t) zt(n, e, r);
207
208
  }
208
- }, Gt = () => {
209
- P.clear();
210
- }, Kt = (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, qt = (e) => {
209
+ }, Jt = () => {
210
+ M.clear();
211
+ }, Yt = (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, Xt = (e) => {
211
212
  if (e == null || typeof e != "string") return e;
212
213
  let t = e.trim();
213
214
  if (t.length === 0) return e;
@@ -218,7 +219,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
218
219
  } catch {
219
220
  return e;
220
221
  }
221
- }, Jt = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Yt = (e) => {
222
+ }, Zt = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Qt = (e) => {
222
223
  if (e == null || e instanceof Date) return e;
223
224
  if (typeof e == "string") {
224
225
  let t = new Date(e);
@@ -229,19 +230,19 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
229
230
  return isNaN(t.getTime()) ? e : t;
230
231
  }
231
232
  return e;
232
- }, Xt = (e, t, n) => {
233
+ }, $t = (e, t, n) => {
233
234
  if (e == null) return e;
234
235
  switch (t) {
235
- case "boolean": return n === "postgres" ? e : Kt(e);
236
+ case "boolean": return n === "postgres" ? e : Yt(e);
236
237
  case "json":
237
- case "array": return n === "postgres" ? e : qt(e);
238
+ case "array": return n === "postgres" ? e : Xt(e);
238
239
  case "timestamp":
239
- case "date": return n === "sqlite" || n === "turso" ? Yt(e) : e;
240
+ case "date": return n === "sqlite" || n === "turso" ? Qt(e) : e;
240
241
  case "decimal":
241
- case "bigint": return Jt(e);
242
+ case "bigint": return Zt(e);
242
243
  default: return e;
243
244
  }
244
- }, Zt = (e, t, n) => {
245
+ }, en = (e, t, n) => {
245
246
  if (e.length === 0) return e;
246
247
  let r = u(t);
247
248
  if (r === void 0) return e;
@@ -252,36 +253,36 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
252
253
  });
253
254
  return e.map((e) => {
254
255
  let t = { ...e };
255
- for (let { key: e, type: r } of a) e in t && (t[e] = Xt(t[e], r, n));
256
+ for (let { key: e, type: r } of a) e in t && (t[e] = $t(t[e], r, n));
256
257
  return t;
257
258
  });
258
- }, Qt = (e, t) => {
259
+ }, tn = (e, t) => {
259
260
  if (e == null) return e;
260
261
  switch (t) {
261
262
  case "json":
262
263
  case "array": return typeof e == "string" ? e : JSON.stringify(e);
263
264
  default: return e;
264
265
  }
265
- }, $t = (e, t, n = ["json", "array"]) => {
266
+ }, nn = (e, t, n = ["json", "array"]) => {
266
267
  let r = u(t);
267
268
  if (r === void 0) return e;
268
269
  let i = r.fields, a = null;
269
270
  for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
270
- let n = Qt(e[t], r.type);
271
+ let n = tn(e[t], r.type);
271
272
  n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
272
273
  }
273
274
  return a ?? e;
274
- }, en = class extends Error {
275
+ }, rn = class extends Error {
275
276
  _tag = "EagerCardinalityError";
276
277
  constructor(e) {
277
278
  super(e), this.name = "EagerCardinalityError";
278
279
  }
279
- }, tn = (e) => {
280
+ }, an = (e) => {
280
281
  let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
281
282
  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.");
282
- }, nn = async (e, t, n, r) => {
283
+ }, on = async (e, t, n, r) => {
283
284
  if (e.length === 0) return e;
284
- let i = Vt(n.tableName);
285
+ let i = Wt(n.tableName);
285
286
  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?`);
286
287
  let a = e.map((e) => ({ ...e }));
287
288
  for (let [e, o] of Object.entries(t)) {
@@ -290,36 +291,36 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
290
291
  let t = Object.keys(i).join(", ") || "<none>";
291
292
  throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
292
293
  }
293
- It(n, e, t), await rn(a, e, t, o === !0 ? {} : o, n, r);
294
+ zt(n, e, t), await sn(a, e, t, o === !0 ? {} : o, n, r);
294
295
  }
295
296
  return a;
296
- }, rn = async (e, t, n, r, i, a) => {
297
+ }, sn = async (e, t, n, r, i, a) => {
297
298
  switch (n.kind) {
298
299
  case "one":
299
- await an(e, t, n, r, i, a);
300
+ await cn(e, t, n, r, i, a);
300
301
  return;
301
302
  case "many":
302
- await on(e, t, n, r, i, a);
303
+ await ln(e, t, n, r, i, a);
303
304
  return;
304
305
  case "manyToMany":
305
- await cn(e, t, n, r, i, a);
306
+ await dn(e, t, n, r, i, a);
306
307
  return;
307
308
  }
308
- }, an = async (e, t, n, r, i, a) => {
309
- let o = n.target(), s = n.sourceKey ?? ln(i, o.tableName);
309
+ }, cn = async (e, t, n, r, i, a) => {
310
+ let o = n.target(), s = n.sourceKey ?? fn(i, o.tableName);
310
311
  if (s !== void 0) {
311
- let n = F(e, s), i = n.length === 0 ? [] : await un(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
312
+ let n = pn(e, s), i = n.length === 0 ? [] : await mn(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
312
313
  for (let n of e) {
313
314
  let e = n[s];
314
315
  n[t] = e == null ? null : c.get(e) ?? null;
315
316
  }
316
- await dn(i, r.with, o, a);
317
+ await hn(i, r.with, o, a);
317
318
  return;
318
319
  }
319
- let c = n.foreignKey ?? M(o, i.tableName, t), l = n.sourceKey ?? "id", u = F(e, l), d = u.length === 0 ? [] : await un(o, c, u, r, a), f = /* @__PURE__ */ new Map();
320
+ let c = n.foreignKey ?? Ft(o, i.tableName, t), l = n.sourceKey ?? "id", u = pn(e, l), d = u.length === 0 ? [] : await mn(o, c, u, r, a), f = /* @__PURE__ */ new Map();
320
321
  for (let e of d) {
321
322
  let n = e[c];
322
- if (f.has(n)) throw new en(tn({
323
+ if (f.has(n)) throw new rn(an({
323
324
  relationName: t,
324
325
  sourceTableName: i.tableName,
325
326
  targetTableName: o.tableName,
@@ -332,9 +333,9 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
332
333
  let e = n[l];
333
334
  n[t] = e == null ? null : f.get(e) ?? null;
334
335
  }
335
- await dn(d, r.with, o, a);
336
- }, on = async (e, t, n, r, i, a) => {
337
- let o = n.target(), s = n.foreignKey ?? M(o, i.tableName, t), c = n.sourceKey ?? "id", l = F(e, c), u = sn(r), d = l.length === 0 ? [] : await un(o, s, l, u, a), f = /* @__PURE__ */ new Map();
336
+ await hn(d, r.with, o, a);
337
+ }, ln = async (e, t, n, r, i, a) => {
338
+ let o = n.target(), s = n.foreignKey ?? Ft(o, i.tableName, t), c = n.sourceKey ?? "id", l = pn(e, c), u = un(r), d = l.length === 0 ? [] : await mn(o, s, l, u, a), f = /* @__PURE__ */ new Map();
338
339
  for (let e of d) {
339
340
  let t = e[s], n = f.get(t);
340
341
  n ? n.push(e) : f.set(t, [e]);
@@ -350,12 +351,12 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
350
351
  let e = n[c];
351
352
  n[t] = f.get(e) ?? [];
352
353
  }
353
- await dn(d, r.with, o, a);
354
- }, sn = (e) => {
354
+ await hn(d, r.with, o, a);
355
+ }, un = (e) => {
355
356
  let { limit: t, offset: n, ...r } = e;
356
357
  return r;
357
- }, cn = async (e, t, n, r, i, a) => {
358
- let o = n.target(), s = n.through(), c = F(e, "id");
358
+ }, dn = async (e, t, n, r, i, a) => {
359
+ let o = n.target(), s = n.through(), c = pn(e, "id");
359
360
  if (c.length === 0) {
360
361
  for (let n of e) n[t] = [];
361
362
  return;
@@ -376,8 +377,8 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
376
377
  for (let n of e) n[t] = [];
377
378
  return;
378
379
  }
379
- let f = await un(o, "id", F(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
380
- await dn(f, r.with, o, a);
380
+ let f = await mn(o, "id", pn(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
381
+ await hn(f, r.with, o, a);
381
382
  let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
382
383
  for (let e of d) {
383
384
  let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
@@ -389,16 +390,16 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
389
390
  o ? o.push(a) : h.set(t, [a]);
390
391
  }
391
392
  for (let n of e) n[t] = h.get(n.id) ?? [];
392
- }, ln = (e, t) => {
393
+ }, fn = (e, t) => {
393
394
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
394
- }, F = (e, t) => {
395
+ }, pn = (e, t) => {
395
396
  let n = /* @__PURE__ */ new Set();
396
397
  for (let r of e) {
397
398
  let e = r[t];
398
399
  e != null && n.add(e);
399
400
  }
400
401
  return [...n];
401
- }, un = (e, t, n, r, i) => {
402
+ }, mn = (e, t, n, r, i) => {
402
403
  let a = {
403
404
  column: t,
404
405
  op: "in",
@@ -412,50 +413,50 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
412
413
  skip: r.offset,
413
414
  projection: void 0
414
415
  });
415
- }, dn = async (e, t, n, r) => {
416
- t !== void 0 && e.length !== 0 && (await nn(e, t, n, r)).forEach((t, n) => {
416
+ }, hn = async (e, t, n, r) => {
417
+ t !== void 0 && e.length !== 0 && (await on(e, t, n, r)).forEach((t, n) => {
417
418
  let r = e[n];
418
419
  for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
419
420
  });
420
- }, fn = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, pn = class extends Error {
421
+ }, gn = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, _n = class extends Error {
421
422
  _tag = "TenantNamespaceUnresolved";
422
423
  constructor(e) {
423
424
  super(e), this.name = "TenantNamespaceUnresolved";
424
425
  }
425
- }, mn = class extends Error {
426
+ }, vn = class extends Error {
426
427
  _tag = "TenantNamespaceInvalid";
427
428
  constructor(e) {
428
429
  super(e), this.name = "TenantNamespaceInvalid";
429
430
  }
430
- }, hn = 63, gn = "tenant_", _n = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), vn = (e) => {
431
- if (e == null || e === "") throw new pn("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.");
432
- let t = _n(e);
433
- if (t.replace(/_/g, "") === "") throw new mn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
434
- let n = `${gn}${t}`;
435
- if (n.length > hn) throw new mn(`namespace '${n}' for tenant '${e}' exceeds the ${hn}-byte identifier limit. Use a shorter tenant id.`);
431
+ }, yn = 63, bn = "tenant_", xn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Sn = (e) => {
432
+ if (e == null || e === "") throw new _n("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.");
433
+ let t = xn(e);
434
+ if (t.replace(/_/g, "") === "") throw new vn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
435
+ let n = `${bn}${t}`;
436
+ if (n.length > yn) throw new vn(`namespace '${n}' for tenant '${e}' exceeds the ${yn}-byte identifier limit. Use a shorter tenant id.`);
436
437
  return n;
437
- }, yn = (e, t) => e === null ? t : `${e}.${t}`, bn = /* @__PURE__ */ new Set(["timestamp", "date"]), xn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, Sn = (e, t) => {
438
- if (e === void 0 || t == null || !bn.has(e) || t instanceof Date) return t;
438
+ }, Cn = (e, t) => e === null ? t : `${e}.${t}`, wn = /* @__PURE__ */ new Set(["timestamp", "date"]), Tn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, En = (e, t) => {
439
+ if (e === void 0 || t == null || !wn.has(e) || t instanceof Date) return t;
439
440
  if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
440
- if (typeof t == "string" && xn.test(t)) {
441
+ if (typeof t == "string" && Tn.test(t)) {
441
442
  let e = new Date(t);
442
443
  return Number.isNaN(e.getTime()) ? t : e;
443
444
  }
444
445
  return t;
445
- }, Cn = (e, t) => e === void 0 || !bn.has(e) ? t : t.map((t) => Sn(e, t)), wn = (e, t) => {
446
+ }, Dn = (e, t) => e === void 0 || !wn.has(e) ? t : t.map((t) => En(e, t)), On = (e, t) => {
446
447
  let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
447
448
  for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
448
449
  return t`${i}`;
449
- }, I = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), L = (e, t, n = null, r) => {
450
- if ("not" in e) return t`NOT (${L(e.not, t, n, r)})`;
451
- if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => L(e, t, n, r)));
452
- if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => L(e, t, n, r)));
450
+ }, N = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), P = (e, t, n = null, r) => {
451
+ if ("not" in e) return t`NOT (${P(e.not, t, n, r)})`;
452
+ if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => P(e, t, n, r)));
453
+ if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => P(e, t, n, r)));
453
454
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
454
- let r = e, i = R(r.subquery, t, n);
455
+ let r = e, i = F(r.subquery, t, n);
455
456
  return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
456
457
  }
457
458
  if (e.op === "exists" || e.op === "not-exists") {
458
- let r = e, i = R(r.subquery, t, n);
459
+ let r = e, i = F(r.subquery, t, n);
459
460
  return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
460
461
  }
461
462
  let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
@@ -468,7 +469,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
468
469
  mssql: () => t.unsafe(T(i.column, o, "mssql", { numeric: !0 })),
469
470
  sqlite: () => t.unsafe(T(i.column, o, "sqlite", { numeric: !0 })),
470
471
  orElse: () => t.unsafe(T(i.column, o, "postgres", { numeric: !0 }))
471
- }), d = s ? c() : a, f = s ? l() : a, p = (e) => s && e != null ? String(e) : e, m = (e) => s ? Number(e) : e, h = s || r === void 0 ? void 0 : u(r)?.fields?.[i.column]?.type, g = (e) => Sn(h, e);
472
+ }), d = s ? c() : a, f = s ? l() : a, p = (e) => s && e != null ? String(e) : e, m = (e) => s ? Number(e) : e, h = s || r === void 0 ? void 0 : u(r)?.fields?.[i.column]?.type, g = (e) => En(h, e);
472
473
  switch (i.op) {
473
474
  case "eq": return t`${d} = ${p(g(i.value))}`;
474
475
  case "neq": return t`${d} <> ${p(g(i.value))}`;
@@ -485,7 +486,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
485
486
  return e.length === 0 ? t`TRUE` : t`${d} NOT IN ${t.in(s ? e.map((e) => p(e)) : e)}`;
486
487
  }
487
488
  case "contains": {
488
- let e = `%${I(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
489
+ let e = `%${N(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
489
490
  return t.onDialectOrElse({
490
491
  mysql: () => t`LOWER(${d}) LIKE LOWER(${e})`,
491
492
  mssql: () => t`LOWER(${d}) LIKE LOWER(${e})`,
@@ -494,7 +495,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
494
495
  });
495
496
  }
496
497
  case "startsWith": {
497
- let e = `${I(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
498
+ let e = `${N(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
498
499
  return t.onDialectOrElse({
499
500
  mysql: () => t`${d} LIKE ${e}`,
500
501
  orElse: () => t`${d} LIKE ${e} ESCAPE '\\'`
@@ -542,13 +543,13 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
542
543
  });
543
544
  }
544
545
  }
545
- }, Tn = (e, t) => {
546
+ }, kn = (e, t) => {
546
547
  let n = [];
547
548
  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}`);
548
- }, En = (e, t) => t.csv(e.map((e) => {
549
+ }, An = (e, t) => t.csv(e.map((e) => {
549
550
  let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
550
551
  if (e.op.startsWith("window-")) {
551
- let r = Tn(e.window ?? {}, t);
552
+ let r = kn(e.window ?? {}, t);
552
553
  switch (e.op) {
553
554
  case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
554
555
  case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
@@ -572,43 +573,43 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
572
573
  return t`${t(e.column)} AS ${t(e.alias)}`;
573
574
  default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
574
575
  }
575
- })), Dn = (e) => `[${e.join(",")}]`, On = (e, t) => {
576
+ })), jn = (e) => `[${e.join(",")}]`, Mn = (e, t) => {
576
577
  if (e.queryVector === void 0) return null;
577
- let n = t(e.column), r = Dn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
578
+ let n = t(e.column), r = jn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
578
579
  return t.onDialectOrElse({
579
580
  mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
580
581
  mssql: () => t`NULL`,
581
582
  sqlite: () => t`NULL`,
582
583
  orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
583
584
  });
584
- }, kn = (e, t) => {
585
+ }, Nn = (e, t) => {
585
586
  let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
586
587
  return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
587
- }, An = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, jn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, Mn = (e, t) => `${t}_${e.indexName}_fts`, Nn = (e, t, n) => {
588
- let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${I(e.query)}%`;
588
+ }, Pn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Fn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, In = (e, t) => `${t}_${e.indexName}_fts`, Ln = (e, t, n) => {
589
+ let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${N(e.query)}%`;
589
590
  return n.onDialectOrElse({
590
591
  mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
591
592
  sqlite: () => {
592
- let r = n(Mn(e, t));
593
+ let r = n(In(e, t));
593
594
  return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
594
595
  },
595
596
  mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
596
- orElse: () => n`${jn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
597
+ orElse: () => n`${Fn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
597
598
  });
598
- }, Pn = (e, t, n) => {
599
- let r = `%${I(e.query)}%`;
599
+ }, Rn = (e, t, n) => {
600
+ let r = `%${N(e.query)}%`;
600
601
  return n.onDialectOrElse({
601
602
  mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
602
603
  sqlite: () => {
603
- let r = n(Mn(e, t));
604
+ let r = n(In(e, t));
604
605
  return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
605
606
  },
606
607
  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}`),
607
- orElse: () => n`ts_rank(${jn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
608
+ orElse: () => n`ts_rank(${Fn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
608
609
  });
609
- }, R = (e, t, n = null) => {
610
+ }, F = (e, t, n = null) => {
610
611
  if (e.setOp && e.setOp.queries.length >= 2) {
611
- 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 = [];
612
+ 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`(${F(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
612
613
  if (e.order.length > 0 && a.push(t` ORDER BY ${t.csv(e.order.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
613
614
  if (!Number.isInteger(e.take) || e.take < 0) throw Error(`compileSelect: invalid take ${e.take}`);
614
615
  a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
@@ -619,7 +620,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
619
620
  }
620
621
  return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
621
622
  }
622
- let r = e.annClause === void 0 ? null : On(e.annClause, t);
623
+ let r = e.annClause === void 0 ? null : Mn(e.annClause, t);
623
624
  e.spatialClause !== void 0 && t.onDialectOrElse({
624
625
  mysql: () => {
625
626
  throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
@@ -632,16 +633,16 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
632
633
  },
633
634
  orElse: () => t``
634
635
  });
635
- let i = e.spatialClause?.projectAs === void 0 ? null : kn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? En(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 ? Pn(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({
636
+ let i = e.spatialClause?.projectAs === void 0 ? null : Nn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? An(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 ? Rn(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({
636
637
  orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
637
638
  mysql: () => t`DISTINCT `,
638
639
  mssql: () => t`DISTINCT `,
639
640
  sqlite: () => t`DISTINCT `
640
- }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(yn(n, e.table))}` : t`${t(yn(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
641
+ }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(Cn(n, e.table))}` : t`${t(Cn(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
641
642
  let r = e.kind === "inner" ? "INNER" : "LEFT";
642
- return t` ${t.unsafe(r)} JOIN ${t(yn(n, e.table))} AS ${t(e.alias)} ON ${L(e.on, t, n)}`;
643
- }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Nn(c, e.table, t), ee = [e.predicate ? L(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), _ = ee.length > 0 ? t` WHERE ${t.and(ee)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, y = e.having ? t` HAVING ${L(e.having, t, n, e.table)}` : t``, b = e.skip !== void 0, x = [];
644
- r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${An(e.spatialClause, t)} DESC` : t`${An(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
643
+ return t` ${t.unsafe(r)} JOIN ${t(Cn(n, e.table))} AS ${t(e.alias)} ON ${P(e.on, t, n)}`;
644
+ }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Ln(c, e.table, t), ee = [e.predicate ? P(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), _ = ee.length > 0 ? t` WHERE ${t.and(ee)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, y = e.having ? t` HAVING ${P(e.having, t, n, e.table)}` : t``, b = e.skip !== void 0, x = [];
645
+ r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${Pn(e.spatialClause, t)} DESC` : t`${Pn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
645
646
  for (let n of e.order) x.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
646
647
  let te = x.length > 0 ? t` ORDER BY ${t.csv(x)}` : b ? t.onDialectOrElse({
647
648
  mssql: () => t` ORDER BY (SELECT NULL)`,
@@ -649,7 +650,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
649
650
  }) : t``, S = (e) => {
650
651
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
651
652
  return t.unsafe(String(e));
652
- }, ne = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${R(e.descriptor, t, n)})`), re = (e.ctes ?? []).some((e) => e.recursive === !0), C = ne.length > 0 ? t`WITH ${t.unsafe(re ? "RECURSIVE " : "")}${t.csv(ne)} ` : t``;
653
+ }, ne = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${F(e.descriptor, t, n)})`), re = (e.ctes ?? []).some((e) => e.recursive === !0), C = ne.length > 0 ? t`WITH ${t.unsafe(re ? "RECURSIVE " : "")}${t.csv(ne)} ` : t``;
653
654
  return t.onDialectOrElse({
654
655
  mssql: () => {
655
656
  let n = e.take !== void 0 && !b ? t`TOP ${S(e.take)} ` : t``, r = b ? t` OFFSET ${S(e.skip)} ROWS FETCH NEXT ${S(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
@@ -660,29 +661,29 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
660
661
  return t`${C}SELECT ${f}${d} FROM ${h}${_}${v}${y}${te}${n}${r}`;
661
662
  }
662
663
  });
663
- }, Fn = (e, t, n) => {
664
+ }, zn = (e, t, n) => {
664
665
  if (e.eager === void 0) return null;
665
- let r = Ln(e.table, e.eager, e.sourceTable);
666
+ let r = Vn(e.table, e.eager, e.sourceTable);
666
667
  if (r === null) return null;
667
- let i = Wn(n, e, r, Un(t, n));
668
+ let i = Jn(n, e, r, qn(t, n));
668
669
  return i === null ? null : {
669
670
  fragment: i,
670
- decode: qn(r, n)
671
+ decode: Zn(r, n)
671
672
  };
672
- }, z = (e) => e.relation.kind === "one" && e.fkSide === "target", In = (e) => ({
673
+ }, I = (e) => e.relation.kind === "one" && e.fkSide === "target", Bn = (e) => ({
673
674
  ...e,
674
675
  branch: {
675
676
  ...e.branch,
676
677
  limit: 2
677
678
  }
678
- }), Ln = (e, t, n) => {
679
- let r = n ?? ne(e), i = Vt(e);
679
+ }), Vn = (e, t, n) => {
680
+ let r = n ?? ne(e), i = Wt(e);
680
681
  if (i === void 0) return null;
681
682
  let a = [];
682
683
  for (let [e, n] of Object.entries(t)) {
683
684
  let t = i[e];
684
685
  if (t === void 0) return null;
685
- let o = Rn(e, t, r, n === !0 ? {} : n);
686
+ let o = Hn(e, t, r, n === !0 ? {} : n);
686
687
  if (o === null) return null;
687
688
  a.push(o);
688
689
  }
@@ -690,30 +691,30 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
690
691
  table: r,
691
692
  children: a
692
693
  };
693
- }, Rn = (e, t, n, r) => {
694
+ }, Hn = (e, t, n, r) => {
694
695
  let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
695
696
  if (t.kind === "manyToMany") o = t.targetKey, s = "target";
696
697
  else if (t.kind === "one") {
697
- let r = t.sourceKey ?? Hn(n, i.tableName);
698
+ let r = t.sourceKey ?? Kn(n, i.tableName);
698
699
  if (r !== void 0) o = r, s = "source";
699
700
  else try {
700
- o = t.foreignKey ?? M(i, n.tableName, e), s = "target";
701
+ o = t.foreignKey ?? Ft(i, n.tableName, e), s = "target";
701
702
  } catch {
702
703
  return null;
703
704
  }
704
705
  } else try {
705
- o = t.foreignKey ?? M(i, n.tableName, e), s = "target";
706
+ o = t.foreignKey ?? Ft(i, n.tableName, e), s = "target";
706
707
  } catch {
707
708
  return null;
708
709
  }
709
710
  let c = r.with === void 0 ? [] : (() => {
710
- let e = Vt(i.tableName);
711
+ let e = Wt(i.tableName);
711
712
  if (e === void 0 && Object.keys(r.with).length > 0) return null;
712
713
  let t = [];
713
714
  for (let [n, a] of Object.entries(r.with)) {
714
715
  let r = e?.[n];
715
716
  if (r === void 0) return null;
716
- let o = Rn(n, r, i, a === !0 ? {} : a);
717
+ let o = Hn(n, r, i, a === !0 ? {} : a);
717
718
  if (o === null) return null;
718
719
  t.push(o);
719
720
  }
@@ -729,9 +730,9 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
729
730
  fkSide: s,
730
731
  branch: r,
731
732
  children: c,
732
- junction: zn(t, r)
733
+ junction: Un(t, r)
733
734
  };
734
- }, zn = (e, t) => {
735
+ }, Un = (e, t) => {
735
736
  if (e.kind !== "manyToMany" || t.junction === void 0) return;
736
737
  let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
737
738
  return {
@@ -743,35 +744,35 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
743
744
  return t !== void 0 && (t.type === "timestamp" || t.type === "date");
744
745
  })
745
746
  };
746
- }, Bn = (e) => `__j_${e}`, Vn = "__j", Hn = (e, t) => {
747
+ }, Wn = (e) => `__j_${e}`, Gn = "__j", Kn = (e, t) => {
747
748
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
748
- }, Un = (e, t) => {
749
+ }, qn = (e, t) => {
749
750
  let n = 0;
750
751
  return {
751
752
  sql: e,
752
753
  dialect: t,
753
754
  nextAlias: () => `__a${n++}`
754
755
  };
755
- }, Wn = (e, t, n, r) => {
756
+ }, Jn = (e, t, n, r) => {
756
757
  switch (e) {
757
- case "postgres": return Xn(t, n, r);
758
+ case "postgres": return er(t, n, r);
758
759
  case "sqlite":
759
- case "turso": return ir(t, n, r);
760
+ case "turso": return cr(t, n, r);
760
761
  case "mysql":
761
- case "mariadb": return mr(t, n, r);
762
- case "mssql": return xr(t, n, r);
762
+ case "mariadb": return vr(t, n, r);
763
+ case "mssql": return Tr(t, n, r);
763
764
  }
764
- }, Gn = (e, t) => t === "mssql" && !Kn.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), Kn = /(?:Z|[+-]\d{2}:?\d{2})$/, qn = (e, t) => {
765
- let n = Jn(e.table, e.children, t);
765
+ }, Yn = (e, t) => t === "mssql" && !Xn.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), Xn = /(?:Z|[+-]\d{2}:?\d{2})$/, Zn = (e, t) => {
766
+ let n = Qn(e.table, e.children, t);
766
767
  return (e) => e.map((e) => {
767
768
  let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
768
769
  return n(r);
769
770
  });
770
- }, Jn = (e, t, n) => {
771
+ }, Qn = (e, t, n) => {
771
772
  let r = [];
772
773
  for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
773
774
  let i = t.map((e) => {
774
- let t = Jn(e.target, e.children, n), r = e.relation.kind === "one", i = z(e), a = i ? tn({
775
+ let t = Qn(e.target, e.children, n), r = e.relation.kind === "one", i = I(e), a = i ? an({
775
776
  relationName: e.relationName,
776
777
  sourceTableName: e.source.tableName,
777
778
  targetTableName: e.target.tableName,
@@ -784,14 +785,14 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
784
785
  isSingle: r,
785
786
  fromOverFetch: i,
786
787
  cardinalityMessage: a,
787
- junction: Yn(e.junction, n)
788
+ junction: $n(e.junction, n)
788
789
  };
789
790
  });
790
791
  return (e) => {
791
792
  let t = { ...e };
792
793
  for (let e of r) {
793
794
  let r = t[e];
794
- typeof r == "string" && (t[e] = Gn(r, n));
795
+ typeof r == "string" && (t[e] = Yn(r, n));
795
796
  }
796
797
  for (let e of i) {
797
798
  let n = t[e.name];
@@ -801,7 +802,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
801
802
  }
802
803
  if (e.fromOverFetch) {
803
804
  let r = n;
804
- if (r.length > 1) throw new en(e.cardinalityMessage);
805
+ if (r.length > 1) throw new rn(e.cardinalityMessage);
805
806
  t[e.name] = r.length === 0 ? null : e.decode(r[0]);
806
807
  continue;
807
808
  }
@@ -813,204 +814,204 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
813
814
  }
814
815
  return t;
815
816
  };
816
- }, Yn = (e, t) => {
817
+ }, $n = (e, t) => {
817
818
  if (e === void 0) return;
818
819
  let n = new Set(e.dateColumns), r = e.requested;
819
820
  return (e) => {
820
821
  let i = e._junction ?? {}, a = {};
821
822
  for (let e of r) {
822
823
  let r = i[e];
823
- a[e] = n.has(e) && typeof r == "string" ? Gn(r, t) : r;
824
+ a[e] = n.has(e) && typeof r == "string" ? Yn(r, t) : r;
824
825
  }
825
826
  return {
826
827
  ...e,
827
828
  _junction: a
828
829
  };
829
830
  };
830
- }, Xn = (e, t, n) => {
831
- let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = Zn(i, t.children, n);
832
- return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${G(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${W(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${W(e.skip, r)}`}`;
833
- }, Zn = (e, t, n, r) => {
834
- let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${U(Vn, i)}::text)`;
831
+ }, er = (e, t, n) => {
832
+ let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = tr(i, t.children, n);
833
+ return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${H(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.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)}`}`;
834
+ }, tr = (e, t, n, r) => {
835
+ let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${B(Gn, i)}::text)`;
835
836
  if (t.length === 0 && r === void 0) return a;
836
837
  let o = [];
837
- r !== void 0 && o.push(i`${U("_junction", i)}, ${H(e, Vn, i)}`);
838
+ r !== void 0 && o.push(i`${B("_junction", i)}, ${z(e, Gn, i)}`);
838
839
  for (let r of t) {
839
- let t = Qn(r, e, n);
840
+ let t = nr(r, e, n);
840
841
  if (t === null) return null;
841
- o.push(i`${U(r.relationName, i)}, ${t}`);
842
+ o.push(i`${B(r.relationName, i)}, ${t}`);
842
843
  }
843
844
  return i`${a} || jsonb_build_object(${i.csv(o)})`;
844
- }, Qn = (e, t, n) => {
845
+ }, nr = (e, t, n) => {
845
846
  switch (e.relation.kind) {
846
- case "one": return z(e) ? er(In(e), t, n) : $n(e, t, n);
847
- case "many": return er(e, t, n);
848
- case "manyToMany": return tr(e, t, n);
847
+ case "one": return I(e) ? ir(Bn(e), t, n) : rr(e, t, n);
848
+ case "many": return ir(e, t, n);
849
+ case "manyToMany": return ar(e, t, n);
849
850
  }
850
- }, $n = (e, t, n) => {
851
- let r = n.sql, i = n.nextAlias(), a = Zn(i, e.children, n);
851
+ }, rr = (e, t, n) => {
852
+ let r = n.sql, i = n.nextAlias(), a = tr(i, e.children, n);
852
853
  if (a === null) return null;
853
- let o = e.fkSide === "source" ? r`${H(i, "id", r)} = ${H(t, e.foreignKey, r)}` : r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${G(e.branch.where, i, r)}`, c = B(i, e.branch.orderBy, r);
854
+ 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);
854
855
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
855
- }, er = (e, t, n) => {
856
- let r = n.sql, i = n.nextAlias(), a = Zn(i, e.children, n);
856
+ }, ir = (e, t, n) => {
857
+ let r = n.sql, i = n.nextAlias(), a = tr(i, e.children, n);
857
858
  if (a === null) return null;
858
- let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, c = rr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`;
859
+ let o = r`${z(void 0, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${P(e.branch.where, r)}`, c = sr(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)}`;
859
860
  return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
860
- }, tr = (e, t, n) => {
861
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Zn(o, e.children, n, e.junction);
861
+ }, ar = (e, t, n) => {
862
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = tr(o, e.children, n, e.junction);
862
863
  if (c === null) return null;
863
- let l = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, u = K(e, s, r), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${nr(e.junction, s, r)} AS ${r(Vn)}`;
864
- 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 ${H(o, "id", r)} = ${H(s, i.targetKey, r)} WHERE ${H(s, i.sourceKey, r)} = ${H(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
865
- }, nr = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${U(e, n)}, ${H(t, e, n)}`))})`, B = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${H(e, t.column, n)} DESC` : n`${H(e, t.column, n)} ASC`))}`, rr = (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`))}`, ir = (e, t, n) => {
866
- let r = n.sql, i = n.nextAlias(), a = ar(i, t.table, t.children, n);
864
+ let l = e.branch.where === void 0 ? r`` : r` AND ${P(e.branch.where, r)}`, u = U(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`, ${or(e.junction, s, r)} AS ${r(Gn)}`;
865
+ 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)`;
866
+ }, or = (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`))}`, sr = (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`))}`, cr = (e, t, n) => {
867
+ let r = n.sql, i = n.nextAlias(), a = lr(i, t.table, t.children, n);
867
868
  if (a === null) return null;
868
- let o = e.predicate ? r` WHERE ${G(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${W(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${W(e.skip, r)}`;
869
+ let o = e.predicate ? r` WHERE ${H(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.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)}`;
869
870
  return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
870
- }, ar = (e, t, n, r, i) => {
871
+ }, lr = (e, t, n, r, i) => {
871
872
  let a = r.sql, o = [];
872
- for (let n of Object.keys(t.fields)) o.push(a`${U(n, a)}, ${H(e, n, a)}`);
873
+ for (let n of Object.keys(t.fields)) o.push(a`${B(n, a)}, ${z(e, n, a)}`);
873
874
  if (i !== void 0) {
874
- let e = or(i.projection, i.source, a);
875
- o.push(a`${U("_junction", a)}, json_object(${e})`);
875
+ let e = ur(i.projection, i.source, a);
876
+ o.push(a`${B("_junction", a)}, json_object(${e})`);
876
877
  }
877
878
  for (let t of n) {
878
- let n = ur(t, e, r);
879
+ let n = mr(t, e, r);
879
880
  if (n === null) return null;
880
- o.push(a`${U(t.relationName, a)}, ${n}`);
881
+ o.push(a`${B(t.relationName, a)}, ${n}`);
881
882
  }
882
883
  return a`json_object(${a.csv(o)})`;
883
- }, or = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${U(e, n)}, ${H(t.alias, t.physical(e), n)}`)), sr = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${H(t, e, n)} AS ${n(Bn(e))}`))}`, cr = (e) => ({
884
+ }, ur = (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)}`)), dr = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${z(t, e, n)} AS ${n(Wn(e))}`))}`, fr = (e) => ({
884
885
  alias: e,
885
- physical: Bn
886
- }), lr = (e) => ({
886
+ physical: Wn
887
+ }), pr = (e) => ({
887
888
  alias: e,
888
889
  physical: (e) => e
889
- }), ur = (e, t, n) => {
890
+ }), mr = (e, t, n) => {
890
891
  switch (e.relation.kind) {
891
- case "one": return z(e) ? fr(In(e), t, n) : dr(e, t, n);
892
- case "many": return fr(e, t, n);
893
- case "manyToMany": return pr(e, t, n);
892
+ case "one": return I(e) ? gr(Bn(e), t, n) : hr(e, t, n);
893
+ case "many": return gr(e, t, n);
894
+ case "manyToMany": return _r(e, t, n);
894
895
  }
895
- }, dr = (e, t, n) => {
896
- let r = n.sql, i = n.nextAlias(), a = ar(i, e.target, e.children, n);
896
+ }, hr = (e, t, n) => {
897
+ let r = n.sql, i = n.nextAlias(), a = lr(i, e.target, e.children, n);
897
898
  if (a === null) return null;
898
- let o = e.fkSide === "source" ? r`${H(i, "id", r)} = ${H(t, e.foreignKey, r)}` : r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`;
899
+ 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)}`;
899
900
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
900
- }, fr = (e, t, n) => {
901
- let r = n.sql, i = n.nextAlias(), a = ar(i, e.target, e.children, n);
901
+ }, gr = (e, t, n) => {
902
+ let r = n.sql, i = n.nextAlias(), a = lr(i, e.target, e.children, n);
902
903
  if (a === null) return null;
903
- let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, c = rr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`;
904
+ let o = r`${z(void 0, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, c = sr(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)}`;
904
905
  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('[]'))`;
905
- }, pr = (e, t, n) => {
906
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = ar(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
906
+ }, _r = (e, t, n) => {
907
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = lr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
907
908
  projection: e.junction,
908
- source: cr(o)
909
+ source: fr(o)
909
910
  });
910
911
  if (c === null) return null;
911
- let l = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, u = K(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : sr(e.junction, s, r);
912
- 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 ${H(o, "id", r)} = ${H(s, i.targetKey, r)} WHERE ${H(s, i.sourceKey, r)} = ${H(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
913
- }, mr = (e, t, n) => {
914
- let r = n.sql, i = n.nextAlias(), a = V(i, t.table, t.children, n);
912
+ let l = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, u = U(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`` : dr(e.junction, s, r);
913
+ 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('[]'))`;
914
+ }, vr = (e, t, n) => {
915
+ let r = n.sql, i = n.nextAlias(), a = R(i, t.table, t.children, n);
915
916
  if (a === null) return null;
916
- let o = e.predicate ? r` WHERE ${G(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${W(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${W(e.skip, r)}`;
917
+ let o = e.predicate ? r` WHERE ${H(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.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)}`;
917
918
  return r`SELECT ${a} AS \`__row\` FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
918
- }, V = (e, t, n, r, i) => {
919
+ }, R = (e, t, n, r, i) => {
919
920
  let a = r.sql, o = [];
920
- for (let n of Object.keys(t.fields)) o.push(a`${U(n, a)}, ${H(e, n, a)}`);
921
+ for (let n of Object.keys(t.fields)) o.push(a`${B(n, a)}, ${z(e, n, a)}`);
921
922
  if (i !== void 0) {
922
- let e = or(i.projection, i.source, a);
923
- o.push(a`${U("_junction", a)}, JSON_OBJECT(${e})`);
923
+ let e = ur(i.projection, i.source, a);
924
+ o.push(a`${B("_junction", a)}, JSON_OBJECT(${e})`);
924
925
  }
925
926
  for (let t of n) {
926
- let n = hr(t, e, r);
927
+ let n = yr(t, e, r);
927
928
  if (n === null) return null;
928
- o.push(a`${U(t.relationName, a)}, ${n}`);
929
+ o.push(a`${B(t.relationName, a)}, ${n}`);
929
930
  }
930
931
  return a`JSON_OBJECT(${a.csv(o)})`;
931
- }, hr = (e, t, n) => {
932
+ }, yr = (e, t, n) => {
932
933
  switch (e.relation.kind) {
933
934
  case "one":
934
- if (z(e)) {
935
- let r = In(e);
936
- return n.dialect === "mariadb" ? yr(r, t, n) : _r(r, t, n);
935
+ if (I(e)) {
936
+ let r = Bn(e);
937
+ return n.dialect === "mariadb" ? Cr(r, t, n) : xr(r, t, n);
937
938
  }
938
- return gr(e, t, n);
939
- case "many": return n.dialect === "mariadb" ? yr(e, t, n) : _r(e, t, n);
940
- case "manyToMany": return n.dialect === "mariadb" ? br(e, t, n) : vr(e, t, n);
939
+ return br(e, t, n);
940
+ case "many": return n.dialect === "mariadb" ? Cr(e, t, n) : xr(e, t, n);
941
+ case "manyToMany": return n.dialect === "mariadb" ? wr(e, t, n) : Sr(e, t, n);
941
942
  }
942
- }, gr = (e, t, n) => {
943
- let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
943
+ }, br = (e, t, n) => {
944
+ let r = n.sql, i = n.nextAlias(), a = R(i, e.target, e.children, n);
944
945
  if (a === null) return null;
945
- let o = e.fkSide === "source" ? r`${H(i, "id", r)} = ${H(t, e.foreignKey, r)}` : r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`;
946
+ 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)}`;
946
947
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
947
- }, _r = (e, t, n) => {
948
- let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
948
+ }, xr = (e, t, n) => {
949
+ let r = n.sql, i = n.nextAlias(), a = R(i, e.target, e.children, n);
949
950
  if (a === null) return null;
950
- let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, c = rr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`;
951
+ let o = r`${z(void 0, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, c = sr(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)}`;
951
952
  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())`;
952
- }, vr = (e, t, n) => {
953
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = V(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
953
+ }, Sr = (e, t, n) => {
954
+ 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 : {
954
955
  projection: e.junction,
955
- source: cr(o)
956
+ source: fr(o)
956
957
  });
957
958
  if (c === null) return null;
958
- let l = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, u = K(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : sr(e.junction, s, r);
959
- 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 ${H(o, "id", r)} = ${H(s, i.targetKey, r)} WHERE ${H(s, i.sourceKey, r)} = ${H(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
960
- }, yr = (e, t, n) => {
961
- let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
959
+ let l = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, u = U(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`` : dr(e.junction, s, r);
960
+ 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())`;
961
+ }, Cr = (e, t, n) => {
962
+ let r = n.sql, i = n.nextAlias(), a = R(i, e.target, e.children, n);
962
963
  if (a === null) return null;
963
- let o = r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
964
- 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`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
965
- 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 ${H(i, "rn", r)} > ${W(d, r)} AND ${H(i, "rn", r)} <= ${W(d + u, r)}` : u === void 0 ? r` AND ${H(i, "rn", r)} > ${W(d, r)}` : r` AND ${H(i, "rn", r)} <= ${W(u, r)}`;
966
- return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${H(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())`;
967
- }, br = (e, t, n) => {
964
+ let o = r`${z(i, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
965
+ 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())`;
966
+ 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)}`;
967
+ 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())`;
968
+ }, wr = (e, t, n) => {
968
969
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
969
970
  projection: e.junction,
970
971
  source: t
971
- }, l = r`${H(s, i.sourceKey, r)} = ${H(t, "id", r)}`, u = r`${H(o, "id", r)} = ${H(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, f = K(e, s, r, !0), p = e.branch.orderBy ?? [];
972
+ }, 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 ${P(W(e.branch.where), r)}`, f = U(e, s, r, !0), p = e.branch.orderBy ?? [];
972
973
  if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) {
973
- let t = V(o, e.target, e.children, n, c(lr(s)));
974
- 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`${H(o, e.column, r)} DESC` : r`${H(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())`;
974
+ let t = R(o, e.target, e.children, n, c(pr(s)));
975
+ 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())`;
975
976
  }
976
- let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${H(o, e.column, r)} DESC` : r`${H(o, e.column, r)} ASC`))}` : r` ORDER BY ${H(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, ee = h !== void 0 && g !== void 0 ? r` AND ${H(o, "rn", r)} > ${W(g, r)} AND ${H(o, "rn", r)} <= ${W(g + h, r)}` : h === void 0 ? r` AND ${H(o, "rn", r)} > ${W(g, r)}` : r` AND ${H(o, "rn", r)} <= ${W(h, r)}`, _ = e.branch.onJunction === void 0 ? r`` : r` WHERE ${G(q(e.branch.onJunction), s, r)}`, v = V(o, e.target, e.children, n, c(cr(o)));
977
+ 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, ee = 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)}`, _ = e.branch.onJunction === void 0 ? r`` : r` WHERE ${H(W(e.branch.onJunction), s, r)}`, v = R(o, e.target, e.children, n, c(fr(o)));
977
978
  if (v === null) return null;
978
- let y = e.junction === void 0 ? r`` : sr(e.junction, s, r);
979
- return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${H(o, "rn", r)}) FROM (SELECT ${r(o)}.*${y}, ${H(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${H(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}${_}) AS ${r(o)} WHERE ${H(o, `__src_${i.sourceKey}`, r)} = ${H(t, "id", r)}${d}${ee}), JSON_ARRAY())`;
980
- }, xr = (e, t, n) => {
981
- let r = n.sql, i = n.nextAlias(), a = Sr(i, t.table, t.children, n);
979
+ let y = e.junction === void 0 ? r`` : dr(e.junction, s, r);
980
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${z(o, "rn", r)}) FROM (SELECT ${r(o)}.*${y}, ${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}${_}) AS ${r(o)} WHERE ${z(o, `__src_${i.sourceKey}`, r)} = ${z(t, "id", r)}${d}${ee}), JSON_ARRAY())`;
981
+ }, Tr = (e, t, n) => {
982
+ let r = n.sql, i = n.nextAlias(), a = Er(i, t.table, t.children, n);
982
983
  if (a === null) return null;
983
- let o = e.predicate ? r` WHERE ${G(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
984
+ let o = e.predicate ? r` WHERE ${H(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${z(i, e.column, r)} DESC` : r`${z(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
984
985
  if (e.skip !== void 0) {
985
986
  let t = e.order.length > 0 ? s : r` ORDER BY (SELECT NULL)`;
986
- l = e.take === void 0 ? r`${t} OFFSET ${W(e.skip, r)} ROWS` : r`${t} OFFSET ${W(e.skip, r)} ROWS FETCH NEXT ${W(e.take, r)} ROWS ONLY`;
987
- } else e.take !== void 0 && (c = r`TOP ${W(e.take, r)} `);
987
+ 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`;
988
+ } else e.take !== void 0 && (c = r`TOP ${V(e.take, r)} `);
988
989
  let u = e.skip === void 0 ? s : r``;
989
990
  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}`;
990
- }, Sr = (e, t, n, r, i) => {
991
+ }, Er = (e, t, n, r, i) => {
991
992
  let a = r.sql, o = [];
992
- for (let n of Object.keys(t.fields)) o.push(a`${H(e, n, a)} AS ${a(n)}`);
993
- if (i !== void 0) for (let e of i.projection.present) o.push(a`${H(i.source.alias, i.source.physical(e), a)} AS ${Cr(`_junction.${e}`, a)}`);
993
+ for (let n of Object.keys(t.fields)) o.push(a`${z(e, n, a)} AS ${a(n)}`);
994
+ if (i !== void 0) for (let e of i.projection.present) o.push(a`${z(i.source.alias, i.source.physical(e), a)} AS ${Dr(`_junction.${e}`, a)}`);
994
995
  for (let t of n) {
995
- let n = wr(t, e, r);
996
+ let n = Or(t, e, r);
996
997
  if (n === null) return null;
997
998
  o.push(n);
998
999
  }
999
1000
  return a.csv(o);
1000
- }, Cr = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), wr = (e, t, n) => {
1001
+ }, Dr = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), Or = (e, t, n) => {
1001
1002
  switch (e.relation.kind) {
1002
- case "one": return z(e) ? Dr(In(e), t, n) : Tr(e, t, n);
1003
- case "many": return Dr(e, t, n);
1004
- case "manyToMany": return Or(e, t, n);
1003
+ case "one": return I(e) ? jr(Bn(e), t, n) : kr(e, t, n);
1004
+ case "many": return jr(e, t, n);
1005
+ case "manyToMany": return Mr(e, t, n);
1005
1006
  }
1006
- }, Tr = (e, t, n) => {
1007
- let r = n.sql, i = n.nextAlias(), a = Sr(i, e.target, e.children, n);
1007
+ }, kr = (e, t, n) => {
1008
+ let r = n.sql, i = n.nextAlias(), a = Er(i, e.target, e.children, n);
1008
1009
  if (a === null) return null;
1009
- let o = e.fkSide === "source" ? r`${H(i, "id", r)} = ${H(t, e.foreignKey, r)}` : r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`;
1010
+ 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)}`;
1010
1011
  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)}`;
1011
- }, Er = (e, t, n) => {
1012
+ }, Ar = (e, t, n) => {
1012
1013
  if (e.offset !== void 0) {
1013
- let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${W(e.offset, n)} ROWS` : n`${r} OFFSET ${W(e.offset, n)} ROWS FETCH NEXT ${W(e.limit, n)} ROWS ONLY`;
1014
+ 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`;
1014
1015
  return {
1015
1016
  top: n``,
1016
1017
  pagination: i,
@@ -1018,33 +1019,33 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1018
1019
  };
1019
1020
  }
1020
1021
  return {
1021
- top: e.limit === void 0 ? n`` : n`TOP ${W(e.limit, n)} `,
1022
+ top: e.limit === void 0 ? n`` : n`TOP ${V(e.limit, n)} `,
1022
1023
  pagination: n``,
1023
1024
  finalOrder: t
1024
1025
  };
1025
- }, Dr = (e, t, n) => {
1026
- let r = n.sql, i = n.nextAlias(), a = Sr(i, e.target, e.children, n);
1026
+ }, jr = (e, t, n) => {
1027
+ let r = n.sql, i = n.nextAlias(), a = Er(i, e.target, e.children, n);
1027
1028
  if (a === null) return null;
1028
- let o = e.branch.where === void 0 ? r`` : r` AND ${G(e.branch.where, i, r)}`, s = B(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = Er(e.branch, s, r);
1029
- return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1030
- }, Or = (e, t, n) => {
1031
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Sr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1029
+ 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 } = Ar(e.branch, s, r);
1030
+ 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)}`;
1031
+ }, Mr = (e, t, n) => {
1032
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Er(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1032
1033
  projection: e.junction,
1033
- source: lr(s)
1034
+ source: pr(s)
1034
1035
  });
1035
1036
  if (c === null) return null;
1036
- let l = e.branch.where === void 0 ? r`` : r` AND ${G(e.branch.where, o, r)}`, u = K(e, s, r), d = B(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Er(e.branch, d, r);
1037
- 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 ${H(o, "id", r)} = ${H(s, i.targetKey, r)} WHERE ${H(s, i.sourceKey, r)} = ${H(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1038
- }, H = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, U = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), W = (e, t) => {
1037
+ let l = e.branch.where === void 0 ? r`` : r` AND ${H(e.branch.where, o, r)}`, u = U(e, s, r), d = L(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Ar(e.branch, d, r);
1038
+ 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)}`;
1039
+ }, 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) => {
1039
1040
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
1040
1041
  return t.unsafe(String(e));
1041
- }, G = (e, t, n) => L(kr(e, t), n), K = (e, t, n, r = !1) => {
1042
+ }, H = (e, t, n) => P(Nr(e, t), n), U = (e, t, n, r = !1) => {
1042
1043
  let i = e.branch.onJunction;
1043
- return i === void 0 ? n`` : n` AND ${G(r ? q(i) : i, t, n)}`;
1044
- }, kr = (e, t) => {
1045
- if ("not" in e) return { not: kr(e.not, t) };
1046
- if ("and" in e) return { and: e.and.map((e) => kr(e, t)) };
1047
- if ("or" in e) return { or: e.or.map((e) => kr(e, t)) };
1044
+ return i === void 0 ? n`` : n` AND ${H(r ? W(i) : i, t, n)}`;
1045
+ }, Nr = (e, t) => {
1046
+ if ("not" in e) return { not: Nr(e.not, t) };
1047
+ if ("and" in e) return { and: e.and.map((e) => Nr(e, t)) };
1048
+ if ("or" in e) return { or: e.or.map((e) => Nr(e, t)) };
1048
1049
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
1049
1050
  let n = e;
1050
1051
  return {
@@ -1058,23 +1059,23 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1058
1059
  ...n,
1059
1060
  column: `${t}.${n.column}`
1060
1061
  };
1061
- }, q = (e) => {
1062
- if ("not" in e) return { not: q(e.not) };
1063
- if ("and" in e) return { and: e.and.map((e) => q(e)) };
1064
- if ("or" in e) return { or: e.or.map((e) => q(e)) };
1062
+ }, W = (e) => {
1063
+ if ("not" in e) return { not: W(e.not) };
1064
+ if ("and" in e) return { and: e.and.map((e) => W(e)) };
1065
+ if ("or" in e) return { or: e.or.map((e) => W(e)) };
1065
1066
  if (e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists") return e;
1066
1067
  let t = e;
1067
1068
  return {
1068
1069
  ...t,
1069
- value: Ar(t.value)
1070
+ value: Pr(t.value)
1070
1071
  };
1071
- }, Ar = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Ar(e)) : e, jr = Symbol.for("@voltro/database/coreTablesRegistry"), Mr = globalThis, Nr = Mr[jr] ?? (Mr[jr] = {}), Pr = (e) => {
1072
- e.actors !== void 0 && (Nr.actors = e.actors), e.tenants !== void 0 && (Nr.tenants = e.tenants);
1073
- }, Fr = (e, t) => () => {
1072
+ }, Pr = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Pr(e)) : e, Fr = Symbol.for("@voltro/database/coreTablesRegistry"), Ir = globalThis, Lr = Ir[Fr] ?? (Ir[Fr] = {}), Rr = (e) => {
1073
+ e.actors !== void 0 && (Lr.actors = e.actors), e.tenants !== void 0 && (Lr.tenants = e.tenants);
1074
+ }, zr = (e, t) => () => {
1074
1075
  let n = e();
1075
1076
  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`);
1076
1077
  return n();
1077
- }, Ir = () => Fr(() => Nr.actors, "actors"), Lr = () => Fr(() => Nr.tenants, "tenants"), Rr = w("actors", {
1078
+ }, Br = () => zr(() => Lr.actors, "actors"), Vr = () => zr(() => Lr.tenants, "tenants"), Hr = w("actors", {
1078
1079
  id: O(),
1079
1080
  kind: E().oneOf([
1080
1081
  "user",
@@ -1084,69 +1085,73 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1084
1085
  ]),
1085
1086
  displayName: E().nullable(),
1086
1087
  createdAt: _().default("now")
1087
- }), zr = (e, t) => ({
1088
+ }), Ur = (e, t) => ({
1088
1089
  column: e,
1089
1090
  op: "eq",
1090
1091
  value: t
1091
- }), Br = (e, t) => ({
1092
+ }), Wr = (e, t) => ({
1092
1093
  column: e,
1093
1094
  op: "neq",
1094
1095
  value: t
1095
- }), Vr = (e, t) => ({
1096
+ }), Gr = (e, t) => ({
1096
1097
  column: e,
1097
1098
  op: "gt",
1098
1099
  value: t
1099
- }), Hr = (e, t) => ({
1100
+ }), Kr = (e, t) => ({
1100
1101
  column: e,
1101
1102
  op: "gte",
1102
1103
  value: t
1103
- }), Ur = (e, t) => ({
1104
+ }), qr = (e, t) => ({
1104
1105
  column: e,
1105
1106
  op: "lt",
1106
1107
  value: t
1107
- }), Wr = (e, t) => ({
1108
+ }), Jr = (e, t) => ({
1108
1109
  column: e,
1109
1110
  op: "lte",
1110
1111
  value: t
1111
- }), Gr = (e, t) => ({
1112
+ }), Yr = (e, t) => ({
1112
1113
  column: e,
1113
1114
  op: "in",
1114
1115
  value: t
1115
- }), Kr = (e, t) => ({
1116
+ }), Xr = (e, t) => ({
1116
1117
  column: e,
1117
1118
  op: "notIn",
1118
1119
  value: t
1119
- }), qr = (e, t) => ({
1120
+ }), Zr = (e, t) => ({
1120
1121
  column: e,
1121
1122
  op: "contains",
1122
1123
  value: t
1123
- }), Jr = (e, t) => ({
1124
+ }), Qr = (e, t) => ({
1124
1125
  column: e,
1125
1126
  op: "startsWith",
1126
1127
  value: t
1127
- }), Yr = (e, t) => ({
1128
+ }), $r = (e, t) => ({
1128
1129
  column: e,
1129
1130
  op: "arrayContains",
1130
1131
  value: t
1131
- }), Xr = (e, t) => ({
1132
+ }), ei = (e, t) => ({
1132
1133
  column: e,
1133
1134
  op: "arrayOverlaps",
1134
1135
  value: t
1135
- }), Zr = (e, t) => ({
1136
+ }), ti = (e, t) => ({
1136
1137
  column: e,
1137
1138
  op: "arrayHas",
1138
1139
  value: t
1139
- }), Qr = (e) => ({
1140
+ }), ni = {
1141
+ column: "id",
1142
+ op: "in",
1143
+ value: []
1144
+ }, ri = (e) => ({
1140
1145
  column: e,
1141
1146
  op: "isNull"
1142
- }), $r = (e) => ({
1147
+ }), ii = (e) => ({
1143
1148
  column: e,
1144
1149
  op: "isNotNull"
1145
- }), ei = (e, t) => ({
1150
+ }), ai = (e, t) => ({
1146
1151
  column: e,
1147
1152
  op: "spatial",
1148
1153
  value: t
1149
- }), ti = (...e) => ({ and: e }), ni = (...e) => ({ or: e }), ri = (e) => ({ not: e }), ii = (e, ...t) => {
1154
+ }), oi = (...e) => ({ and: e }), si = (...e) => ({ or: e }), ci = (e) => ({ not: e }), li = (e, ...t) => {
1150
1155
  if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
1151
1156
  let n = (n, r) => ({
1152
1157
  column: e,
@@ -1168,29 +1173,29 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1168
1173
  isNull: () => n("isNull"),
1169
1174
  isNotNull: () => n("isNotNull")
1170
1175
  };
1171
- }, ai = (e) => "descriptor" in e ? e.descriptor : e, oi = (e, t) => ({
1176
+ }, ui = (e) => "descriptor" in e ? e.descriptor : e, di = (e, t) => ({
1172
1177
  column: e,
1173
1178
  op: "subquery-in",
1174
- subquery: ai(t)
1175
- }), si = (e, t) => ({
1179
+ subquery: ui(t)
1180
+ }), fi = (e, t) => ({
1176
1181
  column: e,
1177
1182
  op: "subquery-not-in",
1178
- subquery: ai(t)
1179
- }), ci = (e) => ({
1183
+ subquery: ui(t)
1184
+ }), pi = (e) => ({
1180
1185
  op: "exists",
1181
- subquery: ai(e)
1182
- }), li = (e) => ({
1186
+ subquery: ui(e)
1187
+ }), mi = (e) => ({
1183
1188
  op: "not-exists",
1184
- subquery: ai(e)
1185
- }), ui = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, di = (e, t, n = null) => {
1189
+ subquery: ui(e)
1190
+ }), hi = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, gi = (e, t, n = null) => {
1186
1191
  if (!t) return !1;
1187
- if ("not" in e) return !di(e.not, t, n);
1192
+ if ("not" in e) return !gi(e.not, t, n);
1188
1193
  if ("and" in e) {
1189
- for (let r of e.and) if (!di(r, t, n)) return !1;
1194
+ for (let r of e.and) if (!gi(r, t, n)) return !1;
1190
1195
  return !0;
1191
1196
  }
1192
1197
  if ("or" in e) {
1193
- for (let r of e.or) if (di(r, t, n)) return !0;
1198
+ for (let r of e.or) if (gi(r, t, n)) return !0;
1194
1199
  return !1;
1195
1200
  }
1196
1201
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
@@ -1209,10 +1214,10 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1209
1214
  switch (r.op) {
1210
1215
  case "eq": return i === r.value;
1211
1216
  case "neq": return i !== r.value;
1212
- case "gt": return (ui(i, r.value) ?? -1) > 0;
1213
- case "gte": return (ui(i, r.value) ?? -1) >= 0;
1214
- case "lt": return (ui(i, r.value) ?? 1) < 0;
1215
- case "lte": return (ui(i, r.value) ?? 1) <= 0;
1217
+ case "gt": return (hi(i, r.value) ?? -1) > 0;
1218
+ case "gte": return (hi(i, r.value) ?? -1) >= 0;
1219
+ case "lt": return (hi(i, r.value) ?? 1) < 0;
1220
+ case "lte": return (hi(i, r.value) ?? 1) <= 0;
1216
1221
  case "in": return Array.isArray(r.value) && r.value.includes(i);
1217
1222
  case "notIn": return Array.isArray(r.value) && !r.value.includes(i);
1218
1223
  case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
@@ -1230,17 +1235,17 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1230
1235
  case "isNotNull": return i != null;
1231
1236
  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.");
1232
1237
  }
1233
- }, fi = function* (e) {
1238
+ }, _i = function* (e) {
1234
1239
  if ("not" in e) {
1235
- yield* fi(e.not);
1240
+ yield* _i(e.not);
1236
1241
  return;
1237
1242
  }
1238
1243
  if ("and" in e) {
1239
- for (let t of e.and) yield* fi(t);
1244
+ for (let t of e.and) yield* _i(t);
1240
1245
  return;
1241
1246
  }
1242
1247
  if ("or" in e) {
1243
- for (let t of e.or) yield* fi(t);
1248
+ for (let t of e.or) yield* _i(t);
1244
1249
  return;
1245
1250
  }
1246
1251
  e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
@@ -1250,27 +1255,71 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1250
1255
  kind: "exists",
1251
1256
  descriptor: e.subquery
1252
1257
  });
1253
- }, pi = function* (e, t = !0) {
1258
+ }, vi = function* (e, t = !0) {
1254
1259
  if ("not" in e) {
1255
- yield* pi(e.not, !1);
1260
+ yield* vi(e.not, !1);
1256
1261
  return;
1257
1262
  }
1258
1263
  if ("and" in e) {
1259
- for (let n of e.and) yield* pi(n, t);
1264
+ for (let n of e.and) yield* vi(n, t);
1260
1265
  return;
1261
1266
  }
1262
1267
  if ("or" in e) {
1263
- for (let t of e.or) yield* pi(t, !1);
1268
+ for (let t of e.or) yield* vi(t, !1);
1264
1269
  return;
1265
1270
  }
1266
1271
  e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists" || (yield {
1267
1272
  ...e,
1268
1273
  conjunctive: t
1269
1274
  });
1270
- }, mi = class extends st.TaggedError("TableStreamError") {}, hi = 1e3, gi = (e, t, n, r) => {
1275
+ }, yi = new ut(), bi = (e, t) => yi.run(e, t), xi = () => yi.getStore(), Si = () => {
1276
+ let e = yi.getStore();
1277
+ return e === void 0 ? {} : {
1278
+ ...e.traceId === void 0 ? {} : { traceId: e.traceId },
1279
+ ...e.subjectId === void 0 ? {} : { subjectId: e.subjectId }
1280
+ };
1281
+ }, Ci = 3e4, wi = 1e4, G = /* @__PURE__ */ new Map(), K = 0, Ti = (e, t, n) => `${e}${t}${String(n)}`, Ei = (e) => {
1282
+ for (let [t, n] of G) {
1283
+ let r = n.filter((t) => e - t.at < Ci);
1284
+ K -= n.length - r.length, r.length === 0 ? G.delete(t) : r.length !== n.length && G.set(t, r);
1285
+ }
1286
+ }, Di = (e, t) => {
1287
+ if (t.traceId === void 0 && t.subjectId === void 0) return;
1288
+ let n = Date.now();
1289
+ if (K >= wi && Ei(n), K >= wi) return;
1290
+ let r = G.get(e);
1291
+ r === void 0 ? G.set(e, [{
1292
+ attribution: t,
1293
+ at: n
1294
+ }]) : r.push({
1295
+ attribution: t,
1296
+ at: n
1297
+ }), K += 1;
1298
+ }, Oi = (e) => {
1299
+ let t = G.get(e);
1300
+ if (t === void 0 || t.length === 0) return;
1301
+ let n = t.shift();
1302
+ if (--K, t.length === 0 && G.delete(e), !(Date.now() - n.at >= Ci)) return n.attribution;
1303
+ }, ki = () => {
1304
+ G.clear(), K = 0;
1305
+ }, Ai = () => K, q = /* @__PURE__ */ new Map(), ji = (e, t) => {
1306
+ q.set(e, {
1307
+ recorder: t.recorder,
1308
+ tables: new Set(t.tables),
1309
+ ownTables: new Set(t.ownTables)
1310
+ });
1311
+ }, Mi = (e) => {
1312
+ q.delete(e);
1313
+ }, Ni = () => q.clear(), Pi = (e) => {
1314
+ if (q.size === 0) return !1;
1315
+ for (let t of q.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
1316
+ return !1;
1317
+ }, Fi = async (e, t) => {
1318
+ 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);
1319
+ }, Ii = class extends st.TaggedError("TableStreamError") {}, Li = 1e3, Ri = (e, t, n, r) => {
1271
1320
  let i = k.match(r, {
1272
1321
  onNone: () => e.where,
1273
- onSome: (n) => e.where ? ti(e.where, Vr(t, n)) : Vr(t, n)
1322
+ onSome: (n) => e.where ? oi(e.where, Gr(t, n)) : Gr(t, n)
1274
1323
  });
1275
1324
  return {
1276
1325
  table: e.table,
@@ -1285,19 +1334,19 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1285
1334
  ...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
1286
1335
  ...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
1287
1336
  };
1288
- }, _i = (e, t) => {
1289
- let n = t.pk ?? "id", r = t.chunkSize ?? hi;
1337
+ }, zi = (e, t) => {
1338
+ let n = t.pk ?? "id", r = t.chunkSize ?? Li;
1290
1339
  return lt.paginateChunkEffect(k.none(), (i) => {
1291
1340
  let a = ct.tryPromise({
1292
- try: () => e.query(gi(t, n, r, i)),
1293
- catch: (e) => new mi({
1341
+ try: () => e.query(Ri(t, n, r, i)),
1342
+ catch: (e) => new Ii({
1294
1343
  table: t.table,
1295
1344
  cause: e
1296
1345
  })
1297
1346
  });
1298
1347
  return (t.retry ? a.pipe(ct.retry(t.retry)) : a).pipe(ct.map((e) => [ot.fromIterable(e), e.length === r && e.length > 0 ? k.some(k.some(e[e.length - 1][n])) : k.none()]));
1299
1348
  });
1300
- }, vi = (e) => {
1349
+ }, Bi = (e) => {
1301
1350
  let t = e.alpha ?? .5;
1302
1351
  if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
1303
1352
  return (n) => {
@@ -1324,14 +1373,14 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1324
1373
  }
1325
1374
  };
1326
1375
  };
1327
- }, yi = async (e, t) => {
1376
+ }, Vi = async (e, t) => {
1328
1377
  let n = e.as ?? "embedding", r = t.row[e.from];
1329
1378
  if (typeof r != "string" || r.length === 0) return {};
1330
1379
  let i = await t.embed(r);
1331
1380
  return { [n]: i };
1332
- }, bi = (e) => {
1381
+ }, Hi = (e) => {
1333
1382
  if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
1334
- let t = e.as ?? "embedding", n = (t) => yi(e, t);
1383
+ let t = e.as ?? "embedding", n = (t) => Vi(e, t);
1335
1384
  return d({
1336
1385
  id: "voltro/vectorEmbedding",
1337
1386
  fields: { [t]: y(e.dimensions) },
@@ -1349,19 +1398,19 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1349
1398
  beforeUpdate: n
1350
1399
  }
1351
1400
  });
1352
- }, xi = 63, Si = "br_pr", J = class extends Error {
1401
+ }, Ui = 63, Wi = "br_pr", J = class extends Error {
1353
1402
  _tag = "BranchNameInvalid";
1354
1403
  constructor(e) {
1355
1404
  super(e), this.name = "BranchNameInvalid";
1356
1405
  }
1357
- }, Ci = (e, t) => {
1406
+ }, Gi = (e, t) => {
1358
1407
  if (!Number.isInteger(t) || t < 0) throw new J(`prNumber must be a non-negative integer, got ${String(t)}`);
1359
- let n = _n(e);
1408
+ let n = xn(e);
1360
1409
  if (n.replace(/_/g, "") === "") throw new J(`app slug '${e}' has no usable identifier characters`);
1361
- let r = `${Si}${t}_${n}`;
1362
- if (r.length > xi) throw new J(`branch namespace '${r}' exceeds the ${xi}-byte identifier limit — use a shorter app slug`);
1410
+ let r = `${Wi}${t}_${n}`;
1411
+ if (r.length > Ui) throw new J(`branch namespace '${r}' exceeds the ${Ui}-byte identifier limit — use a shorter app slug`);
1363
1412
  return r;
1364
- }, wi = (e) => e.startsWith(Si), Ti = {
1413
+ }, Ki = (e) => e.startsWith(Wi), qi = {
1365
1414
  requested: {
1366
1415
  provision: "provisioning",
1367
1416
  destroy: "destroying"
@@ -1380,18 +1429,18 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1380
1429
  fail: "failed"
1381
1430
  },
1382
1431
  destroyed: {}
1383
- }, Ei = class extends Error {
1432
+ }, Ji = class extends Error {
1384
1433
  from;
1385
1434
  event;
1386
1435
  _tag = "BranchTransitionInvalid";
1387
1436
  constructor(e, t) {
1388
1437
  super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
1389
1438
  }
1390
- }, Di = (e, t) => {
1391
- let n = Ti[e][t];
1392
- if (n === void 0) throw new Ei(e, t);
1439
+ }, Yi = (e, t) => {
1440
+ let n = qi[e][t];
1441
+ if (n === void 0) throw new Ji(e, t);
1393
1442
  return n;
1394
- }, Oi = (e, t, n, r) => {
1443
+ }, Xi = (e, t, n, r) => {
1395
1444
  if (n === "copy" && (r === void 0 || r === "")) throw new J("seed 'copy' requires a parentNamespace to snapshot from");
1396
1445
  let i = [{
1397
1446
  kind: "create-namespace",
@@ -1412,13 +1461,13 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1412
1461
  detail: `run boot seeds into ${e}`
1413
1462
  });
1414
1463
  return i;
1415
- }, ki = (e) => {
1416
- if (!wi(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
1464
+ }, Zi = (e) => {
1465
+ if (!Ki(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
1417
1466
  return [{
1418
1467
  kind: "drop-namespace",
1419
1468
  detail: e
1420
1469
  }];
1421
- }, Ai = (e) => {
1470
+ }, Qi = (e) => {
1422
1471
  if (e === void 0 || e === "") return !1;
1423
1472
  try {
1424
1473
  let t = new URL(e).hostname.toLowerCase();
@@ -1426,27 +1475,27 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1426
1475
  } catch {
1427
1476
  return /\bneon\.(tech|build)\b/i.test(e);
1428
1477
  }
1429
- }, ji = (e) => e.prefer === void 0 ? e.seed === "copy" && Ai(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Mi = (e, t = {}) => [{
1478
+ }, $i = (e) => e.prefer === void 0 ? e.seed === "copy" && Qi(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, ea = (e, t = {}) => [{
1430
1479
  kind: "neon-branch-create",
1431
1480
  detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
1432
- }], Ni = (e) => {
1433
- if (!wi(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
1481
+ }], ta = (e) => {
1482
+ if (!Ki(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
1434
1483
  return [{
1435
1484
  kind: "neon-branch-delete",
1436
1485
  detail: e
1437
1486
  }];
1438
- }, Pi = (e) => e.mechanism === "neon-cow" ? Mi(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : Oi(e.branchId, e.tableNames, e.seed, e.parentNamespace), Fi = (e, t) => e === "neon-cow" ? Ni(t) : ki(t), Ii = (e, t, n) => {
1487
+ }, na = (e) => e.mechanism === "neon-cow" ? ea(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : Xi(e.branchId, e.tableNames, e.seed, e.parentNamespace), ra = (e, t) => e === "neon-cow" ? ta(t) : Zi(t), ia = (e, t, n) => {
1439
1488
  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);
1440
1489
  return {
1441
1490
  evict: i,
1442
1491
  rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
1443
1492
  };
1444
- }, Li = async (e, t) => {
1445
- let n = Ci(e.appSlug, e.prNumber), r = ji({
1493
+ }, aa = async (e, t) => {
1494
+ let n = Gi(e.appSlug, e.prNumber), r = $i({
1446
1495
  seed: e.seed,
1447
1496
  ...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
1448
1497
  ...e.prefer === void 0 ? {} : { prefer: e.prefer }
1449
- }), i = Pi({
1498
+ }), i = na({
1450
1499
  mechanism: r,
1451
1500
  branchId: n,
1452
1501
  tableNames: e.tableNames,
@@ -1471,10 +1520,10 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1471
1520
  mechanism: r,
1472
1521
  steps: i
1473
1522
  };
1474
- }, Ri = async (e, t, n) => {
1475
- let r = Fi(t, e);
1523
+ }, oa = async (e, t, n) => {
1524
+ let r = ra(t, e);
1476
1525
  return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
1477
- }, zi = (e, t, n) => Ii(e, t, n), Y = (e) => `"${e.replace(/"/g, "\"\"")}"`, Bi = (e) => {
1526
+ }, sa = (e, t, n) => ia(e, t, n), Y = (e) => `"${e.replace(/"/g, "\"\"")}"`, ca = (e) => {
1478
1527
  let t = () => {
1479
1528
  throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
1480
1529
  };
@@ -1486,18 +1535,18 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1486
1535
  neonBranchCreate: t,
1487
1536
  neonBranchDelete: t
1488
1537
  };
1489
- }, Vi = class extends Error {
1538
+ }, la = class extends Error {
1490
1539
  _tag = "TenantResidencyUnresolved";
1491
1540
  constructor(e) {
1492
1541
  super(e), this.name = "TenantResidencyUnresolved";
1493
1542
  }
1494
- }, Hi = class extends Error {
1543
+ }, ua = class extends Error {
1495
1544
  region;
1496
1545
  _tag = "TenantRegionUnavailable";
1497
1546
  constructor(e, t) {
1498
1547
  super(t), this.region = e, this.name = "TenantRegionUnavailable";
1499
1548
  }
1500
- }, Ui, Wi = (e) => {
1549
+ }, da, fa = (e) => {
1501
1550
  if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
1502
1551
  if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
1503
1552
  let t = /* @__PURE__ */ new Map();
@@ -1506,32 +1555,32 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1506
1555
  if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
1507
1556
  t.set(n.tenantId, n.region);
1508
1557
  }
1509
- return Ui = e, e;
1510
- }, Gi = () => Ui, Ki = () => {
1511
- Ui = void 0;
1512
- }, qi = (e, t) => {
1513
- if (e == null || e === "") throw new Vi("residency is on but the request has no resolvable tenant — refusing to bind a store");
1558
+ return da = e, e;
1559
+ }, pa = () => da, ma = () => {
1560
+ da = void 0;
1561
+ }, ha = (e, t) => {
1562
+ if (e == null || e === "") throw new la("residency is on but the request has no resolvable tenant — refusing to bind a store");
1514
1563
  let n = t.homes.find((t) => t.tenantId === e);
1515
- if (n === void 0) throw new Vi(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1564
+ if (n === void 0) throw new la(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1516
1565
  return n;
1517
- }, Ji = (e, t) => t.servableRegions.includes(e), Yi = (e, t) => {
1518
- let n = qi(e.tenantId, t), r = vn(n.tenantId);
1566
+ }, ga = (e, t) => t.servableRegions.includes(e), _a = (e, t) => {
1567
+ let n = ha(e.tenantId, t), r = Sn(n.tenantId);
1519
1568
  return {
1520
1569
  region: n.region,
1521
1570
  namespace: r,
1522
1571
  ...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
1523
1572
  };
1524
- }, Xi = (e, t, n) => {
1525
- let r = Yi(e, t);
1526
- if (!Ji(r.region, t)) throw new Hi(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1573
+ }, va = (e, t, n) => {
1574
+ let r = _a(e, t);
1575
+ if (!ga(r.region, t)) throw new ua(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1527
1576
  let i = n.get(r.region);
1528
- if (i === void 0) throw new Hi(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1577
+ if (i === void 0) throw new ua(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1529
1578
  return {
1530
1579
  store: i,
1531
1580
  placement: r
1532
1581
  };
1533
- }, Zi = async (e, t, n, r) => {
1534
- let { store: i, placement: a } = Xi(e, t, n);
1582
+ }, ya = async (e, t, n, r) => {
1583
+ let { store: i, placement: a } = va(e, t, n);
1535
1584
  return await r(i, a), a;
1536
1585
  }, X = (e) => {
1537
1586
  if (typeof e == "string") return e;
@@ -1540,21 +1589,21 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1540
1589
  return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
1541
1590
  }
1542
1591
  return `(${e.expr})`;
1543
- }, Z = (e) => e.map(X), Qi = (e, t) => {
1592
+ }, Z = (e) => e.map(X), ba = (e, t) => {
1544
1593
  if (e.length !== t.length) return !1;
1545
1594
  for (let n = 0; n < e.length; n++) if (X(e[n]) !== X(t[n])) return !1;
1546
1595
  return !0;
1547
- }, $i = (e, t) => {
1596
+ }, xa = (e, t) => {
1548
1597
  if (e.length >= t.length) return !1;
1549
1598
  for (let n = 0; n < e.length; n++) if (X(e[n]) !== X(t[n])) return !1;
1550
1599
  return !0;
1551
- }, ea = (e) => {
1600
+ }, Sa = (e) => {
1552
1601
  let t = [], n = e.appliedIndexes, r = e.tableName;
1553
1602
  for (let e = 0; e < n.length; e++) {
1554
1603
  let i = n[e];
1555
1604
  for (let a = e + 1; a < n.length; a++) {
1556
1605
  let e = n[a];
1557
- if (Qi(i.fields, e.fields)) {
1606
+ if (ba(i.fields, e.fields)) {
1558
1607
  let [n, a] = i.name < e.name ? [i, e] : [e, i];
1559
1608
  t.push({
1560
1609
  kind: "duplicate-fields",
@@ -1565,13 +1614,13 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1565
1614
  });
1566
1615
  continue;
1567
1616
  }
1568
- $i(i.fields, e.fields) ? t.push({
1617
+ xa(i.fields, e.fields) ? t.push({
1569
1618
  kind: "redundant-prefix",
1570
1619
  table: r,
1571
1620
  redundant: i,
1572
1621
  coveredBy: e,
1573
1622
  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).`
1574
- }) : $i(e.fields, i.fields) && t.push({
1623
+ }) : xa(e.fields, i.fields) && t.push({
1575
1624
  kind: "redundant-prefix",
1576
1625
  table: r,
1577
1626
  redundant: e,
@@ -1581,23 +1630,23 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1581
1630
  }
1582
1631
  }
1583
1632
  return t;
1584
- }, ta = (e) => {
1633
+ }, Ca = (e) => {
1585
1634
  let t = [];
1586
- for (let n of e) t.push(...ea(n));
1635
+ for (let n of e) t.push(...Sa(n));
1587
1636
  return t;
1588
- }, na = "\x1B[", ra = `${na}38;2;245;158;11m`, ia = `${na}38;2;16;185;129m`, aa = (e, t) => `${e}${t}${j.reset}`, Q = (e, t, n) => e ? typeof t == "function" ? t(n) : aa(t, n) : n, oa = (e, t = {}) => {
1589
- let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => Q(n, j.dim, e.padEnd(11)), a = (e) => Q(n, (e) => j.bold(j.brand(e)), e), o = (e) => Q(n, j.brightRed24, e), s = (e) => Q(n, ia, e), c = (e) => Q(n, ra, e), l = (e) => Q(n, j.dim, e), u = `${c("index audit")} ${l("·")} ${Q(n, j.bold, e.kind)}`, d = e.redundant.fields.length, f = Z(e.coveredBy.fields.slice(d)), p = (e, t) => {
1637
+ }, wa = "\x1B[", Ta = `${wa}38;2;245;158;11m`, Ea = `${wa}38;2;16;185;129m`, Da = (e, t) => `${e}${t}${j.reset}`, Q = (e, t, n) => e ? typeof t == "function" ? t(n) : Da(t, n) : n, Oa = (e, t = {}) => {
1638
+ let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => Q(n, j.dim, e.padEnd(11)), a = (e) => Q(n, (e) => j.bold(j.brand(e)), e), o = (e) => Q(n, j.brightRed24, e), s = (e) => Q(n, Ea, e), c = (e) => Q(n, Ta, e), l = (e) => Q(n, j.dim, e), u = `${c("index audit")} ${l("·")} ${Q(n, j.bold, e.kind)}`, d = e.redundant.fields.length, f = Z(e.coveredBy.fields.slice(d)), p = (e, t) => {
1590
1639
  let n = e.slice(0, t), r = e.slice(t), i = [];
1591
1640
  return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
1592
1641
  }, m = [];
1593
1642
  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, j.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
1594
- }, sa = (e, t) => ({
1643
+ }, ka = (e, t) => ({
1595
1644
  name: e,
1596
1645
  body: t
1597
- }), ca = (e) => {
1646
+ }), Aa = (e) => {
1598
1647
  if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
1599
1648
  if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
1600
- let t = e.steps({ step: sa });
1649
+ let t = e.steps({ step: ka });
1601
1650
  if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
1602
1651
  return {
1603
1652
  __seed: !0,
@@ -1609,13 +1658,13 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1609
1658
  ...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
1610
1659
  steps: t
1611
1660
  };
1612
- }, la = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, ua = (e, { apply: t, undo: n }) => ({
1661
+ }, ja = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, Ma = (e, { apply: t, undo: n }) => ({
1613
1662
  name: e,
1614
1663
  apply: t,
1615
1664
  undo: n
1616
- }), da = (e) => {
1665
+ }), Na = (e) => {
1617
1666
  if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
1618
- let t = e.steps({ step: ua });
1667
+ let t = e.steps({ step: Ma });
1619
1668
  if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
1620
1669
  return {
1621
1670
  __migration: !0,
@@ -1623,7 +1672,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1623
1672
  name: e.name,
1624
1673
  steps: t
1625
1674
  };
1626
- }, fa = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, pa = w("_voltro_migrations", {
1675
+ }, Pa = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Fa = w("_voltro_migrations", {
1627
1676
  id: O({ prefix: "mig" }),
1628
1677
  name: E(),
1629
1678
  hash: E(),
@@ -1635,7 +1684,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1635
1684
  workflowRunId: E().nullable(),
1636
1685
  createdAt: _().default("now"),
1637
1686
  updatedAt: _().default("now").onUpdate("now")
1638
- }).index(["status"]), ma = w("_voltro_seeds", {
1687
+ }).index(["status"]), Ia = w("_voltro_seeds", {
1639
1688
  id: O({ prefix: "seed" }),
1640
1689
  name: E(),
1641
1690
  lifecycle: E(),
@@ -1651,7 +1700,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1651
1700
  workflowRunId: E().nullable(),
1652
1701
  createdAt: _().default("now"),
1653
1702
  updatedAt: _().default("now").onUpdate("now")
1654
- }).index(["lifecycle"]).index(["nextRunAt"]), ha = w("_voltro_migration_plans", {
1703
+ }).index(["lifecycle"]).index(["nextRunAt"]), La = w("_voltro_migration_plans", {
1655
1704
  id: O({ prefix: "plan" }),
1656
1705
  fingerprint: E(),
1657
1706
  operations: D(),
@@ -1666,21 +1715,21 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1666
1715
  appliedAt: _().default("now"),
1667
1716
  createdAt: _().default("now"),
1668
1717
  updatedAt: _().default("now").onUpdate("now")
1669
- }).index(["fingerprint"]).index(["environment"]), ga = w("_voltro_idempotency", {
1718
+ }).index(["fingerprint"]).index(["environment"]), Ra = w("_voltro_idempotency", {
1670
1719
  id: O({ prefix: "idem" }),
1671
1720
  scope: E(),
1672
1721
  key: E(),
1673
1722
  status: E(),
1674
1723
  response: D().nullable(),
1675
1724
  createdAt: _().default("now")
1676
- }).unique(["scope", "key"]).index(["createdAt"]), _a = w("_voltro_kv", {
1725
+ }).unique(["scope", "key"]).index(["createdAt"]), za = w("_voltro_kv", {
1677
1726
  id: O({ prefix: "kv" }),
1678
1727
  key: E().unique(),
1679
1728
  value: E().nullable(),
1680
1729
  expiresAt: _().nullable(),
1681
1730
  createdAt: _().default("now"),
1682
1731
  updatedAt: _().default("now").onUpdate("now")
1683
- }).index(["expiresAt"]), va = w("_voltro_api_keys", {
1732
+ }).index(["expiresAt"]), Ba = w("_voltro_api_keys", {
1684
1733
  id: O({ prefix: "apikey" }),
1685
1734
  tenantId: E().nullable(),
1686
1735
  name: E(),
@@ -1695,11 +1744,11 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1695
1744
  onBehalfOf: E().nullable(),
1696
1745
  metadata: D().nullable(),
1697
1746
  createdAt: _().default("now")
1698
- }).index("byTenant", ["tenantId"]), ya = [
1699
- pa,
1700
- ma,
1701
- ha
1702
- ], $ = "id", ba = (e, t) => {
1747
+ }).index("byTenant", ["tenantId"]), Va = [
1748
+ Fa,
1749
+ Ia,
1750
+ La
1751
+ ], $ = "id", Ha = (e, t) => {
1703
1752
  let n = u(e);
1704
1753
  if (n === void 0) return t;
1705
1754
  let r = n.fields[$]?.idScheme;
@@ -1714,53 +1763,53 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1714
1763
  ...t,
1715
1764
  [$]: i
1716
1765
  };
1717
- }, xa = (e, t) => t.map((t) => ba(e, t)), Sa = (e, t) => {
1766
+ }, Ua = (e, t) => t.map((t) => Ha(e, t)), Wa = (e, t) => {
1718
1767
  let n = [], r = t;
1719
1768
  for (let [t, i] of Object.entries(e.fields)) {
1720
1769
  let e = i;
1721
1770
  e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
1722
1771
  }
1723
1772
  return n;
1724
- }, Ca = (e, t) => {
1773
+ }, Ga = (e, t) => {
1725
1774
  let n = t;
1726
1775
  return e.filter((e) => n[e] === void 0 || n[e] === null);
1727
- }, wa = (e, t, n) => e.insert(t.tableName, n), Ta = (e, t, n, r) => e.upsert(t.tableName, n, {
1776
+ }, Ka = (e, t, n) => e.insert(t.tableName, n), qa = (e, t, n, r) => e.upsert(t.tableName, n, {
1728
1777
  conflictColumns: r.conflictColumns,
1729
1778
  ...r.update === void 0 ? {} : { update: r.update }
1730
- }), Ea = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), Da = 512, Oa = (e) => {
1779
+ }), Ja = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), Ya = 512, Xa = (e) => {
1731
1780
  e.setMaxListeners(512);
1732
- }, ka = (e, t, n) => ({
1781
+ }, Za = (e, t, n) => ({
1733
1782
  _tag: "PrimaryKeyConflictError",
1734
1783
  table: e,
1735
1784
  key: t,
1736
1785
  cause: n
1737
- }), Aa = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", ja = /* @__PURE__ */ new Map(), Ma = (e) => {
1786
+ }), Qa = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", $a = /* @__PURE__ */ new Map(), eo = (e) => {
1738
1787
  if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
1739
1788
  if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
1740
- ja.set(e.table, e);
1741
- }, Na = () => [...ja.values()], Pa = () => ja.clear(), Fa = async (e, t, n, r = 2e4) => {
1789
+ $a.set(e.table, e);
1790
+ }, to = () => [...$a.values()], no = () => $a.clear(), ro = async (e, t, n, r = 2e4) => {
1742
1791
  let i = new Date(t - e.ttlMs), a = 0;
1743
1792
  for (;;) {
1744
1793
  let t = await n(e.table, e.timeColumn, i, r, e.where);
1745
1794
  if (a += t, t < r) break;
1746
1795
  }
1747
1796
  return a;
1748
- }, Ia = (e, t) => {
1797
+ }, io = (e, t) => {
1749
1798
  let n = Number(e ?? String(t));
1750
1799
  return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
1751
- }, La = "_voltro_cdc_offsets", Ra = w(La, {
1800
+ }, ao = "_voltro_cdc_offsets", oo = w(ao, {
1752
1801
  id: O({ prefix: "cdcoff" }),
1753
1802
  replicaId: E(),
1754
1803
  streamName: E(),
1755
1804
  binlogFile: E(),
1756
1805
  binlogPosition: E(),
1757
1806
  updatedAt: _()
1758
- }).index(["replicaId"]), za = w(La, {
1807
+ }).index(["replicaId"]), so = w(ao, {
1759
1808
  id: O({ prefix: "cdcoff" }),
1760
1809
  replicaId: E(),
1761
1810
  streamName: E(),
1762
1811
  ctVersion: E(),
1763
1812
  updatedAt: _()
1764
- }).index(["replicaId"]), Ba = "postgres";
1813
+ }).index(["replicaId"]), co = "postgres";
1765
1814
  //#endregion
1766
- export { oe as AUTO_FILLED_COLUMNS, J as BranchNameInvalid, Ei as BranchTransitionInvalid, La as CDC_OFFSETS_TABLE, Da as CHANGE_LISTENER_CEILING, Xe as ColumnBuilder, ht as ENCRYPTED_PREFIX, Ba as ENGINE, en as EagerCardinalityError, qe as FILE_MIGRATION_PATTERN, gt as FieldDecryptionError, e as MAX_IDENTIFIER_LENGTH, ut as SqlClient, mi as TableStreamError, mn as TenantNamespaceInvalid, pn as TenantNamespaceUnresolved, Hi as TenantRegionUnavailable, Vi as TenantResidencyUnresolved, xe as WARN_IDENTIFIER_LENGTH, va as _voltroApiKeysTable, Ra as _voltroCdcOffsetsTable, ga as _voltroIdempotencyTable, _a as _voltroKvTable, ha as _voltroMigrationPlansTable, pa as _voltroMigrationsTable, za as _voltroMssqlCdcOffsetsTable, ma as _voltroSeedsTable, Rr as actorsTable, zi as admitBranch, ze as allEnumRenames, Ut as allRegisteredRelations, ee as allRegisteredTables, ti as and, be as array, Yr as arrayContains, Zr as arrayHas, Xr as arrayOverlaps, nn as attachEagerLoads, ta as auditAllTableIndexes, ea as auditTableIndexes, Me as avg, Ye as avgOver, Ce as bigint, Xi as bindResidentStore, Ve as boolean, Ci as branchNamespaceName, Fe as bytes, Ke as clearEnumRenames, Gt as clearRelationsRegistry, Ki as clearResidencyConfig, Pa as clearRetentions, v as clearTableRegistry, Sn as coercePredicateValue, Cn as coercePredicateValues, fi as collectSubqueries, ye as column, St as columnSchema, Fn as compileEagerJson, L as compilePredicate, wn as compileRawFragment, R as compileSelect, yi as computeEmbedding, qr as contains, Se as count, Be as countDistinct, Pe as databaseHandle, De as date, Te as dbEnum, fe as decimal, ve as declareEnumRename, Zt as decodeRowsFromSchema, xt as decryptFieldsOnRead, da as defineMigration, d as defineMixin, ca as defineSeed, Ee as denseRank, m as deriveTypeIdPrefix, mt as deserializeArraysOnRead, Je as drainIdentifierWarnings, Qe as dropped, $t as encodeRowForSchema, bt as encryptFieldsForWrite, yt as encryptedColumnsOf, Ii as enforceBranchLimits, te as ensureTableRegistered, zr as eq, I as escapeLike, di as evaluatePredicate, we as except, ci as exists, oa as formatIndexAuditIssue, ya as frameworkTables, le as generateId, ue as generateSnowflake, nt as geography, ge as geometry, Ne as getEnumRenames, Ht as getRelation, Vt as getRelations, Gi as getResidencyConfig, u as getTable, Vr as gt, Hr as gte, fn as hasEagerLoads, vi as hybridSearch, O as id, Gr as inSet, oi as inSubquery, M as inferForeignKey, wa as insertRow, C as integer, de as intersect, a as interval, wi as isBranchNamespace, vt as isEncrypted, _t as isFieldDecryptionError, Ie as isFileMigration, fa as isMigrationDefinition, Ai as isNeonConnection, $r as isNotNull, Qr as isNull, Aa as isPrimaryKeyConflictError, Ji as isRegionServable, At as isRelationsSpec, la as isSeedDefinition, rt as isSqliteFamily, p as isTableReactive, pe as isView, D as json, ii as jsonField, f as jsonIndex, Ze as lag, tt as lead, Na as listRetentions, Ur as lt, Wr as lte, Bi as makeNamespaceBranchExecutor, Mt as many, Nt as manyToMany, ae as materializeFields, he as max, Ue as migration, et as min, Ca as missingConflictColumns, Sa as missingRequiredColumns, h as mixin, Br as neq, Di as nextBranchState, ri as not, li as notExists, Kr as notInSet, si as notInSubquery, l as numeric, jt as one, tn as oneCardinalityMessage, ni as or, re as paginateBy, i as paginateById, Pi as planBranch, Oi as planBranchProvision, ki as planBranchTeardown, Fi as planBranchTeardownFor, Mi as planNeonBranchProvision, Ni as planNeonBranchTeardown, ka as primaryKeyConflictError, Li as provisionBranch, Zi as provisionResidentTenant, yn as qualifyTable, $e as queryFor, Re as queryForView, r as quoteIdent, Oa as raiseChangeListenerCeiling, ie as rank, s as raw, x as real, je as reference, Pr as registerCoreTables, Bt as registerDiscoveredRelations, zt as registerRelations, Ma as registerRetention, g as registerTable, kt as relations, Ir as requireActors, ne as requireTable, Lr as requireTenants, S as resetSnowflake, Yi as residentPlacement, ji as resolveBranchMechanism, c as resolveFullTextIndex, ce as resolveIdScheme, He as resolveMixinGraph, qi as resolveTenantHome, vn as resolveTenantNamespace, Ia as retentionTtlMsFromEnv, o as rowNumber, Ct as rowSchema, _n as sanitizeIdentifierFragment, pt as serializeArraysForWrite, n as serverOnlyColumns, Wi as setResidencyConfig, ei as spatialPredicate, ba as stampGeneratedId, xa as stampGeneratedIds, Jr as startsWith, _i as streamTable, b as sum, Ae as sumOver, Fa as sweepRetention, w as table, Ri as teardownBranch, E as text, _ as timestamp, it as timestampMs, at as timestampMsOrNull, t as union, ke as unionAll, Ea as updateManyRow, Ta as upsertRow, Le as validateColumnName, We as validateIndexName, Wt as validateRegisteredRelations, It as validateRelationConfig, Oe as validateTableName, me as validateTypeIdPrefix, y as vector, se as vectorDistanceToOpclass, bi as vectorEmbedding, Ge as view, _e as viewSql, pi as walkLeaves };
1815
+ export { oe as AUTO_FILLED_COLUMNS, J as BranchNameInvalid, Ji as BranchTransitionInvalid, ao as CDC_OFFSETS_TABLE, Ya as CHANGE_LISTENER_CEILING, Xe as ColumnBuilder, gt as ENCRYPTED_PREFIX, co as ENGINE, rn as EagerCardinalityError, qe as FILE_MIGRATION_PATTERN, _t as FieldDecryptionError, ni as MATCHES_NO_ROWS, e as MAX_IDENTIFIER_LENGTH, dt as SqlClient, Ii as TableStreamError, vn as TenantNamespaceInvalid, _n as TenantNamespaceUnresolved, ua as TenantRegionUnavailable, la as TenantResidencyUnresolved, xe as WARN_IDENTIFIER_LENGTH, Ba as _voltroApiKeysTable, oo as _voltroCdcOffsetsTable, Ra as _voltroIdempotencyTable, za as _voltroKvTable, La as _voltroMigrationPlansTable, Fa as _voltroMigrationsTable, so as _voltroMssqlCdcOffsetsTable, Ia as _voltroSeedsTable, Hr as actorsTable, sa as admitBranch, ze as allEnumRenames, Kt as allRegisteredRelations, ee as allRegisteredTables, oi as and, be as array, $r as arrayContains, ti as arrayHas, ei as arrayOverlaps, on as attachEagerLoads, Si as attributionFields, Ti as attributionKey, Ca as auditAllTableIndexes, Sa as auditTableIndexes, Me as avg, Ye as avgOver, Ce as bigint, va as bindResidentStore, Ve as boolean, Gi as branchNamespaceName, Fe as bytes, Oi as claimPendingAttribution, Ke as clearEnumRenames, ki as clearPendingAttribution, Jt as clearRelationsRegistry, ma as clearResidencyConfig, no as clearRetentions, v as clearTableRegistry, Ni as clearWriteRecorders, En as coercePredicateValue, Dn as coercePredicateValues, _i as collectSubqueries, ye as column, Ct as columnSchema, zn as compileEagerJson, P as compilePredicate, On as compileRawFragment, F as compileSelect, Vi as computeEmbedding, Zr as contains, Se as count, Be as countDistinct, xi as currentWriteAttribution, Pe as databaseHandle, De as date, Te as dbEnum, fe as decimal, ve as declareEnumRename, en as decodeRowsFromSchema, St as decryptFieldsOnRead, Na as defineMigration, d as defineMixin, Aa as defineSeed, Ee as denseRank, m as deriveTypeIdPrefix, ht as deserializeArraysOnRead, Je as drainIdentifierWarnings, Qe as dropped, nn as encodeRowForSchema, xt as encryptFieldsForWrite, bt as encryptedColumnsOf, ia as enforceBranchLimits, te as ensureTableRegistered, Ur as eq, N as escapeLike, gi as evaluatePredicate, we as except, pi as exists, Oa as formatIndexAuditIssue, Va as frameworkTables, le as generateId, ue as generateSnowflake, nt as geography, ge as geometry, Ne as getEnumRenames, Gt as getRelation, Wt as getRelations, pa as getResidencyConfig, u as getTable, Gr as gt, Kr as gte, gn as hasEagerLoads, Bi as hybridSearch, O as id, Yr as inSet, di as inSubquery, Ft as inferForeignKey, Ka as insertRow, C as integer, de as intersect, a as interval, Ki as isBranchNamespace, yt as isEncrypted, vt as isFieldDecryptionError, Ie as isFileMigration, Pa as isMigrationDefinition, Qi as isNeonConnection, ii as isNotNull, ri as isNull, Qa as isPrimaryKeyConflictError, ga as isRegionServable, jt as isRelationsSpec, ja as isSeedDefinition, rt as isSqliteFamily, p as isTableReactive, pe as isView, D as json, li as jsonField, f as jsonIndex, Ze as lag, tt as lead, to as listRetentions, qr as lt, Jr as lte, ca as makeNamespaceBranchExecutor, Nt as many, Pt as manyToMany, ae as materializeFields, he as max, Ue as migration, et as min, Ga as missingConflictColumns, Wa as missingRequiredColumns, h as mixin, Wr as neq, Yi as nextBranchState, ci as not, mi as notExists, Xr as notInSet, fi as notInSubquery, l as numeric, Mt as one, an as oneCardinalityMessage, si as or, re as paginateBy, i as paginateById, Ai as pendingAttributionCount, na as planBranch, Xi as planBranchProvision, Zi as planBranchTeardown, ra as planBranchTeardownFor, ea as planNeonBranchProvision, ta as planNeonBranchTeardown, Za as primaryKeyConflictError, aa as provisionBranch, ya as provisionResidentTenant, Cn as qualifyTable, $e as queryFor, Re as queryForView, r as quoteIdent, Xa as raiseChangeListenerCeiling, ie as rank, s as raw, x as real, Pi as recordsTable, je as reference, Rr as registerCoreTables, Ut as registerDiscoveredRelations, Di as registerPendingAttribution, Ht as registerRelations, eo as registerRetention, g as registerTable, ji as registerWriteRecorder, At as relations, Br as requireActors, ne as requireTable, Vr as requireTenants, S as resetSnowflake, _a as residentPlacement, $i as resolveBranchMechanism, c as resolveFullTextIndex, ce as resolveIdScheme, He as resolveMixinGraph, ha as resolveTenantHome, Sn as resolveTenantNamespace, io as retentionTtlMsFromEnv, o as rowNumber, wt as rowSchema, bi as runWithWriteAttribution, Fi as runWriteRecorders, xn as sanitizeIdentifierFragment, mt as serializeArraysForWrite, n as serverOnlyColumns, fa as setResidencyConfig, ai as spatialPredicate, Ha as stampGeneratedId, Ua as stampGeneratedIds, Qr as startsWith, zi as streamTable, b as sum, Ae as sumOver, ro as sweepRetention, w as table, oa as teardownBranch, E as text, _ as timestamp, it as timestampMs, at as timestampMsOrNull, t as union, ke as unionAll, Mi as unregisterWriteRecorder, Ja as updateManyRow, qa as upsertRow, Le as validateColumnName, We as validateIndexName, qt as validateRegisteredRelations, zt as validateRelationConfig, Oe as validateTableName, me as validateTypeIdPrefix, y as vector, se as vectorDistanceToOpclass, Hi as vectorEmbedding, Ge as view, _e as viewSql, vi as walkLeaves };